mail overhaul
authoradam <adam@megacz.com>
Mon, 28 Jun 2004 23:06:35 +0000 (23:06 +0000)
committeradam <adam@megacz.com>
Mon, 28 Jun 2004 23:06:35 +0000 (23:06 +0000)
darcs-hash:20040628230635-5007d-b1527d1020731690a9d1eaf12a4b945e640f65a7.gz

253 files changed:
Makefile
src/org/ibex/mail/Address.java
src/org/ibex/mail/Main.java
src/org/ibex/mail/Message.java
src/org/ibex/mail/Query.java
src/org/ibex/mail/Target.java
src/org/ibex/mail/protocol/Connection.java [deleted file]
src/org/ibex/mail/protocol/IMAP.java
src/org/ibex/mail/protocol/SMTP.java
src/org/ibex/mail/target/FileBasedMailbox.java
src/org/ibex/mail/target/Transcript.java
upstream/org.ibex.core/AUTHORS [deleted file]
upstream/org.ibex.core/CHANGES [deleted file]
upstream/org.ibex.core/COPYING [deleted file]
upstream/org.ibex.core/Makefile [deleted file]
upstream/org.ibex.core/Makefile.upstream [deleted file]
upstream/org.ibex.core/README [deleted file]
upstream/org.ibex.core/build/java/org/ibex/core/Box.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/core/Ibex.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/core/LocalStorage.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/core/Main.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/core/Template.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Affine.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Color.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Font.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/GIF.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/HTML.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/PNG.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Paint.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Path.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Picture.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/PixelBuffer.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/SVG.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/graphics/Surface.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/ByteCodes.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/Interpreter.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JS.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSArray.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSDate.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSExn.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSFunction.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSMath.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSReflection.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSRegexp.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/JSScope.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/Lexer.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/Parser.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/Stream.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/Tokens.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/js/Trap.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/net/HTTP.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/net/SOAP.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/net/XMLRPC.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/plat/AWT.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/plat/JVM.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/plat/Java2.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/plat/Platform.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/AccessibleCharArrayWriter.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/BalancedTree.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/CAB.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Cache.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/CachedInputStream.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Callback.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/CounterEnumeration.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/DirtyList.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/EjAlbertBrowserLauncher.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Grammar.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Hash.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/InputStreamToByteArray.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/KnownLength.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/LineReader.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Log.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/MSPack.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/PackBytesIntoString.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Queue.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Scheduler.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Semaphore.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Simplex.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Task.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/Vec.java [deleted file]
upstream/org.ibex.core/build/java/org/ibex/util/XML.java [deleted file]
upstream/org.ibex.core/next.build [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/COPYING [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/COPYING.LIB [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/README [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/TODO [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/allclasses-frame.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/deprecated-list.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/CharIndexed.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/RE.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REException.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REFilterInputStream.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REFilterReader.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REMatch.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REMatchEnumeration.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/RESyntax.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/UncheckedRE.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-frame.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-summary.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-tree.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Egrep.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Grep.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/REApplet.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/RETest.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Tests.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-frame.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-summary.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-tree.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/help-doc.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/index-all.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/index.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-frame.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-summary.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-tree.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/package-list [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/packages.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/serialized-form.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/stylesheet.css [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/changes.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/credits.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/faq.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/gnu-regexp-applet.jar [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/index.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/reapplet.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/syntax.html [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/lib/gnu-regexp-1.1.4.jar [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/Makefile [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexed.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedCharArray.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedInputStream.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedReader.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedString.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedStringBuffer.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/MessagesBundle.properties [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RE.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REException.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REFilterInputStream.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REFilterReader.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REMatch.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REMatchEnumeration.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RESyntax.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REToken.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenAny.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenBackRef.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenChar.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenEnd.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenEndSub.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenLookAhead.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenOneOf.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenPOSIX.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenRange.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenRepeated.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenStart.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenWordBoundary.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/UncheckedRE.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Egrep.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Grep.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/GrepUsage.txt [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/REApplet.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/RETest.java [deleted file]
upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Tests.java [deleted file]
upstream/org.ibex.core/upstream/jode-1.1.1/patches/javadep.patch [deleted file]
upstream/org.ibex.core/upstream/libmspack-20030726/patches/libmspack.patch [deleted file]
upstream/org.ibex.core/upstream/newlib-1.11.0/patches/mips.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/Makefile [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/doc/COPYING [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Base64.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/DER.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Digest.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/HMAC.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/MD2.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/MD5.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/PKCS1.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/RC4.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/RSA.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/SHA1.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/X509.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/SSL.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/GenCompactCAList.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/RootCerts.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/SwingVerifyCallback.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/Test.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/Makefile [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/COPYING [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/ChangeLog [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME.xls [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME04 Submission Report.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME2.xls [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/acmconf.cls [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart1.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart2.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart3.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart4.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart5.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart6.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart7.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/max_per_method.pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/nestedvm.ivme04.bbl [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/pdftricks.sty [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/pst2pdf [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/tmp.inputs [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/CXXTest.cc [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/CallTest.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Echo.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/EchoHelper.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Env.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FTBench.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Fork.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FreeTypeDemo.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FreeTypeDemoHelper.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Hello.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPack.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPackBench.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPackHelper.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Paranoia.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Simple.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/SpeedTest.java [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Test.c [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/check.sh [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/Makefile [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/binutils-no64.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/boehm-gc.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/busybox.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/freetype.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/ft-nostdio.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/gcc-fdata-sections-bss.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/gcc-fixes.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/libmspack.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-malloc.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-mips.patch [deleted file]
upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-tzset.patch [deleted file]
upstream/org.ibex.crypto/Makefile [deleted file]
upstream/org.ibex.crypto/doc/COPYING [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/Base64.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/DER.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/Digest.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/HMAC.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/MD2.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/MD5.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/PKCS1.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/RC4.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/RSA.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/SHA1.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/crypto/X509.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/net/SSL.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/net/ssl/GenCompactCAList.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/net/ssl/RootCerts.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/net/ssl/SwingVerifyCallback.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/net/ssl/Test.java [deleted file]
upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat [deleted file]

index d37d5ca..508dffa 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ dist-clean:
        rm -rf .configure* .install* build .compile .build*
 
 sources    := $(shell find src -name \*.java)
-sources    += upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java
+#sources    += upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java
 
 upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java: .download_org.ibex.crypto
 
@@ -20,10 +20,14 @@ upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java: .download_org.ibex.cry
        @cd upstream/org.ibex.$*; make compile
        @touch $@
 
-mail.jar: $(sources)
+compile: .compile
+.compile: $(sources)
        @make .download_org.ibex.crypto .build_org.ibex.core
        @mkdir -p build/class
-       @javac -d build/class -classpath upstream/org.ibex.core/build/class $^
+       @javac -d build/class -classpath /jinetd/LIB/ibex.core.jar:build/class $^
+       @touch $@
+
+mail.jar: .compile
        @cd build/class; jar cvf ../../mail.jar .
 
 #run: mail.jar
index 92bdbc8..ebf349b 100644 (file)
@@ -7,25 +7,26 @@ import java.util.*;
 import java.net.*;
 import java.io.*;
 
+// FIXME this should be more forgiving
 public class Address extends JSReflection {
     public final String user;
     public final String host;
     public final String description;
+    public static Address parse(String s) { try { return new Address(s); } catch (Malformed _) { return null; } }
     public Address(String user, String host, String description) {this.user=user;this.host=host;this.description=description;}
-    public Address(String s) throws Address.Malformed {
-        s = s.trim();
-        if (s.indexOf('<') != -1) {
+    public Address(String s0) throws Address.Malformed {
+        String s = s0.trim();
+        if (s.indexOf('<') == -1) description = "";
+        else {
             if (s.indexOf('>') == -1) { throw new Malformed("found open-angle-bracket (<) but not close-angle-bracket (>)"); }
             description = s.substring(0, s.indexOf('<')) + s.substring(s.indexOf('>') + 1);
             s = s.substring(s.indexOf('<') + 1, s.indexOf('>'));
-        } else {
-            description = "";
         }
-        if (s.indexOf('@') == -1) { throw new Malformed("no @-sign in email address"); }
+        if (s.indexOf('@') == -1) { throw new Malformed("no @-sign in email address \""+s0+"\""); }
         user = s.substring(0, s.indexOf('@'));
         host = s.substring(s.indexOf('@')+1);
     }
     public String coerceToString() { return toString(); }
     public String toString() { return description.equals("") ? (user +"@"+ host) : description+" <" + user +"@"+ host + ">"; }
-    public static class Malformed extends MailException.Malformed { public Malformed(String s) { super(s); } }
+    public static class Malformed extends RuntimeException { public Malformed(String s) { super(s); } }
 }
index 8bd9da6..f607f5f 100644 (file)
@@ -8,6 +8,33 @@ import java.util.*;
 
 public class Main {
 
+    /*
+    public static class Resin {
+        new extends com.caucho.server.port.Protocol() {
+            public String getProtocolName() { return "imap"; }
+            public com.caucho.server.port.ServerRequest createRequest(com.caucho.server.connection.Connection conn) {
+                try {
+                    return new Listener(conn);
+                } catch (Exception e) {
+                    Log.error(this, e);
+                    return null;
+                }
+            }
+        }
+
+    public SMTP() { }
+    public String getProtocolName() { return "smtp"; }
+    public com.caucho.server.port.ServerRequest createRequest(com.caucho.server.connection.Connection conn) {
+       try {
+           return new Server(conn);
+       } catch (Exception e) {
+           Log.error(this, e);
+           return null;
+       }
+    }
+
+    }
+
     public static void main(String[] s) throws Exception {
 
         // set up logging
@@ -21,8 +48,8 @@ public class Main {
         new SMTPThread().start();
 
     }
-
-    private static class BogusAuthenticator implements IMAP.Server.Authenticator {
+    */
+    public static class BogusAuthenticator implements IMAP.Server.Authenticator {
         final Mailbox root =
            FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT, true).slash("user", true).slash("megacz", true);
         public Mailbox authenticate(String u, String p) {
@@ -30,7 +57,7 @@ public class Main {
             return null;
         }
     }
-    
+    /*
     private static class IMAPThread extends Thread {
         final int port = Integer.parseInt(System.getProperty("ibex.mail.imap.port", "143"));
         public void run() {
@@ -81,4 +108,5 @@ public class Main {
             }
         }
     }
+    */
 }
index 793a3b4..d27ae1c 100644 (file)
@@ -1,8 +1,9 @@
 package org.ibex.mail;
 import org.ibex.crypto.*;
-import org.ibex.js.*;
 import org.ibex.util.*;
 import org.ibex.mail.protocol.*;
+import org.ibex.io.*;
+import org.ibex.net.*;
 import java.util.*;
 import java.net.*;
 import java.io.*;
@@ -26,7 +27,7 @@ import java.io.*;
  *  ether": RFC2822 data but no storage-specific flags or other
  *  metadata.
  */
-public class Message extends JSReflection {
+public class Message extends org.ibex.js.JSReflection {
 
     public final String allHeaders;           // pristine headers
     public final CaseInsensitiveHash headers; // hash of headers (not including resent's and traces)
@@ -49,28 +50,30 @@ public class Message extends JSReflection {
 
     public final Date arrival;         // when the message first arrived at this machine; IMAP "internal date message attr"
     
-    public void dump(OutputStream os) throws IOException {
-        Writer w = new OutputStreamWriter(os);
-        w.write("X-org.ibex.mail.headers.envelope.From: " + envelopeFrom + "\r\n");
-        w.write("X-org.ibex.mail.headers.envelope.To: " + envelopeTo + "\r\n");
-        w.write(allHeaders);
-        w.write("\r\n");
-        w.write(body);
-        w.flush();
+    public int size() { return allHeaders.length() + 2 /* CRLF */ + body.length(); }
+    public String toString() { return allHeaders + "\r\n" + body; }
+    public void dump(Stream s) {
+        s.out.setNewline("\r\n");
+        s.out.println("X-org.ibex.mail.headers.envelope.From: " + envelopeFrom);
+        s.out.println("X-org.ibex.mail.headers.envelope.To: " + envelopeTo);
+        s.out.println(allHeaders);
+        s.out.println();
+        s.out.println(body);
+        s.out.flush();
     }
 
     public class Trace {
         final String returnPath;
         final Element[] elements;
-        public Trace(LineReader lr) throws Trace.Malformed, IOException {
-            String retPath = lr.readLine();
+        public Trace(Stream stream) throws Trace.Malformed {
+            String retPath = stream.in.readln();
             if (!retPath.startsWith("Return-Path:")) throw new Trace.Malformed("trace did not start with Return-Path header");
             returnPath = retPath.substring(12).trim();
             Vec el = new Vec();
             while(true) {
-                String s = lr.readLine();
+                String s = stream.in.readln();
                 if (s == null) break;
-                if (!s.startsWith("Received:")) { lr.pushback(s); break; }
+                if (!s.startsWith("Received:")) { stream.in.unread(s); break; }
                 s = s.substring(9).trim();
                 el.addElement(new Element(s));
             }
@@ -97,95 +100,92 @@ public class Message extends JSReflection {
         public class Malformed extends Message.Malformed { public Malformed(String s) { super(s); } }
     }
 
-    public static class Malformed extends MailException.Malformed { public Malformed(String s) { super(s); } }
-
-    public Message(Address envelopeFrom, Address envelopeTo, String s, Date arrival)
-        { this(envelopeFrom, envelopeTo, new LineReader(new StringReader(s)), arrival); }
-    public Message(Address envelopeFrom, Address envelopeTo, LineReader rs) { this(envelopeFrom, envelopeTo, rs, null); }
-    public Message(Address envelopeFrom, Address envelopeTo, LineReader rs, Date arrival) {
-        try {
-            this.arrival = arrival == null ? new Date() : arrival;
-            this.headers = new CaseInsensitiveHash();
-            Vec envelopeToHeader = new Vec();
-            String key = null;
-            StringBuffer all = new StringBuffer();
-            Date date = null;
-            Address to = null, from = null, replyto = null;
-            String subject = null, messageid = null;
-            Vec cc = new Vec(), bcc = new Vec(), resent = new Vec(), traces = new Vec();
-            int lines = 0;
-            for(String s = rs.readLine(); s != null && !s.equals(""); s = rs.readLine()) {
-                all.append(s);
-               lines++;
-                all.append("\r\n");
-                if (s.length() == 0 || Character.isSpace(s.charAt(0))) {
-                    if (key == null) throw new Malformed("Message began with a blank line; no headers");
-                    ((CaseInsensitiveHash)headers).add(key, headers.get(key) + s);
-                    continue;
-                }
-                if (s.indexOf(':') == -1) throw new Malformed("Header line does not contain colon: " + s);
-                key = s.substring(0, s.indexOf(':'));
-                for(int i=0; i<key.length(); i++)
-                    if (key.charAt(i) < 33 || key.charAt(i) > 126)
-                        throw new Malformed("Header key \""+key+"\" contains invalid character \"" + key.charAt(i) + "\"");
-                String val = s.substring(s.indexOf(':') + 1).trim();
-                while(val.length() > 0 && Character.isSpace(val.charAt(0))) val = val.substring(1);
-                if (key.startsWith("Resent-")) {
-                    if (key.startsWith("Resent-From")) resent.addElement(new Hashtable());
-                    ((Hashtable)resent.lastElement()).put(key.substring(7), val);
-                } else if (key.startsWith("Return-Path")) {
-                    rs.pushback(s); traces.addElement(new Trace(rs));
-                } else if (key.equals("X-org.ibex.mail.headers.envelope.From")) {
-                    if (envelopeFrom == null) envelopeFrom = new Address(val);
-                } else if (key.equals("X-org.ibex.mail.headers.envelope.To")) {
-                    if (envelopeTo == null) envelopeTo = new Address(val);
-                } else {
-                    // just append it to the previous one; valid for Comments/Keywords
-                    if (headers.get(key) != null) val = headers.get(key) + " " + val;
-                    ((CaseInsensitiveHash)headers).add(key, val);
-                }            
+    public static class Malformed extends RuntimeException { public Malformed(String s) { super(s); } }
+
+    public Message(Address from, Address to, String s, Date arrival) { this(from, to, new Stream(s), arrival); }
+    public Message(Address from, Address to, Stream in) { this(from, to, in, new Date()); }
+    public Message(Address envelopeFrom, Address envelopeTo, Stream stream, Date arrival) {
+        this.arrival = arrival;
+        this.headers = new CaseInsensitiveHash();
+        Vec envelopeToHeader = new Vec();
+        String key = null;
+        StringBuffer all = new StringBuffer();
+        Date date = null;
+        Address to = null, from = null, replyto = null;
+        String subject = null, messageid = null;
+        Vec cc = new Vec(), bcc = new Vec(), resent = new Vec(), traces = new Vec();
+        int lines = 0;
+        for(String s = stream.in.readln(); s != null && !s.equals(""); s = stream.in.readln()) {
+            all.append(s);
+            lines++;
+            all.append("\r\n");
+            if (s.length() == 0 || Character.isSpace(s.charAt(0))) {
+                if (key == null) throw new Malformed("Message began with a blank line; no headers");
+                ((CaseInsensitiveHash)headers).add(key, headers.get(key) + s);
+                continue;
             }
-
-            // FIXME what if all are null?
-            this.to           = headers.get("To") == null   ? envelopeTo    : new Address((String)headers.get("To"));
-            this.from         = headers.get("From") == null ? envelopeFrom  : new Address((String)headers.get("From"));
-            this.envelopeFrom = envelopeFrom == null        ? this.from     : envelopeFrom;
-            this.envelopeTo   = envelopeTo == null          ? this.to       : envelopeTo;
-
-            this.date      = new Date(); // FIXME (Date)headers.get("Date");
-            this.replyto   = headers.get("Reply-To") == null ? null : new Address((String)headers.get("Reply-To"));
-            this.subject   = (String)headers.get("Subject");
-            this.messageid = (String)headers.get("Message-Id");
-            if (headers.get("Cc") != null) {
-                // FIXME: tokenize better
-                StringTokenizer st = new StringTokenizer((String)headers.get("Cc"));
-                this.cc = new Address[st.countTokens()];
-                for(int i=0; i<this.cc.length; i++) this.cc[i] = new Address(st.nextToken());
+            if (s.indexOf(':') == -1) throw new Malformed("Header line does not contain colon: " + s);
+            key = s.substring(0, s.indexOf(':'));
+            for(int i=0; i<key.length(); i++)
+                if (key.charAt(i) < 33 || key.charAt(i) > 126)
+                    throw new Malformed("Header key \""+key+"\" contains invalid character \"" + key.charAt(i) + "\"");
+            String val = s.substring(s.indexOf(':') + 1).trim();
+            while(val.length() > 0 && Character.isSpace(val.charAt(0))) val = val.substring(1);
+            if (key.startsWith("Resent-")) {
+                if (resent.size() == 0 || key.startsWith("Resent-From")) resent.addElement(new Hashtable());
+                ((Hashtable)resent.lastElement()).put(key.substring(7), val);
+            } else if (key.startsWith("Return-Path")) {
+                stream.in.unread(s); traces.addElement(new Trace(stream));
+            } else if (key.equals("X-org.ibex.mail.headers.envelope.From")) {
+                if (envelopeFrom == null) envelopeFrom = new Address(val);
+            } else if (key.equals("X-org.ibex.mail.headers.envelope.To")) {
+                if (envelopeTo == null) envelopeTo = new Address(val);
             } else {
-                this.cc = new Address[0];
-            }
-            if (headers.get("Bcc") != null) {
-                StringTokenizer st = new StringTokenizer((String)headers.get("Bcc"));
-                this.bcc = new Address[st.countTokens()];
-                for(int i=0; i<this.bcc.length; i++) this.bcc[i] = new Address(st.nextToken());
-            } else {
-                this.bcc = new Address[0];
-            }
-            resent.copyInto(this.resent = new Hashtable[resent.size()]);
-            traces.copyInto(this.traces = new Trace[traces.size()]);
-            allHeaders = all.toString();
-            StringBuffer body = new StringBuffer();
-            for(String s = rs.readLine();; s = rs.readLine()) {
-               if (s == null) break;
-               lines++;
-               body.append(s);       // FIXME: we're assuming all mail messages fit in memory
-               body.append("\r\n");
-           }
-            this.lines = lines;
-            this.body = body.toString();
-        } catch (IOException e) { throw new MailException.IOException(e); }
+                // just append it to the previous one; valid for Comments/Keywords
+                if (headers.get(key) != null) val = headers.get(key) + " " + val;
+                ((CaseInsensitiveHash)headers).add(key, val);
+            }            
+        }
+        
+        // FIXME what if all are null?
+        this.to           = headers.get("To") == null   ? envelopeTo    : new Address((String)headers.get("To"));
+        this.from         = headers.get("From") == null ? envelopeFrom  : new Address((String)headers.get("From"));
+        this.envelopeFrom = envelopeFrom == null        ? this.from     : envelopeFrom;
+        this.envelopeTo   = envelopeTo == null          ? this.to       : envelopeTo;
+        
+        this.date      = new Date(); // FIXME (Date)headers.get("Date");
+        this.replyto   = headers.get("Reply-To") == null ? null : new Address((String)headers.get("Reply-To"));
+        this.subject   = (String)headers.get("Subject");
+        this.messageid = (String)headers.get("Message-Id");
+        if (headers.get("Cc") != null) {
+            // FIXME: tokenize better
+            StringTokenizer st = new StringTokenizer((String)headers.get("Cc"));
+            this.cc = new Address[st.countTokens()];
+            for(int i=0; i<this.cc.length; i++) this.cc[i] = new Address(st.nextToken());
+        } else {
+            this.cc = new Address[0];
+        }
+        if (headers.get("Bcc") != null) {
+            StringTokenizer st = new StringTokenizer((String)headers.get("Bcc"));
+            this.bcc = new Address[st.countTokens()];
+            for(int i=0; i<this.bcc.length; i++) this.bcc[i] = new Address(st.nextToken());
+        } else {
+            this.bcc = new Address[0];
+        }
+        resent.copyInto(this.resent = new Hashtable[resent.size()]);
+        traces.copyInto(this.traces = new Trace[traces.size()]);
+        allHeaders = all.toString();
+        StringBuffer body = new StringBuffer();
+        for(String s = stream.in.readln();; s = stream.in.readln()) {
+            if (s == null) break;
+            lines++;
+            body.append(s);       // FIXME: we're assuming all mail messages fit in memory
+            body.append("\r\n");
+        }
+        this.lines = lines;
+        this.body = body.toString();
     }
-
+    
     // http://www.jwz.org/doc/mid.html
     private static final Random random = new Random();
     public static String generateFreshMessageId() {
@@ -200,17 +200,6 @@ public class Message extends JSReflection {
         return ret.toString();
     }
 
-    public String rfc822() { return allHeaders + "\r\n" + body; }
-    public int rfc822size() { return allHeaders.length() + 2 /* CRLF */ + body.length(); }  // FIXME: double check this
-
-    public String summary() {
-        return
-            "          Subject: " + subject + "\n" +
-            "     EnvelopeFrom: " + envelopeFrom + "\n" +
-            "       EnvelopeTo: " + envelopeTo + "\n" +
-            "        MessageId: " + messageid;
-    }
-
     //  use null-sender for error messages (don't send errors to the null addr)
     public Message bounce(String reason) { throw new RuntimeException("bounce not implemented"); }  // FIXME!
  
@@ -220,4 +209,11 @@ public class Message extends JSReflection {
         void add(Object k, Object v) { if (k instanceof String) stuff.put(((String)k).toLowerCase(), v); else stuff.put(k, v); }
     }
 
+    public String summary() {
+        return
+            "          Subject: " + subject + "\n" +
+            "     EnvelopeFrom: " + envelopeFrom + "\n" +
+            "       EnvelopeTo: " + envelopeTo + "\n" +
+            "        MessageId: " + messageid;
+    }
 }
index b127786..560ac18 100644 (file)
@@ -81,7 +81,8 @@ public class Query {
             case OR:         for(int i=0; i<q.length; i++) if (q[i].match(it)) return true; return false;
             case AND:        for(int i=0; i<q.length; i++) if (!q[i].match(it)) return false; return true;
             case UID:        if (set != null) {
-                                 for(int i=0; i<set.length; i+=2) if (set[i] <= it.uid() && set[i+1] >= it.uid()) return true;
+                                 for(int i=0; i<set.length; i+=2)
+                                    if (set[i] <= it.uid() && set[i+1] >= it.uid()) return true;
                                  return false; }
                              else return it.uid() >= min && it.uid() <= max;
             case NUM:        if (set != null) {
@@ -92,7 +93,7 @@ public class Query {
                                     (earliest==null||it.cur().date.after(earliest));
             case ARRIVAL:    return (latest == null || it.cur().arrival.before(latest)) &&
                                     (earliest == null || it.cur().arrival.after(earliest));
-            case SIZE:       return it.cur().rfc822size() >= min && it.cur().rfc822size() <= max;
+            case SIZE:       return it.cur().size() >= min && it.cur().size() <= max;
             case HEADER:     return it.cur().headers.get(key) != null &&
                                  ((String)it.cur().headers.get(key)).toLowerCase().indexOf(text.toLowerCase()) != -1;
             case BODY:       return it.cur().body.toLowerCase().indexOf(text.toLowerCase()) != -1;
index f845f9f..b9c4363 100644 (file)
@@ -3,7 +3,7 @@ import java.io.*;
 import org.ibex.js.*;
 
 /** base class for mail message "destinations" */
-public class Target {
+public class Target extends JS {
     public static final Target root = Script.root();
     public void accept(Message m) throws IOException, MailException {
         throw new MailException("Target.accept() unimplemented");
diff --git a/src/org/ibex/mail/protocol/Connection.java b/src/org/ibex/mail/protocol/Connection.java
deleted file mode 100644 (file)
index d1cca88..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.ibex.mail.protocol;
-import org.ibex.mail.*;
-import org.ibex.util.*;
-import org.ibex.mail.target.*;
-import java.util.*;
-import java.net.*;
-import java.text.*;
-import java.io.*;
-
-/** central place for logging conversations */
-public abstract class Connection {
-
-    protected Socket conn;
-    protected String vhost;
-    protected PrintWriter pw;
-    protected InputStream is;
-    protected PushbackReader r;
-    protected LineReader lr;
-
-    private static String convdir;
-    static {
-        try {
-            convdir = System.getProperty("ibex.mail.root", File.separatorChar + "var" + File.separatorChar + "org.ibex.mail");
-            convdir += File.separatorChar + "conversation";
-            new File(convdir).mkdirs();
-        } catch (Exception e) {
-            Log.warn(Connection.class, e);
-        }
-    }
-
-    public Connection(Socket conn, String vhost) throws IOException {
-        this.vhost = vhost;
-        this.conn = conn;
-        this.pw = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()));
-        this.is = conn.getInputStream();
-        Reader isr = new InputStreamReader(is);
-        this.r = new PushbackReader(isr);
-        this.lr = new LineReader(isr);
-    }
-
-    protected abstract boolean handleRequest() throws IOException;
-
-    private String cid;
-    private StringBuffer inbound = new StringBuffer();
-    private PrintWriter conversation;
-
-    public final boolean handle() throws IOException {
-        cid = getConversation();
-        Log.setThreadAnnotation("[conversation " + cid + "] ");
-        InetSocketAddress remote = (InetSocketAddress)conn.getRemoteSocketAddress();
-        Log.info(this, "connection from "+remote.getHostName()+":"+remote.getPort()+" ("+remote.getAddress()+")");
-        conversation = new PrintWriter(new OutputStreamWriter(new FileOutputStream(convdir + File.separatorChar + cid + ".txt")));
-       boolean ret = false;
-       try {
-           ret = handleRequest();
-           Log.setThreadAnnotation("");
-       } finally {
-           conversation.close();
-       }
-        return ret;
-    }
-
-    protected void println(String s) throws IOException {
-       if (inbound.length() > 0) { conversation.println("C: " + inbound.toString()); inbound.setLength(0); } 
-        conversation.println("S: " + s);
-       conversation.flush();
-        pw.print(s);
-        pw.print("\r\n");
-        pw.flush();
-    }
-    protected void flush() throws IOException { pw.flush(); }
-    protected String readln() throws IOException {
-        String line = lr.readLine();
-        conversation.println("C: " + line);
-       conversation.flush();
-        return line;
-    }
-    public char getc() throws IOException {
-        int ret = r.read();
-        if (ret == -1) throw new EOFException();
-        if (ret == '\n') {
-           if (inbound.length() > 0) { conversation.println("C: " + inbound.toString()); inbound.setLength(0); } }
-        else if (ret != '\r') inbound.append((char)ret);
-       conversation.flush();
-        return (char)ret;
-    }
-    public  char peekc() throws IOException {
-        int ret = r.read();
-        if (ret == -1) throw new EOFException();
-        r.unread(ret);
-        return (char)ret;
-    }
-    public  void fill(byte[] b) throws IOException {
-        int num = 0;
-        while (num < b.length) {
-            int numread = is.read(b, num, b.length - num);
-            if (numread == -1) throw new EOFException();
-            num += numread;
-        }
-    }
-
-    private static String lastTime = null;
-    private static int lastCounter = 0;
-    static String getConversation() {
-        String time = new SimpleDateFormat("yy.MMM.dd-hh:mm:ss").format(new Date());
-        synchronized (SMTP.class) {
-            if (lastTime != null && lastTime.equals(time)) time += "." + (++lastCounter);
-            else lastTime = time;
-        }
-        return time;
-    }
-
-}
index f6670f6..2291826 100644 (file)
@@ -1,4 +1,7 @@
 package org.ibex.mail.protocol;
+import org.ibex.io.*;
+import org.ibex.jinetd.Listener;
+import org.ibex.net.*;
 import org.ibex.mail.*;
 import org.ibex.util.*;
 import org.ibex.mail.target.*;
@@ -6,7 +9,7 @@ import java.util.*;
 import java.net.*;
 import java.text.*;
 import java.io.*;
-
 // FIXME: this is valid    LSUB "" asdfdas%*%*%*%*SFEFGWEF
 // FIXME: be very careful about where/when we quotify stuff
 // FIXME: 'UID FOO 100:*' must match at least one message even if all UIDs less than 100
@@ -29,16 +32,19 @@ import java.io.*;
 // FEATURE: STARTTLS
 // FEATURE: asynchronous client notifications (need to re-read RFC)
 
-public class IMAP {
+public class IMAP implements Listener {
+
+    public void accept(Connection c) {
+        Log.error(this, "IMAP got a connection!");
+        new Listener().handleRequest(c);
+        c.close();
+    }
 
+    public IMAP() { }
     public static final float version = (float)0.1;
 
     // API Class //////////////////////////////////////////////////////////////////////////////
 
-    public static final int
-        PEEK=0x1, BODYSTRUCTURE=0x2, ENVELOPE=0x4, FLAGS=0x8, INTERNALDATE=0x10, FIELDS=0x800, FIELDSNOT=0x1000,
-        RFC822=0x20, RFC822TEXT=0x40, RFC822SIZE=0x80, HEADERNOT=0x100, UID=0x200, HEADER=0x400;
-
     public static interface Client {
         public void expunge(int uid);
         public void list(char separator, String mailbox, boolean lsub, boolean phantom);
@@ -161,7 +167,7 @@ public class IMAP {
         public void check() { }
         public void noop() { }
         public void logout() { }
-        public void close() { for(Mailbox.Iterator it=selected().iterator(Query.deleted()); it.next();) it.delete(); unselect(); }
+        public void close() { for(Mailbox.Iterator it=selected().iterator(Query.deleted()); it.next();) it.delete(); }
         public void expunge() { for(Mailbox.Iterator it = selected().iterator(Query.deleted());it.next();) expunge(it); }
         public void expunge(Mailbox.Iterator it) { client.expunge(it.uid()); it.delete(); }
         public void subscribe(String mailbox) { }
@@ -171,7 +177,9 @@ public class IMAP {
         public int count(String mailbox)       { return mailbox(mailbox, false).count(Query.all()); }
         public int uidNext(String mailbox)     { return mailbox(mailbox, false).uidNext(); }
         public int uidValidity(String mailbox) { return mailbox(mailbox, false).uidValidity(); }
-        public void select(String mailbox, boolean examineOnly) { selected = mailbox(mailbox, false); }
+        public void select(String mailbox, boolean examineOnly) {
+           selected = mailbox(mailbox, false);
+       }
 
         public int[] search(Query q, boolean uid) {
             Vec.Int vec = new Vec.Int();
@@ -193,7 +201,8 @@ public class IMAP {
                 else if (style == 0) it.setFlags(flags);
                 else if (style == 1) it.addFlags(flags);
                 it.recent(recent);
-                if (!silent) client.fetch(it.num(), it.flags(), -1, null, it.uid());
+               // FIXME
+                //if (!silent) client.fetch(it.num(), it.flags(), -1, null, it.uid());
             }
         }            
         public void rename(String from0, String to) {
@@ -204,7 +213,7 @@ public class IMAP {
         }
         public void fetch(Query q, int spec, String[] headers, int start, int end, boolean uid) {
             for(Mailbox.Iterator it = selected().iterator(q); it.next(); ) {
-                client.fetch(it.num(), it.flags(), it.cur().rfc822size(), it.cur(), it.uid());
+                client.fetch(it.num(), it.flags(), it.cur().size(), it.cur(), it.uid());
                 it.recent(false);
             }
         }
@@ -214,32 +223,119 @@ public class IMAP {
     // Single Session Handler //////////////////////////////////////////////////////////////////////////////
 
     /** takes an IMAP.Server and exposes it to the world as an IMAP server on a TCP socket */
-    public static class Listener extends Parser implements Client {
+    public static class Listener implements Worker, Client {
         String selectedName = null;
         Mailbox inbox = null, root = null;
-        final Server api;
-        public Listener(Socket conn, Server.Authenticator auth) throws IOException {
-            this(conn, java.net.InetAddress.getLocalHost().getHostName(), auth); }
-        public Listener(Socket conn, String vhost, Server.Authenticator auth) throws IOException {
-            super(conn, vhost);
-            this.api = new IMAP.MailboxWrapper(auth, this);
+        Server api;
+        Parser parser = null;
+        Connection conn = null;
+        public Listener() { }
+        Parser.Token token() { return parser.token(); }
+        void println(String s) { conn.println(s); }
+        void newline() { parser.newline(); }
+        Query query() { return parser.query(); }
+        public void handleRequest(Connection conn) {
+            parser = new Parser(conn);
+            this.conn = conn;
+            api = new IMAP.MailboxWrapper(new Main.BogusAuthenticator(), this);
+            conn.setTimeout(30 * 60 * 1000);
+            println("* OK " + conn.vhost + " " + IMAP.class.getName() + " IMAP4rev1 [RFC3501] v" + version + " server ready");
+            for(String tag = null;; newline()) try {
+                conn.out.flush();
+                boolean uid = false;
+                tag = null; Parser.Token tok = token(); if (tok == null) return; tag = tok.astring();
+                String command = token().atom();
+                if (command.equalsIgnoreCase("UID")) { uid = true; command = token().atom(); }
+                int commandKey = ((Integer)commands.get(command.toUpperCase())).intValue();
+                switch(commandKey) {
+                    case LOGIN:        api.login(token().astring(), token().astring()); break;
+                    case CAPABILITY:   println("* CAPABILITY " + Printer.join(" ", api.capability())); break;
+                    case AUTHENTICATE: throw new Server.No("AUTHENTICATE not supported");
+                    case LOGOUT:       api.logout(); println("* BYE"); conn.close(); return;
+                    case LIST:         api.list(token().q(), token().q()); break;
+                    case LSUB:         api.lsub(token().q(), token().q()); break;
+                    case SUBSCRIBE:    api.subscribe(token().astring()); break;
+                    case UNSUBSCRIBE:  api.unsubscribe(token().astring()); break;
+                    case RENAME:       api.rename(token().astring(), token().astring()); break;
+                    case COPY:         selected(); api.copy(Query.set(uid, token().set()), token().astring()); break;
+                    case DELETE:       api.delete(token().atom()); break;
+                    case CHECK:        selected(); api.check(); break;
+                    case NOOP:         api.noop(); break;
+                    case CLOSE:        selected(); api.close(); break;
+                    case EXPUNGE:      selected(); api.expunge(); break;
+                    case UNSELECT:     selected(); api.unselect(); selected = false; break;
+                    case CREATE:       api.create(token().astring()); break;
+                    case FETCH:        selected(); fetch(Query.set(lastuid=uid, token().set()),
+                                                        lastfetch=token().lx(), 0, 0, 0, uid, 0); break;
+                    case SEARCH:       selected(); println("* SEARCH " + Printer.join(api.search(query(), uid))); break;
+                    case EXAMINE:
+                    case SELECT: {
+                        String mailbox = token().astring();
+                        api.select(mailbox, commandKey==EXAMINE);
+                        println("* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)");
+                        println("* " + api.count(mailbox)  + " EXISTS");
+                        println("* " + api.recent(mailbox) + " RECENT");
+                        println("* OK [UIDVALIDITY " + api.uidValidity(mailbox) + "] UIDs valid");
+                        println("* OK [UIDNEXT " + api.uidNext(mailbox) + "]");
+                        println("* OK [PERMANENTFLAGS (\\Seen \\Draft \\Answered \\Deleted)]");
+                        selected = true;
+                        break; }
+                    case STATUS: {
+                        String mailbox = token().astring();  // hack for GNUS buggy client
+                        Parser.Token[] list = token().l();
+                        String response = "";
+                        for(int i=0; i<list.length; i++) {
+                            String s = list[i].atom().toUpperCase();
+                            if (s.equals("MESSAGES"))    response += "MESSAGES "    + api.count(mailbox);
+                            if (s.equals("RECENT"))      response += "RECENT "      + api.seen(mailbox);
+                            if (s.equals("UIDNEXT"))     response += "UNSEEN "      + api.recent(mailbox);
+                            if (s.equals("UIDVALIDITY")) response += "UIDVALIDITY " + api.uidValidity(mailbox);
+                            if (s.equals("UNSEEN"))      response += "UIDNEXT "     + api.uidNext(mailbox);
+                        }
+                        println("* STATUS " + selectedName + " (" + response + ")");
+                        break;
+                    }
+                    case APPEND: { 
+                        String m = token().atom();
+                        int flags = 0;
+                        Date arrival = null;
+                        Parser.Token t = token();
+                        if (t.type == t.LIST)   { flags = t.flags();      t = token(); }
+                        if (t.type == t.QUOTED) { arrival = t.datetime(); t = token(); }
+                        api.append(m, flags, arrival, token().q());
+                        break; }
+                    case STORE: {
+                        selected();
+                        Query q = uid ? Query.uid(token().set()) : Query.num(token().set());
+                        String s = token().atom().toUpperCase();
+                        int flags = token().flags();
+                        if (s.equals("FLAGS"))              api.setFlags(q,    flags, uid, false);
+                        else if (s.equals("+FLAGS"))        api.addFlags(q,    flags, uid, false);
+                        else if (s.equals("-FLAGS"))        api.removeFlags(q, flags, uid, false);
+                        else if (s.equals("FLAGS.SILENT"))  api.setFlags(q,    flags, uid, true);
+                        else if (s.equals("+FLAGS.SILENT")) api.addFlags(q,    flags, uid, true);
+                        else if (s.equals("-FLAGS.SILENT")) api.removeFlags(q, flags, uid, true);
+                        else throw new Server.Bad("unknown STORE specifier " + s);
+                        break; }
+                    default: throw new Server.Bad("unrecognized command \"" + command + "\"");
+                }
+                println(tag+" OK "+command+" Completed. " +
+                        (commandKey == LOGIN ? ("[CAPABILITY "+Printer.join(" ", api.capability())+"]") : ""));
+            } catch (Server.Bad b) { println(tag==null ? "* BAD Invalid tag":(tag + " Bad " + b.toString())); b.printStackTrace();
+            } catch (Server.No n)  { println(tag==null?"* BAD Invalid tag":(tag+" No "  + n.toString())); n.printStackTrace(); }
         }
 
-        private Token[] lastfetch = null; // hack
+        private Parser.Token[] lastfetch = null; // hack
         private boolean lastuid = false;  // hack
-
         private boolean selected = false;
         private void selected() { if (!selected) throw new Server.Bad("no mailbox selected"); }
-        private void star(String s) { try { println("* " + s); } catch (IOException e) { throw new MailException.IOException(e); } }
-        private String qq(String s) { return Printer.qq(s); }
 
         // Callbacks //////////////////////////////////////////////////////////////////////////////
 
-        public void expunge(int uid) { star(uid + " EXPUNGE"); }
-        public void list(char sep, String box, boolean lsub, boolean phantom)
-        {star((lsub?"LSUB":"LIST")+" ("+(phantom?"\\Noselect":"")+") \""+sep+"\" \""+box+"\"");}
-        public void fetch(int num, int flags, int size, Message m, int muid) {
-            fetch(m, lastfetch, num, flags, size, lastuid, muid); }
+        public void expunge(int uid) { println("* " + uid + " EXPUNGE"); }
+        public void fetch(int n, int f, int size, Message m, int muid) { fetch(m, lastfetch, n, f, size, lastuid, muid); }
+        public void list(char sep, String mb, boolean sub, boolean p) {
+            println("* " + (sub?"LSUB":"LIST")+" ("+(p?"\\Noselect":"")+") \""+sep+"\" \""+mb+"\"");}
 
         /**
          *   Parse a fetch request <i>or</i> emit a fetch reply.
@@ -249,7 +345,7 @@ public class IMAP {
          *      - parse the fetch request in Token[] t and return a fetch spec
          *      - emit a fetch reply for the parsed spec with respect to message m
          */
-        private void fetch(Object o, Token[] t, int num, int flags, int size, boolean uid, int muid) {
+        private void fetch(Object o, Parser.Token[] t, int num, int flags, int size, boolean uid, int muid) {
             Query q   = o instanceof Query ? (Query)o : null;
             Message m = o instanceof Message ? (Message)o : null;
             boolean e = m != null;
@@ -264,25 +360,25 @@ public class IMAP {
             if (uid) {
                 boolean good = false;
                 for(int i=0; i<t.length; i++)
-                    if ((t[i].type == Token.QUOTED || t[i].type == Token.ATOM) &&
+                    if ((t[i].type == Parser.Token.QUOTED || t[i].type == Parser.Token.ATOM) &&
                         t[i].astring().equalsIgnoreCase("UID")) good = true;
                 if (!good) {
-                    Token[] t2 = new Token[t.length + 1];
+                    Parser.Token[] t2 = new Parser.Token[t.length + 1];
                     System.arraycopy(t, 0, t2, 0, t.length);
-                    t2[t2.length - 1] = new Token("UID");
-                    t = t2;
+                    t2[t2.length - 1] = parser.token("UID");
+                    lastfetch = (t = t2);
                 }
             }
-            if (t.length == 0 && (t[0].type == Token.QUOTED || t[0].type == Token.ATOM)) {
+            if (t.length == 0 && (t[0].type == Parser.Token.QUOTED || t[0].type == Parser.Token.ATOM)) {
                 if (t[0].astring().equalsIgnoreCase("ALL"))
-                    t = new Token[] { new Token("FLAGS"), new Token("INTERNALDATE"),
-                                      new Token("ENVELOPE"), new Token("RFC822.SIZE") };
+                    t = new Parser.Token[] { parser.token("FLAGS"), parser.token("INTERNALDATE"),
+                                      parser.token("ENVELOPE"), parser.token("RFC822.SIZE") };
                 else if (t[0].astring().equalsIgnoreCase("FULL"))
-                    t = new Token[] { new Token("FLAGS"), new Token("INTERNALDATE"), new Token("BODY"), 
-                                      new Token("ENVELOPE"), new Token("RFC822.SIZE") };
+                    t = new Parser.Token[] { parser.token("FLAGS"), parser.token("INTERNALDATE"), parser.token("BODY"), 
+                                      parser.token("ENVELOPE"), parser.token("RFC822.SIZE") };
                 else if (t[0].astring().equalsIgnoreCase("FAST"))
-                    t = new Token[] { new Token("FLAGS"), new Token("INTERNALDATE"),
-                                      new Token("RFC822.SIZE") };
+                    t = new Parser.Token[] { parser.token("FLAGS"), parser.token("INTERNALDATE"),
+                                      parser.token("RFC822.SIZE") };
             }
             for(int i=0; i<t.length; i++) {
                 if (r.length() > initlen) r.append(" ");
@@ -294,23 +390,26 @@ public class IMAP {
                 } else if (s.equals("FLAGS")) {        spec|=FLAGS;        if(e){r.append(" ");r.append(Printer.flags(flags));}
                 } else if (s.equals("INTERNALDATE")) { spec|=INTERNALDATE; if(e){r.append(" ");r.append(Printer.date(m.arrival));}
                 } else if (s.equals("RFC822")) {       spec|=RFC822;       if(e){r.append(" ");r.append(Printer.message(m));}
-                } else if (s.equals("RFC822.TEXT")) {  spec|=RFC822TEXT;   if(e){r.append(" ");r.append(qq(m.body));}
-                } else if (s.equals("RFC822.HEADER")){ spec|=HEADER; if(e){r.append(" ");r.append(qq(m.allHeaders+"\r\n"));}
-                } else if (s.equals("RFC822.SIZE")) {  spec|=RFC822SIZE;   if(e){r.append(" ");r.append(m.rfc822size());}
+                } else if (s.equals("RFC822.TEXT")) {  spec|=RFC822TEXT;   if(e){r.append(" ");r.append(Printer.qq(m.body));}
+                } else if (s.equals("RFC822.HEADER")){ spec|=HEADER;if(e){r.append(" ");r.append(Printer.qq(m.allHeaders+"\r\n"));}
+                } else if (s.equals("RFC822.SIZE")) {  spec|=RFC822SIZE;   if(e){r.append(" ");r.append(m.size());}
                 } else if (s.equals("UID")) {          spec|=UID;          if(e){r.append(" ");r.append(muid); }
                 } else if (!(s.equals("BODY.PEEK") || s.equals("BODY"))) { throw new Server.No("unknown fetch argument: " + s);
                 } else {
                     if (s.equalsIgnoreCase("BODY.PEEK"))   spec |= PEEK;
-                    else if (e) api.addFlags(Query.num(new int[] { num, num }), Mailbox.Flag.SEEN, false, false);
-                    if (!(i<t.length - 1 && (t[i+1].type == Token.LIST)))
-                       {if (e){r.append(" ");r.append(qq(m.body));} continue; }
+                    //else if (e) api.addFlags(Query.num(new int[] { num, num }), Mailbox.Flag.SEEN, false, false);
+                    if (i >= t.length - 1 || t[i+1].type != Parser.Token.LIST) {
+                       spec |= BODYSTRUCTURE;
+                       if (e) { r.append(" "); r.append(Printer.bodystructure(m)); } continue;
+                       //{ if (e) { r.append(" "); r.append(Printer.qq(m.body)); } continue; }
+                   }
                     String payload = "";
                     r.append("[");
-                    Token[] list = t[++i].l();
+                    Parser.Token[] list = t[++i].l();
                     s = list.length == 0 ? "" : list[0].s.toUpperCase();
                     r.append(s);
-                    if (list.length == 0)                   { spec |= RFC822TEXT;   if(e) payload = m.body; }
-                    else if (s.equals(""))                  { spec |= RFC822TEXT;   if(e) payload = m.body; }
+                    if (list.length == 0)                   { spec |= RFC822TEXT;   if(e) payload = m.allHeaders+"\r\n"+m.body; }
+                    else if (s.equals(""))                  { spec |= RFC822TEXT;   if(e) payload = m.allHeaders+"\r\n"+m.body; }
                     else if (s.equals("TEXT"))              { spec |= RFC822TEXT;   if(e) payload = m.body; }
                     else if (s.equals("HEADER"))            { spec |= HEADER;       if(e) payload = m.allHeaders+"\r\n"; }
                     else if (s.equals("HEADER.FIELDS"))     { spec |= FIELDS;     payload=headers(r,t[i].l()[1].sl(),false,m,e); }
@@ -325,12 +424,12 @@ public class IMAP {
                         end = dot == -1 ? -1 : Integer.parseInt(s.substring(s.indexOf('.') + 1));
                         if (e) { payload = payload.substring(start, Math.min(end+1,payload.length())); r.append("<"+start+">"); }
                     }
-                    if (e) { r.append(" "); r.append(qq(payload)); }
+                    if (e) { r.append("] "); r.append(Printer.qq(payload)); }
                 }
             }
             if (e) {
                r.append(")");
-               star(r.toString());
+               println("* " + r.toString());
            } else {
                api.fetch(q, spec, headers, start, end, uid);
            }
@@ -345,104 +444,20 @@ public class IMAP {
                     if (m.headers.get(headers[j]) != null) payload += headers[j]+": "+m.headers.get(headers[j])+"\r\n";
                 }
             } else {
+               throw new Server.No("HEADERS.NOT temporarily disaled");
+               /*
                 if (e) for(int j=0; j<headers.length; j++) r.append(headers[j] + (j<headers.length-1?" ":""));
                 if(e) { OUTER: for(Enumeration x=m.headers.keys(); x.hasMoreElements();) {
                     String key = (String)x.nextElement();
                     for(int j=0; j<headers.length; j++) if (key.equalsIgnoreCase(headers[j])) continue OUTER;
                     payload += key + ": " + m.headers.get(key)+"\r\n";
                 } }
+               */
             }
-            if (e) r.append(")]");
+            if (e) r.append(")");
             return payload + "\r\n";
         }
 
-        public boolean handleRequest() throws IOException {
-            star("OK " + vhost + " " + IMAP.class.getName() + " IMAP4rev1 [RFC3501] v" + version + " server ready");
-            for(String tag = null;; newline()) try {
-                flush();
-                boolean uid = false;
-                tag = null; tag = token().astring();
-                String command = token().atom();
-                if (command.equalsIgnoreCase("UID")) { uid = true; command = token().atom(); }
-                int commandKey = ((Integer)commands.get(command.toUpperCase())).intValue();
-                switch(commandKey) {
-                    case LOGIN:        api.login(token().astring(), token().astring()); break;
-                    case CAPABILITY:   star("CAPABILITY " + Printer.join(" ", api.capability())); break;
-                    case AUTHENTICATE: throw new Server.No("AUTHENTICATE not supported");
-                    case LOGOUT:       api.logout(); star("BYE"); conn.close(); return false;
-                    case LIST:         api.list(token().q(), token().q()); break;
-                    case LSUB:         api.lsub(token().q(), token().q()); break;
-                    case SUBSCRIBE:    api.subscribe(token().astring()); break;
-                    case UNSUBSCRIBE:  api.unsubscribe(token().astring()); break;
-                    case RENAME:       api.rename(token().astring(), token().astring()); break;
-                    case EXAMINE:      api.select(token().astring(), true); break;
-                    case COPY:         selected(); api.copy(Query.set(uid, token().set()), token().astring()); break;
-                    case DELETE:       api.delete(token().atom()); break;
-                    case CHECK:        selected(); api.check(); break;
-                    case NOOP:         api.noop(); break;
-                    case CLOSE:        selected(); api.close(); break;
-                    case EXPUNGE:      selected(); api.expunge(); break;
-                    case UNSELECT:     selected(); api.unselect(); selected = false; break;
-                    case CREATE:       api.create(token().astring()); break;
-                    case FETCH:        selected(); fetch(Query.set(lastuid=uid, token().set()),
-                                                        lastfetch=token().l(), 0, 0, 0, uid, 0); break;
-                    case SEARCH:       selected(); star("SEARCH " + Printer.join(api.search(query(), uid))); break;
-                    case SELECT: {
-                        String mailbox = token().astring();
-                        api.select(mailbox, false);
-                        star("FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)");
-                        star(api.count(mailbox)  + " EXISTS");
-                        star(api.recent(mailbox) + " RECENT");
-                        star("OK [UIDVALIDITY " + api.uidValidity(mailbox) + "] UIDs valid");
-                        star("OK [UIDNEXT " + api.uidNext(mailbox) + "]");
-                        star("OK [PERMANENTFLAGS (\\Seen \\Draft \\Answered \\Deleted)]");
-                        selected = true;
-                        break; }
-                    case STATUS: {
-                        String mailbox = token().atom();
-                        Token[] list = token().l();
-                        String response = "";
-                        for(int i=0; i<list.length; i++) {
-                            String s = list[i].atom().toUpperCase();
-                            if (s.equals("MESSAGES"))    response += "MESSAGES "    + api.count(mailbox);
-                            if (s.equals("RECENT"))      response += "RECENT "      + api.seen(mailbox);
-                            if (s.equals("UIDNEXT"))     response += "UNSEEN "      + api.recent(mailbox);
-                            if (s.equals("UIDVALIDITY")) response += "UIDVALIDITY " + api.uidValidity(mailbox);
-                            if (s.equals("UNSEEN"))      response += "UIDNEXT "     + api.uidNext(mailbox);
-                        }
-                        star("STATUS " + selectedName + " (" + response + ")");
-                        break;
-                    }
-                    case APPEND: { 
-                        String m = token().atom();
-                        int flags = 0;
-                        Date arrival = null;
-                        Token t = token();
-                        if (t.type == t.LIST)   { flags = t.flags();      t = token(); }
-                        if (t.type == t.QUOTED) { arrival = t.datetime(); t = token(); }
-                        api.append(m, flags, arrival, token().q());
-                        break; }
-                    case STORE: {
-                        selected();
-                        Query q = uid ? Query.uid(token().set()) : Query.num(token().set());
-                        String s = token().atom().toUpperCase();
-                        int flags = token().flags();
-                        if (s.equals("FLAGS"))              api.setFlags(q,    flags, uid, false);
-                        else if (s.equals("+FLAGS"))        api.addFlags(q,    flags, uid, false);
-                        else if (s.equals("-FLAGS"))        api.removeFlags(q, flags, uid, false);
-                        else if (s.equals("FLAGS.SILENT"))  api.setFlags(q,    flags, uid, true);
-                        else if (s.equals("+FLAGS.SILENT")) api.addFlags(q,    flags, uid, true);
-                        else if (s.equals("-FLAGS.SILENT")) api.removeFlags(q, flags, uid, true);
-                        else throw new Server.Bad("unknown STORE specifier " + s);
-                        break; }
-                    default: throw new Server.Bad("unrecognized command \"" + command + "\"");
-                }
-                println(tag+" OK "+command+" Completed. " +
-                        (commandKey == LOGIN ? ("[CAPABILITY "+Printer.join(" ", api.capability())+"]") : ""));
-            } catch (Server.Bad b) { println(tag==null ? "* BAD Invalid tag":(tag + " Bad " + b.toString())); b.printStackTrace();
-            } catch (Server.No n)  { println(tag==null?"* BAD Invalid tag":(tag+" No "  + n.toString())); n.printStackTrace(); }
-        }
-
         private static final Hashtable commands = new Hashtable();
         private static final int UID = 0;          static { commands.put("UID", new Integer(UID)); }
         private static final int AUTHENTICATE = 1; static { commands.put("AUTHENTICATE", new Integer(AUTHENTICATE)); }
@@ -472,21 +487,25 @@ public class IMAP {
         private static final int SEARCH = 25;      static { commands.put("SEARCH", new Integer(SEARCH)); }
     }
 
-    public abstract static class Parser extends Connection {
-        public Parser(Socket conn, String vhost) throws IOException { super(conn, vhost); }
+    public static class Parser extends Stream.In {
+        private Stream stream;
+        public Parser(Stream from) { super(from.in); this.stream = from; }
+        public char peekc() { int i = read(); unread(((char)i)+""); return (char)i; }
+        public char getc() { return (char)read(); }
+        public Token token(String s) { return new Token(s); }
         protected Query query() {
             String s = null;
             boolean not = false;
             Query q = null;
             while(true) {
-                Token t = token();
+                Parser.Token t = token(false);
+                if (t == null) break;
                 if (t.type == t.LIST) throw new Server.No("nested queries not yet supported FIXME");
                 else if (t.type == t.SET) return Query.num(t.set());
                 s = t.atom().toUpperCase();
                 if (s.equals("NOT")) { not = true; continue; }
                 if (s.equals("OR"))    return Query.or(query(), query());    // FIXME parse rest of list
                 if (s.equals("AND"))   return Query.and(query(), query());
-                break;
             }
             if (s.startsWith("UN"))        { not = true; s = s.substring(2); }
             if (s.equals("ANSWERED"))        q = Query.answered();
@@ -523,20 +542,33 @@ public class IMAP {
         class Token {
             public final byte type;
             private final String s;
-            private final Token[] l;
+            private final Parser.Token[] l;
             private final int n;
             private static final byte NIL = 0, LIST = 1, QUOTED = 2, NUMBER = 3, ATOM = 4, BAREWORD = 5, SET = 6;
             public Token()                         { this.s = null; n = 0;      l = null; type = NIL; }
             public Token(String s)                 { this(s, false); }
             public Token(String s, boolean quoted) { this.s = s;    n = 0;      l = null; type = quoted ? QUOTED : ATOM;  }
-            public Token(Token[] list)             { this.s = null; n = 0;      l = list; type = LIST; }
+            public Token(Parser.Token[] list)             { this.s = null; n = 0;      l = list; type = LIST; }
             public Token(int number)               { this.s = null; n = number; l = null; type = NUMBER; }
 
             public String   flag()    { if (type != ATOM) bad("expected a flag"); return s; }
             public int      n()       { if (type != NUMBER) bad("expected number"); return n; }
             public int      nz()      { int n = n(); if (n == 0) bad("expected nonzero number"); return n; }
             public String   q()       { if (type == NIL) return null; if (type != QUOTED) bad("expected qstring"); return s; }
-            public Token[]  l()       { if (type == NIL) return null; if (type != LIST) bad("expected list"); return l; }
+            public Parser.Token[]  l()       { if (type == NIL) return null; if (type != LIST) bad("expected list"); return l; }
+            public Parser.Token[]  lx()      {
+               if (type == LIST) return l;
+               Vec v = new Vec();
+               v.addElement(this);
+               while(true) {
+                   Parser.Token t = token(false);
+                   if (t == null) break;
+                   v.addElement(t);
+               }
+               Parser.Token[] ret = new Parser.Token[v.size()];
+               v.copyInto(ret);
+               return ret;
+           }
             public String   nstring() { if (type==NIL) return null; if (type!=QUOTED) bad("expected nstring"); return s; }
             public String   astring() {
                 if (type != ATOM && type != QUOTED) bad("expected atom or string");
@@ -570,8 +602,13 @@ public class IMAP {
                 while(st.hasMoreTokens()) {
                     String s = st.nextToken();
                     if (s.indexOf(':') == -1) {
-                       ids.addElement(Integer.parseInt(s));
-                       ids.addElement(Integer.parseInt(s));
+                       if (s.equals("*")) {
+                           ids.addElement(0);
+                           ids.addElement(Integer.MAX_VALUE);
+                       } else {
+                           ids.addElement(Integer.parseInt(s));
+                           ids.addElement(Integer.parseInt(s));
+                       }
                        continue; }
                     int start = Integer.parseInt(s.substring(0, s.indexOf(':')));
                     String end_s = s.substring(s.indexOf(':')+1);
@@ -607,25 +644,27 @@ public class IMAP {
             }
         }
 
-        // FIXME: IOException handling
-        public void newline() { try {
-            for(char c = peekc(); c == ' ';) { getc(); c = peekc(); };
-            for(char c = peekc(); c == '\r' || c == '\n';) { getc(); c = peekc(); };
-        } catch (IOException e) { e.printStackTrace(); } } 
+        public void newline() {
+           while (peekc() == '\r' || peekc() == '\n' || peekc() == ' ') {
+               for(char c = peekc(); c == ' ';) { getc(); c = peekc(); };
+               for(char c = peekc(); c == '\r' || c == '\n';) { getc(); c = peekc(); };
+           }
+        }
 
-        public Token token() { try {
+        public Token token() { return token(true); }
+        public Token token(boolean freak) {
             Vec toks = new Vec();
             StringBuffer sb = new StringBuffer();
             char c = getc(); while (c == ' ') c = getc();
-            if (c == '\r' || c == '\n') bad("unexpected end of line");
+            if (c == '\r' || c == '\n') { if (freak) bad("unexpected end of line"); return null; }
             else if (c == '{') {
                 while(peekc() != '}') sb.append(getc());
-                println("+ Ready when you are...");
+                stream.out.println("+ Ready when you are...");
                 int octets = Integer.parseInt(sb.toString());
                 while(peekc() == ' ') getc();   // whitespace
                 while (getc() != '\n' && getc() != '\r') { }
                 byte[] bytes = new byte[octets];
-                fill(bytes);
+                read(bytes, 0, bytes.length);
                 return new Token(new String(bytes), true);
             } else if (c == '\"') {
                 while(true) {
@@ -653,7 +692,7 @@ public class IMAP {
                     return new Token(sb.toString(), false);
                 getc();
             }
-        } catch (IOException e) { Log.warn(this, e); } return null; }
+        }
     }
     
     public static class Printer {
@@ -695,9 +734,9 @@ public class IMAP {
         }
         static String bodystructure(Message m) {
             // FIXME
-            return "(\"TEXT\" \"PLAIN\" () NIL NIL \"7BIT\" "+m.rfc822size()+" "+m.lines+")";
+            return "(\"TEXT\" \"PLAIN\" (\"CHARSET\" \"ISO-8859-1\") NIL NIL \"7BIT\" "+m.size()+" "+m.lines+")";
         }
-        static String message(Message m) { return m.rfc822(); }
+        static String message(Message m) { return m.toString(); }
         static String date(Date d) { return d.toString(); }
         static String envelope(Message m) {
             return
@@ -715,7 +754,7 @@ public class IMAP {
         }
         
         public static String qq(String s) {
-            StringBuffer ret = new StringBuffer(s.length() + 20);
+            StringBuffer ret = new StringBuffer();
             ret.append('{');
             ret.append(s.length());
             ret.append('}');
@@ -753,13 +792,12 @@ public class IMAP {
             final Socket s = ss.accept();
             new Thread() { public void run() { try {
                 final Mailbox root = FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT+File.separatorChar+"imap", true);
-                new Listener(s,
-                            new Server.Authenticator() {
-                                public Mailbox authenticate(String u, String p) {
-                                    if (u.equals("megacz")&&p.equals("pass")) return root;
-                                    return null;
-                                } } ).handleRequest();
+                new Listener();
             } catch (Exception e) { e.printStackTrace(); } } }.start();
         }
     }
+
+    public static final int
+        PEEK=0x1, BODYSTRUCTURE=0x2, ENVELOPE=0x4, FLAGS=0x8, INTERNALDATE=0x10, FIELDS=0x800, FIELDSNOT=0x1000,
+        RFC822=0x20, RFC822TEXT=0x40, RFC822SIZE=0x80, HEADERNOT=0x100, UID=0x200, HEADER=0x400;
 }
index 27381cb..d59b43c 100644 (file)
@@ -2,6 +2,8 @@ package org.ibex.mail.protocol;
 import org.ibex.mail.*;
 import org.ibex.mail.target.*;
 import org.ibex.util.*;
+import org.ibex.io.*;
+import org.ibex.net.*;
 import java.net.*;
 import java.io.*;
 import java.util.*;
@@ -13,60 +15,73 @@ import javax.naming.directory.*;
 public class SMTP {
 
     private static final Mailbox spool =
-        FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT, false).slash("spool", true).slash("smtp", true);
+        FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT,false).slash("spool",true).slash("smtp",true);
+
     static { new Thread() { public void run() { Outgoing.runq(); } }.start(); }
 
     // Server //////////////////////////////////////////////////////////////////////////////
 
-    public static class Server extends Connection {
-        public Server(Socket conn, String vhost) throws IOException { super(conn, vhost); }
-        public Server(com.caucho.server.connection.Connection conn) throws IOException { super(new SMTP(), conn); }
-        public boolean handle_() throws IOException, MailException {
-            setSoTimeout(5 * 60 * 1000);
-            println("220 " + vhost + " SMTP " + this.getClass().getName());
+    public static class Server implements Worker {
+        public void handleRequest(Connection conn) {
+            conn.setTimeout(5 * 60 * 1000);
+            conn.out.println("220 " + conn.vhost + " SMTP " + this.getClass().getName());
             Address from = null;
             Vector to = new Vector();
-            for(String command = readln(); ; command = readln()) {
+            for(String command = conn.in.readln(); ; command = conn.in.readln()) {
                 String c = command.toUpperCase();
-                if (c.startsWith("HELO"))        { println("250 HELO " + vhost);                  from = null; to = new Vector();
-                } else if (c.startsWith("EHLO")) { println("250");                                from = null; to = new Vector();
-                } else if (c.startsWith("RSET")) { println("250 reset ok");                       from = null; to = new Vector();
-                } else if (c.startsWith("HELP")) { println("214 you are beyond help.  see a trained professional.");
-                } else if (c.startsWith("VRFY")) { println("252 We don't VRFY; proceed anyway");
-                } else if (c.startsWith("EXPN")) { println("550 EXPN not available");
-                } else if (c.startsWith("NOOP")) { println("250 OK");
-                } else if (c.startsWith("QUIT")) { println("221 " + vhost + " closing connection"); return false;
+                if (c.startsWith("HELO"))        { conn.out.println("250 HELO " + conn.vhost); from = null; to = new Vector();
+                } else if (c.startsWith("EHLO")) { conn.out.println("250");                    from = null; to = new Vector();
+                } else if (c.startsWith("RSET")) { conn.out.println("250 reset ok");           from = null; to = new Vector();
+                } else if (c.startsWith("HELP")) { conn.out.println("214 you are beyond help.  see a trained professional.");
+                } else if (c.startsWith("VRFY")) { conn.out.println("252 We don't VRFY; proceed anyway");
+                } else if (c.startsWith("EXPN")) { conn.out.println("550 EXPN not available");
+                } else if (c.startsWith("NOOP")) { conn.out.println("250 OK");
+                } else if (c.startsWith("QUIT")) { conn.out.println("221 " + conn.vhost + " closing connection"); return;
                 } else if (c.startsWith("MAIL FROM:")) {
-                    println("250 " + (from = new Address(command.substring(10).trim())) + " is syntactically correct");
+                    conn.out.println("250 " + (from = new Address(command.substring(10).trim())) + " is syntactically correct");
                 } else if (c.startsWith("RCPT TO:")) {
-                    if (from == null) { println("503 MAIL FROM must precede RCPT TO"); continue; }
+                    if (from == null) { conn.out.println("503 MAIL FROM must precede RCPT TO"); continue; }
                     command = command.substring(8).trim();
                     if(command.indexOf(' ') != -1) command = command.substring(0, command.indexOf(' '));
                     Address addr = new Address(command);
                     InetAddress[] mx = getMailExchangerIPs(addr.host);
                     to.addElement(addr);
-                    if (((InetSocketAddress)conn.getRemoteSocketAddress()).getAddress().isLoopbackAddress()) {
-                        println("250 you are connected locally, so I will let you send");
+                    if (conn.getRemoteAddress().isLoopbackAddress()) {
+                        conn.out.println("250 you are connected locally, so I will let you send");
                     } else {
                         boolean good = false;
-                        for(int i=0; !good && i<mx.length; i++) if (NetworkInterface.getByInetAddress(mx[i]) != null) good = true;
-                        if (!good) { println("551 sorry, " + addr + " is not on this machine"); return false; }
-                        println("250 " + addr + " is on this machine; I will deliver it");
+                        for(int i=0; !good && i<mx.length; i++) {
+                            try {
+                                if (NetworkInterface.getByInetAddress(mx[i]) != null) good = true;
+                            } catch (Exception e) { /* DELIBERATE */ }
+                        }
+                        if (!good) { conn.out.println("551 sorry, " + addr + " is not on this machine"); return; }
+                        conn.out.println("250 " + addr + " is on this machine; I will deliver it");
                     }
                 } else if (c.startsWith("DATA")) {
-                    if (from == null) { println("503 MAIL FROM command must precede DATA"); continue; }
-                    if (to == null) { println("503 RCPT TO command must precede DATA"); continue; }
-                    println("354 Enter message, ending with \".\" on a line by itself");
+                    if (from == null) { conn.out.println("503 MAIL FROM command must precede DATA"); continue; }
+                    if (to == null) { conn.out.println("503 RCPT TO command must precede DATA"); continue; }
+                    conn.out.println("354 Enter message, ending with \".\" on a line by itself");
                     try {
-                        for(int i=0; i<to.size(); i++)
-                            Target.root.accept(new Message(from, (Address)to.elementAt(i), new DotTerminatedLineReader(lr)));
-                        println("250 message accepted");
-                    } catch (MailException.Malformed mfe) {   println("501 " + mfe.toString());
-                    } catch (MailException.MailboxFull mbf) { println("452 " + mbf);
-                    } catch (IOException ioe) {               println("554 " + ioe.toString());
+                        StringBuffer buf = new StringBuffer();
+                        for(String s = conn.in.readln(); ; s = conn.in.readln()) {
+                            if (s == null) throw new RuntimeException("connection closed");
+                            if (s.equals(".")) break;
+                            if (s.startsWith(".")) s = s.substring(1);
+                            buf.append(s);
+                        }
+                        String body = buf.toString();
+                        for(int i=0; i<to.size(); i++) {
+                           Message m = new Message(from, (Address)to.elementAt(i), new Stream(body));
+                            Target.root.accept(m);
+                       }
+                        conn.out.println("250 message accepted");
+                        from = null; to = new Vector();
+                    } catch (MailException.Malformed mfe) {   conn.out.println("501 " + mfe.toString());
+                    } catch (MailException.MailboxFull mbf) { conn.out.println("452 " + mbf);
+                    } catch (IOException ioe) {               conn.out.println("554 " + ioe.toString());
                     }
-                    return false;
-                } else                           { println("500 unrecognized command"); }                    
+                } else                           { conn.out.println("500 unrecognized command"); }                    
             }
         }
     }
@@ -106,36 +121,29 @@ public class SMTP {
 
         private static void check(String s) { if (s.startsWith("4")||s.startsWith("5")) throw new MailException(s); }
         private static boolean attempt(final Message m, final InetAddress mx) {
-            boolean accepted0 = false;
+            boolean accepted = false;
             try {
                 Log.info(SMTP.Outgoing.class, "connecting...");
-                accepted0 = new Connection(new Socket(mx, 25), InetAddress.getLocalHost().getHostName()) {
-                    public boolean handleRequest() throws IOException {
-                        Log.info(SMTP.Outgoing.class, "connected");
-                        check(readln());  // banner
-                        println("HELO " + vhost );                check(readln());
-                        println("MAIL FROM: " + m.envelopeFrom);  check(readln());
-                        println("RCPT TO: " + m.envelopeTo);      check(readln());
-                        println("DATA");                          check(readln());
-                        println(m.body);
-                        println(".");
-                        check(readln());
-                        Log.info(SMTP.Outgoing.class, "message accepted by " + mx);
-                        boolean accepted = true;
-                        try {
-                            conn.close();
-                        } finally {
-                            return accepted;
-                        }
-                    }
-                }.handle();
-                return accepted0;
+                Connection conn = new Connection(new Socket(mx, 25), InetAddress.getLocalHost().getHostName());
+                Log.info(SMTP.Outgoing.class, "connected");
+                check(conn.in.readln());  // banner
+                conn.out.println("HELO " + conn.vhost);            check(conn.in.readln());
+                conn.out.println("MAIL FROM: " + m.envelopeFrom);  check(conn.in.readln());
+                conn.out.println("RCPT TO: " + m.envelopeTo);      check(conn.in.readln());
+                conn.out.println("DATA");                          check(conn.in.readln());
+                conn.out.println(m.body);
+                conn.out.println(".");
+                check(conn.in.readln());
+                Log.info(SMTP.Outgoing.class, "message accepted by " + mx);
+                accepted = true;
+                conn.close();
             } catch (Exception e) {
-                if (accepted0) return true;
+                if (accepted) return true;
                 Log.warn(SMTP.Outgoing.class, "unable to send; error=" + e);
                 Log.warn(SMTP.Outgoing.class, e);
                 return false;
             } finally { Log.setThreadAnnotation("[outgoing smtp] "); }
+            return accepted;
         }
 
         static void runq() {
@@ -192,21 +200,4 @@ public class SMTP {
         }
         return ret;
     }
-
-
-    // Helpers //////////////////////////////////////////////////////////////////////////////
-
-    public static class DotTerminatedLineReader extends LineReader {
-        private final LineReader r;
-        private boolean done = false;
-        public DotTerminatedLineReader(LineReader r) { super(null); this.r = r; }
-        public String readLine() throws IOException {
-            if (done) return null;
-            String s = r.readLine();
-            if (s.equals(".")) { done = true; return null; }
-            if (s.startsWith(".")) return s.substring(1);
-            return s;
-        }
-    }
-
 }
index 6f3198a..cf47fe3 100644 (file)
@@ -1,7 +1,8 @@
 package org.ibex.mail.target;
 import org.ibex.mail.*;
 import org.ibex.util.*;
-import org.ibex.mail.*;
+import org.ibex.io.*;
+import org.ibex.net.*;
 import java.io.*;
 import java.net.*;
 import java.util.*;
@@ -98,7 +99,7 @@ public class FileBasedMailbox extends Mailbox.Default {
             File target = new File(name);
             File f = new File(target.getCanonicalPath() + "-");
             FileOutputStream fo = new FileOutputStream(f);
-            message.dump(fo);
+            message.dump(new Stream(fo));
             fo.close();
             f.renameTo(target);
         } catch (IOException e) { throw new MailException.IOException(e); }
@@ -114,13 +115,14 @@ public class FileBasedMailbox extends Mailbox.Default {
            if (cur >= names.length) return null;
             try {
                 File file = new File(path + File.separatorChar + names[cur]);
-                return new Message(null, null, new LineReader(new InputStreamReader(new FileInputStream(file))));
+                return new Message(null, null, new Stream(new FileInputStream(file)));
             } catch (IOException e) { throw new MailException.IOException(e); }
         }
         public boolean next() {
             cur++;
             if (cur >= names.length) return false;
             String name = names[cur].substring(names[cur].indexOf('.') + 1);
+           if (!(new File(path + File.separatorChar + names[cur])).exists()) return next();
             seen     = name.indexOf('s') != -1;
             deleted  = name.indexOf('x') != -1;
             flagged  = name.indexOf('f') != -1;
@@ -145,11 +147,14 @@ public class FileBasedMailbox extends Mailbox.Default {
                 (draft ? "d" : "") +
                 (recent ? "r" : "") +
                 (answered ? "a" : "");
-            new File(names[cur]).renameTo(new File(path + File.separatorChar + newName));
+            new File(path + File.separatorChar + names[cur]).renameTo(new File(path + File.separatorChar + newName));
             names[cur] = newName;
         }
 
-        public void    delete() { new File(names[cur]).delete(); }
+        public void    delete() {
+           new File(path + File.separatorChar + names[cur]).delete();
+           // FIXME remove from list?
+       }
         public void    set(String key, String val) { throw new MailException("not supported"); }
         public String  get(String key) { throw new MailException("not supported"); }
 
index fbb485c..5d105bf 100644 (file)
@@ -1,7 +1,7 @@
 package org.ibex.mail.target;
 import org.ibex.mail.*;
 import org.ibex.util.*;
-import org.ibex.mail.*;
+import org.ibex.io.*;
 import java.io.*;
 import java.net.*;
 import java.util.*;
@@ -34,7 +34,7 @@ public class Transcript extends Target {
                 
             File target = new File(today.getPath() + File.separatorChar + time + ".txt");
             OutputStream os = new FileOutputStream(target);
-            message.dump(os);
+            message.dump(new Stream(os));
             os.flush();
             os.close();
         } catch (IOException e) { throw new MailException.IOException(e); }
diff --git a/upstream/org.ibex.core/AUTHORS b/upstream/org.ibex.core/AUTHORS
deleted file mode 100644 (file)
index ca0f31f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-[megacz] Adam Megacz <adam@ibex.org>
-   - Original Architect
-   - Ibex Engine
-   - Most of the widget set
-
-[david] David Crawshaw <david@zentus.com>
-   - Widget Czar
-   - Fixes to slider.ibex
-
-[corey] Corey Jewett <cj@syntheticplayground.com>
-   - Patch to make build.xml not depend on <bash> task
-
-[ejones] Evan Jones <ejones@uwaterloo.ca>
-   - Google demo
-   - Dynamic Trees
-
diff --git a/upstream/org.ibex.core/CHANGES b/upstream/org.ibex.core/CHANGES
deleted file mode 100644 (file)
index c40c796..0000000
+++ /dev/null
@@ -1,1066 +0,0 @@
-  
-== 2002 =================================================================
-
-10-Apr megacz Box.java, Surface.java: fixed rendering glitch caused by
-              lastDirtiedTimeStamp hack.
-
-10-Apr megacz org/xwt/html/p.xwt: Improved flow performance.
-
-10-Apr megacz org/xwt/Box.java: fixed a bug that prevented regions from being
-              dirtied properly when boxes are removed from the tree and then
-              re-added.
-
-10-Apr megacz org/xwt/Box.java, org/xwt/SpecialBoxProperties.java:
-              hshrink/vshrink are no longer implemented by
-              manipulating dmax; the prerender pass understands them
-              natively.
-
-11-Apr megacz org/xwt/server/HTTP.java: fixed some CDATA misbehaviors.
-
-11-Apr megacz org/xwt/html/p.xwt, org/xwt/html/test.xwt: improved HTML
-              rendering; we can now render pretty much any <p> tag
-
-13-Apr megacz README: updated to note that build process requires
-              libgcj.jar even for jvm builds.
-
-21-Apr megacz src/org/xwt/plat/GCJ.xml: removed -fno-rtti
-
-21-Apr megacz src/org/xwt/Surface.java: workaround for GCJ PR java/6393
-
-22-Apr megacz src/org/xwt/plat/Java2.java: fixed bug that caused
-              RasterFormatException on jdk1.4
-
-22-Apr megacz README: included instructions on how to build without gcc.
-
-26-Apr megacz src/org/xwt/Main.java: included text description on splash screen
-
-26-Apr megacz src/org/xwt/plat/Win32.xml, src/org/xwt/plat/Java2.xml:
-              adjusted dist / signature process.
-
-26-Apr megacz README: included printStackTrace() patch
-
-26-Apr megacz src/org/xwt/XWT.java: fixed bug 53
-
-26-Apr megacz src/org/xwt/TinySSL.java: fixed PKCS1 bug
-
-26-Apr megacz build.xml: staging/production push process
-
-26-Apr megacz src/org/xwt/tasks/BashTask.java: now checks exit codes
-
-26-Apr megacz src/org/xwt/tasks/BashTask.java: added ssh support
-
-27-Apr megacz README: added file locking patch
-
-27-Apr megacz [lots of files]: introduced notion of buildid's, to make
-              XWT upgrades work more smoothly, and to prevent problems
-              with browser/plugin caches.
-
-27-Apr megacz JSObject.java: added extra debugging info
-
-27-Apr megacz XWT.java, Platform.java, Main.java, Java2.java,
-              Win32.java, Win32.cc, faq.html: added support for
-              xwt.newBrowserWindow()
-
-27-Apr megacz Surface.java, Box.java: nuked dirtiedTimeStamp
-              altogether; it caused more problems than it solved.
-
-27-Apr megacz reference.html: Changed capitalization of
-              faultstring/faultcode for xwt.soap() to match SOAP spec.
-
-27-Apr megacz XWT.java, Box.java: fixed ConversionError bug
-
-27-Apr megacz Platform.java: added a 3-pixel minimum for a font's
-              descent -- ensures that we have space for underlining.
-
-28-Apr megacz Template.java: fixed a bug where <redirect/> would
-              misbehave if used on a scriptless <template/>
-
-28-Apr megacz SOAP.java, XMLRPC.java: Base64 elements are now decoded
-              and returned as String's.
-
-28-Apr megacz Platform.java: fixed bug that caused italicized text to
-              automatically become bold.
-
-29-Apr megacz Box.java: moved underline up by one pixel (goes with
-              last change).
-              
-29-Apr megacz Main.java: new splashscreen, upped the gamma, broke off
-              SplashScreen.create() into its own Message
-              
-29-Apr megacz Surface.java: took blitDirtyScreenRegions() out of
-              Dirty(); replaced with Refresh(). This was causing a
-              thread hazard on Win32, resulting in Bug 21 (closed)
-              
-29-Apr megacz Win32.cc: removed redundant Refresh(), removed debugging
-              statement.
-
-29-Apr megacz JSObject.java: added debugging output for an error I've
-              been seeing.
-              
-29-Apr megacz src/org/xwt/themes/monopoly: overhauled the menu and
-              tree widgets.
-              
-29-Apr megacz Main.java: fixed splashscreen refresh bug.
-              
-30-Apr megacz window_manager_interaction.xwt: added UnMinimize/UnMaximize
-
-30-Apr megacz Chess.java, XServer.java: removed unused imports
-
-30-Apr megacz AWT.java: only create reserve Component if an
-              AWTDoubleBuffer gets created, prep for Java14, broke out
-              InnerFrame/InnerWindow and added exception handler to
-              cope with new Java1.4 HeadlessException.
-
-30-Apr megacz Java12.java, Java12.xml, Java14.java: added Java14 support
-
-30-Apr megacz Box.java: made dirty() public for Java14
-
-30-Apr megacz Platform.java: updated to detect Java14
-
-03-Apr megacz Main.java: fixed a bug that could cause >100% instantiation
-
-03-Apr megacz HTTP.java, Main.java, Platform.java, SOAP.java,
-              XMLRPC.java, Java12.java, Win32.cc, Win32.java: new HTTP
-              architecture, first implementation of proxy support.
-
-05-Apr megacz HTTP.java, Main.java, Platform.java, SOAP.java,
-              TinySSL.java, XMLRPC.java, Java12.java, Win32.java:
-              improved proxy support.
-
-06-Apr megacz Box.java: fixed a bug relating to shrink
-
-07-Apr megacz Box.java: thisbox[n] = null wasn't doing anything
-
-15-May megacz Template.java, Static.java: fixed bug where xwt.static
-              wouldn't work for packages whose name included the token
-              "xwt".
-
-15-May megacz XWT.java: added xwt.screen{Width,Height}
-
-15-May megacz JSObject.java: added extra logic to discriminate between
-              public and private puts.
-
-15-May megacz Box.java: added setLimits() call, refined cmin-updating
-              logic, added extra logging in the event of a
-              PosChange/SizeChange infinite loop.
-
-15-May megacz HTTP.java: fixed Host: bug
-
-15-May megacz Platform.java: added GCJ-Linux platform detection logic,
-              setLimits() logic.
-
-15-May megacz Resources.java: fixed a bug in download-size calculation.
-
-15-May megacz SpecialBoxProperty.java: added required extra dirty()
-              call, extra checking on textcolor.
-
-15-May megacz Surface.java: key presses/releases only go to visible
-              children, setLimits()
-
-15-May megacz XMLRPC.java: call() is now synchronized
-
-15-May megacz Win32.xml, GCJ.xml, GCJHTask.java: ${gcc-prefix} now ends
-              with a dash.
-
-15-May megacz Win32.java: handled the oddball all-protocol proxy case
-
-18-May megacz Static.java: removed redundant debug message
-
-18-May megacz JSObject.java: fixed a public/private bug
-
-28-May megacz HTTP.java: ugly hack to cope with Microsoft CARP PAC scripts
-
-28-May megacz Main.java: spelling fix
-
-01-Jun megacz Platform.java: extra checks on URL well-formedness
-
-01-Jun megacz AWT.java: file dialog suggestion bugfix
-
-01-Jun megacz Main.java: custom splash screen support
-
-01-Jun megacz POSIX.cc, POSIX.java: finally completed POSIX support
-
-01-Jun megacz Win32.cc: attempted fix for international keyboards
-
-05-Jun megacz Box.java: bugfix to ensure that negative regions are never filled
-
-05-Jun megacz Main.java: now require filename to end with .xwar
-
-05-Jun megacz Ibex.java: ibex.fileSeparator, ibex.homeDir, ibex.tempDir,
-              ibex.recursivePrintObject
-
-05-Jun megacz AWT.java: fix for non-US keyboards
-
-14-Jun megacz HTML.java, Ibex.java: introduced ibex.parseHTML()
-
-16-Jun megacz Resources.java: eliminated some annoying warning messages
-
-16-Jun megacz Template.java: fixed erroneous attribute checks for numbers and image/border
-
-16-Jun megacz HTTP.java: diabled ibex-httpProxy, etc
-
-23-Jun megacz Box.java: JPEG hack, fastpath rendering bugfix,
-              fixedaspect, improved >500 Pos/SizeChange loop breakout
-
-23-Jun megacz HTTP.java: removed System.out.println()
-
-23-Jun megacz Main.java: lightened splash screen
-
-23-Jun megacz Platform.java: no longer invokes System.exit() from
-              applet, setTcpNoDelay() in Platform.getSocket()
-
-23-Jun megacz SOAP.java, XMLRPC.java: bugfix for CDATA content in random elements
-
-23-Jun megacz SpecialBoxProperty.java: fixedaspect, warning about non-self-redirect root boxes
-
-23-Jun megacz Java12.java: removed wierd BufferedImage hackaround;
-              jdk1.4 doesn't need it and it was causing wierd rendering glitches
-
-23-Jun megacz POSIX.cc: hackaround for wierd XFreeColormap() failure
-
-23-Jun megacz Win32.java: fix for YET ANOTHER wacky Win32 proxy string format
-
-24-Jun megacz MessageQueue.java: fix to MessageQueue to improve
-              XML-RPC/SOAP performance
-
-01-Jul megacz DERObjectIdentifier.java: fix to work around GCC compiler bug
-
-01-Jul megacz XWF.java: fixed an int[] sharing problem
-
-01-Jul megacz XMLRPC.java, NativeDate.java: XMLRPC can now send dateTime's
-
-01-Jul megacz POSIX.java, POSIX.cc: initial window size, DISPLAY
-              string logging, http_proxy environment variable checking, font fixes
-
-01-Jul megacz Platform.java: initial window size fixes
-
-01-Jul megacz HTTP.java: we no longer insert the IP into the URL.
-
-01-Jul megacz TinySSL.java, HTTP.java: fixed SSL-over-Proxy
-
-01-Jul megacz AWT.java: added dialog for critical aborts
-
-01-Jul megacz Main.java: added browser detection output
-
-02-Jul david  bevel.ibex: hpad/vpad must be greater than thickness
-
-02-Jul david  colorpicker.ibex, slider.ibex, slider_base.ibex: Implemented
-              slider.ibex (limits, value display, quantization) and made
-              major improvements/fixed to colorpicker.
-
-15-Jul megacz HTTP.java: implemented isInNet(), weekdayRange(), now
-              checks environment vars for proxies
-
-15-Jul megacz PNG.java: fixed 8bpp bug
-
-15-Jul megacz Platform.java, Win32.cc, Win32.java, POSIX.java:
-              getEnv(), engine knows its own build-id
-
-15-Jul megacz POSIX.cc: ignore SIGPIPE in case the browser that
-              launched us closes
-
-15-Jul megacz SpecialBoxProperty.java: redirect property,
-              color/textcolor error message tweak.
-
-15-Jul megacz TinySSL.java: speed improvement on certificate checks
-
-15-Jul megacz XMLRPC.java: workaround for bug in Zope XML-RPC server
-
-15-Jul megacz AWT.java: print out color depth
-
-15-Jul megacz BashTask: print everything on stdout
-
-15-Jul megacz JSObject.java: added JSFunction helper
-
-15-Jul megacz GCJ.xml, Ibex.java, Template.java, Static.java,
-              Resources.java, splash.ibex, lithium.png, Main.java,
-              Box.java: builtin.xwar, loadArchive(), prefetchImage()
-
-18-Jul megacz XMLRPC.java, MessageQueue.java: attempted to improve
-              responsiveness of UI by yielding on network ops if
-              non-thread events are in the queue.
-
-18-Jul megacz Platform.java: never create or permit windows smaller
-              than the scar.
-
-18-Jul megacz Surface.java: improved shift modifier handling,
-              prohibited windows smaller than scar.
-
-18-Jul megacz Ibex.java: added write-only 'proxyAuthorization' field.
-
-18-Jul megacz AWT.java: boosted font size by 2 points on Java12
-
-18-Jul megacz GCJ.xml: builtin.xwar support
-
-18-Jul megacz POSIX.cc: better capslock handling
-
-18-Jul megacz Win32.cc: fixed MINMAXINFO bug
-
-18-Jul megacz Win32.java: changed dialog mapping to MS Sans Serif
-
-18-Jul megacz Platform.java: don't try to getEnv() on Win w/ jdk<1.4
-
-18-Jul megacz HTTP.java: Basic Proxy-Authorization support
-
-19-Jul megacz POSIX.java: font fix
-
-19-Jul megacz TinySSL.java: workaround for a GCJ bug
-
-20-Jul megacz PNG.java: ignore transparency chunk if encountered
-              before palette chunk
-
-25-Jul megacz Box.java: fixed bug related to adding/removing boxes
-
-30-Jul corey  build.xml: patch to make build.xml not depend on <bash/>
-
-06-Aug megacz Context.java: workaround for GCJ bug which causes
-              MessageFormatter to choke on { and }
-
-06-Aug megacz MessageQueue.java: fixed MessageQueueWatcher so that it
-              works even when an infinite loop occurs in a _SizeChange
-              or _PosChange trap.
-
-06-Aug megacz Platform.java: removed WPAD detection, HTTP.Proxy => Proxy.
-
-06-Aug megacz Static.java, Resources.java: fixed ibex.static bug.
-
-06-Aug megacz SpecialBoxProperty.java: thisbox.root now returns null
-              if thisbox is a root box.
-
-06-Aug megacz Surface.java: fixed button 1/3 swapping bug
-
-06-Aug megacz TinySSL.java: option to ignore untrusted certs, fixed GCJ bug
-
-06-Aug megacz AWT.java: removed blitDirtyScreenRegions() due to
-              deadlock, compensated for MacOSX button-swapping bug.
-
-06-Aug megacz Java12.java: disabled focusmanager so we can recieve tab
-              keypresses.
-
-06-Aug megacz Win32.java: HTTP.ProxyInfo => Proxy
-
-06-Aug megacz JSObject.java: constructor now takes sealed argument
-
-06-Aug megacz POSIX.java: font mapper now prefers ISO_8559-1 fonts
-
-06-Aug megacz Box.java: use new HTTP interface, getIds() only returns children
-
-06-Aug megacz Ibex.java: encodeURI, decodeURI, new HTTP stack, calling
-              newBox in the foreground thread is deprecated.
-
-06-Aug megacz XMLRPC.java: new HTTP stack, better verbose output
-
-06-Aug megacz SOAP.java: new HTTP stack
-
-06-Aug megacz HTTP.java: total rewrite: BasicAuth, DigestAuth, KeepAlive, Pipelining.
-
-09-Aug megacz SpecialBoxProperty.java: changed behavior of thisbox.root
-
-09-Aug megacz Win32.java, Win32.cc: hack to avoid strange race condition in Win32 GDI
-
-10-Aug megacz HTML.java, html.ibex: fixed HTML widget to handle unclosed <li> tags
-
-10-Aug megacz TinySSL.java: fixed vulnerability to Mike Benham's attack
-
-16-Aug megacz Box.java: fixed a bug that was causing lockups on Win32...
-
-16-Aug megacz Surface.java, Main.java: don't scar the splash screen
-
-16-Aug megacz AWT.java, Java12.java, Java14.java: fixed jdk1.4 bug
-              with keypresses and frameless windows.
-
-16-Aug megacz Ibex.java, SpecialBoxProperty.java: box.apply()
-
-17-Aug megacz Box.java, SpecialBoxProperty.java, Surface.java: code to
-              prevent engine from quitting when changing the last
-              remaining surface from a frame to a window or vice
-              versa.
-
-17-Aug megacz Vec.java: fixed infinite loop
-
-17-Aug megacz Trap.java: switched allTraps from a Vector to a Hashtable
-
-17-Aug megacz Main.java: initial instantiation now happens in a background thread
-
-17-Aug megacz Template.java: fixed a bug that was keeping retheme() from working
-
-20-Aug megacz Box.java: fixed rounding error
-
-21-Aug megacz PalmOS.java, PalmOS.xml, jump.jar: began work on PalmOS port.
-
-24-Aug megacz HTTP.java, SOAP.java: fixed bug which caused
-              miscalculation of the Content-Length header.
-
-24-Aug megacz POSIX.java: fixed cut/paste bug
-
-02-Sep megacz AWT.java: report corner of window, not corner of decorative frame
-
-02-Sep megacz Surface.java, Main.java: don't quit due to disposal of
-              last surface unless initialization is complete.
-
-03-Sep megacz XWF.java: code to handle .xwf's that don't include the
-              underscore character.
-
-15-Sep megacz Box.java: committed a change that I forgot to commit
-              dealing with box removal.
-
-15-Sep megacz HTTP.java: fixed end-of-header detection
-
-15-Sep megacz Platform.java: disable 2d acceleration on Mac OS X 10.2
-
-15-Sep megacz Template.java: added callback for retheme operation
-
-15-Sep megacz Ibex.java: new retheme() syntax
-
-23-Sep megacz SpecialBoxProperty.java: invisible now returns true if
-              any of the box's ancestors is invisible.
-
-23-Sep megacz SpecialBoxProperty.java, Box.java, Surface.java:
-              expanded dimensions to 32 bits, fixed bug in behavior of
-              hshrink/vshrink, don't deliver events to root first.
-
-23-Sep megacz HTTP.java: never skip(0)
-
-03-Oct megacz ByteStream.java: fixed null pointer problem
-
-03-Oct megacz Proxy.java: fixed bug in shMatchExp()
-
-03-Oct megacz Box.java, SpecialBoxProperty.java: fixed shrink
-              behavior, deliver clicks to box first (not root), id is
-              a readable attribute
-
-03-Oct megacz Ibex.java: made recursivePrintObject public so we can
-              access it.
-
-11-Oct megacz POSIX.cc: fixed a bug that was causing phantom messages
-              after window deletion
-
-11-Oct megacz README, Resources.java, GCJ.xml, jazz/*: upgraded to gcj
-              3.3; eliminated jazzlib; introduced compile hack because
-              3.3 miscompiles Trap.java
-
-15-Oct megacz Resources.java: hackaround for broken libgcj java.util.zip
-
-15-Oct megacz Arguments.java, Trap.java: arguments.trapname
-
-30-Oct megacz SpecialBoxProperty.java: fixed mouse event propagation
-
-05-Feb megacz X11.cc X11.java POSIX.cc POSIX.java Linux.xml: separated
-              POSIX from X11.
-
-06-Feb megacz X11.java: fixed a typo
-
-11-Feb megacz org/bouncycastle/*: upgraded bouncycastle
-
-11-Feb megacz README: updated gcc instructions and patches
-
-11-Feb megacz Log.java: refactored printing code in prep for inline logging
-
-11-Feb megacz X11.java: bugfix for stupid typos
-
-11-Feb megacz Picture.java, DoubleBuffer.java, Win32.java, AWT.java:
-              made Picture and DoubleBuffer abstract classes rather
-              than interfaces
-
-11-Feb megacz Trap.java: changed System.out.println to Log.log
-
-11-Feb megacz TinySSL.java: changed System.out.println to Log.log
-
-11-Feb megacz PNG.java: changed System.out.println to Log.log
-
-11-Feb megacz splash.ibex: added "press Esc to quit" message
-
-11-Feb megacz Resources.java: removed libgcj hack; 3.3 fixed the problem
-
-11-Feb megacz Platform.java: System.out->System.err, POSIX->X11
-
-11-Feb megacz GCJ.xml: added optimizations, linker path
-
-11-Feb megacz POSIX.java: removed extra debugging output
-
-11-Feb megacz POSIX.cc: added required #includes
-
-11-Feb megacz Linux.xml: removed needless -ldl
-
-11-Feb megacz Main.java: System.out->System.err
-
-11-Feb megacz DoubleBuffer.java: added 'abstract' keyword
-
-11-Feb megacz Picture.java: added 'abstract' keyword
-
-15-Feb megacz GCJ.xml, Linux.xml, Win32.xml: fixed linkage bug
-
-25-Feb megacz README: switched build process from ant to make
-
-25-Feb megacz Makefile, README: merged Java12 and Java14 into Java2
-
-25-Feb megacz README, Makefile: added next.build and next-build target
-
-25-Feb megacz Makefile: added new-release target
-
-25-Feb megacz Makefile: added nice -n 19 for new-release builds
-
-25-Feb megacz Makefile: fixed typo
-
-26-Feb megacz Makefile: added dist, nohup-dist targets; removed new-release
-
-27-Feb megacz ant: removed ant script
-
-27-Feb megacz Makefile: corrected spacing of build messages
-
-27-Feb megacz Makefile, Makefile: tweaked make dist
-
-27-Feb =========== build 02B6 ================================================
-27-Feb megacz Makefile: limited cvs emails to 200 lines
-
-
-27-Feb =========== build 02B7 ================================================
-
-27-Feb =========== build 02B8 ================================================
-
-27-Feb =========== build 0272 ================================================
-27-Feb megacz Makefile: simplified host detection
-
-27-Feb megacz Makefile: typo fix
-
-
-27-Feb =========== build 0273 ================================================
-27-Feb megacz Makefile: strip binaries in make dist
-
-
-27-Feb =========== build 0274 ================================================
-27-Feb megacz Makefile: master.dist.ibex.org
-
-27-Feb megacz Makefile, Makefile, Makefile: none
-
-
-27-Feb =========== build 0275 ================================================
-27-Feb megacz Makefile: added neglected shell keyword
-
-01-Mar megacz Makefile: gcj doesn\'t need a target prefix
-
-04-Mar megacz Makefile, Makefile: preliminary Darwin support
-
-10-Mar megacz Makefile: autotag on make dist
-
-10-Mar megacz Makefile: autotag on make dist
-
-10-Mar megacz Makefile: make dist now creates source tarballs
-
-10-Mar megacz Makefile: make dist now creates source tarballs
-
-
-10-Mar =========== build 0700 ================================================
-10-Mar megacz Makefile: fixed Makefile to make source tarballs
-
-10-Mar megacz Makefile: fixed Makefile to make source tarballs
-
-11-Mar megacz Makefile: lithium shouldn't support darwin
-
-11-Mar megacz Makefile: HEAD shouldn't support Darwin yet
-
-11-Mar megacz Makefile: none
-
-12-Mar megacz Makefile: bootclasspath and fastjar auto-detection
-
-12-Mar megacz Makefile: bootclasspath and fastjar auto-detection
-
-13-Mar megacz Makefile: jikes autodetection, jikes optional
-              build, javac fallback
-
-17-Mar megacz Makefile: added propose-patch makefile target
-
-17-Mar megacz Makefile: added propose-patch makefile target
-19-Mar david  README: test
-
-19-Mar david  Makefile: jikes compile on stock os x install
-
-24-Mar megacz Makefile: added Davids jikes patch
-
-24-Mar megacz Makefile: added v option to tar
-
-26-Mar andrew XML.java: applied <!-- .. --> comment counter fix
-              patch (commentcountfix1.diff)
-
-26-Mar megacz Makefile: gosset -> serverbeach
-
-26-Mar megacz Makefile: added Darwin precomp header hack
-
-26-Mar megacz Makefile: added Darwin precomp header hack
-
-26-Mar megacz Makefile: gosset -> serverbeach
-
-26-Mar megacz Makefile: tab bug
-
-26-Mar megacz Makefile: fixed bug for compatability with BSD make
-
-26-Mar megacz Makefile: fixed bug for compatability with BSD make
-
-26-Mar megacz Makefile: removed the fancy single-line build
-              outputs
-
-26-Mar megacz Makefile: removed the fancy single-line build
-              outputs
-
-26-Mar megacz Makefile: Removed -O9; will add later
-
-26-Mar megacz Makefile: tried O2
-
-29-Mar megacz Main.java: ignore argument to -l
-
-29-Mar megacz Makefile: correct use of -m in jar invocation
-
-29-Mar megacz Main.java: ignore argument to -l
-
-29-Mar megacz Makefile: correct use of -m in jar invocation
-
-29-Mar megacz Java2.java: weakened binding of Java14Surface to
-              keep 1.3.x working
-
-29-Mar megacz Java2.java: weakened binding of Java14Surface to
-              keep 1.3.x working
-
-30-Mar megacz Makefile: trying -O0 since we're still getting
-              faults
-
-30-Mar megacz Makefile: harmonized self-contradictory
-              optimization settings
-
-30-Mar megacz Makefile: harmonized self-contradictory
-              optimization settings
-
-31-Mar megacz Makefile: rolled back to gcj 19-Oct-2002
-
-31-Mar megacz Makefile: rolled back to gcj 19-Oct-2002
-
-31-Mar megacz Makefile: trying to fix cvs update
-
-31-Mar megacz Makefile: more attempts at solving the cvs update
-              problem
-
-31-Mar megacz Makefile: fixed gcjh so that it can be found before
-              gcc-linux is built
-
-31-Mar megacz Makefile: fixed gcjh so that it can be found before
-              gcc-linux is built
-
-09-Apr megacz jpegsrc.v6b.tar.gz: added ijg jpeg decoder source
-              tarball
-
-09-Apr megacz HTTP.java: fixed a bug that prevented
-              HTTPInputStream from signalling EOF
-
-09-Apr megacz Makefile: fixed gcc update script
-
-09-Apr megacz Makefile: fixed gcc update script
-
-09-Apr megacz Makefile, jmorecfg.h.patch, Box.java, Platform.java, Resources.java, AWT.java, GCJ.cc, GCJ.java, Win32.cc:
-              added jpeg support
-
-09-Apr megacz Makefile: fixed make dist
-
-09-Apr megacz Makefile: fixed make dist again
-
-
-09-Apr =========== build 0701 ================================================
-09-Apr megacz Makefile: fixed make dist
-
-
-09-Apr =========== build 0702 ================================================
-
-09-Apr =========== build 0703 ================================================
-10-Apr megacz Makefile: fixed linkage problem
-
-
-10-Apr =========== build 0704 ================================================
-
-10-Apr =========== build 0705 ================================================
-10-Apr megacz GCJ.cc: forgot extern C for jpeglib
-
-
-10-Apr =========== build 0706 ================================================
-19-Apr megacz Makefile, README, Main.java, Platform.java, XML.java, GCJ.cc, GCJ.java, Java2.java, POSIX.cc, Win32.cc, X11.cc:
-              finally -- working Darwin support
-
-19-Apr megacz Darwin.cc, Darwin.java, Linux.java: added more plat
-              files
-
-19-Apr megacz Makefile, Makefile, jmorecfg.h.patch, jpegsrc.v6b.tar.gz, Box.java, HTTP.java, Platform.java, Resources.java, AWT.java, GCJ.cc, GCJ.java, Win32.cc, X11.cc:
-              merged in HEAD
-
-19-Apr megacz Makefile, Main.java, Platform.java, Darwin.cc, Darwin.java, GCJ.cc, GCJ.java, Linux.java, POSIX.cc, Win32.cc, X11.cc:
-              merge from Darwin branch
-
-19-Apr megacz gcc.patch: added Brian Alliets gcc patch
-
-19-Apr megacz JS.java, Resources.java: GUT_branch
-
-19-Apr megacz Makefile: added line to apply gcc.patch; updated
-              gcc3.3 to 08-Apr-2003
-
-20-Apr megacz gcc.patch: fixed the patch so it applies properly
-
-22-Apr megacz Lexer.java: added the Lexer for org.ibex.js
-
-24-Apr megacz Makefile, Carbon.cc, Carbon.java: added Carbon
-              skeleton code
-
-24-Apr megacz Carbon.java: bugfix to make it compile
-
-24-Apr megacz Parser.java, Lexer.java: parser
-
-24-Apr david  ByteStream.java, Resources.java, Template.java, XML.java, XMLRPC.java, Vec.java, XML.java, ByteStream.java, Resources.java, Template.java, XML.java, XMLRPC.java, Vec.java, XML.java, ByteStream.java, Resources.java, Template.java, XML.java, XMLRPC.java, Vec.java, XML.java:
-              new xml parser
-
-27-Apr megacz Makefile: fixed host/target detection problem
-
-28-Apr megacz Template.java: removed 150-char line length
-              restriction
-
-28-Apr megacz Template.java: removed 150-char line length
-              restriction
-
-29-Apr david  Box.java: check for a moving redirect target
-
-29-Apr megacz Makefile: updated ibex cvs url
-
-29-Apr david  Parser.java, TokenStream.java: HACKS for
-              'and'/anonymous functions
-
-29-Apr megacz JS.java: New JS interface
-
-29-Apr megacz Vec.java: added push/pop
-
-29-Apr megacz Lexer.java, Parser.java: fixed lots of parser/lexer
-              bugs
-
-29-Apr megacz Box.java: font inheritance
-
-29-Apr megacz Makefile: don't build awt; speeds up gcj builds
-
-01-May megacz Makefile: forgot to disable hashsync on darwin
-
-01-May david  Makefile: fix for non-linux build environments
-
-02-May megacz Lexer.java, Parser.java: parser now parses
-              splash.ibex
-
-02-May megacz JS.java, Parser.java: removed all FIXMES
-
-03-May megacz JS.java, Parser.java: more fixups
-
-03-May megacz COPYING: cleaned up the copyright declarations
-
-03-May megacz README: major cleanup of the README
-
-03-May megacz JS.java, Lexer.java, Parser.java: lexer, parser,
-              and interpreter complete but untested
-
-05-May megacz Makefile: enable-threads=posix on Darwin
-
-06-May megacz Expr.java: added expr
-
-06-May megacz Makefile: upstream: co -> head
-
-07-May megacz Expr.java: typo
-
-07-May david  .cvsignore, .cvsignore, .cvsignore: added cvsignore
-              files
-
-08-May ejones Makefile, Main.java, Platform.java, Carbon.cc, Carbon.java, Win32.java:
-              Native Carbon Port: - Add Carbon implementation - Fix the
-              Makefile to build it correctly - Fix Main and Platform to call a
-              method running on the Platform class when Ibex is running. -
-              Fixed Win32 to block the main thread forever in its running
-              method.
-
-09-May david  Makefile: fixes for upstream references
-
-11-May megacz Vec.java: made Vec final so methods get inlined
-
-11-May megacz Java2.java: removed references to Main.applet,
-              re-enabled dirtying on Java1.4-for-OSX
-
-11-May megacz Expr.java, JS.java, Lexer.java, Parser.java, package.html:
-              more JS code
-
-11-May megacz edit.ibex: updated to David's latest edit widget
-
-11-May megacz scar.png: scar image now lives in org.ibex.builtin
-
-11-May megacz Main.java: removed applet support, moved scar to
-              org.ibex.builtin
-
-11-May megacz edit_lib.ibex: added Davids ibex.standard.lib.edit
-
-11-May megacz Arguments.java, BaseFunction.java, BinaryDigitReader.java, ClassDefinitionException.java, ClassNameHelper.java, ClassOutput.java, Context.java, ContextListener.java, DToA.java, DebuggableEngineImpl.java, DefaultErrorReporter.java, Delegator.java, EcmaError.java, ErrorReporter.java, EvaluatorException.java, FlattenedObject.java, Function.java, FunctionNode.java, FunctionObject.java, IRFactory.java, IdFunction.java, IdFunctionMaster.java, IdScriptable.java, ImporterTopLevel.java, InterpretedFunction.java, InterpretedScript.java, Interpreter.java, InterpreterData.java, InterpreterFrame.java, Invoker.java, JavaMembers.java, JavaScriptException.java, Label.java, LabelTable.java, LazilyLoadedCtor.java, LineBuffer.java, ListenerArray.java, LocalVariable.java, NativeArray.java, NativeBoolean.java, NativeCall.java, NativeDate.java, NativeError.java, NativeFunction.java, NativeGlobal.java, NativeJavaArray.java, NativeJavaClass.java, NativeJavaConstructor.java, NativeJavaMethod.java, NativeJavaObject.java, NativeJavaPackage.java, NativeMath.java, NativeNumber.java, NativeObject.java, NativeScript.java, NativeString.java, NativeWith.java, Node.java, NodeTransformer.java, NotAFunctionException.java, Parser.java, PreorderNodeIterator.java, PropertyException.java, RegExpProxy.java, Script.java, ScriptRuntime.java, Scriptable.java, ScriptableObject.java, SecuritySupport.java, ShallowNodeIterator.java, SourceTextItem.java, SourceTextManager.java, Synchronizer.java, TokenStream.java, UintMap.java, Undefined.java, VariableTable.java, WrapHandler.java, WrappedException.java, Wrapper.java, DebugFrame.java, DebugReader.java, DebuggableEngine.java, DebuggableScript.java, Debugger.java, NativeRegExp.java, NativeRegExpCtor.java, RegExpImpl.java, SubString.java, Box.java, ByteStream.java, HTML.java, HTTP.java, MessageQueue.java, Platform.java, Proxy.java, Resources.java, SOAP.java, SpecialBoxProperty.java, Static.java, Surface.java, Template.java, ThreadMessage.java, Trap.java, XMLRPC.java, Ibex.java, AWT.java, Java12.java, JSObject.java:
-              goodbye org.mozilla.javascript, hello org.ibex.js
-
-11-May megacz msjvm.jar, netscape.jar: removing
-              msjvm.jar/netscape.jar; use reflection instead
-
-26-May megacz Box.java, Resources.java, SpecialBoxProperty.java, Static.java, Ibex.java, JS.java, Parser.java:
-              lots of progress on org.ibex.js
-
-
-26-May =========== build 0707 ================================================
-
-26-May =========== build 0708 ================================================
-02-Jun megacz Ibex.java, Lexer.java, Parser.java: more js
-              improvements
-
-03-Jun megacz JS.java, Lexer.java, Parser.java: nearly finished
-              switching to a bytecode architecture
-
-03-Jun megacz Parser.java: more js improvements
-
-03-Jun megacz Parser.java: almost done moving to bytecode
-
-03-Jun megacz Parser.java: completely switched over to bytecode
-
-
-16-Jun =========== build 0710 ================================================
-
-16-Jun =========== build 0711 ================================================
-
-16-Jun =========== build 0712 ================================================
-
-16-Jun =========== build 0713 ================================================
-
-16-Jun =========== build 0714 ================================================
-
-16-Jun =========== build 0715 ================================================
-
-17-Jun =========== build 0716 ================================================
-
-17-Jun =========== build 0717 ================================================
-
-17-Jun =========== build 0718 ================================================
-
-17-Jun =========== build 0719 ================================================
-
-17-Jun =========== build 071A ================================================
-
-17-Jun =========== build 071B ================================================
-
-17-Jun =========== build 071C ================================================
-
-17-Jun =========== build 071D ================================================
-
-17-Jun =========== build 071E ================================================
-
-17-Jun =========== build 071F ================================================
-
-17-Jun =========== build 0720 ================================================
-
-17-Jun =========== build 0721 ================================================
-
-17-Jun =========== build 0722 ================================================
-
-17-Jun =========== build 0723 ================================================
-
-17-Jun =========== build 0724 ================================================
-
-17-Jun =========== build 0725 ================================================
-
-17-Jun =========== build 0726 ================================================
-
-17-Jun =========== build 0727 ================================================
-
-17-Jun =========== build 0728 ================================================
-
-17-Jun =========== build 0729 ================================================
-
-17-Jun =========== build 072A ================================================
-
-17-Jun =========== build 072B ================================================
-
-17-Jun =========== build 072C ================================================
-
-17-Jun =========== build 072D ================================================
-
-17-Jun =========== build 072E ================================================
-
-17-Jun =========== build 072F ================================================
-
-17-Jun =========== build 0730 ================================================
-
-17-Jun =========== build 0731 ================================================
-
-18-Jun =========== build 0732 ================================================
-
-18-Jun =========== build 0733 ================================================
-
-18-Jun =========== build 0734 ================================================
-
-18-Jun =========== build 0735 ================================================
-
-18-Jun =========== build 0736 ================================================
-
-18-Jun =========== build 0737 ================================================
-
-18-Jun =========== build 0738 ================================================
-
-18-Jun =========== build 0739 ================================================
-
-18-Jun =========== build 073A ================================================
-
-05-Jul =========== build 073B ================================================
-
-05-Jul =========== build 073C ================================================
-
-05-Jul =========== build 073D ================================================
-
-05-Jul =========== build 073E ================================================
-
-05-Jul =========== build 073F ================================================
-
-05-Jul =========== build 0740 ================================================
-
-05-Jul =========== build 0741 ================================================
-
-05-Jul =========== build 0742 ================================================
-
-05-Jul =========== build 0743 ================================================
-
-05-Jul =========== build 0744 ================================================
-
-07-Jul =========== build 0745 ================================================
-
-07-Jul =========== build 0746 ================================================
-
-09-Jul =========== build 0747 ================================================
-
-09-Jul =========== build 0748 ================================================
-
-09-Jul =========== build 0749 ================================================
-
-15-Jul =========== build 074A ================================================
-
-15-Jul =========== build 074B ================================================
-
-15-Jul =========== build 074C ================================================
-
-21-Jul =========== build 074D ================================================
-
-21-Jul =========== build 074E ================================================
-
-27-Jul =========== build 074F ================================================
-
-27-Jul =========== build 0750 ================================================
-
-27-Jul =========== build 0751 ================================================
-
-25-Sep =========== build 07a0 ================================================
-
-25-Sep =========== build 07A1 ================================================
-
-25-Sep =========== build 07A2 ================================================
-
-25-Sep =========== build 07A3 ================================================
-
-25-Sep =========== build 07A4 ================================================
-
-25-Sep =========== build 07A5 ================================================
-
-25-Sep =========== build 07A6 ================================================
-
-26-Sep =========== build 07A7 ================================================
-
-26-Sep =========== build 07A8 ================================================
-
-26-Sep =========== build 07A9 ================================================
-
-26-Sep =========== build 07AA ================================================
-
-26-Sep =========== build 07AB ================================================
-
-26-Sep =========== build 07AC ================================================
-
-27-Sep =========== build 07AD ================================================
-
-27-Sep =========== build 07AE ================================================
-
-27-Sep =========== build 07AF ================================================
-
-27-Sep =========== build 07AE ================================================
-
-27-Sep =========== build 07B0 ================================================
-
-27-Sep =========== build 07B1 ================================================
-
-14-Oct =========== build 07B2 ================================================
-
-14-Oct =========== build 07B3 ================================================
-
-15-Oct =========== build 07B4 ================================================
-
-16-Oct =========== build 07B5 ================================================
-
-16-Oct =========== build 07B6 ================================================
-
-16-Oct =========== build 07B7 ================================================
-
-16-Oct =========== build 07B8 ================================================
-
-16-Oct =========== build 07B9 ================================================
-
-16-Oct =========== build 07BA ================================================
-
-18-Oct =========== build 07BB ================================================
-
-18-Oct =========== build 07BC ================================================
-
-18-Oct =========== build 07BD ================================================
-
-18-Oct =========== build 07BE ================================================
-
-19-Oct =========== build 07BF ================================================
-
-19-Oct =========== build 07C0 ================================================
-
-21-Oct =========== build 07C1 ================================================
-
-21-Oct =========== build 07C2 ================================================
-
-21-Oct =========== build 07C3 ================================================
-
-21-Oct =========== build 07C4 ================================================
-
-27-Oct =========== build 07C5 ================================================
-
-28-Oct =========== build 07C6 ================================================
-
-28-Oct =========== build 07C7 ================================================
-
-28-Oct =========== build 07C8 ================================================
-
-28-Oct =========== build 07C9 ================================================
-
-28-Oct =========== build 07CA ================================================
-
-28-Oct =========== build 07CB ================================================
-
-28-Oct =========== build 07CC ================================================
-
-28-Oct =========== build 07CD ================================================
-
-28-Oct =========== build 07CE ================================================
-
-28-Oct =========== build 07CF ================================================
-
-28-Oct =========== build 07D0 ================================================
-
-28-Oct =========== build 07D0 ================================================
-
-18-Jan =========== build 07D2 ================================================
-n18-Jan =========== build 07D3 ================
-n19-Jan =========== build 07D4 ================
-n19-Jan =========== build 07D5 ================
-n20-Jan =========== build 07D6 ================
-n20-Jan =========== build 07D7 ================
-n20-Jan =========== build 07D8 ================
-n20-Jan =========== build 07D9 ================
-n20-Jan =========== build 07DA ================
-n20-Jan =========== build 07DB ================
-n20-Jan =========== build 07DC ================
diff --git a/upstream/org.ibex.core/COPYING b/upstream/org.ibex.core/COPYING
deleted file mode 100644 (file)
index aaa7d80..0000000
+++ /dev/null
@@ -1,2033 +0,0 @@
-================================================================================
-The contents of this distribution are copyrighted and licensed as follows: 
-================================================================================
-
-   - src/org/ibex/TinySSL.java is Copyright 2002 Adam Megacz, and is
-     licensed under the GNU Library General Public License; you may
-     reuse it in closed source applications under certain conditions;
-     see the LGPL (attached below).
-
-   - src/org/ibex/js/Lexer.java was partially derived from the Rhino
-     JavaScript interpreter; hence is covered by the Netscape Public
-     License.
-
-   - src/org/mozilla/** contains the Rhino JavaScript Interpreter,
-     which is Copyright Netscape Communications Corporation, and is
-     licensed under the Netscape Public License.
-
-   - lib/netscape.jar and lib/signtool are Copyright Netscape
-     Communications Corporation
-   
-   - lib/msjvm.jar, lib/cabarc.exe, lib/signcode.exe, and
-     lib/guidgen.exe are Copyright Microsoft Corporation
-   
-   - lib/javago is a compiled binary copy of the JavaGO global
-     optimizer, written by Konstantin Knizhnik and "is freeware and is
-     distributed without any restrictions on its usage"
-   
-   - src/org/ibex/PNG.java is Copyright (c) 1997, Jason
-     Marshall.  All Rights Reserved. Additional licensing terms are
-     contained in that file.
-
-   - src/org/ibex/GIF.java is Copyright D. J. Hagberg, Jr. Additional
-     licensing terms are contained in that file.
-
-   - the contents of src/org/bouncycastle is Copyright (c) 2000-2002 The
-     Legion Of The Bouncy Castle (http://www.bouncycastle.org); licensing
-     terms are available at http://www.bouncycastle.org/license.html
-
-   - All other files are Copyright 2003 Adam Megacz, all rights
-     reserved, all disclaimable warranties disclaimed.
-   
-     You may redistribute and/or modify the Ibex engine (src/org/ibex/
-     and all subdirectories) under the GNU General Public License
-     ("GPL", included below), version 2 ONLY (not any prior or later
-     versions), subject to the following two clarifications:
-   
-     As a clarification to the General Public License, any data files
-     (.ibex, .gif, .png) loaded into a running copy of the Ibex Engine,
-     are specifically NOT considered "derivitave works" of the engine,
-     so long as they do not contain any code copied from the engine.
-
-   - The Bitstream Vera Font (upstream/vera) is under its own copyright
-
-
-========================================================================
-The GNU General Public License
-
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-
-
-========================================================================
-The GNU Lesser General Public License
-
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
-============================================================================
-The Apache Software License, Version 1.1
-
-/*
- * ============================================================================
- *                   The Apache Software License, Version 1.1
- * ============================================================================
- * 
- *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modifica-
- * tion, are permitted provided that the following conditions are met:
- * 
- * 1. Redistributions of  source code must  retain the above copyright  notice,
- *    this list of conditions and the following disclaimer.
- * 
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 
- * 3. The end-user documentation included with the redistribution, if any, must
- *    include  the following  acknowledgment:  "This product includes  software
- *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
- *    Alternately, this  acknowledgment may  appear in the software itself,  if
- *    and wherever such third-party acknowledgments normally appear.
- * 
- * 4. The names "Ant" and  "Apache Software Foundation"  must not be used to
- *    endorse  or promote  products derived  from this  software without  prior
- *    written permission. For written permission, please contact
- *    apache@apache.org.
- * 
- * 5. Products  derived from this software may not  be called "Apache", nor may
- *    "Apache" appear  in their name,  without prior written permission  of the
- *    Apache Software Foundation.
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
- * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
- * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
- * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * 
- * This software  consists of voluntary contributions made  by many individuals
- * on behalf of the  Apache Software Foundation.  For more  information  on the 
- * Apache Software Foundation, please see <http://www.apache.org/>.
- *
- */
-
-
-
-
-=============================================================================
-The ZLIB License
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute
-it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must
-   not claim that you wrote the original software. If you use this
-   software in a product, an acknowledgment in the product
-   documentation would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and must
-   not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source
-   distribution.
-
-
-
-================================================================================
-The Netscape Public License
-
-
-     AMENDMENTS
-
-     The Netscape Public License Version 1.1 ("NPL") consists of the
-     Mozilla Public License Version 1.1 with the following Amendments,
-     including Exhibit A-Netscape Public License.  Files identified with
-     "Exhibit A-Netscape Public License" are governed by the Netscape
-     Public License Version 1.1.
-
-     Additional Terms applicable to the Netscape Public License.
-          I. Effect.
-          These additional terms described in this Netscape Public
-          License -- Amendments shall apply to the Mozilla Communicator
-          client code and to all Covered Code under this License.
-
-          II. "Netscape's Branded Code" means Covered Code that Netscape
-          distributes and/or permits others to distribute under one or more
-          trademark(s) which are controlled by Netscape but which are not
-          licensed for use under this License.
-
-          III. Netscape and logo.
-          This License does not grant any rights to use the trademarks
-          "Netscape", the "Netscape N and horizon" logo or the "Netscape
-          lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript",
-          "Smart Browsing" even if such marks are included in the Original
-          Code or Modifications.
-
-          IV. Inability to Comply Due to Contractual Obligation.
-          Prior to licensing the Original Code under this License, Netscape
-          has licensed third party code for use in Netscape's Branded Code.
-          To the extent that Netscape is limited contractually from making
-          such third party code available under this License, Netscape may
-          choose to reintegrate such code into Covered Code without being
-          required to distribute such code in Source Code form, even if
-          such code would otherwise be considered "Modifications" under
-          this License.
-
-          V. Use of Modifications and Covered Code by Initial Developer.
-               V.1. In General.
-               The obligations of Section 3 apply to Netscape, except to
-               the extent specified in this Amendment, Section V.2 and V.3.
-
-               V.2. Other Products.
-               Netscape may include Covered Code in products other than the
-               Netscape's Branded Code which are released by Netscape
-               during the two (2) years following the release date of the
-               Original Code, without such additional products becoming
-               subject to the terms of this License, and may license such
-               additional products on different terms from those contained
-               in this License.
-
-               V.3. Alternative Licensing.
-               Netscape may license the Source Code of Netscape's Branded
-               Code, including Modifications incorporated therein, without
-               such Netscape Branded Code becoming subject to the terms of
-               this License, and may license such Netscape Branded Code on
-               different terms from those contained in this License.
-
-          VI. Litigation.
-          Notwithstanding the limitations of Section 11 above, the
-          provisions regarding litigation in Section 11(a), (b) and (c) of
-          the License shall apply to all disputes relating to this License.
-
-     EXHIBIT A-Netscape Public License.
-
-          "The contents of this file are subject to the Netscape Public
-          License Version 1.1 (the "License"); you may not use this file
-          except in compliance with the License. You may obtain a copy of
-          the License at http://www.mozilla.org/NPL/
-
-          Software distributed under the License is distributed on an "AS
-          IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-          implied. See the License for the specific language governing
-          rights and limitations under the License.
-
-          The Original Code is Mozilla Communicator client code, released
-          March 31, 1998.
-
-          The Initial Developer of the Original Code is Netscape
-          Communications Corporation. Portions created by Netscape are
-          Copyright (C) 1998-1999 Netscape Communications Corporation. All
-          Rights Reserved.
-
-          Contributor(s): ______________________________________.
-
-          Alternatively, the contents of this file may be used under the
-          terms of the _____ license (the "[___] License"), in which case
-          the provisions of [______] License are applicable  instead of
-          those above.  If you wish to allow use of your version of this
-          file only under the terms of the [____] License and not to allow
-          others to use your version of this file under the NPL, indicate
-          your decision by deleting  the provisions above and replace  them
-          with the notice and other provisions required by the [___]
-          License.  If you do not delete the provisions above, a recipient
-          may use your version of this file under either the NPL or the
-          [___] License."
-
-     ----------------------------------------------------------------------
-
-                          MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which 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. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, 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 Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-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 Code 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 included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. 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. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE 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 CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER 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 CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR 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.
-
-10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning 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. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
-     ``The contents of this file are subject to the Mozilla Public License
-     Version 1.1 (the "License"); you may not use this file except in
-     compliance with the License. You may obtain a copy of the License at
-     http://www.mozilla.org/MPL/
-
-     Software distributed under the License is distributed on an "AS IS"
-     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
-     License for the specific language governing rights and limitations
-     under the License.
-
-     The Original Code is ______________________________________.
-
-     The Initial Developer of the Original Code is ________________________.
-     Portions created by ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-     Contributor(s): ______________________________________.
-
-     Alternatively, the contents of this file may be used under the terms
-     of the _____ license (the  "[___] License"), in which case the
-     provisions of [______] License are applicable instead of those
-     above.  If you wish to allow use of your version of this file only
-     under the terms of the [____] License and not to allow others to use
-     your version of this file under the MPL, indicate your decision by
-     deleting  the provisions above and replace  them with the notice and
-     other provisions required by the [___] License.  If you do not delete
-     the provisions above, a recipient may use your version of this file
-     under either the MPL or the [___] License."
-
-     [NOTE: The text of this Exhibit A may differ slightly from the text of
-     the notices in the Source Code files of the Original Code. You should
-     use the text of this Exhibit A rather than the text found in the
-     Original Code Source Code for Your Modifications.]
-
-
-
-================================================================================
-The Mozilla Public License
-
-                          MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which 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. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, 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 Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-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 Code 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 included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. 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. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE 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 CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER 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 CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR 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.
-
-10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning 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. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
-     ``The contents of this file are subject to the Mozilla Public License
-     Version 1.1 (the "License"); you may not use this file except in
-     compliance with the License. You may obtain a copy of the License at
-     http://www.mozilla.org/MPL/
-
-     Software distributed under the License is distributed on an "AS IS"
-     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
-     License for the specific language governing rights and limitations
-     under the License.
-
-     The Original Code is ______________________________________.
-
-     The Initial Developer of the Original Code is ________________________.
-     Portions created by ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-     Contributor(s): ______________________________________.
-
-     Alternatively, the contents of this file may be used under the terms
-     of the _____ license (the  "[___] License"), in which case the
-     provisions of [______] License are applicable instead of those
-     above.  If you wish to allow use of your version of this file only
-     under the terms of the [____] License and not to allow others to use
-     your version of this file under the MPL, indicate your decision by
-     deleting  the provisions above and replace  them with the notice and
-     other provisions required by the [___] License.  If you do not delete
-     the provisions above, a recipient may use your version of this file
-     under either the MPL or the [___] License."
-
-     [NOTE: The text of this Exhibit A may differ slightly from the text of
-     the notices in the Source Code files of the Original Code. You should
-     use the text of this Exhibit A rather than the text found in the
-     Original Code Source Code for Your Modifications.]
-
diff --git a/upstream/org.ibex.core/Makefile b/upstream/org.ibex.core/Makefile
deleted file mode 100644 (file)
index 3e248f5..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-############################################################################# 
-#
-# The Ibex Makefile
-#
-
-#  auto directory creation with %/%: %?
-
-ifeq ($(platform),)
-# default
-platform := Java2
-endif
-
-target_Darwin := powerpc-apple-darwin
-target_Win32  := i686-pc-mingw32
-target_Solaris := sparc-sun-solaris2.7
-target_Linux := i686-pc-linux-gnu
-target := $(target_$(platform))
-
-all:         Java2 Linux Win32 Darwin Solaris
-
-clean:      ; rm -rf build
-dist-clean:
-       rm -rf .configure* .install* build .compile .build*
-       find upstream -name config.cache -exec rm -f {} \;
-       test -e upstream/org.ibex.nestedvm && make -C upstream/org.ibex.nestedvm clean
-       rm -f .install_org.ibex.nestedvm
-
-libwing_Linux := -Lupstream/install/i686-pc-linux-gnu/lib/
-libwing_Linux +=   upstream/install/i686-pc-linux-gnu/lib/libWINGs.a
-libwing_Linux +=   upstream/install/i686-pc-linux-gnu/lib/libwraster.a
-
-libwing_Solaris := -Lupstream/install/sparc-sun-solaris2.7/lib/
-libwing_Solaris +=   upstream/install/sparc-sun-solaris2.7/lib/libWINGs.a
-libwing_Solaris +=   upstream/install/sparc-sun-solaris2.7/lib/libwraster.a
-
-Java2:      build/Java2/ibex.jar
-JVM:;       @make Java2
-Linux:    ; @make gcj platform=Linux   link_flags="$(libwing_Linux) -lXpm -lX11 -lXext"
-Solaris:  ; @make gcj platform=Solaris link_flags="$(libwing_Solaris) -lXpm -lX11 -lXext -lpthread"
-Win32:    ; @make gcj platform=Win32   link_flags="-Wl,--subsystem,windows -lcomdlg32"
-Darwin:   ; @make gcj platform=Darwin  link_flags="$(darwin_linker_flags)"
-
-libjava_dir         := $(shell pwd)/upstream/gcc-3.3/build-$(target)/$(target)/libjava
-darwin_libdir       := upstream/install/powerpc-apple-darwin/lib
-darwin_ogl_libdir   := /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries
-
-target_bin_extension_$(platform) := $(shell echo $(platform) | tr A-Z a-z)
-target_bin_extension_Win32       := exe
-target_bin_extension_Java2       := jar
-target_bin_extension             := $(target_bin_extension_$(platform))
-target_bin                       := ibex.$(target_bin_extension)
-
-ifeq ($(platform),Darwin)
-gcc_optimizations  := -O0
-else
-gcc_optimizations  := -Os
-endif
-#gcc_optimizations  := -O9 -ffast-math -fomit-frame-pointer -foptimize-sibling-calls
-#gcc_optimizations  += -finline-functions -funroll-loops -ffunction-sections -fdata-sections
-gcc_flags          := -nostdinc $(gcc_optimizations) -Ibuild/h -Iupstream/jpeg-6b/src -Iupstream/jpeg-6b/build-$(target) -g
-gcc_flags          += -Iupstream/install/lib/gcc-lib/$(target)/3.3/include -Iupstream/install/$(target)/include
-#gcc_flags          += -ffunction-sections -fdata-sections -fno-omit-frame-pointer
-gcj                := CLASSPATH=build/java upstream/install/bin/$(target)-gcj $(gcc_flags)
-ifneq ($(platform),Darwin)
-gcj                += -finhibit-reflection
-endif
-#gcj                += -fassume-compiled -fmerge-all-constants
-#gcj                += -foptimize-static-class-initialization -feliminate-dwarf2-dups -w
-gcjh               := $(shell pwd)/upstream/install/bin/$(shell test -e upstream/install/bin/$(target)-gcjh && echo $(target)-)gcjh
-g++                := upstream/install/bin/$(target)-gcj $(gcc_flags) -Iupstream/install/include -Wno-multichar
-gcc                := upstream/install/bin/$(target)-gcc $(gcc_flags)
-nm                 := upstream/install/$(target)/bin/nm
-jar                := $(shell ((type fastjar &>/dev/null) && echo fastjar) || echo jar)
-ifeq ($(platform),Java2)
-javac   := javac -classpath upstream/bcel-5.1/src/bcel-5.1.jar   -d build/class/ -sourcepath build/java/
-else
-javac   := $(gcj) -fCLASSPATH=upstream/bcel-5.1/src/bcel-5.1.jar -d build/class/          -Ibuild/java -Iupstream/gnu.regexp-1.1.4/src/src -C
-endif
-
-gcj: .install_gcc-3.3_$(target)
-       @make build/$(platform)/$(target_bin) link_flags="$(link_flags)" platform=$(platform)
-
-include Makefile.upstream
-
-# find the superclasses of a platform class
-#superclass_%:
-#      @if [ "$*" = "org.ibex.plat.Darwin" ]; then echo org.ibex.plat.OpenGL; fi
-#      @echo $*
-#      @grep -s extends src/$(subst .,/,$*).java | sed s_.\*extends\ __ | head -n 1 | sed s_\ .\*__ |\
-#              xargs --replace make -s superclass_org.ibex.plat.{}
-
-plat_classes_Platform := org.ibex.plat.Platform
-plat_classes_AWT      := org.ibex.plat.AWT $(plat_classes_Platform)
-plat_classes_Java2    := org.ibex.plat.Java2 org.ibex.plat.JVM $(plat_classes_AWT)
-plat_classes_GCJ      := org.ibex.plat.GCJ $(plat_classes_Platform)
-plat_classes_Win32    := org.ibex.plat.Win32 $(plat_classes_GCJ)
-plat_classes_POSIX    := org.ibex.plat.POSIX $(plat_classes_GCJ)
-plat_classes_X11      := org.ibex.plat.X11 $(plat_classes_POSIX)
-plat_classes_Linux    := org.ibex.plat.Linux $(plat_classes_X11)
-plat_classes_Solaris  := org.ibex.plat.Solaris $(plat_classes_X11)
-plat_classes_Darwin   := org.ibex.plat.Darwin org.ibex.plat.OpenGL $(plat_classes_POSIX)
-
-plat_java_src_sources     := $(patsubst %,build/java/%.java,$(subst .,/,$(plat_classes_$(platform))))
-java_src_sources          := $(shell find src -name '*.java' | grep -v NanoGoat | grep -v Preprocessor | grep -v /plat/)
-java_src_sources          += $(plat_java_src_sources)
-java_sources              := $(patsubst src/%.java,     build/java/%.java, $(java_src_sources))
-
-java_sources              += build/java/org/ibex/nestedvm/util/Seekable.java
-java_sources              += build/java/org/ibex/nestedvm/Registers.java
-java_sources              += build/java/org/ibex/nestedvm/Runtime.java
-java_sources              += build/java/org/ibex/nestedvm/UsermodeConstants.java
-
-java_sources              += build/java/org/ibex/crypto/DER.java
-java_sources              += build/java/org/ibex/crypto/Digest.java
-java_sources              += build/java/org/ibex/crypto/HMAC.java
-java_sources              += build/java/org/ibex/crypto/MD2.java
-java_sources              += build/java/org/ibex/crypto/MD5.java
-java_sources              += build/java/org/ibex/crypto/PKCS1.java
-java_sources              += build/java/org/ibex/crypto/RC4.java
-java_sources              += build/java/org/ibex/crypto/RSA.java
-java_sources              += build/java/org/ibex/crypto/SHA1.java
-java_sources              += build/java/org/ibex/crypto/X509.java
-java_sources              += build/java/org/ibex/crypto/Base64.java
-java_sources              += build/java/org/ibex/net/ssl/RootCerts.java
-java_sources              += build/java/org/ibex/net/SSL.java
-
-java_sources              += build/java/gnu/regexp/CharIndexed.java
-java_sources              += build/java/gnu/regexp/CharIndexedCharArray.java
-java_sources              += build/java/gnu/regexp/CharIndexedInputStream.java
-java_sources              += build/java/gnu/regexp/CharIndexedString.java
-java_sources              += build/java/gnu/regexp/CharIndexedStringBuffer.java
-java_sources              += build/java/gnu/regexp/RE.java
-java_sources              += build/java/gnu/regexp/REException.java
-java_sources              += build/java/gnu/regexp/REFilterInputStream.java
-java_sources              += build/java/gnu/regexp/REMatch.java
-java_sources              += build/java/gnu/regexp/REMatchEnumeration.java
-java_sources              += build/java/gnu/regexp/RESyntax.java
-java_sources              += build/java/gnu/regexp/REToken.java
-java_sources              += build/java/gnu/regexp/RETokenAny.java
-java_sources              += build/java/gnu/regexp/RETokenBackRef.java
-java_sources              += build/java/gnu/regexp/RETokenChar.java
-java_sources              += build/java/gnu/regexp/RETokenEnd.java
-java_sources              += build/java/gnu/regexp/RETokenEndSub.java
-java_sources              += build/java/gnu/regexp/RETokenLookAhead.java
-java_sources              += build/java/gnu/regexp/RETokenWordBoundary.java
-java_sources              += build/java/gnu/regexp/RETokenOneOf.java
-java_sources              += build/java/gnu/regexp/RETokenPOSIX.java
-java_sources              += build/java/gnu/regexp/RETokenRange.java
-java_sources              += build/java/gnu/regexp/RETokenRepeated.java
-java_sources              += build/java/gnu/regexp/RETokenStart.java
-java_sources              += build/java/gnu/regexp/UncheckedRE.java
-java_sources              += build/java/gnu/regexp/CharIndexedReader.java
-java_sources              += build/java/gnu/regexp/REFilterReader.java
-
-java_classes              := $(java_sources:build/java/%.java=build/class/%.class)
-java_classes              += build/class/gnu/regexp/CharUnit.class build/class/gnu/regexp/IntPair.class
-java_classes              += build/class/org/ibex/util/MIPSApps.class
-
-### Java Source Files ##############################################################################
-
-$(java_sources):: .download_org.ibex.crypto .download_org.ibex.nestedvm .download_gnu.regexp-1.1.4
-link_upstream  = build/java/$(1):: $(2)/$(1) $(3); \
-                 @echo -e "\033[1mlinking            .java -> .java:  $$@\033[0m"; \
-                 mkdir -p $$(@D); ln -fs `echo $$(@D)/ | sed 's_[^/]*//*_../_g'`/$$< $$@
-build/cc/%.cc:     src/%.c    ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
-build/res/%:       src/%      ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
-$(call link_upstream,org/ibex/nestedvm/%.java,upstream/org.ibex.nestedvm/src,.download_org.ibex.nestedvm)
-$(call link_upstream,org/ibex/crypto/%.java,upstream/org.ibex.crypto/src,.download_org.ibex.crypto)
-$(call link_upstream,org/ibex/net/ssl/%.java,upstream/org.ibex.crypto/src,.download_org.ibex.crypto)
-$(call link_upstream,org/ibex/net/SSL.java,upstream/org.ibex.crypto/src,.download_org.ibex.crypto)
-$(call link_upstream,gnu/regexp/%.java,upstream/gnu.regexp-1.1.4/src/src)
-build/java/org/ibex/%.java: src/org/ibex/%.java .download_gnu.regexp-1.1.4 build/class/org/ibex/util/Preprocessor.class
-       @echo -e "\033[1mpreprocessing      .java -> .java:  $<\033[0m"
-       mkdir -p `dirname $@`; java -cp build/class:upstream/gnu.regexp-1.1.4/src/src org.ibex.util.Preprocessor < $< > $@
-$(call link_upstream,%.java,src)
-$(call link_upstream,%.cc,src)
-
-
-### Java Class Files ##############################################################################
-
-build/class/org/ibex/util/Preprocessor.class: src/org/ibex/util/Preprocessor.java
-       @mkdir -p build/class/gnu/regexp build/class/org/ibex/util
-       $(javac) $< src/org/ibex/util/Vec.java upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/*.java
-
-compile: .compile
-.compile: $(java_sources)
-       @echo -e "\n\033[1mcompiling          .java -> .class\033[0m"
-       @echo $(java_sources) | tr ' ' '\n' | sed 's_build/java/_    _' | sed 's_/_._g' | sed 's_.java$$__g'
-       @make -s $(java_sources)
-       $(javac) $(java_sources)
-       touch $@
-
-build/class/org/ibex/util/MIPSApps.class: build/mips/mipsapps.mips .install_org.ibex.nestedvm 
-       @mkdir -p build/java/org/ibex/util
-       @echo -e "\n\033[1mtranslating        .mips -> .class:  $<\033[0m"
-       java -cp upstream/org.ibex.nestedvm/build:upstream/org.ibex.nestedvm/upstream/build/bcel-5.1/bcel-5.1.jar \
-               org.xwt.mips.Compiler org.ibex.util.MIPSApps $< -outfile $@
-
-build/Java2/ibex.jar: compile build/res/builtin.jar build/class/org/ibex/util/MIPSApps.class
-       @echo -e "\n\033[1marchiving         .class -> .jar:   build/Java2/ibex.jar\033[0m"
-       mkdir -p build/Java2
-       echo -e "Manifest-Version: 1.0\nMain-Class: org.ibex.core.Main\n" > build/Java2/.manifest
-       cd build/class/org/ibex; ln -sf ../../../res/builtin.jar
-       cd build/class; $(jar) cfm ../Java2/ibex.jar ../Java2/.manifest `find . -name \*.class -or -name \*.jar`
-
-
-### Headers ##################################################################################
-
-java_headers          := $(java_sources:build/java/%.java=build/h/%.h) 
-build/h/%.h: build/class/%.class .compile
-       @echo -e "\n\033[1mextracting        .class -> .h:     $<\033[0m"
-       mkdir -p `dirname $@`
-       ls `echo $< | sed s/.class\$$//`*.class |\
-                sed s_build/class/__ | sed s/.class\$$//g | sed s_/_._g | (cd build/class; xargs $(gcjh) -d ../h --classpath .)
-
-
-### Native Code ##############################################################################
-
-# a hack since we've disabled gcj's awt implementation
-build/$(platform)/org/ibex/plat/Linux.cc.o: .install_WindowMaker-0.80.2_$(target) 
-build/$(platform)/org/ibex/plat/Solaris.cc.o: .install_WindowMaker-0.80.2_$(target) 
-
-nat_libjava_files_ := boehm.o exception.o posix-threads.o posix.o prims.o resolve.o java/net/natInetAddress.o
-nat_libjava_files_ += java/net/natPlainSocketImpl.o java/util/zip/nat*.o gnu/gcj/runtime/natFirstThread.o
-nat_libjava_files_ += gnu/gcj/runtime/natNameFinder.o gnu/gcj/runtime/natStackTrace.o gnu/gcj/runtime/natSharedLibLoader.o
-nat_libjava_files_ += gnu/gcj/runtime/natStringBuffer.o gnu/gcj/runtime/natVMClassLoader.o gnu/gcj/runtime/natFinalizerThread.o
-nat_libjava_files_ += $(shell cd $(libjava_dir) 2>/dev/null; find java/lang -name \*.o -not -name '*[A-Z]*' 2>/dev/null)
-nat_libjava_files_ += $(shell cd $(libjava_dir) 2>/dev/null; find java/lang -name nat\*.o 2>/dev/null)
-nat_libjava_files := $(nat_libjava_files_:%=$(libjava_dir)/%)
-nat_libjava_files += $(libjava_dir)/java/io/natFile.o $(libjava_dir)/java/io/natFileDescriptor.o
-
-build/$(platform)/org/ibex/plat/$(platform).cc.o: src/org/ibex/plat/$(platform).cc src/org/ibex/plat/*.cc .configure_jpeg-6b_$(target)
-       @make $(java_headers)
-       @echo -e "\n\033[1mcompiling            .cc -> .o:     $<\033[0m"
-       mkdir -p `dirname $@`
-       $(g++) -Iupstream/gcc-3.3/build-$(target)/$(target)/libjava -c $< -o $@
-
-
-bcel_jar := upstream/bcel-5.1/src/bcel-5.1.jar
-build/$(platform)/ibex.pruned.jar: .compile $(java_classes) .install_jpeg-6b_$(target) build/$(platform)/builtin.o build/$(platform)/org/ibex/plat/$(platform).cc.o
-       @echo -e "\n\033[1mpruning              .jar -> .jar\033[0m"
-ifneq ($(platform),Darwin)
-       cp upstream/install/share/java/libgcj-3.3.jar build/$(platform)/ibex.jar
-       cd build/class; jar uf ../$(platform)/ibex.jar $(java_classes:build/class/%.class=%*.class)
-       ($(nm) $(nat_libjava_files) build/$(platform)/org/ibex/plat/$(platform).cc.o; echo org.ibex.plat.$(platform).main) |\
-               grep _ZN | c++filt --format java | grep " U " | sed 's_ * U __' | sed 's_(.*__' \
-               | java -cp $(bcel_jar):build/class org.ibex.util.NanoGoat build/$(platform)/ibex.jar | tee nanogoat.log
-       mkdir tmp; cd tmp; fastjar xvf ../build/$(platform)/ibex.jar.pruned; rm gnu/gcj/runtime/FirstThread*; cp ../build/class/org/ibex/plat/GCJ* org/ibex/plat/; cp -r ../build/class/org/ibex/nestedvm/* org/ibex/nestedvm/; mkdir -p $(shell pwd)/build/$(platform)/java/lang; mv java/lang/Class.class $(shell pwd)/build/$(platform)/java/lang; fastjar cvf ../build/$(platform)/ibex.jar.pruned .; cd ..; rm -rf tmp
-       mv build/$(platform)/ibex.jar.pruned $@
-endif
-ifeq ($(platform),Darwin)
-       cd build/class; jar cf ../$(platform)/ibex.pruned.jar \
-                                       org/ibex/plat/Platform*.class \
-                                       $(filter-out org/ibex/util/NanoGoat%,$(java_classes:build/class/%.class=%*.class))
-endif
-
-ifeq ($(platform),Win32)
-filedes := $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFileWin32.cc
-filedes += $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFileDescriptorWin32.cc
-else
-filedes := $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFilePosix.cc
-filedes += $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFileDescriptorPosix.cc
-endif
-
-final_compile := --main=org.ibex.plat.$(platform)
-final_compile += -Dfile.encoding=UTF8                                                     
-final_compile += -DPREFIX=\"\"                                                            
-final_compile += -Lupstream/install/$(target)/lib -Lupstream/install/lib                  
-final_compile += -g -save-temps -w -v
-final_compile += -Iupstream/jpeg-6b/build-$(target)/                                      
-final_compile += -Iupstream/jpeg-6b/src                                                   
-final_compile += -Ibuild/h                                                                
-final_compile += -Iupstream/gcc-3.3/src/gcc 
-final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/    
-final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/include    
-final_compile += -Iupstream/gcc-3.3/src/boehm-gc                                           
-final_compile += -Iupstream/gcc-3.3/src/boehm-gc/include                                       
-final_compile += -Iupstream/gcc-3.3/src/libjava                                           
-final_compile += -Iupstream/gcc-3.3/src/libjava/include                                       
-final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/libjava/    
-final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/libjava/include    
-final_compile += -Ufile 
-final_compile += src/org/ibex/plat/$(platform).cc                                         
-final_compile += upstream/jpeg-6b/build-$(target)/libjpeg.a                               
-final_compile += build/$(platform)/builtin.o                                              
-final_compile += build/$(platform)/ibex.pruned.jar                                        
-ifneq ($(platform),Darwin)
-final_compile += $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a                              
-final_compile += -fno-store-check                                                         
-final_compile += -finhibit-reflection
-final_compile += $(nat_libjava_files_:%.o=$(shell pwd)/upstream/gcc-3.3/src/libjava/%.c*) 
-final_compile += $(filedes)                                                               
-final_compile += build/$(platform)/Class.o                                                
-final_compile += $(libjava_dir)/gnu/gcj/runtime/FirstThread.o                             
-final_compile += -Wl,-O2,--relax,--gc-sections,--noinhibit-exec,--no-whole-archive        
-final_compile += -lz
-else
-final_compile += -Wl,-dylib_file,/usr/lib/libSystem.B.dylib:$(darwin_libdir)/libSystem.B.dylib
-final_compile += -Wl,-dylib_file,/usr/lib/system/libmathCommon.A.dylib:$(darwin_libdir)/libmathCommon.A.dylib
-final_compile += -Wl,-dylib_file,$(darwin_ogl_libdir)/libGL.dylib:$(darwin_libdir)/libGL.dylib
-final_compile += -Wl,-dylib_file,$(darwin_ogl_libdir):$(darwin_libdir)/libGLU.dylib
-final_compile += -lSystem.B -lmathCommon.A -lGL -lGLU
-#final_compile += $(libjava_dir)/.libs/libgcj.a
-#final_compile += $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a
-#final_compile += -lgcc
-#final_compile += -lm
-#final_compile += -lpthread
-#final_compile += -lgcc
-#final_compile += -lcrt1.o
-#final_compile += -lcrt2.o
-#final_compile += -lSystem
-endif
-
-
-ifneq ($(target_bin_extension),jar)
-build/$(platform)/$(target_bin): build/$(platform)/ibex.pruned.jar src/org/ibex/plat/*.cc build/$(platform)/builtin.o $(java_headers)
-
-       @echo -e "\n\033[1mlinking              .jar -> $(target_bin).phat\033[0m"
-ifneq ($(platform),Darwin)
-# -Os
-       cd build/$(platform); $(shell pwd)/upstream/install/bin/$(target)-gcj        \
-               -fCLASSPATH=$(shell pwd)/upstream/install/share/java/libgcj-3.3.jar  \
-               -finhibit-reflection                                                 \
-               -fno-store-check                                                     \
-               -c java/lang/Class.class
-       cd upstream/gcc-3.3/src/libjava/java/lang;\
-               ln -sf ../../../../build-$(target)/$(target)/libjava/java/lang/natConcreteProcess.cc
-endif
-# we need -fno-store-check since we can't dynamically resolve references to array classes
-       PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj $(final_compile) -o $@.phat
-
-ifneq ($(platform),Darwin)
-       @echo; ls -l $@.phat
-
-       @echo -e "\n\033[1mstripping              $(target_bin).phat -> $(target_bin)\033[0m"
-       strip $@.phat -o $@
-       @echo; ls -l $@.phat
-
-       @echo -e "\n\033[1mcompressing              $(target_bin) -> $(target_bin)\033[0m"
-       upx-ucl-beta $@
-       @echo; ls -l $@.phat
-else
-       mv $@.phat $@
-endif
-endif
-
-### Builtin Resources ##############################################################################
-
-builtin_src := $(shell find src/org/ibex/core/builtin -name '*.*' \! -name '*.xcf')
-build/res/fonts/vera: .download_vera-1.10
-       mkdir -p build/res/fonts/vera
-       cd build/res/fonts/vera; ln -fs ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/Vera.ttf
-       cd build/res/fonts/vera; ln -fs ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraMono.ttf
-       cd build/res/fonts/vera; ln -fs ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraSe.ttf
-build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/fonts/vera
-       @echo -e "\n\033[1mzipping            res/* -> .jar: builtin.jar\033[0m"
-       cd build/res; $(jar) cf builtin.jar org/ibex/core/builtin/scar.png fonts
-build/$(platform)/builtin.o: build/res/builtin.jar
-       @echo -e "\n\033[1mwrapping            .jar -> .o: resources.o\033[0m"
-       @mkdir -p $(@D)
-       @(echo "unsigned int builtin_length = ";                                \
-               (wc -c build/res/builtin.jar | sed "s_build.*__");              \
-               echo \;;                                                        \
-               echo "unsigned char builtin_bytes[] = {";                       \
-               hexdump -ve '"0x" 1/1 "%x,\n"' build/res/builtin.jar;           \
-               echo "};") > .builtin.c
-       $(gcc) -c .builtin.c -o build/$(platform)/builtin.o
-
-build/mips/%.c.o: src/%.c .download_libmspack-20030726 .install_org.ibex.nestedvm
-       make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf
-       make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf
-       mkdir -p $(@D)
-       echo -e "\n\033[1mcompiling $< -> $@ (mips)\033[0m"
-       upstream/install/bin/mips-unknown-elf-gcc -march=r3000 \
-               -Iupstream/freetype-2.1.4/src/include  \
-               -Iupstream/libmspack-20030726/src/mspack \
-               -c -o $@ $<
-
-build/mips/mipsapps.mips: build/mips/org/ibex/graphics/Freetype.c.o build/mips/org/ibex/util/MSPack.c.o
-       make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf
-       make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf
-       @echo -e "\n\033[1mlinking               .o -> .mips:  $@\033[0m"
-       mkdir -p build/mips build/res
-       upstream/install/bin/mips-unknown-elf-gcc \
-               --static \
-               -march=mips1 \
-               -T upstream/org.ibex.nestedvm/src/org/ibex/nestedvm/linker.ld \
-               -L upstream/org.ibex.nestedvm/build/org/ibex/nestedvm/ \
-               -L upstream/freetype-2.1.4/src/objs \
-               -L upstream/libmspack-20030726/build-mips-unknown-elf/ \
-               -o $@ \
-               $^ \
-               -lfreetype \
-               -lmspack   \
-               -Wl,--gc-sections
-
-
-### Maintainer ######################################################################################
-
-current_build         := $(shell cat next.build)
-strip_$(platform)     := upstream/install/$(target)/bin/strip build/$(platform)/$(target_bin) -o 
-strip_Java2             := cp build/$(platform)/$(target_bin)
-install-dist:;     $(strip_$(platform)) /var/www/org/xwt/dist/master/ibex-$(current_build).$(target_bin_extension).unsigned
-dist: compile
-       (echo -n 0000; (echo "10k16o16i"; cat next.build | tr a-z A-Z; echo "1+f") | dc) | tail --bytes=5 > next.build-
-       mv next.build- next.build
-       echo -n "Next build will be "; cat next.build
-       nice -n 19 make all
-       make install-dist platform=Win32
-       make install-dist platform=Linux
-       make install-dist platform=Solaris
-       make install-dist platform=Darwin
-       make install-dist platform=Java2
-       echo -e "\n\n\n*** DONE ******************************************"
-
-propose-patch:
-       @darcs send --edit-description -o .darcspatch -T patches@xwt.org http://core.ibex.org/
-       @(echo "To: patches@xwt.org";\
-        SUB=`grep -A10000 New.patches .darcspatch | grep '^\\[' | cut -b 2- | tr \\\n , | sed s_,_,\ _g | sed "s_, *\\$$__"`;\
-        echo "Subject: $$SUB";\
-        echo;\
-        cat .darcspatch) | /usr/sbin/sendmail -bm -f $(USER)@xwt.org patches@xwt.org;
-       @rm .darcspatch 
-
-commit: propose-patch
-       darcs push xwt@xwt.org:/var/www/org/ibex/core/
-
-upstream/org.ibex.doc/src/org/ibex/doc/Doc.java: .download_org.ibex.doc
-build/class/org/ibex/doc/Doc.class: upstream/org.ibex.doc/src/org/ibex/doc/Doc.java
-       $(javac) upstream/org.ibex.doc/src/org/ibex/doc/Doc.java
-doc/%.pdf: build/class/org/ibex/util/XML.class build/class/org/ibex/doc/Doc.class
-       cd doc/$*; java -cp ../../build/class org.ibex.doc.Doc < $*.xml > $*.tex
-       cd doc/$*; pdflatex $*.tex
-       mv doc/$*/$*.pdf doc/$*.pdf
-       test `uname` == Darwin && open doc/$*.pdf
-reference: ; rm -f doc/reference.pdf; make doc/reference.pdf
\ No newline at end of file
diff --git a/upstream/org.ibex.core/Makefile.upstream b/upstream/org.ibex.core/Makefile.upstream
deleted file mode 100644 (file)
index 0749813..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-############################################################################# 
-#
-# The Ibex upstream code Makefile
-#
-
-# deal with Apple's brokenness
-setcc := $(shell test `uname` = Darwin && echo "CC=\"/usr/bin/gcc3 -no-cpp-precomp\"")
-
-# where to get stuff
-url_binutils-2.13.2.1  := ftp://ftp.gnu.org/gnu/binutils/binutils-2.13.2.1.tar.gz 
-url_w32api-2.3         := http://unc.dl.sourceforge.net/sourceforge/mingw/w32api-2.3.tar.gz
-url_mingw-runtime-3.0  := http://unc.dl.sourceforge.net/sourceforge/mingw/mingw-runtime-3.0.tar.gz
-url_freetype-2.1.4     := http://unc.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.4.tar.gz
-url_gcc-3.3            := http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-3.3/gcc-3.3.tar.gz 
-url_jpeg-6b            := http://www.ijg.org/files/jpegsrc.v6b.tar.gz
-url_libmspack-20030726 := http://www.kyz.uklinux.net/downloads/libmspack-20030726.tar.gz
-url_vera-1.10          := http://fgo-temp.acc.umu.se/pub/GNOME/sources/ttf-bitstream-vera/1.10/ttf-bitstream-vera-1.10.tar.gz
-url_WindowMaker-0.80.2 := http://windowmaker.org/pub/source/release/WindowMaker-0.80.2.tar.gz
-url_bcel-5.1           := http://www.apache.org/dist/jakarta/bcel/binaries/bcel-5.1.tar.gz
-url_gnu.regexp-1.1.4   := ftp://ftp.tralfamadore.com/pub/java/gnu.regexp-1.1.4.tar.gz
-
-.install_binutils-2.13.2.1_powerpc-apple-darwin: .vendor
-       rm -rf upstream/darwin-linker/src
-       cd upstream/darwin-linker; tar xvzf ../install/powerpc-apple-darwin/cctools-478.tgz
-ifneq ($(shell uname),Darwin)
-       cd upstream/darwin-linker/src/cctools; for A in ../../patches/*.patch; do patch -p0 < $$A; done
-       cp upstream/darwin-linker/src/cctools/ld/fake-mach.c upstream/darwin-linker/src/cctools/libstuff
-       cd upstream/darwin-linker/src/; mkdir macosx-include; cd macosx-include; chmod +x ../../links.sh; ../../links.sh
-endif
-       make -C upstream/darwin-linker/src/cctools/libstuff
-       make -C upstream/darwin-linker/src/cctools/misc
-       touch upstream/darwin-linker/src/cctools/misc/makeUser.c upstream/darwin-linker/src/cctools/misc/make.h
-       make -C upstream/darwin-linker/src/cctools/misc libtool.NEW
-       make -C upstream/darwin-linker/src/cctools/ld; true
-       make -C upstream/darwin-linker/src/cctools/as
-       make -C upstream/darwin-linker/src/cctools/ar
-       mkdir -p upstream/install/powerpc-apple-darwin/bin
-       cp upstream/darwin-linker/src/cctools/ld/ld_dir/ld.NEW upstream/install/powerpc-apple-darwin/bin/ld.NEW
-       echo -e "#!/bin/sh\n"`pwd`"/upstream/install/powerpc-apple-darwin/bin/ld.NEW -dylib_file /usr/lib/system/libmathCommon.A.dylib:"`pwd`"/upstream/install/powerpc-apple-darwin/lib/libmathCommon.A.dylib -L"`pwd`"/upstream/install/powerpc-apple-darwin/lib \$$@\n" > upstream/install/powerpc-apple-darwin/bin/ld
-       chmod +x upstream/install/powerpc-apple-darwin/bin/ld
-       echo -e "#!/bin/sh\n"`pwd`"/upstream/install/powerpc-apple-darwin/bin/apple-libtool \$$1 -o \$$1\n" > upstream/install/powerpc-apple-darwin/bin/ranlib
-       chmod +x upstream/install/powerpc-apple-darwin/bin/ranlib
-       cp upstream/darwin-linker/src/cctools/misc/libtool.NEW upstream/install/powerpc-apple-darwin/bin/apple-libtool
-       cp upstream/darwin-linker/src/cctools/misc/strip.NEW upstream/install/powerpc-apple-darwin/bin/strip
-       cp upstream/darwin-linker/src/cctools/as/appc_dir/as upstream/install/powerpc-apple-darwin/bin/as
-       cp upstream/darwin-linker/src/cctools/ar/ar.NEW upstream/install/powerpc-apple-darwin/bin/ar.NEW
-       echo -e "#!/bin/sh\n"`pwd`"/upstream/install/powerpc-apple-darwin/bin/ar.NEW \$$@\n"`pwd`"/upstream/install/powerpc-apple-darwin/bin/ranlib \$$2\n" > upstream/install/powerpc-apple-darwin/bin/ar
-       chmod +x upstream/install/powerpc-apple-darwin/bin/ar
-       mkdir -p upstream/install/bin
-       cd upstream/install/bin; ln -sf ../powerpc-apple-darwin/bin/ld powerpc-apple-darwin-ld
-       cd upstream/install/bin; ln -sf ../powerpc-apple-darwin/bin/as powerpc-apple-darwin-as
-       cd upstream/install/bin; ln -sf ../powerpc-apple-darwin/bin/ar powerpc-apple-darwin-ar
-       cd upstream/install/bin; ln -sf ../powerpc-apple-darwin/bin/ranlib powerpc-apple-darwin-ranlib
-       cd upstream/install/bin; ln -sf ../powerpc-apple-darwin/bin/strip powerpc-apple-darwin-strip
-       echo -e "#!/bin/sh\nc++filt \$$@\n" > upstream/install/bin/c++filt3; chmod +x upstream/install/bin/c++filt3
-       cd upstream/install/powerpc-apple-darwin/bin; ln -sf ../../bin/c++filt3
-       touch $@
-
-
-# how to configure it
-ifneq ($(shell uname),$(platform))
-configure_gcc-3.3                       += --with-headers=$(shell pwd)/upstream/install/$(target)/include
-endif
-configure_gcc-3.3                       += --enable-languages=c,c++,java --enable-gc-type=boehm --disable-jvmpi --without-libffi
-configure_gcc-3.3                       += --with-ld=$(shell pwd)/upstream/install/bin/$(target)-ld
-configure_gcc-3.3                       += --with-as=$(shell pwd)/upstream/install/bin/$(target)-as
-ifneq ($(platform),Darwin)
-configure_gcc-3.3                       += --with-gnu-ld --with-gnu-as
-endif
-configure_gcc-3.3                       += --disable-java-awt --disable-interpreter --enable-libgcj
-configure_gcc-3.3                       += --disable-shared --enable-static --disable-jni
-configure_binutils-2.13.2.1             += --disable-shared --enable-static
-configure_gcc-3.3_powerpc-apple-darwin  += --enable-threads=posix --disable-hash-synchronization --disable-multilib
-configure_gcc-3.3_i686-pc-mingw32       += --enable-threads=win32 --enable-hash-synchronization
-configure_gcc-3.3_i686-pc-linux-gnu     += --enable-threads=posix --enable-hash-synchronization
-configure_gcc-3.3_sparc-sun-solaris2.7  += --enable-threads=posix --disable-hash-synchronization --disable-multilib
-
-configure_WindowMaker-0.80.2_$(target)  += --prefix=$(shell pwd)/upstream/install/$(target)
-configure_WindowMaker-0.80.2_$(target)  += --host=i686-pc-linux-gnu --x-libraries=$(shell pwd)/upstream/install/$(target)/lib
-
-#environment_gcc-3.3_i686-pc-linux-gnu   += CFLAGS="-Wl,-ldl"
-
-# libjpeg's configury doesn't obey --target
-environment_jpeg-6b_$(target)           += PATH=$(shell pwd)/upstream/install/$(target)/bin:$$PATH
-environment_jpeg-6b_$(target)           += CC=$(shell pwd)/upstream/install/bin/$(target)-gcc
-environment_jpeg-6b_$(target)           += CFLAGS="-Os -ffunction-sections -fdata-sections -I ."
-environment_jpeg-6b_$(target)           += AR="$(shell pwd)/upstream/install/$(target)/bin/ar rc"
-environment_jpeg-6b_$(target)           += AR2=$(shell pwd)/upstream/install/$(target)/bin/ranlib
-
-# libmspack configury doesn't obey --target
-environment_libmspack-20030726_$(target) += PATH=$(shell pwd)/upstream/install/$(target)/bin:$$PATH
-environment_libmspack-20030726_$(target) += CC=$(shell pwd)/upstream/install/bin/$(target)-gcc
-environment_libmspack-20030726_$(target) += AR="$(shell pwd)/upstream/install/$(target)/bin/ar"
-environment_libmspack-20030726_$(target) += AR2=$(shell pwd)/upstream/install/$(target)/bin/ranlib
-environment_libmspack-20030726_$(target) += OPTIM="-ffunction-sections -fdata-sections -O3"
-
-# WindowMaker configury doesn't obey --target
-environment_WindowMaker-0.80.2_$(target) += PATH=$(shell pwd)/upstream/install/$(target)/bin:$$PATH
-environment_WindowMaker-0.80.2_$(target) += CC=$(shell pwd)/upstream/install/bin/$(target)-gcc
-environment_WindowMaker-0.80.2_$(target) += AR="$(shell pwd)/upstream/install/$(target)/bin/ar"
-environment_WindowMaker-0.80.2_$(target) += AR2=$(shell pwd)/upstream/install/$(target)/bin/ranlib
-environment_WindowMaker-0.80.2_$(target) += LDFLAGS="-lXext -ldl"
-make_install_WindowMaker-0.80.2_$(target) := -C WINGs install; make -C wrlib
-make_WindowMaker-0.80.2_$(target) := WINGs
-
-environment_gcc_3.3_$(target)           += PATH=$(shell pwd)/upstream/install/bin:$$PATH
-
-.PRECIOUS: .vendor .download_% .configure_%_$(target) .install_%_$(target)
-
-.download_org.ibex.%:
-       @echo -e "\033[1mfetching repository                 org.ibex.$*\033[0m"
-       @mkdir -p upstream; cd upstream; rm -rf org.ibex.$*; rm -rf org.ibex.$*_*
-       @cd upstream; darcs get --verbose --partial --repo-name=org.ibex.$* http://$*.ibex.org
-       @touch $@
-
-.build_org.ibex.nestedvm: .vendor .download_org.ibex.nestedvm
-       cd upstream/org.ibex.nestedvm; make usr=$(shell pwd)/upstream/install all env.sh
-       touch $@
-
-.install_org.ibex.nestedvm: .build_org.ibex.nestedvm
-       touch $@
-
-# vendor-supplied binaries and headers; this is stuff that comes with various OSes
-vendor: .vendor; @true
-.vendor:
-       @echo -e "\n\033[1mdownloading vendor-supplied headers and libraries...\033[0m"
-       mkdir -p upstream/install
-       curl http://www.megacz.com/vendor.tgz | tar xzf - -C upstream/install
-       mkdir -p upstream/install/i686-pc-mingw32
-       curl $(url_w32api-2.3) | tar xzf - -C upstream/install/i686-pc-mingw32
-       curl $(url_mingw-runtime-3.0) | tar xzf - -C upstream/install/i686-pc-mingw32
-ifeq ($(shell uname),Linux)
-       cd upstream/install/i686-pc-linux-gnu/include; rm -rf *; ln -sf /usr/include/* .
-endif
-       touch .vendor
-
-.download_gcc-3.3_powerpc-apple-darwin:
-       @echo -e "\n\033[1mdownloading $*...\033[0m"
-       mkdir -p upstream/gcc-3.3
-       curl $(url_gcc-3.3) | tar xzf - -C upstream/gcc-3.3
-       mv upstream/gcc-3.3/gcc-3.3 upstream/gcc-3.3/src-darwin; true
-       mv upstream/gcc-3.3/libmspack upstream/gcc-3.3/src-darwin; true
-       (cd upstream/gcc-3.3/src-darwin && for A in ../patches/[a-y]*.patch; do patch -p0 -l < $$A; done); true
-       (cd upstream/gcc-3.3/src-darwin && for A in ../patches-darwin/*.patch; do patch -p0 -l < $$A; done); true
-       touch $@
-
-.download_%:
-       @echo -e "\n\033[1mdownloading $*...\033[0m"
-       mkdir -p upstream/$*
-       curl $(url_$*) | tar xzf - -C upstream/$*
-       mv upstream/$*/$* upstream/$*/src; true
-       mv upstream/$*/libmspack upstream/$*/src; true
-       (test -e upstream/$*/patches && cd upstream/$*/src && for A in ../patches/*.patch; do patch -p0 -l < $$A; done); true
-       touch $@
-
-.configure_gcc-3.3_powerpc-apple-darwin: .download_gcc-3.3_powerpc-apple-darwin .install_binutils-2.13.2.1_powerpc-apple-darwin
-       @echo -e "\n\033[1mconfiguring gcc...\033[0m"
-       mkdir -p upstream/gcc-3.3/build-$(target)
-       cd upstream/gcc-3.3/build-$(target); \
-               $(setcc) $(environment_gcc-3.3_$(target)) ../src-darwin/configure \
-               --target=$(target) \
-               --prefix=`cd ../..; pwd`/install \
-               $(configure_gcc-3.3) \
-               $(configure_gcc-3.3_$(target))
-       touch $@
-
-.configure_gcc-3.3_$(target): .install_binutils-2.13.2.1_$(target)
-
-.configure_%_$(target): .vendor .download_%
-       @echo -e "\n\033[1mconfiguring $*...\033[0m"
-       mkdir -p upstream/$*/build-$(target)
-       cd upstream/$*/build-$(target); \
-               $(setcc) $(environment_$*_$(target)) ../src/configure \
-               --target=$(target) \
-               --prefix=`cd ../..; pwd`/install \
-               $(configure_$*) \
-               $(configure_$*_$(target))
-       touch $@
-
-.configure_libmspack-20030726_$(target): .download_libmspack-20030726 .install_gcc-3.3_$(target)
-       mkdir -p upstream/libmspack-20030726/build-$(target)
-       cd upstream/libmspack-20030726/build-$(target); ln -sf ../src/mspack/* .
-       touch $@
-
-.install_freetype-2.1.4_mips-unknown-elf: .install_org.ibex.nestedvm .download_freetype-2.1.4
-       cd upstream/freetype-2.1.4/src; \
-          make setup ansi; \
-          PATH=$$PATH:`pwd`/../../install/bin make \
-             CC=mips-unknown-elf-gcc \
-             AR=mips-unknown-elf-ar \
-             CFLAGS="-c -ffunction-sections -fdata-sections -O3"
-       upstream/install/bin/mips-unknown-elf-ranlib upstream/freetype-2.1.4/src/objs/libfreetype.a
-       touch $@
-
-.build_%_$(target): .configure_%_$(target)
-       @echo -e "\n\033[1mbuilding $*...\033[0m"
-       cd upstream/$*/build-$(target); \
-               $(setcc) PATH=$$PATH:`pwd`/../../install/bin \
-               $(environment_$*_$(target)) \
-               make $(make_$*_$(target)) $(setcc) $(environment_$*_$(target))
-       touch $@
-
-.install_libmspack-20030726_$(target): .build_libmspack-20030726_$(target); true
-
-.install_gcc-3.3_mips-unknown-elf: .install_org.ibex.nestedvm
-       touch $@
-
-.install_%_$(target): .build_%_$(target)
-       @echo -e "\n\033[1minstalling $*...\033[0m"
-       cd upstream/$*/build-$(target); \
-               $(setcc) PATH=$$PATH:`pwd`/../../install/bin \
-               $(environment_$*_$(target)) \
-               make $(make_install_$*_$(target)) install $(setcc) $(environment_$*_$(target))
-       touch $@
-
-
-
diff --git a/upstream/org.ibex.core/README b/upstream/org.ibex.core/README
deleted file mode 100644 (file)
index 095be99..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-==============================================================================
-Ibex README 
-
-Test
-              
-______________________________________________________________________________
-Documentation
-
-If you're new to Ibex, you should read the documentation in the order
-presented below:
-
-- README [this file]
-        
-      Start here. Includes a map of all other documentation and a
-      description of the directory strucure
-
-- The Ibex home page [http://www.ibex.org/]       
-          
-- The Ibex tutorials [http://www.ibex.org/tutorials.html]
-
-      Gentle introduction to what Ibex is, and how to write
-      .ibex's. Good for anybody who wants to write Ibex applications.
-
-- The Ibex reference [http://www.ibex.org/reference.html]
-        
-      Precise, technical spec of exactly how Ibex works. Assumes
-      familiarity with Ibex (ie, you've read the tutorial). This is the
-      authoritative source for how an Ibex engine should
-      behave.
-
-
-______________________________________________________________________________
-Directory Structure
-
-/       
-   AUTHORS                  - people involved in developing Ibex   
-   README                   - this file
-   COPYING                  - copyright information for all files in this distro
-   CHANGES                  - the changelot
-   TM                       - trademark information for Ibex       
-   Makefile                 - build file for gcc 3.3
-   next.build               - the build id of the next build to be generated
-
-   build/                   - anything generated by the build process winds up here
-         h/                 - header files generated by gcjh
-         java/              - auto-generated .java source files
-         class/             - java .class files
-         xwar/              - generated xwars (mainly builtin.xwar)
-         mips/              - mips binaries (interpreted on all platforms)
-         JVM/               - java Jar archives
-         Linux/             - Linux binaries
-         Win32/             - Win32 binaries
-         Darwin/            - Darwin binaries
-         Solaris/           - Solaris binaries
-
-   Makefile.upstream        - build/download/install instructions for upstream packages
-   upstream/                - download, build, and install area for upstream packages
-            install/        - this is the --prefix for all configure invocations
-            gcc-3.3/        - build/download area for gcc
-            jpeg-6b/        - build/download area for libjpeg
-            freetype-2.1.4/ - build/download area for freetype
-            newlib-1.11.0/  - build/download area for newlib
-            darwin-linker/  - build/download area for a hacked version of Apple's binutils
-
-   lib/                     - any third-party binary stuff needed during the build process
-       javago               - a copy of the javago post-compilation bytecode inliner
-       jump.jar             - the jump2 bytecode-to-palmos translator
-       libgcj-minimal.jar   - a tiny portion of libgcj.jar; allows java->bytecode compilation without gcj
-
-   src/                     - all java source files and ibex sources go here
-       edu/stanford/ejalbr  - source code for BrowserLauncher
-       gnu/regexp/          - source code for the GNU regexp library for Java
-       org/
-           bouncycastle/    - the BouncyCastle Crypto Library
-           ibex/
-               translators/ - .ibex's and .png's that are essential to bootstrapping the engine
-               plat/        - platform-specific code
-               util/        - misc utilities
-               js/          - the Ibex JavaScript Interpreter
-               mips/        - the Ibex MIPS interpreter/recompiler
-               builtin/     - content for the core builtin resource
-
-
-______________________________________________________________________________
-Build Requirements
-
-There are pre-built, digitally signed binaries on http://dist.ibex.org/
-for every supported platform.  Please consider using those unless
-you're absolutely certain you need to go through the trouble of trying
-to get Ibex to build.
-
-Requirements:
-    - jdk 1.3+
-    - the standard set of POSIX utilities (wc, grep, find, make, etc)
-
-Build Targets:
-    - compile: compiles all .java files into build/class/
-    - JVM:     Any true Java JVM (ie not GCJ)
-    - Win32:   Win95 OSR2 or later
-    - Linux:   Linux 2.2 or later
-    - Darwin:  Any Darwin-based OS (Mac OS X, OpenDarwin)
-    - Solaris: Solaris 2.7+
-    - clean:   always run this after doing a 'cvs update'
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/core/Box.java b/upstream/org.ibex.core/build/java/org/ibex/core/Box.java
deleted file mode 100644 (file)
index 2d12964..0000000
+++ /dev/null
@@ -1,943 +0,0 @@
-// FIXME
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.core;
-
-// FIXME: are traps on x/y meaningful?
-// FIXME: if we trap on cols, then set rows to 0 (forcing cols to 1), does the cols trap get triggered?
-// FIXME: if we change min{width/height}, thereby forcing a change to max{min/height}, does a trap on those get triggered?
-// FIXME: trap on numchildren?  replaces ChildChanged?
-// FIXME: trap on visible, trigger when parent visibility changes
-
-// FIXME: ax/ay nonsense
-// FIXME: mouse move/release still needs to propagate to boxen in which the mouse was pressed and is still held down
-
-// FEATURE: mark to reflow starting with a certain child
-// FEATURE: reintroduce surface.abort
-
-import java.util.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.graphics.*;
-
-/**
- *  <p>
- *  Encapsulates the data for a single Ibex box as well as all layout
- *  rendering logic.
- *  </p>
- *
- *  <p>The rendering process consists of four phases; each requires
- *     one DFS pass over the tree</p>
- *  <ol><li> <b>pack()</b>: each box sets its childrens' row/col
- *  <ol><li> <b>constrain()</b>: contentwidth is computed
- *      <li> <b>resize()</b>: width/height and x/y positions are set
- *      <li> <b>render()</b>: children draw their content onto the PixelBuffer.
- *  </ol>
- *
- *  The first three passes together are called the <i>reflow</i>
- *  phase.  Reflowing is done in a seperate pass since SizeChanges
- *  trigger a Surface.abort; if rendering were done in the same pass,
- *  rendering work done prior to the Surface.abort would be wasted.
- */
-public final class Box extends JSScope implements Task {
-
-    // Macros //////////////////////////////////////////////////////////////////////
-
-    final void REPLACE() { for(Box b2 = this; b2 != null && !b2.test(REPLACE); b2 = b2.parent) b2.set(REPLACE); }
-    final void RECONSTRAIN() { for(Box b2 = this; b2 != null && !b2.test(RECONSTRAIN); b2 = b2.parent) b2.set(RECONSTRAIN); }
-    final void REPACK() { for(Box b2 = this; b2 != null && !b2.test(REPACK); b2 = b2.parent) b2.set(REPACK); }
-
-
-
-
-
-
-
-    public Box() { super(null); }
-
-    // FIXME memory leak
-    static Hash boxToCursor = new Hash(500, 3);
-
-    static final Font DEFAULT_FONT = Font.getFont((Stream)Main.builtin.get("fonts/vera/Vera.ttf"), 10);
-
-
-    // Flags //////////////////////////////////////////////////////////////////////
-
-    static final int MOUSEINSIDE  = 0x00000001;
-    static final int VISIBLE      = 0x00000002;
-    static final int PACKED       = 0x00000004;
-    public static final int HSHRINK      = 0x00000008;
-    public static final int VSHRINK      = 0x00000010;
-    static final int BLACK        = 0x00000020;  // for red-black code
-
-    static final int FIXED        = 0x00000040;
-    static final boolean ROWS     = true;
-    static final boolean COLS     = false;
-
-    static final int ISROOT       = 0x00000080;
-    static final int REPACK       = 0x00000100;
-    static final int RECONSTRAIN  = 0x00000200;
-    static final int REPLACE      = 0x00000400;
-
-    static final int ALIGN_TOP    = 0x00001000;
-    static final int ALIGN_BOTTOM = 0x00002000;
-    static final int ALIGN_LEFT   = 0x00004000;
-    static final int ALIGN_RIGHT  = 0x00008000;
-    static final int ALIGNS       = 0x0000f000;
-    static final int CURSOR       = 0x00010000;  // if true, this box has a cursor in the cursor hash; FEATURE: GC issues?
-    static final int CLIP         = 0x00020000;
-    static final int STOP_UPWARD_PROPAGATION    = 0x00040000;
-    static final int MOVED         = 0x00080000;
-
-
-    // Instance Data //////////////////////////////////////////////////////////////////////
-
-    Box parent = null;
-    Box redirect = this;
-    int flags = VISIBLE | PACKED | REPACK | RECONSTRAIN | REPLACE | FIXED | STOP_UPWARD_PROPAGATION | CLIP | MOVED;
-
-    private String text = null;
-    private Font font = DEFAULT_FONT; 
-    private Picture texture = null;
-    private short strokewidth = 1;
-    public int fillcolor = 0x00000000;
-    private int strokecolor = 0xFF000000;
-
-    private int aspect = 0;
-
-    // specified directly by user
-    public int minwidth = 0;
-    public int maxwidth = Integer.MAX_VALUE;
-    public int minheight = 0;
-    public int maxheight = Integer.MAX_VALUE;
-    private short rows = 1;
-    private short cols = 0;
-    private short rowspan = 1;
-    private short colspan = 1;
-
-    // computed during reflow
-    private short row = 0;
-    private short col = 0;
-    public int x = 0;
-    public int y = 0;
-    public int ax = 0;   // FEATURE: roll these into x/y; requires lots of changes
-    public int ay = 0;   // FEATURE: roll these into x/y; requires lots of changes; perhaps y()?
-    public int width = 0;
-    public int height = 0;
-    public int contentwidth = 0;      // == max(minwidth, textwidth, sum(child.contentwidth))
-    public int contentheight = 0;
-
-    private Path path = null;
-    /*
-    private Affine transform = null;
-    private VectorGraphics.RasterPath rpath = null;
-    private Affine rtransform = null;
-    */
-
-    // Instance Methods /////////////////////////////////////////////////////////////////////
-
-    public final int fontSize() { return font == null ? DEFAULT_FONT.pointsize : font.pointsize; }
-
-    /** invoked when a resource needed to render ourselves finishes loading */
-    public void perform() throws JSExn {
-        if (texture == null) { Log.warn(Box.class, "perform() called with null texture"); return; }
-        if (texture.isLoaded) {
-            setWidth(max(texture.width, minwidth), maxwidth); 
-            setHeight(max(texture.height, minheight), maxheight); 
-            dirty(); }
-        else { JS res = texture.stream; texture = null; throw new JSExn("image not found: "+res.unclone()); }
-    }
-
-    // FEATURE: use cx2/cy2 format
-    /** Adds the intersection of (x,y,w,h) and the node's current actual geometry to the Surface's dirty list */
-    public void dirty() { dirty(0, 0, width, height); }
-    public void dirty(int x, int y, int w, int h) {
-        for(Box cur = this; cur != null; cur = cur.parent) {
-            // x and y have a different meaning on the root box
-            if (cur.parent != null && cur.test(CLIP)) {
-                w = min(x + w, cur.width) - max(x, 0);
-                h = min(y + h, cur.height) - max(y, 0);
-                x = max(x, 0);
-                y = max(y, 0);
-            }
-            if (w <= 0 || h <= 0) return;
-            if (cur.parent == null && cur.getSurface() != null) cur.getSurface().dirty(x, y, w, h);
-            x += cur.x;
-            y += cur.y;
-        }
-    }
-
-
-    // Reflow ////////////////////////////////////////////////////////////////////////////////////////
-
-    /** should only be invoked on the root box */
-    public void reflow() {
-        pack();
-        resize(x, y,
-               test(HSHRINK) ? contentwidth : maxwidth,
-               test(VSHRINK) ? contentheight : maxheight);
-        place();
-    }
-    
-    private static Box[] frontier = new Box[65535];
-    /** pack the boxes into rows and columns, compute contentwidth */
-    public void pack() {
-        if (!test(REPACK)) { constrain(); return; }
-        boolean haskid = false;
-        for(Box child = getChild(0); child != null; child = child.nextSibling()) { haskid = true; child.pack(); }
-        if (!haskid) { clear(REPACK); constrain(); return; }
-        int frontier_size = 0;
-
-
-        if (test(FIXED) == COLS) {
-            rows = 0;
-            for(Box child = getChild(0); child != null; child = child.nextSibling()) {
-                if (!child.test(PACKED) || !child.test(VISIBLE)) continue;
-                if (cols == 1) { child.row = rows; rows += child.rowspan; child.col = 0; continue; }
-                child.col = (short)(frontier_size <= 0 ? 0 : (frontier[frontier_size-1].col + frontier[frontier_size-1].colspan));
-                child.row = (short)(frontier_size <= 0 ? 0 : frontier[frontier_size-1].row);
-                if (child.col + min(cols,child.colspan) > cols) { child.col = 0; child.row++; }
-                for(int i=0; i<frontier_size; i++)
-                    if (frontier[i].row + frontier[i].rowspan <= child.row) {
-                        frontier[i--] = frontier[--frontier_size]; frontier[frontier_size] = null;
-                    } else if (frontier[i].col<child.col+min(cols,child.colspan)&&frontier[i].col+frontier[i].colspan>child.col) {
-                        child.col = (short)(frontier[i].col + frontier[i].colspan);
-                        if (child.col + min(cols,child.colspan) > cols) {
-                            child.row = (short)(frontier[i].row + frontier[i].rowspan);
-                            for(i--; i>0; i--) child.row = (short)min(row, frontier[i].row + frontier[i].rowspan);
-                            child.col = (short)0;
-                        }
-                        i = -1;
-                    } else break;
-                frontier[frontier_size++] = child;
-            }
-            for(int i=0; i<frontier_size; i++){ rows=(short)max(rows, frontier[i].row + frontier[i].rowspan); frontier[i] = null; }
-        }
-
-        if (test(FIXED) == ROWS) {            cols = 0;            for(Box child = getChild(0); child != null; child = child.nextSibling()) {                if (!child.test(PACKED) || !child.test(VISIBLE)) continue;                if (rows == 1) { child.col = cols; cols += child.colspan; child.row = 0; continue; }                child.row = (short)(frontier_size <= 0 ? 0 : (frontier[frontier_size-1].row + frontier[frontier_size-1].rowspan));                child.col = (short)(frontier_size <= 0 ? 0 : frontier[frontier_size-1].col);                if (child.row + min(rows,child.rowspan) > rows) { child.row = 0; child.col++; }                for(int i=0; i<frontier_size; i++)                    if (frontier[i].col + frontier[i].colspan <= child.col) {                        frontier[i--] = frontier[--frontier_size]; frontier[frontier_size] = null;                    } else if (frontier[i].row<child.row+min(rows,child.rowspan)&&frontier[i].row+frontier[i].rowspan>child.row) {                        child.row = (short)(frontier[i].row + frontier[i].rowspan);                        if (child.row + min(rows,child.rowspan) > rows) {                            child.col = (short)(frontier[i].col + frontier[i].colspan);                            for(i--; i>0; i--) child.col = (short)min(col, frontier[i].col + frontier[i].colspan);                            child.row = (short)0;                        }                        i = -1;                    } else break;                frontier[frontier_size++] = child;            }            for(int i=0; i<frontier_size; i++){ cols=(short)max(cols, frontier[i].col + frontier[i].colspan); frontier[i] = null; }        }        clear(REPACK);
-        set(RECONSTRAIN);   // FIXME: be smarter / more incremental
-        constrain();
-    }
-
-    public void constrain() {
-        if (!test(RECONSTRAIN)) return;
-        solve(true);
-
-
-        contentwidth = bound(minwidth,
-                             max(contentwidth, font == null || text == null ? 0 : font.textwidth(text)),
-                             maxwidth);
-
-        contentheight = bound(minheight,                             max(contentheight, font == null || text == null ? 0 : font.textheight(text)),                             maxheight);        set(REPLACE); // FIXME: be smarter / more incremental
-    }
-    
-    void resize(int x, int y, int width, int height) {
-        if (x == this.x && y == this.y && width == this.width && height == this.height) return;
-        boolean sizechange = (this.width != width || this.height != height) && getTrap("SizeChange") != null;
-        int thisx = parent == null ? 0 : this.x;
-        int thisy = parent == null ? 0 : this.y;
-        Box who = (parent == null ? this : parent);
-        if (this.x != x || this.y != y) set(MOVED);
-        if (texture == null && (text == null || text.equals("")) && !test(MOVED)) {
-            if ((fillcolor & 0xff000000) != 0 || parent == null) {
-                who.dirty(thisx+min(this.width,width), thisy, Math.abs(width-this.width), max(this.height, height));
-                who.dirty(thisx, thisy+min(this.height,height), max(this.width, width), Math.abs(height-this.height));
-            }
-            this.width = width; this.height = height; this.x = x; this.y = y;
-        } else {
-            who.dirty(thisx, thisy, this.width, this.height);
-            this.width = width; this.height = height; this.x = x; this.y = y;
-            dirty();
-        }
-        if (sizechange) putAndTriggerTrapsAndCatchExceptions("SizeChange", T);
-    }
-
-    private float targetColumnSize = (float)0.0;
-    private float targetRowSize = (float)0.0;
-    private static float[] sizes = new float[65535];
-    private static float[] sizes_v = new float[65535];
-    private static int[] regions = new int[65535];
-    private static int[] regions_v = new int[65535];
-    private static int numregions = 0;
-    private static int numregions_v = 0;
-
-    void solve(boolean findMinimum) {
-        int numkids = 0; for(Box c = firstPackedChild(); c != null; c = c.nextPackedSibling()) numkids++;
-
-
-
-        if (numkids == 0) {
-            if (findMinimum) contentwidth = 0;
-            else targetColumnSize = 0;
-        } else if (cols == 1) {
-            if (findMinimum) {
-                contentwidth = 0;
-                for(Box c = firstPackedChild(); c != null; c = c.nextPackedSibling())
-                    contentwidth = max(contentwidth, c.contentwidth);
-            } else {
-                targetColumnSize = width;
-            }
-        } else if (cols > 1) do {
-
-            // FIXME: cache these?
-            // compute regions
-            numregions = 0;
-            for(Box c = firstPackedChild(); c != null; c = c.nextPackedSibling()) {
-                regions[numregions++] = c.col;
-                regions[numregions++] = min(cols, c.col+c.colspan);
-            }
-            Vec.sortInts(regions, 0, numregions);
-            int j = 0;
-            int newnumregions = numregions;
-            for(int i=1; i<numregions; i++) {
-                if (regions[j] != regions[i]) j++;
-                else newnumregions--;
-                regions[j] = regions[i];
-            }
-            numregions = newnumregions;
-            if (regions[numregions-1] == cols) numregions--;
-            else regions[numregions] = cols;
-
-            int target = findMinimum ? 0 : Math.max(width, contentwidth);
-            // priority 0: (inviolable) honor minwidths
-            // priority 1: sum of columns no greater than parent
-            // priority 2: honor maxwidths
-            // priority 3: equalize columns
-            float targetColumnSize = target == 0 ? 0 : this.targetColumnSize;
-            float last_columnsize = 0;
-            float last_total = 0;
-            float total;
-            boolean first = true;
-            while(true) {
-                total = (float)0.0;
-                for(int r=0; r<numregions; r++) total += (sizes[r] = (float)(targetColumnSize * (regions[r+1]-regions[r])));
-                int minregion = 0;
-                for(Box child = firstPackedChild(); child != null; child = child.nextPackedSibling())
-                    for(int r=(child.col==0?0:minregion); r<numregions; r++) {
-                        if (regions[r+1] < child.col) continue;
-                        if (regions[r] >= min(child.col+child.colspan,cols)) { minregion = r; break; }
-                        total -= sizes[r];
-                        int child_maxwidth = child.test(HSHRINK)?child.contentwidth:child.maxwidth;
-                        if (sizes[r] <= (float)(targetColumnSize*(regions[r+1]-regions[r])))
-                            if ((child.colspan * targetColumnSize) > (child_maxwidth + (float)0.5))
-                                sizes[r] = (float)Math.min(sizes[r], (regions[r+1]-regions[r])*(child_maxwidth/child.colspan));
-                        if ((child.colspan * targetColumnSize) < (child.contentwidth - (float)0.5))
-                            sizes[r] = (float)Math.max(sizes[r], (regions[r+1]-regions[r])*(child.contentwidth/child.colspan));
-                        total += sizes[r];
-                    }
-                float save = targetColumnSize;
-                if (Math.abs(total - target) <= (float)1.0) break;
-                if (!first) {
-                    if (Math.abs(total - last_total) <= (float)1.0) break;
-                } else {
-                    last_columnsize = ((total - target) / (float)cols) + targetColumnSize;
-                }
-                if (total < target)      targetColumnSize += Math.abs((last_columnsize - targetColumnSize) / (float)1.1);
-                else if (total > target) targetColumnSize -= Math.abs((last_columnsize - targetColumnSize) / (float)1.1);
-                last_columnsize = save;
-                last_total = total;
-                first = false;
-            }
-            if (findMinimum) contentwidth = Math.round(total);
-            else this.targetColumnSize = targetColumnSize;
-        } while(false);
-
-        if (numkids == 0) {            if (findMinimum) contentheight = 0;            else targetRowSize = 0;        } else if (rows == 1) {            if (findMinimum) {                contentheight = 0;                for(Box c = firstPackedChild(); c != null; c = c.nextPackedSibling())                    contentheight = max(contentheight, c.contentheight);            } else {                targetRowSize = height;            }        } else if (rows > 1) do {                                    numregions_v = 0;            for(Box c = firstPackedChild(); c != null; c = c.nextPackedSibling()) {                regions_v[numregions_v++] = c.row;                regions_v[numregions_v++] = min(rows, c.row+c.rowspan);            }            Vec.sortInts(regions_v, 0, numregions_v);            int j = 0;            int newnumregions = numregions_v;            for(int i=1; i<numregions_v; i++) {                if (regions_v[j] != regions_v[i]) j++;                else newnumregions--;                regions_v[j] = regions_v[i];            }            numregions_v = newnumregions;            if (regions_v[numregions_v-1] == rows) numregions_v--;            else regions_v[numregions_v] = rows;            int target = findMinimum ? 0 : Math.max(height, contentheight);                                                            float targetRowSize = target == 0 ? 0 : this.targetRowSize;            float last_columnsize = 0;            float last_total = 0;            float total;            boolean first = true;            while(true) {                total = (float)0.0;                for(int r=0; r<numregions_v; r++) total += (sizes_v[r] = (float)(targetRowSize * (regions_v[r+1]-regions_v[r])));                int minregion = 0;                for(Box child = firstPackedChild(); child != null; child = child.nextPackedSibling())                    for(int r=(child.row==0?0:minregion); r<numregions_v; r++) {                        if (regions_v[r+1] < child.row) continue;                        if (regions_v[r] >= min(child.row+child.rowspan,rows)) { minregion = r; break; }                        total -= sizes_v[r];                        int child_maxwidth = child.test(VSHRINK)?child.contentheight:child.maxheight;                        if (sizes_v[r] <= (float)(targetRowSize*(regions_v[r+1]-regions_v[r])))                            if ((child.rowspan * targetRowSize) > (child_maxwidth + (float)0.5))                                sizes_v[r] = (float)Math.min(sizes_v[r], (regions_v[r+1]-regions_v[r])*(child_maxwidth/child.rowspan));                        if ((child.rowspan * targetRowSize) < (child.contentheight - (float)0.5))                            sizes_v[r] = (float)Math.max(sizes_v[r], (regions_v[r+1]-regions_v[r])*(child.contentheight/child.rowspan));                        total += sizes_v[r];                    }                float save = targetRowSize;                if (Math.abs(total - target) <= (float)1.0) break;                if (!first) {                    if (Math.abs(total - last_total) <= (float)1.0) break;                } else {                    last_columnsize = ((total - target) / (float)rows) + targetRowSize;                }                if (total < target)      targetRowSize += Math.abs((last_columnsize - targetRowSize) / (float)1.1);                else if (total > target) targetRowSize -= Math.abs((last_columnsize - targetRowSize) / (float)1.1);                last_columnsize = save;                last_total = total;                first = false;            }            if (findMinimum) contentheight = Math.round(total);            else this.targetRowSize = targetRowSize;        } while(false);    }
-
-    void place() {
-        solve(false);
-        for(Box child = getChild(0); child != null; child = child.nextSibling()) {
-            if (!child.test(VISIBLE)) continue;
-            if (!child.test(REPLACE)) continue;
-            int child_width, child_height, child_x, child_y;
-            if (!child.test(PACKED)) {
-                child_width = child.test(HSHRINK) ? child.contentwidth : min(child.maxwidth, width - Math.abs(child.ax));
-                child_height = child.test(VSHRINK) ? child.contentheight : min(child.maxheight, height - Math.abs(child.ay));
-                child_width = max(child.minwidth, child_width);
-                child_height = max(child.minheight, child_height);
-                int gap_x = width - child_width;
-                int gap_y = height - child_height;
-                child_x = child.ax + (child.test(ALIGN_RIGHT) ? gap_x : !child.test(ALIGN_LEFT) ? gap_x / 2 : 0);
-                child_y = child.ay + (child.test(ALIGN_BOTTOM) ? gap_y : !child.test(ALIGN_TOP) ? gap_y / 2 : 0);
-            } else {
-                int diff;
-
-
-
-
-                child_x = 0;
-                if (cols == 1) {
-                    child_width = width;
-                } else {
-                    child_width = 0;
-                    for(int r=0; r<numregions; r++) {
-                        if (regions[r] < child.col) child_x += Math.round(sizes[r]);
-                        else if (regions[r] < child.col+child.colspan) child_width += Math.round(sizes[r]);
-                    }
-                }
-                diff = (child_width - (child.test(HSHRINK) ? child.contentwidth : min(child_width, child.maxwidth)));
-                child_x += (child.test(ALIGN_RIGHT) ? diff : child.test(ALIGN_LEFT) ? 0 : diff / 2);
-                child_width -= diff;
-
-                child_y = 0;                if (rows == 1) {                    child_height = height;                } else {                    child_height = 0;                    for(int r=0; r<numregions_v; r++) {                        if (regions_v[r] < child.row) child_y += Math.round(sizes_v[r]);                        else if (regions_v[r] < child.row+child.rowspan) child_height += Math.round(sizes_v[r]);                    }                }                diff = (child_height - (child.test(VSHRINK) ? child.contentheight : min(child_height, child.maxheight)));                child_y += (child.test(ALIGN_BOTTOM) ? diff : child.test(ALIGN_TOP) ? 0 : diff / 2);                child_height -= diff;            }
-            if (test(MOVED)) child.set(MOVED);
-            child.resize(child_x, child_y, child_width, child_height);
-        }
-        clear(MOVED);
-
-        for(Box child = getChild(0); child != null; child = child.nextSibling())
-            if (child.test(VISIBLE) && child.treeSize() > 0)
-                child.place();
-    }
-
-
-
-    // Rendering Pipeline /////////////////////////////////////////////////////////////////////
-
-    /** Renders self and children within the specified region. All rendering operations are clipped to xIn,yIn,wIn,hIn */
-    public void render(int parentx, int parenty, int cx1, int cy1, int cx2, int cy2, PixelBuffer buf, Affine a) {
-        if (!test(VISIBLE)) return;
-        int globalx = parentx + (parent == null ? 0 : x);
-        int globaly = parenty + (parent == null ? 0 : y);
-
-        // intersect the x,y,w,h rendering window with ourselves; quit if it's empty
-        if (test(CLIP)) {
-            cx1 = max(cx1, globalx);
-            cy1 = max(cy1, globaly);
-            cx2 = min(cx2, globalx + width);
-            cy2 = min(cy2, globaly + height);
-            if (cx2 <= cx1 || cy2 <= cy1) return;
-        }
-
-        if ((fillcolor & 0xFF000000) != 0x00000000 || parent == null)
-            buf.fillTrapezoid(cx1, cx2, cy1, cx1, cx2, cy2, (fillcolor & 0xFF000000) == 0 ? 0xffffffff : fillcolor);
-
-        if (texture != null && texture.isLoaded)
-            for(int x = globalx; x < cx2; x += texture.width)
-                for(int y = globaly; y < cy2; y += texture.height)
-                    buf.drawPicture(texture, x, y, cx1, cy1, cx2, cy2);
-        if (text != null && !text.equals("") && font != null) {
-            int gap_x = width - font.textwidth(text);
-            int gap_y = height - font.textheight(text);
-            int text_x = globalx + (test(ALIGN_RIGHT) ? gap_x : !test(ALIGN_LEFT) ? gap_x/2 : 0);
-            int text_y = globaly + (test(ALIGN_BOTTOM) ? gap_y : !test(ALIGN_TOP) ? gap_y/2 : 0);
-            font.rasterizeGlyphs(text, buf, strokecolor, text_x, text_y, cx1, cy1, cx2, cy2);
-        }
-
-        if (path != null) path.realize(Affine.translate(globalx, globaly)).stroke(buf, 1, strokecolor);
-
-        for(Box b = getChild(0); b != null; b = b.nextSibling())
-            b.render(globalx, globaly, cx1, cy1, cx2, cy2, buf, null);
-    }
-    
-    
-    // Methods to implement org.ibex.js.JS //////////////////////////////////////
-
-  
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        switch (nargs) {
-            case 1: {
-final String ccSwitch0 = (String)(method);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 7: { switch(ccSwitch0.charAt(0)) { case 'i': if ("indexof".equals(ccSwitch0)) { if (true) do { 
-Box b = (Box)a0;
-if (b.parent != this)
-return (redirect == null || redirect == this) ?
-N(-1) :
-redirect.callMethod(method, a0, a1, a2, rest, nargs);
-return N(b.getIndexInParent());
-
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch0.charAt(0)) { case 'd': if ("distanceto".equals(ccSwitch0)) { if (true) do { 
-Box b = (Box)a0;
-JS ret = new JS();
-ret.put("x", N(b.localToGlobalX(0) - localToGlobalX(0)));
-ret.put("y", N(b.localToGlobalY(0) - localToGlobalY(0)));
-return ret;
-
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-            }
-        }
-        return super.callMethod(method, a0, a1, a2, rest, nargs);
-    }
-
-    public Object get(Object name) throws JSExn {
-        if (name instanceof Number)
-            return redirect == null ? null : redirect == this ? getChild(toInt(name)) : redirect.get(name);
-
-final String ccSwitch1 = (String)(name);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 1: { switch(ccSwitch1.charAt(0)) { case 'x': if ("x".equals(ccSwitch1)) { if (true) do { return (parent == null || !test(VISIBLE)) ? N(0) : test(PACKED) ? N(x) : N(ax);
- } while(false); break SUCCESS; } break;  case 'y': if ("y".equals(ccSwitch1)) { if (true) do { return (parent == null || !test(VISIBLE)) ? N(0) : test(PACKED) ? N(y) : N(ay);
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch1.charAt(0)) { case 'c': { switch(ccSwitch1.charAt(1)) { case 'l': if ("clip".equals(ccSwitch1)) { if (true) do { return B(test(CLIP));
- } while(false); break SUCCESS; } break;  case 'o': if ("cols".equals(ccSwitch1)) { if (true) do { return test(FIXED) == COLS ? N(cols) : N(0);
- } while(false); break SUCCESS; } break;  } break; } case 'f': { switch(ccSwitch1.charAt(1)) { case 'i': if ("fill".equals(ccSwitch1)) { if (true) do { return Color.colorToString(fillcolor);
- } while(false); break SUCCESS; } break;  case 'o': if ("font".equals(ccSwitch1)) { if (true) do { return font == null ? null : font.stream;
- } while(false); break SUCCESS; } break;  } break; } case 'p': if ("path".equals(ccSwitch1)) { if (true) do { 
-if (path != null) return path.toString();
-if (text == null) return null;
-if (font == null) return null;
-String ret = "";
-for(int i=0; i<text.length(); i++) ret += font.glyphs[text.charAt(i)].path;
-return ret;
- } while(false); break SUCCESS; } break;  case 'r': if ("rows".equals(ccSwitch1)) { if (true) do { return test(FIXED) == ROWS ? N(rows) : N(0);
- } while(false); break SUCCESS; } break;  case 't': if ("text".equals(ccSwitch1)) { if (true) do { return text;
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch1.charAt(0)) { case 'a': if ("align".equals(ccSwitch1)) { if (true) do { return alignToString();
- } while(false); break SUCCESS; } break;  case 'm': if ("mouse".equals(ccSwitch1)) { if (true) do { 
-if (getSurface() == null) return null;
-if (getSurface()._mousex == Integer.MAX_VALUE)
-throw new JSExn("you cannot read from the box.mouse property in background thread context");
-return new Mouse();
- } while(false); break SUCCESS; } break;  case 'w': if ("width".equals(ccSwitch1)) { if (true) do { getRoot().reflow(); return N(width);
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch1.charAt(0)) { case 'a': if ("aspect".equals(ccSwitch1)) { if (true) do { return N(aspect);
- } while(false); break SUCCESS; } break;  case 'c': if ("cursor".equals(ccSwitch1)) { if (true) do { return test(CURSOR) ? boxToCursor.get(this) : null;
- } while(false); break SUCCESS; } break;  case 'h': if ("height".equals(ccSwitch1)) { if (true) do { getRoot().reflow(); return N(height);
- } while(false); break SUCCESS; } break;  case 'p': if ("packed".equals(ccSwitch1)) { if (true) do { return B(test(PACKED));
- } while(false); break SUCCESS; } break;  case 's': if ("shrink".equals(ccSwitch1)) { if (true) do { return B(test(HSHRINK) || test(VSHRINK));
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch1.charAt(0)) { case 'c': if ("colspan".equals(ccSwitch1)) { if (true) do { return N(colspan);
- } while(false); break SUCCESS; } break;  case 'g': { switch(ccSwitch1.charAt(1)) { case 'l': { switch(ccSwitch1.charAt(2)) { case 'o': { switch(ccSwitch1.charAt(3)) { case 'b': { switch(ccSwitch1.charAt(4)) { case 'a': { switch(ccSwitch1.charAt(5)) { case 'l': { switch(ccSwitch1.charAt(6)) { case 'x': if ("globalx".equals(ccSwitch1)) { if (true) do { return N(localToGlobalX(0));
- } while(false); break SUCCESS; } break;  case 'y': if ("globaly".equals(ccSwitch1)) { if (true) do { return N(localToGlobalY(0));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } case 'h': if ("hshrink".equals(ccSwitch1)) { if (true) do { return B(test(HSHRINK));
- } while(false); break SUCCESS; } break;  case 'i': if ("indexof".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'r': if ("rowspan".equals(ccSwitch1)) { if (true) do { return N(rowspan);
- } while(false); break SUCCESS; } break;  case 's': if ("surface".equals(ccSwitch1)) { if (true) do { return parent == null ? null : parent.getAndTriggerTraps("surface");
- } while(false); break SUCCESS; } break;  case 't': if ("thisbox".equals(ccSwitch1)) { if (true) do { return this;
- } while(false); break SUCCESS; } break;  case 'v': { switch(ccSwitch1.charAt(1)) { case 'i': if ("visible".equals(ccSwitch1)) { if (true) do { return B(test(VISIBLE) && (parent == null || (parent.get("visible") == T)));
- } while(false); break SUCCESS; } break;  case 's': if ("vshrink".equals(ccSwitch1)) { if (true) do { return B(test(VSHRINK));
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 8: { switch(ccSwitch1.charAt(0)) { case 'f': if ("fontsize".equals(ccSwitch1)) { if (true) do { return font == null ? N(10) : N(font.pointsize);
- } while(false); break SUCCESS; } break;  case 'm': { switch(ccSwitch1.charAt(1)) { case 'a': if ("maxwidth".equals(ccSwitch1)) { if (true) do { return N(maxwidth);
- } while(false); break SUCCESS; } break;  case 'i': if ("minwidth".equals(ccSwitch1)) { if (true) do { return N(minwidth);
- } while(false); break SUCCESS; } break;  } break; } case 'r': if ("redirect".equals(ccSwitch1)) { if (true) do { return redirect == null ? null : redirect == this ? T : redirect.get("redirect");
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch1.charAt(0)) { case 'M': if ("Minimized".equals(ccSwitch1)) { if (true) do { if (parent == null && getSurface() != null) return B(getSurface().minimized);
- } while(false); break SUCCESS; } break;  case 'm': { switch(ccSwitch1.charAt(1)) { case 'a': if ("maxheight".equals(ccSwitch1)) { if (true) do { return N(maxheight);
- } while(false); break SUCCESS; } break;  case 'i': if ("minheight".equals(ccSwitch1)) { if (true) do { return N(minheight);
- } while(false); break SUCCESS; } break;  } break; } case 't': if ("textcolor".equals(ccSwitch1)) { if (true) do { return Color.colorToString(strokecolor);
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch1.charAt(0)) { case 'd': if ("distanceto".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch1.charAt(0)) { case 'n': if ("numchildren".equals(ccSwitch1)) { if (true) do { return redirect == null ? N(0) : redirect == this ? N(treeSize()) : redirect.get("numchildren");
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch1.charAt(1)) { case 't': { switch(ccSwitch1.charAt(2)) { case 'r': { switch(ccSwitch1.charAt(3)) { case 'o': { switch(ccSwitch1.charAt(4)) { case 'k': { switch(ccSwitch1.charAt(5)) { case 'e': { switch(ccSwitch1.charAt(6)) { case 'c': if ("strokecolor".equals(ccSwitch1)) { if (true) do { return Color.colorToString(strokecolor);
- } while(false); break SUCCESS; } break;  case 'w': if ("strokewidth".equals(ccSwitch1)) { if (true) do { return N(strokewidth);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  } /* switch */   return super.get(name);
- } while(false); /* OUTER */
-        throw new Error("unreachable"); // unreachable
-    }
-
-    private class Mouse extends JS.Cloneable {
-        public Object get(Object key) {
-final String ccSwitch2 = (String)(key);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 1: { switch(ccSwitch2.charAt(0)) { case 'x': if ("x".equals(ccSwitch2)) { if (true) do { return N(globalToLocalX(getSurface()._mousex));
- } while(false); break SUCCESS; } break;  case 'y': if ("y".equals(ccSwitch2)) { if (true) do { return N(globalToLocalY(getSurface()._mousey));
-
-
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch2.charAt(0)) { case 'i': if ("inside".equals(ccSwitch2)) { if (true) do { return B(test(MOUSEINSIDE));
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-            return null;
-        }
-    }
-
-
-    public void setWidth(int min, int max) {
-        // FIXME: deal with conflicting min/max
-        if (this.minwidth == min && this.maxwidth == max) return;
-        this.minwidth = min;
-        this.maxwidth = max;
-        RECONSTRAIN();
-        if (parent != null || getSurface() == null) return;
-        getSurface().pendingWidth = maxwidth;
-
-        // FIXME: the repeat doesn't work right here
-        getSurface().setMinimumSize(minwidth, minheight, minwidth != maxwidth || minheight != maxheight);
-    }
-
-    public void setHeight(int min, int max) {                if (this.minheight == min && this.maxheight == max) return;        this.minheight = min;        this.maxheight = max;        RECONSTRAIN();        if (parent != null || getSurface() == null) return;        getSurface().pendingHeight = maxheight;                getSurface().setMinimumSize(minheight, minheight, minheight != maxheight || minheight != maxheight);    }
-    public void put(Object name, Object value) throws JSExn {
-        if (name instanceof Number) { put(toInt(name), value); return; }
-final String ccSwitch3 = (String)(name);  SUCCESS:do { switch(ccSwitch3.length()) {
-case 1: { switch(ccSwitch3.charAt(0)) { case 'x': if ("x".equals(ccSwitch3)) { if (true) do { if (parent==null && Surface.fromBox(this)!=null) {
-int nu = toInt(value); if (nu == x) break; x = nu;;
-} else {
-if (test(PACKED) && parent != null) return;
-int nu = toInt(value); if (nu == ax) break; ax = nu;;
-REPLACE();
-}
- } while(false); break SUCCESS; } break;  case 'y': if ("y".equals(ccSwitch3)) { if (true) do { if (parent==null && Surface.fromBox(this)!=null) {
-int nu = toInt(value); if (nu == y) break; y = nu;;
-} else {
-if (test(PACKED) && parent != null) return;
-int nu = toInt(value); if (nu == ay) break; ay = nu;;
-REPLACE();
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch3.charAt(0)) { case 'M': if ("Move".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case 'c': { switch(ccSwitch3.charAt(1)) { case 'l': if ("clip".equals(ccSwitch3)) { if (true) do { boolean nu = toBoolean(value); if (nu == test(CLIP)) break; if (nu) set(CLIP); else clear(CLIP);; if (parent == null) dirty(); else parent.dirty();
- } while(false); break SUCCESS; } break;  case 'o': if ("cols".equals(ccSwitch3)) { if (true) do { short nu = (short)toInt(value); if (nu == cols) break; cols = nu;; if (cols==0){set(FIXED, ROWS);if(rows==0)rows=1;} else set(FIXED, COLS); REPACK();
-
-
- } while(false); break SUCCESS; } break;  } break; } case 'f': { switch(ccSwitch3.charAt(1)) { case 'i': if ("fill".equals(ccSwitch3)) { if (true) do { setFill(value);
- } while(false); break SUCCESS; } break;  case 'o': if ("font".equals(ccSwitch3)) { if (true) do { 
-if(!(value instanceof Stream)) throw new JSExn("You can only put streams to the font property");
-if (font == value) return;
-font = value == null ? null : Font.getFont((Stream)value, font == null ? 10 : font.pointsize);
-RECONSTRAIN();
-dirty();
- } while(false); break SUCCESS; } break;  } break; } case 'p': if ("path".equals(ccSwitch3)) { if (true) do { path = Path.parse(toString(value)); RECONSTRAIN(); dirty();
- } while(false); break SUCCESS; } break;  case 'r': if ("rows".equals(ccSwitch3)) { if (true) do { short nu = (short)toInt(value); if (nu == rows) break; rows = nu;; if (rows==0){set(FIXED, COLS);if(cols==0)cols=1;} else set(FIXED, ROWS); REPACK();
- } while(false); break SUCCESS; } break;  case 't': if ("text".equals(ccSwitch3)) { if (true) do { if (value == null) value = ""; if ((value==null&&text==null)||(value!=null&&JS.toString(value).equals(text))) break; text=JS.toString(value);; RECONSTRAIN(); dirty();
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch3.charAt(0)) { case 'C': if ("Close".equals(ccSwitch3)) { if (true) do { if (parent == null && getSurface() != null) getSurface().dispose(true);
- } while(false); break SUCCESS; } break;  case 'E': if ("Enter".equals(ccSwitch3)) { if (true) do { return;
- } while(false); break SUCCESS; } break;  case 'L': if ("Leave".equals(ccSwitch3)) { if (true) do { return;
-
- } while(false); break SUCCESS; } break;  case '_': if ("_Move".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case 'a': if ("align".equals(ccSwitch3)) { if (true) do { clear(ALIGNS); setAlign(value == null ? "center" : value); REPLACE();
- } while(false); break SUCCESS; } break;  case 'm': if ("mouse".equals(ccSwitch3)) { if (true) do { 
-int mousex = toInt(((JS)value).get("x"));
-int mousey = toInt(((JS)value).get("y"));
-getSurface()._mousex = localToGlobalX(mousex);
-getSurface()._mousey = localToGlobalY(mousey);
-
- } while(false); break SUCCESS; } break;  case 'w': if ("width".equals(ccSwitch3)) { if (true) do { setWidth(toInt(value), toInt(value));
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch3.charAt(0)) { case 'C': { switch(ccSwitch3.charAt(1)) { case 'l': { switch(ccSwitch3.charAt(2)) { case 'i': { switch(ccSwitch3.charAt(3)) { case 'c': { switch(ccSwitch3.charAt(4)) { case 'k': { switch(ccSwitch3.charAt(5)) { case '1': if ("Click1".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '2': if ("Click2".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '3': if ("Click3".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } case 'P': { switch(ccSwitch3.charAt(1)) { case 'r': { switch(ccSwitch3.charAt(2)) { case 'e': { switch(ccSwitch3.charAt(3)) { case 's': { switch(ccSwitch3.charAt(4)) { case 's': { switch(ccSwitch3.charAt(5)) { case '1': if ("Press1".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '2': if ("Press2".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '3': if ("Press3".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } case 'c': if ("cursor".equals(ccSwitch3)) { if (true) do { setCursor(value);
- } while(false); break SUCCESS; } break;  case 'h': if ("height".equals(ccSwitch3)) { if (true) do { setHeight(toInt(value), toInt(value));
- } while(false); break SUCCESS; } break;  case 'p': if ("packed".equals(ccSwitch3)) { if (true) do { boolean nu = toBoolean(value); if (nu == test(PACKED)) break; if (nu) set(PACKED); else clear(PACKED);; if (parent != null) { parent.REPACK(); } else { REPACK(); }
- } while(false); break SUCCESS; } break;  case 's': if ("shrink".equals(ccSwitch3)) { if (true) do { boolean nu = toBoolean(value); if (nu == test(HSHRINK | VSHRINK)) break; if (nu) set(HSHRINK | VSHRINK); else clear(HSHRINK | VSHRINK);; RECONSTRAIN();
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch3.charAt(0)) { case 'H': if ("HScroll".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null)
-parent.putAndTriggerTraps(name, N(((Number)value).floatValue() * ((float)parent.fontSize()) / ((float)fontSize())));
- } while(false); break SUCCESS; } break;  case 'V': if ("VScroll".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null)
-parent.putAndTriggerTraps(name, N(((Number)value).floatValue() * ((float)parent.fontSize()) / ((float)fontSize())));
-
- } while(false); break SUCCESS; } break;  case '_': { switch(ccSwitch3.charAt(1)) { case 'C': { switch(ccSwitch3.charAt(2)) { case 'l': { switch(ccSwitch3.charAt(3)) { case 'i': { switch(ccSwitch3.charAt(4)) { case 'c': { switch(ccSwitch3.charAt(5)) { case 'k': { switch(ccSwitch3.charAt(6)) { case '1': if ("_Click1".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '2': if ("_Click2".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '3': if ("_Click3".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } case 'P': { switch(ccSwitch3.charAt(2)) { case 'r': { switch(ccSwitch3.charAt(3)) { case 'e': { switch(ccSwitch3.charAt(4)) { case 's': { switch(ccSwitch3.charAt(5)) { case 's': { switch(ccSwitch3.charAt(6)) { case '1': if ("_Press1".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '2': if ("_Press2".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '3': if ("_Press3".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } case 'c': if ("colspan".equals(ccSwitch3)) { if (true) do { if (toInt(value) > 0) { short nu = (short)toInt(value); if (nu == colspan) break; colspan = nu;; if (parent != null) parent.REPACK(); }
- } while(false); break SUCCESS; } break;  case 'h': if ("hshrink".equals(ccSwitch3)) { if (true) do { boolean nu = toBoolean(value); if (nu == test(HSHRINK)) break; if (nu) set(HSHRINK); else clear(HSHRINK);; RECONSTRAIN();
- } while(false); break SUCCESS; } break;  case 'r': if ("rowspan".equals(ccSwitch3)) { if (true) do { if (toInt(value) > 0) { short nu = (short)toInt(value); if (nu == rowspan) break; rowspan = nu;; if (parent != null) parent.REPACK(); }
- } while(false); break SUCCESS; } break;  case 't': if ("thisbox".equals(ccSwitch3)) { if (true) do { if (value == null) removeSelf();
- } while(false); break SUCCESS; } break;  case 'v': { switch(ccSwitch3.charAt(1)) { case 'i': if ("visible".equals(ccSwitch3)) { if (true) do { boolean nu = toBoolean(value); if (nu == test(VISIBLE)) break; if (nu) set(VISIBLE); else clear(VISIBLE);; RECONSTRAIN(); dirty();
- } while(false); break SUCCESS; } break;  case 's': if ("vshrink".equals(ccSwitch3)) { if (true) do { boolean nu = toBoolean(value); if (nu == test(VSHRINK)) break; if (nu) set(VSHRINK); else clear(VSHRINK);; RECONSTRAIN();
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 8: { switch(ccSwitch3.charAt(0)) { case 'R': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 'l': { switch(ccSwitch3.charAt(3)) { case 'e': { switch(ccSwitch3.charAt(4)) { case 'a': { switch(ccSwitch3.charAt(5)) { case 's': { switch(ccSwitch3.charAt(6)) { case 'e': { switch(ccSwitch3.charAt(7)) { case '1': if ("Release1".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '2': if ("Release2".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '3': if ("Release3".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } case '_': { switch(ccSwitch3.charAt(1)) { case 'H': if ("_HScroll".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case 'V': if ("_VScroll".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
-
- } while(false); break SUCCESS; } break;  } break; } case 'f': if ("fontsize".equals(ccSwitch3)) { if (true) do { font = Font.getFont(font == null ? null : font.stream, toInt(value)); RECONSTRAIN(); dirty();
- } while(false); break SUCCESS; } break;  case 'm': { switch(ccSwitch3.charAt(1)) { case 'a': if ("maxwidth".equals(ccSwitch3)) { if (true) do { setWidth(minwidth, toInt(value));
- } while(false); break SUCCESS; } break;  case 'i': if ("minwidth".equals(ccSwitch3)) { if (true) do { setWidth(toInt(value), maxwidth);
- } while(false); break SUCCESS; } break;  } break; } case 'r': if ("redirect".equals(ccSwitch3)) { if (true) do { 
-for(Box cur = (Box)value; cur != null || cur == redirect; cur = cur.parent)
-if (cur == redirect) { redirect = (Box)value; return; }
-JS.error("redirect can only be set to a descendant of its current value");
- } while(false); break SUCCESS; } break;  case 't': if ("titlebar".equals(ccSwitch3)) { if (true) do { if (getSurface()!=null) getSurface().setTitleBarText(toString(value)); super.put(name,value);
-
-
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch3.charAt(0)) { case 'M': { switch(ccSwitch3.charAt(1)) { case 'a': if ("Maximized".equals(ccSwitch3)) { if (true) do { if (parent == null && getSurface() != null) getSurface().maximized = toBoolean(value);
- } while(false); break SUCCESS; } break;  case 'i': if ("Minimized".equals(ccSwitch3)) { if (true) do { if (parent == null && getSurface() != null) getSurface().minimized = toBoolean(value);
- } while(false); break SUCCESS; } break;  } break; } case '_': { switch(ccSwitch3.charAt(1)) { case 'R': { switch(ccSwitch3.charAt(2)) { case 'e': { switch(ccSwitch3.charAt(3)) { case 'l': { switch(ccSwitch3.charAt(4)) { case 'e': { switch(ccSwitch3.charAt(5)) { case 'a': { switch(ccSwitch3.charAt(6)) { case 's': { switch(ccSwitch3.charAt(7)) { case 'e': { switch(ccSwitch3.charAt(8)) { case '1': if ("_Release1".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '2': if ("_Release2".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '3': if ("_Release3".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 'm': { switch(ccSwitch3.charAt(1)) { case 'a': if ("maxheight".equals(ccSwitch3)) { if (true) do { setHeight(minheight, toInt(value));
- } while(false); break SUCCESS; } break;  case 'i': if ("minheight".equals(ccSwitch3)) { if (true) do { setHeight(toInt(value), maxheight);
- } while(false); break SUCCESS; } break;  } break; } case 't': if ("textcolor".equals(ccSwitch3)) { if (true) do { value = N(Color.stringToColor((String)value)); int nu = toInt(value); if (nu == strokecolor) break; strokecolor = nu;; dirty();
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch3.charAt(0)) { case 'K': if ("KeyPressed".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case 'S': if ("SizeChange".equals(ccSwitch3)) { if (true) do { return;
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch3.charAt(0)) { case 'C': if ("ChildChange".equals(ccSwitch3)) { if (true) do { return;
- } while(false); break SUCCESS; } break;  case 'K': if ("KeyReleased".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '_': if ("_KeyPressed".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch3.charAt(1)) { case 't': { switch(ccSwitch3.charAt(2)) { case 'r': { switch(ccSwitch3.charAt(3)) { case 'o': { switch(ccSwitch3.charAt(4)) { case 'k': { switch(ccSwitch3.charAt(5)) { case 'e': { switch(ccSwitch3.charAt(6)) { case 'c': if ("strokecolor".equals(ccSwitch3)) { if (true) do { value = N(Color.stringToColor((String)value)); int nu = toInt(value); if (nu == strokecolor) break; strokecolor = nu;; dirty();
- } while(false); break SUCCESS; } break;  case 'w': if ("strokewidth".equals(ccSwitch3)) { if (true) do { short nu = (short)toInt(value); if (nu == strokewidth) break; strokewidth = nu;; dirty();
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 12: { switch(ccSwitch3.charAt(0)) { case 'D': { switch(ccSwitch3.charAt(1)) { case 'o': { switch(ccSwitch3.charAt(2)) { case 'u': { switch(ccSwitch3.charAt(3)) { case 'b': { switch(ccSwitch3.charAt(4)) { case 'l': { switch(ccSwitch3.charAt(5)) { case 'e': { switch(ccSwitch3.charAt(6)) { case 'C': { switch(ccSwitch3.charAt(7)) { case 'l': { switch(ccSwitch3.charAt(8)) { case 'i': { switch(ccSwitch3.charAt(9)) { case 'c': { switch(ccSwitch3.charAt(10)) { case 'k': { switch(ccSwitch3.charAt(11)) { case '1': if ("DoubleClick1".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '2': if ("DoubleClick2".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  case '3': if ("DoubleClick3".equals(ccSwitch3)) { if (true) do { if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } case '_': if ("_KeyReleased".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  }; break; }  case 13: { switch(ccSwitch3.charAt(0)) { case '_': { switch(ccSwitch3.charAt(1)) { case 'D': { switch(ccSwitch3.charAt(2)) { case 'o': { switch(ccSwitch3.charAt(3)) { case 'u': { switch(ccSwitch3.charAt(4)) { case 'b': { switch(ccSwitch3.charAt(5)) { case 'l': { switch(ccSwitch3.charAt(6)) { case 'e': { switch(ccSwitch3.charAt(7)) { case 'C': { switch(ccSwitch3.charAt(8)) { case 'l': { switch(ccSwitch3.charAt(9)) { case 'i': { switch(ccSwitch3.charAt(10)) { case 'c': { switch(ccSwitch3.charAt(11)) { case 'k': { switch(ccSwitch3.charAt(12)) { case '1': if ("_DoubleClick1".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '2': if ("_DoubleClick2".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  case '3': if ("_DoubleClick3".equals(ccSwitch3)) { if (true) do { propagateDownward(name, value, false);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  } /* switch */                super.put(name, value);
- } while(false); /* OUTER */
-    }
-
-    private String alignToString() {
-        switch(flags & ALIGNS) {
-            case (ALIGN_TOP | ALIGN_LEFT): return "topleft";
-            case (ALIGN_BOTTOM | ALIGN_LEFT): return "bottomleft";
-            case (ALIGN_TOP | ALIGN_RIGHT): return "topright";
-            case (ALIGN_BOTTOM | ALIGN_RIGHT): return "bottomright";
-            case ALIGN_TOP: return "top";
-            case ALIGN_BOTTOM: return "bottom";
-            case ALIGN_LEFT: return "left";
-            case ALIGN_RIGHT: return "right";
-            case 0: return "center";
-            default: throw new Error("invalid alignment flags: " + (flags & ALIGNS));
-        }
-    }
-
-    private void setAlign(Object value) {
-        clear(ALIGNS);
-final String ccSwitch4 = (String)(value);  SUCCESS:do { switch(ccSwitch4.length()) {
-case 3: { switch(ccSwitch4.charAt(0)) { case 't': if ("top".equals(ccSwitch4)) { if (true) do { set(ALIGN_TOP);
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch4.charAt(0)) { case 'l': if ("left".equals(ccSwitch4)) { if (true) do { set(ALIGN_LEFT);
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch4.charAt(0)) { case 'r': if ("right".equals(ccSwitch4)) { if (true) do { set(ALIGN_RIGHT);
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch4.charAt(0)) { case 'b': if ("bottom".equals(ccSwitch4)) { if (true) do { set(ALIGN_BOTTOM);
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch4.charAt(0)) { case 't': if ("topleft".equals(ccSwitch4)) { if (true) do { set(ALIGN_TOP | ALIGN_LEFT);
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch4.charAt(0)) { case 't': if ("topright".equals(ccSwitch4)) { if (true) do { set(ALIGN_TOP | ALIGN_RIGHT);
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch4.charAt(0)) { case 'b': if ("bottomleft".equals(ccSwitch4)) { if (true) do { set(ALIGN_BOTTOM | ALIGN_LEFT);
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch4.charAt(0)) { case 'b': if ("bottomright".equals(ccSwitch4)) { if (true) do { set(ALIGN_BOTTOM | ALIGN_RIGHT);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */   JS.log("invalid alignment \"" + value + "\"");
- } while(false); /* OUTER */
-    }
-    
-    private void setCursor(Object value) {
-        if (value == null) { clear(CURSOR); boxToCursor.remove(this); return; }
-        if (value.equals(boxToCursor.get(this))) return;
-        set(CURSOR);
-        boxToCursor.put(this, value);
-        Surface surface = getSurface();
-        if (surface == null) return;
-        String tempcursor = surface.cursor;
-        propagateDownward(null, null, false);
-        if (surface.cursor != tempcursor) surface.syncCursor();
-    }
-
-    private void setFill(Object value) throws JSExn {
-        if (value == null) {
-            if (texture == null && fillcolor == 0) return;
-            texture = null;
-            fillcolor = 0;
-        } else if (value instanceof String) {
-            int newfillcolor = Color.stringToColor((String)value);
-            if (newfillcolor == fillcolor) return;
-            fillcolor = newfillcolor;
-            texture = null;
-        } else if (value instanceof JS) {
-            Picture newtex = Picture.load((JS)value, this);
-            if (texture == newtex) return;
-            texture = newtex;
-            fillcolor = 0;
-            if (texture != null && texture.isLoaded) perform();
-        } else {
-            throw new JSExn("fill must be null, a String, or a stream, not a " + value.getClass());
-        }
-        dirty();
-    }
-
-    /**
-     *  Handles events which propagate down the box tree.  If obscured
-     *  is set, then we merely check for Enter/Leave.
-     */
-    private void propagateDownward(Object name_, Object value, boolean obscured) {
-
-        String name = (String)name_;
-        if (getSurface() == null) return;
-        int x = globalToLocalX(getSurface()._mousex);
-        int y = globalToLocalY(getSurface()._mousey);
-        boolean wasinside = test(MOUSEINSIDE);
-        boolean isinside = test(VISIBLE) && inside(x, y) && !obscured;
-        if (!wasinside && isinside) {
-            set(MOUSEINSIDE);
-            putAndTriggerTrapsAndCatchExceptions("Enter", T);
-        }
-        if (isinside && test(CURSOR)) getSurface().cursor = (String)boxToCursor.get(this);
-        if (wasinside && !isinside) {
-            clear(MOUSEINSIDE);
-            putAndTriggerTrapsAndCatchExceptions("Leave", T);
-        }
-
-        boolean found = false;
-        if (wasinside || isinside)
-            for(Box child = getChild(treeSize() - 1); child != null; child = child.prevSibling()) {
-                boolean save_stop = child.test(STOP_UPWARD_PROPAGATION);
-                Object value2 = value;
-                if (name.equals("_HScroll") || name.equals("_VScroll"))
-                    value2 = N(((Number)value).floatValue() * ((float)child.fontSize()) / (float)fontSize());
-                if (obscured || !child.inside(x - child.x, y - child.y)) {
-                    child.propagateDownward(name, value2, true);
-                } else try {
-                    found = true;
-                    child.clear(STOP_UPWARD_PROPAGATION);
-                    if (name != null) child.putAndTriggerTrapsAndCatchExceptions(name, value2);
-                    else child.propagateDownward(name, value2, obscured);
-                } finally {
-                    if (save_stop) child.set(STOP_UPWARD_PROPAGATION); else child.clear(STOP_UPWARD_PROPAGATION);
-                }
-                if (child.inside(x - child.x, y - child.y))
-                    if (name != null && name.equals("_Move")) obscured = true;
-                    else break;
-            }
-
-        if (!obscured && !found)
-            if ("_Move".equals(name) || name.startsWith("_Release") || wasinside)
-                if (name != null)
-                    putAndTriggerTrapsAndCatchExceptions(name.substring(1), value);
-    }
-
-    /** figures out what box in this subtree of the Box owns the pixel at x,y relitave to the Surface */
-    public static Box whoIs(Box cur, int x, int y) {
-
-        if (cur.parent != null) throw new Error("whoIs may only be invoked on the root box of a surface");
-        int globalx = 0;
-        int globaly = 0;
-
-        // WARNING: this method is called from the event-queueing thread -- it may run concurrently with
-        // ANY part of Ibex, and is UNSYNCHRONIZED for performance reasons.  BE CAREFUL HERE.
-
-        if (!cur.test(VISIBLE)) return null;
-        if (!cur.inside(x - globalx, y - globaly)) return cur.parent == null ? cur : null;
-        OUTER: while(true) {
-            for(int i=cur.treeSize() - 1; i>=0; i--) {
-                Box child = cur.getChild(i);
-                if (child == null) continue;        // since this method is unsynchronized, we have to double-check
-                globalx += child.x;
-                globaly += child.y;
-                if (child.test(VISIBLE) && child.inside(x - globalx, y - globaly)) { cur = child; continue OUTER; }
-                globalx -= child.x;
-                globaly -= child.y;
-            }
-            break;
-        }
-        return cur;
-    }
-
-
-    // Trivial Helper Methods (should be inlined) /////////////////////////////////////////
-
-    void mark_for_repack() { REPACK(); }
-    public Enumeration keys() { throw new Error("you cannot apply for..in to a " + this.getClass().getName()); }
-    public Box getRoot() { return parent == null ? this : parent.getRoot(); }
-    public Surface getSurface() { return Surface.fromBox(getRoot()); }
-    Box nextPackedSibling() { Box b = nextSibling(); return b == null || (b.test(PACKED | VISIBLE)) ? b : b.nextPackedSibling(); }
-    Box firstPackedChild() { Box b = getChild(0); return b == null || (b.test(PACKED | VISIBLE)) ? b : b.nextPackedSibling(); }
-    public int globalToLocalX(int x) { return parent == null ? x : parent.globalToLocalX(x - this.x); }
-    public int globalToLocalY(int y) { return parent == null ? y : parent.globalToLocalY(y - this.y); }
-    public int localToGlobalX(int x) { return parent == null ? x : parent.globalToLocalX(x + this.x); }
-    public int localToGlobalY(int y) { return parent == null ? y : parent.globalToLocalY(y + this.y); }
-
-    static short min(short a, short b) { if (a<b) return a; else return b; }
-    static int min(int a, int b) { if (a<b) return a; else return b; }
-    static float min(float a, float b) { if (a<b) return a; else return b; }
-
-    static short max(short a, short b) { if (a>b) return a; else return b; }
-    static int max(int a, int b) { if (a>b) return a; else return b; }
-    static float max(float a, float b) { if (a>b) return a; else return b; }
-
-    static int min(int a, int b, int c) { if (a<=b && a<=c) return a; else if (b<=c && b<=a) return b; else return c; }
-    static int max(int a, int b, int c) { if (a>=b && a>=c) return a; else if (b>=c && b>=a) return b; else return c; }
-    static int bound(int a, int b, int c) { if (c < b) return c; if (a > b) return a; return b; }
-    final boolean inside(int x, int y) { return test(VISIBLE) && x >= 0 && y >= 0 && x < width && y < height; }
-
-    void set(int mask) { flags |= mask; }
-    void set(int mask, boolean setclear) { if (setclear) set(mask); else clear(mask); }
-    void clear(int mask) { flags &= ~mask; }
-    public boolean test(int mask) { return ((flags & mask) == mask); }
-    
-
-    // Tree Handling //////////////////////////////////////////////////////////////////////
-
-    public final int getIndexInParent() { return parent == null ? 0 : parent.indexNode(this); }
-    public final Box nextSibling() { return parent == null ? null : parent.getChild(parent.indexNode(this) + 1); }
-    public final Box prevSibling() { return parent == null ? null : parent.getChild(parent.indexNode(this) - 1); }
-    public final Box getChild(int i) {
-        if (i < 0) return null;
-        if (i >= treeSize()) return null;
-        return (Box)getNode(i);
-    }
-
-    // Tree Manipulation /////////////////////////////////////////////////////////////////////
-
-    public void removeSelf() {
-        if (parent != null) { parent.removeChild(parent.indexNode(this)); return; }
-        Surface surface = Surface.fromBox(this); 
-        if (surface != null) surface.dispose(true);
-    }
-
-    /** remove the i^th child */
-    public void removeChild(int i) {
-        Box b = getChild(i);
-        b.RECONSTRAIN();
-        b.dirty();
-        b.clear(MOUSEINSIDE);
-        deleteNode(i);
-        b.parent = null;
-        REPACK();
-        putAndTriggerTrapsAndCatchExceptions("ChildChange", b);
-    }
-    
-    public void put(int i, Object value) throws JSExn {
-        if (i < 0) return;
-            
-        if (value != null && !(value instanceof Box)) {
-            if (Log.on) JS.warn("attempt to set a numerical property on a box to a non-box");
-            return;
-        }
-
-        if (redirect == null) {
-            if (value == null) putAndTriggerTrapsAndCatchExceptions("ChildChange", getChild(i));
-            else JS.warn("attempt to add/remove children to/from a node with a null redirect");
-
-        } else if (redirect != this) {
-            if (value != null) putAndTriggerTrapsAndCatchExceptions("ChildChange", value);
-            redirect.put(i, value);
-            if (value == null) {
-                Box b = (Box)redirect.get(new Integer(i));
-                if (b != null) putAndTriggerTrapsAndCatchExceptions("ChildChange", b);
-            }
-
-        } else if (value == null) {
-            if (i < 0 || i > treeSize()) return;
-            Box b = getChild(i);
-            removeChild(i);
-            putAndTriggerTrapsAndCatchExceptions("ChildChange", b);
-
-        } else {
-            Box b = (Box)value;
-
-            // check if box being moved is currently target of a redirect
-            for(Box cur = b.parent; cur != null; cur = cur.parent)
-                if (cur.redirect == b) {
-                    if (Log.on) JS.warn("attempt to move a box that is the target of a redirect");
-                    return;
-                }
-
-            // check for recursive ancestor violation
-            for(Box cur = this; cur != null; cur = cur.parent)
-                if (cur == b) {
-                    if (Log.on) JS.warn("attempt to make a node a parent of its own ancestor");
-                    if (Log.on) Log.info(this, "box == " + this + "  ancestor == " + b);
-                    return;
-                }
-
-            if (b.parent != null) b.parent.removeChild(b.parent.indexNode(b));
-            insertNode(i, b);
-            b.parent = this;
-            
-            // need both of these in case child was already uncalc'ed
-            b.REPACK();
-            REPACK();
-            
-            b.dirty(); 
-            putAndTriggerTrapsAndCatchExceptions("ChildChange", b);
-        }
-    }
-    
-    public void putAndTriggerTrapsAndCatchExceptions(Object name, Object val) {
-        try {
-            putAndTriggerTraps(name, val);
-        } catch (JSExn e) {
-            JS.log("caught js exception while putting to trap \""+name+"\"");
-            JS.log(e);
-        } catch (Exception e) {
-            JS.log("caught exception while putting to trap \""+name+"\"");
-            JS.log(e);
-        }
-    }
-
-}
-
-
-
-
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/core/Ibex.java b/upstream/org.ibex.core/build/java/org/ibex/core/Ibex.java
deleted file mode 100644 (file)
index 2b36c89..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.core;
-
-import java.io.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.graphics.*;
-import org.ibex.plat.*;
-import org.ibex.net.*;
-import org.ibex.crypto.*;
-
-/** Singleton class that provides all functionality in the ibex.* namespace */
-public final class Ibex extends JS.Cloneable {
-
-    // FIXME remove this
-    private final JS rr;
-
-    public Ibex(Stream rr) { this.rr = bless(rr); }
-
-    public JS resolveString(String str, boolean permitAbsolute) throws JSExn {
-        if (str.indexOf("://") != -1) {
-            if (permitAbsolute) return (Stream)url2res(str);
-            throw new JSExn("absolute URL " + str + " not permitted here");
-        }
-        // root-relative
-        //JS ret = (JS)getAndTriggerTraps("");
-        //FIXME
-        JS ret = rr;
-        while(str.indexOf('.') != -1) {
-            String path = str.substring(0, str.indexOf('.'));
-            str = str.substring(str.indexOf('.') + 1);
-            ret = (JS)ret.get(path);
-        }
-        if (!"".equals(str)) ret = (JS)ret.get(str);
-        return ret;
-    }
-
-    /** lets us put multi-level get/put/call keys all in the same method */
-    private class Sub extends JS {
-        String key;
-        Sub(String key) { this.key = key; }
-        public void put(Object key, Object val) throws JSExn { Ibex.this.put(this.key + "." + key, val); }
-        public Object get(Object key) throws JSExn { return Ibex.this.get(this.key + "." + key); }
-        public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-            return Ibex.this.callMethod(this.key, a0, a1, a2, rest, nargs);
-        }
-        public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-            return Ibex.this.callMethod(this.key + "." + method, a0, a1, a2, rest, nargs);
-        }
-    }
-    private Cache subCache = new Cache(20);
-    private Sub getSub(String s) {
-        Sub ret = (Sub)subCache.get(s);
-        if (ret == null) subCache.put(s, ret = new Sub(s));
-        return ret;
-    }
-
-    public Object get(Object name) throws JSExn {
-        if (name instanceof String && ((String)name).length() == 0) return rr;
-final String ccSwitch0 = (String)(name);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 2: { switch(ccSwitch0.charAt(0)) { case 'u': if ("ui".equals(ccSwitch0)) { if (true) do { return getSub("ui");
- } while(false); break SUCCESS; } break;  }; break; }  case 3: { switch(ccSwitch0.charAt(0)) { case 'b': if ("box".equals(ccSwitch0)) { if (true) do { return new Box();
- } while(false); break SUCCESS; } break;  case 'l': if ("log".equals(ccSwitch0)) { if (true) do { return getSub("log");
- } while(false); break SUCCESS; } break;  case 'n': if ("net".equals(ccSwitch0)) { if (true) do { return getSub("net");
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch0.charAt(0)) { case 'd': if ("date".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'm': if ("math".equals(ccSwitch0)) { if (true) do { return ibexMath;
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch0.charAt(0)) { case 'b': if ("bless".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'c': if ("clone".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch0.charAt(0)) { case 'c': if ("crypto".equals(ccSwitch0)) { if (true) do { return getSub("crypto");
- } while(false); break SUCCESS; } break;  case 'r': if ("regexp".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch0.charAt(1)) { case 't': { switch(ccSwitch0.charAt(2)) { case 'r': { switch(ccSwitch0.charAt(3)) { case 'e': if ("stream".equals(ccSwitch0)) { if (true) do { return getSub("stream");
- } while(false); break SUCCESS; } break;  case 'i': if ("string".equals(ccSwitch0)) { if (true) do { return ibexString;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 't': if ("thread".equals(ccSwitch0)) { if (true) do { return getSub("thread");
- } while(false); break SUCCESS; } break;  case 'u': if ("ui.key".equals(ccSwitch0)) { if (true) do { return getSub("ui.key");
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch0.charAt(0)) { case 'n': if ("net.rpc".equals(ccSwitch0)) { if (true) do { return getSub("net.rpc");
- } while(false); break SUCCESS; } break;  case 'u': if ("ui.font".equals(ccSwitch0)) { if (true) do { return getSub("ui.font");
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 'l': { switch(ccSwitch0.charAt(1)) { case 'o': { switch(ccSwitch0.charAt(2)) { case 'g': { switch(ccSwitch0.charAt(3)) { case '.': { switch(ccSwitch0.charAt(4)) { case 'i': if ("log.info".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'w': if ("log.warn".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } case 'u': if ("ui.mouse".equals(ccSwitch0)) { if (true) do { return getSub("ui.mouse");
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch0.charAt(0)) { case 'l': { switch(ccSwitch0.charAt(1)) { case 'o': { switch(ccSwitch0.charAt(2)) { case 'g': { switch(ccSwitch0.charAt(3)) { case '.': { switch(ccSwitch0.charAt(4)) { case 'd': if ("log.debug".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'e': if ("log.error".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'm': if ("ui.maxdim".equals(ccSwitch0)) { if (true) do { return N(Short.MAX_VALUE);
- } while(false); break SUCCESS; } break;  case 's': if ("ui.screen".equals(ccSwitch0)) { if (true) do { return getSub("ui.screen");
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 10: { switch(ccSwitch0.charAt(0)) { case 'c': { switch(ccSwitch0.charAt(1)) { case 'r': { switch(ccSwitch0.charAt(2)) { case 'y': { switch(ccSwitch0.charAt(3)) { case 'p': { switch(ccSwitch0.charAt(4)) { case 't': { switch(ccSwitch0.charAt(5)) { case 'o': { switch(ccSwitch0.charAt(6)) { case '.': { switch(ccSwitch0.charAt(7)) { case 'm': if ("crypto.md5".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'r': { switch(ccSwitch0.charAt(8)) { case 'c': if ("crypto.rc4".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("crypto.rsa".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 's': if ("stream.url".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'b': if ("ui.browser".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'k': if ("ui.key.alt".equals(ccSwitch0)) { if (true) do { return Surface.alt ? T : F;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 11: { switch(ccSwitch0.charAt(0)) { case 'c': if ("crypto.sha1".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'n': if ("net.rpc.xml".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': if ("ui.key.name".equals(ccSwitch0)) { if (true) do { return getSub("ui.key.name");
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch0.charAt(0)) { case 'n': if ("net.rpc.soap".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch0.charAt(1)) { case 't': { switch(ccSwitch0.charAt(2)) { case 'r': { switch(ccSwitch0.charAt(3)) { case 'e': { switch(ccSwitch0.charAt(4)) { case 'a': { switch(ccSwitch0.charAt(5)) { case 'm': { switch(ccSwitch0.charAt(6)) { case '.': { switch(ccSwitch0.charAt(7)) { case 'c': if ("stream.cache".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': { switch(ccSwitch0.charAt(8)) { case 'n': { switch(ccSwitch0.charAt(9)) { case 'c': if ("stream.uncab".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'z': if ("stream.unzip".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } case 'w': if ("stream.watch".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 't': { switch(ccSwitch0.charAt(1)) { case 'h': { switch(ccSwitch0.charAt(2)) { case 'r': { switch(ccSwitch0.charAt(3)) { case 'e': { switch(ccSwitch0.charAt(4)) { case 'a': { switch(ccSwitch0.charAt(5)) { case 'd': { switch(ccSwitch0.charAt(6)) { case '.': { switch(ccSwitch0.charAt(7)) { case 's': if ("thread.sleep".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'y': if ("thread.yield".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'c': if ("ui.clipboard".equals(ccSwitch0)) { if (true) do { return Platform.getClipBoard();
- } while(false); break SUCCESS; } break;  case 'f': if ("ui.font.wait".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'k': if ("ui.key.shift".equals(ccSwitch0)) { if (true) do { return Surface.shift ? T : F;
- } while(false); break SUCCESS; } break;  } break; } } break; } case 'n': if ("undocumented".equals(ccSwitch0)) { if (true) do { return getSub("undocumented");
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 13: { switch(ccSwitch0.charAt(0)) { case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'f': { switch(ccSwitch0.charAt(4)) { case 'o': { switch(ccSwitch0.charAt(5)) { case 'n': { switch(ccSwitch0.charAt(6)) { case 't': { switch(ccSwitch0.charAt(7)) { case '.': { switch(ccSwitch0.charAt(8)) { case 's': if ("ui.font.serif".equals(ccSwitch0)) { if (true) do { return Main.builtin.get("fonts/vera/VeraSe.ttf");
- } while(false); break SUCCESS; } break;  case 'w': if ("ui.font.width".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 14: { switch(ccSwitch0.charAt(0)) { case 's': { switch(ccSwitch0.charAt(1)) { case 't': { switch(ccSwitch0.charAt(2)) { case 'r': { switch(ccSwitch0.charAt(3)) { case 'e': { switch(ccSwitch0.charAt(4)) { case 'a': { switch(ccSwitch0.charAt(5)) { case 'm': { switch(ccSwitch0.charAt(6)) { case '.': { switch(ccSwitch0.charAt(7)) { case 'h': if ("stream.homedir".equals(ccSwitch0)) { if (true) do { return url2res("file:" + System.getProperty("user.home"));
- } while(false); break SUCCESS; } break;  case 't': if ("stream.tempdir".equals(ccSwitch0)) { if (true) do { return url2res("file:" + System.getProperty("java.io.tempdir"));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'f': if ("ui.font.height".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'k': if ("ui.key.control".equals(ccSwitch0)) { if (true) do { return Surface.control ? T : F;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 15: { switch(ccSwitch0.charAt(0)) { case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'k': if ("ui.key.name.alt".equals(ccSwitch0)) { if (true) do { return Platform.altKeyName();
- } while(false); break SUCCESS; } break;  case 'm': if ("ui.mouse.button".equals(ccSwitch0)) { if (true) do { 
-if (Surface.button1 && !Surface.button2 && !Surface.button3) return N(1);
-else if (!Surface.button1 && Surface.button2 && !Surface.button3) return N(2);
-else if (!Surface.button1 && !Surface.button2 && Surface.button3) return N(3);
-else return ZERO;
- } while(false); break SUCCESS; } break;  case 's': if ("ui.screen.width".equals(ccSwitch0)) { if (true) do { return N(Platform.getScreenWidth());
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 16: { switch(ccSwitch0.charAt(0)) { case 's': if ("stream.parse.xml".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': if ("ui.screen.height".equals(ccSwitch0)) { if (true) do { return N(Platform.getScreenHeight());
- } while(false); break SUCCESS; } break;  }; break; }  case 17: { switch(ccSwitch0.charAt(0)) { case 's': { switch(ccSwitch0.charAt(1)) { case 't': { switch(ccSwitch0.charAt(2)) { case 'r': { switch(ccSwitch0.charAt(3)) { case 'e': { switch(ccSwitch0.charAt(4)) { case 'a': { switch(ccSwitch0.charAt(5)) { case 'm': { switch(ccSwitch0.charAt(6)) { case '.': { switch(ccSwitch0.charAt(7)) { case 'p': { switch(ccSwitch0.charAt(8)) { case 'a': { switch(ccSwitch0.charAt(9)) { case 'r': { switch(ccSwitch0.charAt(10)) { case 's': { switch(ccSwitch0.charAt(11)) { case 'e': { switch(ccSwitch0.charAt(12)) { case '.': { switch(ccSwitch0.charAt(13)) { case 'h': if ("stream.parse.html".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': if ("stream.parse.utf8".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 'u': { switch(ccSwitch0.charAt(1)) { case 'i': { switch(ccSwitch0.charAt(2)) { case '.': { switch(ccSwitch0.charAt(3)) { case 'f': { switch(ccSwitch0.charAt(4)) { case 'o': { switch(ccSwitch0.charAt(5)) { case 'n': { switch(ccSwitch0.charAt(6)) { case 't': { switch(ccSwitch0.charAt(7)) { case '.': { switch(ccSwitch0.charAt(8)) { case 'm': if ("ui.font.monospace".equals(ccSwitch0)) { if (true) do { return Main.builtin.get("fonts/vera/VeraMono.ttf");
- } while(false); break SUCCESS; } break;  case 's': if ("ui.font.sansserif".equals(ccSwitch0)) { if (true) do { return Main.builtin.get("fonts/vera/Vera.ttf");
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 26: { switch(ccSwitch0.charAt(0)) { case 'u': if ("undocumented.initialOrigin".equals(ccSwitch0)) { if (true) do { return Main.origin;
- } while(false); break SUCCESS; } break;  }; break; }  case 28: { switch(ccSwitch0.charAt(0)) { case 'u': if ("undocumented.initialTemplate".equals(ccSwitch0)) { if (true) do { return Main.initialTemplate;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        return super.get(name);
-    }
-
-    public void put(Object name, final Object value) throws JSExn {
-final String ccSwitch1 = (String)(name);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 6: { switch(ccSwitch1.charAt(0)) { case 't': if ("thread".equals(ccSwitch1)) { if (true) do { Scheduler.add((Task)value); return;
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch1.charAt(0)) { case 'u': if ("ui.frame".equals(ccSwitch1)) { if (true) do { Platform.createSurface((Box)value, true, true); return;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch1.charAt(0)) { case 'u': if ("ui.window".equals(ccSwitch1)) { if (true) do { Platform.createSurface((Box)value, false, true); return;
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch1.charAt(0)) { case 'u': if ("ui.clipboard".equals(ccSwitch1)) { if (true) do { Platform.setClipBoard((String)value); return;
- } while(false); break SUCCESS; } break;  }; break; }  case 31: { switch(ccSwitch1.charAt(0)) { case 'u': if ("undocumented.proxyAuthorization".equals(ccSwitch1)) { if (true) do { 
-HTTP.Proxy.Authorization.authorization = value.toString();
-HTTP.Proxy.Authorization.waitingForUser.release();
-return;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        throw new JSExn("attempted to put unknown property: ibex."+name);
-    }
-
-    public Object callMethod(Object name, Object a, Object b, Object c, Object[] rest, int nargs) throws JSExn {
-        try {
-final String ccSwitch2 = (String)(name);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 4: { switch(ccSwitch2.charAt(0)) { case 'd': if ("date".equals(ccSwitch2)) { if (true) do { return new JSDate(a, b, c, rest, nargs);
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch2.charAt(0)) { case 'l': { switch(ccSwitch2.charAt(1)) { case 'o': { switch(ccSwitch2.charAt(2)) { case 'g': { switch(ccSwitch2.charAt(3)) { case '.': { switch(ccSwitch2.charAt(4)) { case 'i': if ("log.info".equals(ccSwitch2)) { if (true) do { JS.info(a== null ? "**null**" : a.toString()); return null;
- } while(false); break SUCCESS; } break;  case 'w': if ("log.warn".equals(ccSwitch2)) { if (true) do { JS.warn(a== null ? "**null**" : a.toString()); return null;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } }; break; }  case 9: { switch(ccSwitch2.charAt(0)) { case 'l': { switch(ccSwitch2.charAt(1)) { case 'o': { switch(ccSwitch2.charAt(2)) { case 'g': { switch(ccSwitch2.charAt(3)) { case '.': { switch(ccSwitch2.charAt(4)) { case 'd': if ("log.debug".equals(ccSwitch2)) { if (true) do { JS.debug(a== null ? "**null**" : a.toString()); return null;
- } while(false); break SUCCESS; } break;  case 'e': if ("log.error".equals(ccSwitch2)) { if (true) do { JS.error(a== null ? "**null**" : a.toString()); return null;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } }; break; }  case 12: { switch(ccSwitch2.charAt(0)) { case 'n': if ("net.rpc.soap".equals(ccSwitch2)) { if (true) do { return new SOAP((String)a, "", (String)b, (String)c);
-
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-            switch (nargs) {
-                case 0:
-final String ccSwitch3 = (String)(name);  SUCCESS:do { switch(ccSwitch3.length()) {
-case 12: { switch(ccSwitch3.charAt(0)) { case 't': if ("thread.yield".equals(ccSwitch3)) { if (true) do { sleep(0); return null;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                    break;
-                case 1:
-final String ccSwitch4 = (String)(name);  SUCCESS:do { switch(ccSwitch4.length()) {
-case 5: { switch(ccSwitch4.charAt(0)) { case 'b': if ("bless".equals(ccSwitch4)) { if (true) do { return bless((JS)a);
- } while(false); break SUCCESS; } break;  case 'c': if ("clone".equals(ccSwitch4)) { if (true) do { 
-if (!(a instanceof JS.Cloneable)) throw new JSExn("cannot clone a " + a.getClass().getName());
-return ((JS.Cloneable)a).jsclone();
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch4.charAt(0)) { case 'r': if ("regexp".equals(ccSwitch4)) { if (true) do { return new JSRegexp(a, null);
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch4.charAt(0)) { case 'c': { switch(ccSwitch4.charAt(1)) { case 'r': { switch(ccSwitch4.charAt(2)) { case 'y': { switch(ccSwitch4.charAt(3)) { case 'p': { switch(ccSwitch4.charAt(4)) { case 't': { switch(ccSwitch4.charAt(5)) { case 'o': { switch(ccSwitch4.charAt(6)) { case '.': { switch(ccSwitch4.charAt(7)) { case 'm': if ("crypto.md5".equals(ccSwitch4)) { if (true) do { /* FEATURE */ return null;
- } while(false); break SUCCESS; } break;  case 'r': { switch(ccSwitch4.charAt(8)) { case 'c': if ("crypto.rc4".equals(ccSwitch4)) { if (true) do { /* FEATURE */ return null;
- } while(false); break SUCCESS; } break;  case 's': if ("crypto.rsa".equals(ccSwitch4)) { if (true) do { /* FEATURE */ return null;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 's': if ("stream.url".equals(ccSwitch4)) { if (true) do { {
-String url = (String)a;
-if (url.startsWith("http://")) return new Stream.HTTP(url);
-else if (url.startsWith("https://")) return new Stream.HTTP(url);
-else if (url.startsWith("data:")) return new Stream.ByteArray(Base64.decode(url.substring(5)), null);
-else if (url.startsWith("utf8:")) return new Stream.ByteArray(url.substring(5).getBytes(), null);
-else if (url.startsWith("file:")) {
-
-Platform.fileDialog(url.substring(5), false);
-}
-throw new JSExn("invalid resource specifier " + url);
-}
- } while(false); break SUCCESS; } break;  case 'u': if ("ui.browser".equals(ccSwitch4)) { if (true) do { Platform.newBrowserWindow((String)a); return null;
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch4.charAt(0)) { case 'c': if ("crypto.sha1".equals(ccSwitch4)) { if (true) do { /* FEATURE */ return null;
- } while(false); break SUCCESS; } break;  case 'n': if ("net.rpc.xml".equals(ccSwitch4)) { if (true) do { return new XMLRPC((String)a, "");
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch4.charAt(0)) { case 's': { switch(ccSwitch4.charAt(1)) { case 't': { switch(ccSwitch4.charAt(2)) { case 'r': { switch(ccSwitch4.charAt(3)) { case 'e': { switch(ccSwitch4.charAt(4)) { case 'a': { switch(ccSwitch4.charAt(5)) { case 'm': { switch(ccSwitch4.charAt(6)) { case '.': { switch(ccSwitch4.charAt(7)) { case 'c': if ("stream.cache".equals(ccSwitch4)) { if (true) do { 
-try { return new Stream.CachedStream((Stream)a, "resources", true); }
-catch (Stream.NotCacheableException e) { throw new JSExn("this resource cannot be cached"); }
- } while(false); break SUCCESS; } break;  case 'u': { switch(ccSwitch4.charAt(8)) { case 'n': { switch(ccSwitch4.charAt(9)) { case 'c': if ("stream.uncab".equals(ccSwitch4)) { if (true) do { return new Stream.Cab((Stream)a);
- } while(false); break SUCCESS; } break;  case 'z': if ("stream.unzip".equals(ccSwitch4)) { if (true) do { return new Stream.Zip((Stream)a);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } case 't': if ("thread.sleep".equals(ccSwitch4)) { if (true) do { sleep(JS.toInt(a)); return null;
- } while(false); break SUCCESS; } break;  }; break; }  case 16: { switch(ccSwitch4.charAt(0)) { case 's': if ("stream.parse.xml".equals(ccSwitch4)) { if (true) do { new XMLHelper((JS)b).doParse((JS)a); return null;
-
- } while(false); break SUCCESS; } break;  }; break; }  case 17: { switch(ccSwitch4.charAt(0)) { case 's': { switch(ccSwitch4.charAt(1)) { case 't': { switch(ccSwitch4.charAt(2)) { case 'r': { switch(ccSwitch4.charAt(3)) { case 'e': { switch(ccSwitch4.charAt(4)) { case 'a': { switch(ccSwitch4.charAt(5)) { case 'm': { switch(ccSwitch4.charAt(6)) { case '.': { switch(ccSwitch4.charAt(7)) { case 'p': { switch(ccSwitch4.charAt(8)) { case 'a': { switch(ccSwitch4.charAt(9)) { case 'r': { switch(ccSwitch4.charAt(10)) { case 's': { switch(ccSwitch4.charAt(11)) { case 'e': { switch(ccSwitch4.charAt(12)) { case '.': { switch(ccSwitch4.charAt(13)) { case 'h': if ("stream.parse.html".equals(ccSwitch4)) { if (true) do { throw new JSExn("not implemented yet");
- } while(false); break SUCCESS; } break;  case 'u': if ("stream.parse.utf8".equals(ccSwitch4)) { if (true) do { try { return new String(InputStreamToByteArray.convert(Stream.getInputStream(a))); }
-catch (Exception e) { Log.warn(this, e); }
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  } /* switch */  } while(false); /* OUTER */
-                    break;
-                case 2:
-final String ccSwitch5 = (String)(name);  SUCCESS:do { switch(ccSwitch5.length()) {
-case 6: { switch(ccSwitch5.charAt(0)) { case 'r': if ("regexp".equals(ccSwitch5)) { if (true) do { return new JSRegexp(a, b);
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch5.charAt(0)) { case 's': if ("stream.watch".equals(ccSwitch5)) { if (true) do { return new Stream.ProgressWatcher((Stream)a, (JS)b);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                case 3:
-final String ccSwitch6 = (String)(name);  SUCCESS:do { switch(ccSwitch6.length()) {
-case 12: { switch(ccSwitch6.charAt(0)) { case 'u': if ("ui.font.wait".equals(ccSwitch6)) { if (true) do { throw new Error("FIXME: ibex.ui.font.wait not implemented");
- } while(false); break SUCCESS; } break;  }; break; }  case 13: { switch(ccSwitch6.charAt(0)) { case 'u': if ("ui.font.width".equals(ccSwitch6)) { if (true) do { return N(Font.getFont((Stream)a, JS.toInt(b)).textwidth((String)c));
- } while(false); break SUCCESS; } break;  }; break; }  case 14: { switch(ccSwitch6.charAt(0)) { case 'u': if ("ui.font.height".equals(ccSwitch6)) { if (true) do { return N(Font.getFont((Stream)a, JS.toInt(b)).textheight((String)c));
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                    break;
-            }
-        } catch (RuntimeException e) {
-            // FIXME: maybe JSExn should take a second argument, Exception
-            Log.warn(this, "ibex."+name+"() threw: " + e);
-            throw new JSExn("invalid argument for ibex object method "+name+"()");
-        }
-
-        throw new JSExn("invalid number of arguments ("+nargs+") for ibex object method "+name+"()");
-    }
-
-    public Stream url2res(String url) throws JSExn {
-        if (url.startsWith("http://")) return new Stream.HTTP(url);
-        else if (url.startsWith("https://")) return new Stream.HTTP(url);
-        else if (url.startsWith("data:")) return new Stream.ByteArray(Base64.decode(url.substring(5)), null);
-        else if (url.startsWith("utf8:")) return new Stream.ByteArray(url.substring(5).getBytes(), null);
-        else throw new JSExn("invalid resource specifier " + url);
-        // FIXME support file:// via dialog boxes
-    }
-
-    public static void sleep(final int i) throws JSExn {
-        try {
-            final JS.UnpauseCallback callback = JS.pause();
-            // FEATURE use a single sleeper thread
-            new Thread() { public void run() {
-                try { Thread.sleep(i); } catch (InterruptedException e) { }
-                Scheduler.add(callback);
-            } }.start();
-        } catch (JS.NotPauseableException npe) {
-            throw new JSExn("you cannot sleep or yield in the foreground thread");
-        }
-    }
-    
-    public static final JSMath ibexMath = new JSMath() {
-            private JS gs = new JSScope.Global();
-            public Object get(Object key) throws JSExn {
-final String ccSwitch7 = (String)(key);  SUCCESS:do { switch(ccSwitch7.length()) {
-case 3: { switch(ccSwitch7.charAt(0)) { case 'N': if ("NaN".equals(ccSwitch7)) { if (true) do { return gs.get("NaN");
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch7.charAt(0)) { case 'i': if ("isNaN".equals(ccSwitch7)) { if (true) do { return gs.get("isNaN");
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch7.charAt(0)) { case 'I': if ("Infinity".equals(ccSwitch7)) { if (true) do { return gs.get("Infinity");
- } while(false); break SUCCESS; } break;  case 'i': if ("isFinite".equals(ccSwitch7)) { if (true) do { return gs.get("isFinite");
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                return super.get(key);
-            }
-        };
-
-    public static final JS ibexString = new JS() {
-            private JS gs = new JSScope.Global();
-            public void put(Object key, Object val) { }
-            public Object get(Object key) throws JSExn {
-final String ccSwitch8 = (String)(key);  SUCCESS:do { switch(ccSwitch8.length()) {
-case 6: { switch(ccSwitch8.charAt(0)) { case 'e': if ("escape".equals(ccSwitch8)) { if (true) do { return gs.get("escape");
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch8.charAt(0)) { case 'p': if ("parseInt".equals(ccSwitch8)) { if (true) do { return gs.get("parseInt");
- } while(false); break SUCCESS; } break;  case 'u': if ("unescape".equals(ccSwitch8)) { if (true) do { return gs.get("unescape");
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch8.charAt(0)) { case 'd': if ("decodeURI".equals(ccSwitch8)) { if (true) do { return gs.get("decodeURI");
- } while(false); break SUCCESS; } break;  case 'e': if ("encodeURI".equals(ccSwitch8)) { if (true) do { return gs.get("encodeURI");
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch8.charAt(0)) { case 'p': if ("parseFloat".equals(ccSwitch8)) { if (true) do { return gs.get("parseFloat");
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch8.charAt(0)) { case 'f': if ("fromCharCode".equals(ccSwitch8)) { if (true) do { return gs.get("stringFromCharCode");
- } while(false); break SUCCESS; } break;  }; break; }  case 18: { switch(ccSwitch8.charAt(0)) { case 'd': if ("decodeURIComponent".equals(ccSwitch8)) { if (true) do { return gs.get("decodeURIComponent");
- } while(false); break SUCCESS; } break;  case 'e': if ("encodeURIComponent".equals(ccSwitch8)) { if (true) do { return gs.get("encodeURIComponent");
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                return null;
-            }
-        };
-
-    private class XMLHelper extends XML {
-        private class Wrapper extends XML.Exn { public JSExn wrapee; public Wrapper(JSExn jse) { super(""); wrapee = jse; } }
-        private JS characters, whitespace, endElement, startElement;
-        public XMLHelper(JS b) throws JSExn {
-            super(BUFFER_SIZE);
-            startElement = (JS)b.getAndTriggerTraps("startElement");
-            endElement   = (JS)b.getAndTriggerTraps("endElement");
-            characters   = (JS)b.getAndTriggerTraps("characters");
-            whitespace   = (JS)b.getAndTriggerTraps("whitespace");
-        }
-
-        public void startElement(XML.Element c) throws XML.Exn { try {
-                JS attrs = new JS();
-                // FIXME attribute URIs? add an additional hash?
-                for(int i=0; i<c.getAttrLen(); i++) attrs.put(c.getAttrKey(i), c.getAttrVal(i));
-                startElement.call(c.getLocalName(), attrs, c.getUri(), null, 3);
-        } catch (JSExn jse) { throw new Wrapper(jse); } }
-
-        public void endElement(XML.Element c) throws XML.Exn { try {
-                endElement.call(c.getLocalName(), c.getUri(), null, null, 2);
-        } catch (JSExn jse) { throw new Wrapper(jse); } }
-
-        public void characters(char[] ch, int start, int length) throws XML.Exn { try {
-                characters.call(new String(ch, start, length), null, null, null, 1);
-        } catch (JSExn jse) { throw new Wrapper(jse); } }
-
-        public void whitespace(char[] ch, int start, int length) throws XML.Exn { try {
-                whitespace.call(new String(ch, start, length), null, null, null, 1);
-        } catch (JSExn jse) { throw new Wrapper(jse); } }
-
-        public void doParse(JS s) throws JSExn {
-            try { 
-                parse(new BufferedReader(new InputStreamReader(Stream.getInputStream(s))));
-            } catch (Wrapper e) {
-                throw e.wrapee;
-            } catch (XML.Exn e) {
-                throw new JSExn("error parsing XML: " + e.toString());
-            } catch (IOException e) {
-                if (Log.on) Log.info(this, "IO Exception while reading from file");
-                if (Log.on) Log.info(this, e);
-                throw new JSExn("error reading from Resource");
-            }
-        }
-    }
-
-    // FEATURE: move this into builtin.xwar
-    public Blessing bless(JS b) { return new Ibex.Blessing((JS.Cloneable)b, this, null, null); }
-    public static class Blessing extends JS.Clone {
-        private Ibex ibex;
-        private Template t = null;
-        public Object parentkey = null;
-        public Blessing parent = null;
-        private Hash cache = new Hash();
-        public Blessing(JS.Cloneable clonee, Ibex ibex, Blessing parent, Object parentkey) {
-            super(clonee); this.ibex = ibex; this.parentkey = parentkey; this.parent = parent; }
-        public Object get(Object key) throws JSExn {
-            if (key.equals("")) return ((Object)getStatic());
-            if (cache.get(key) != null) return cache.get(key);
-            Object ret = new Blessing((JS.Cloneable)clonee.get(key), ibex, this, key);
-            cache.put(key, ret);
-            return ret;
-        }
-        public static Blessing getBlessing(Object o) {
-            if (!(o instanceof JS)) return null;
-            JS js = (JS)o;
-            while (js instanceof JS.Clone && !(js instanceof Blessing)) js = ((JS.Clone)js).getClonee();
-            if (!(js instanceof Blessing)) return null;
-            return (Blessing)js;
-        }
-        public InputStream getImage() throws JSExn {
-            try {
-                InputStream in = Stream.getInputStream(this);
-                if (in != null) return in;
-            } catch (IOException e) { /* DELIBERATE */ }
-            String[] exts = new String[] { ".png", ".jpeg", ".gif" };
-            for (int i=0; i < exts.length; i++)
-                try {
-                    InputStream in = Stream.getInputStream(parent.get(parentkey + exts[i]));
-                    if (in != null) return in;
-                } catch (IOException f) { /* DELIBERATE */ }
-            return null;
-        }
-        public JSScope getStatic() {
-            try {
-                if (t == null) {
-                    JS res = (JS) parent.get(parentkey + ".t");
-                    t = Template.buildTemplate(res.unclone().toString(), res, ibex);
-                }
-                return t.staticScope;
-            } catch (Exception e) {
-                Log.error(this, e);
-                return null;
-            }
-        }
-        public Object call(Object a, Object b, Object c, Object[] rest, int nargs) throws JSExn {
-            // GROSS hack
-            if (nargs != 1 && nargs != 9999) throw new JSExn("FIXME can only call with one arg");
-            getStatic();
-            if (t == null) throw new JSExn("No such template " + parentkey);
-            if (nargs == 9999) return t;
-            t.apply((Box)a);
-            return a;
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/core/LocalStorage.java b/upstream/org.ibex.core/build/java/org/ibex/core/LocalStorage.java
deleted file mode 100644 (file)
index b523d24..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.core;
-
-import java.io.*;
-import org.ibex.util.*;
-import org.ibex.crypto.*;
-
-/** Manages access to ~/.ibex */
-public class LocalStorage {
-
-    static String ibexDirName = System.getProperty("user.home") + java.io.File.separatorChar + ".ibex";
-
-    static java.io.File ibexDir = null;
-    static java.io.File cacheDir = null;
-
-    static {
-        try {
-            ibexDir = new java.io.File(ibexDirName);
-            if (!ibexDir.mkdirs()) ibexDir = null;
-            try {
-                cacheDir = new java.io.File(ibexDirName + java.io.File.separatorChar + "cache");
-                if (!cacheDir.mkdirs()) cacheDir = null;
-            } catch (Exception e) {
-                Log.warn(LocalStorage.class, "unable to create cache directory " +
-                         ibexDirName + java.io.File.separatorChar + "cache");
-            }
-        } catch (Exception e) {
-            Log.warn(LocalStorage.class, "unable to create ibex directory " + ibexDirName);
-        }
-    }
-
-    // FEATURE: we ought to be able to do stuff like sha1-checking and date checking on cached resources    
-    public static class Cache {
-
-        private static void delTree(java.io.File f) throws IOException {
-            if (f.isDirectory()) {
-                String[] s = f.list();
-                for(int i=0; i<s.length; i++)
-                    delTree(new java.io.File(f.getPath() + java.io.File.separatorChar + s[i]));
-            }
-            f.delete();
-        }
-
-        public static void flush() throws IOException {
-            delTree(cacheDir);
-            cacheDir.mkdirs();
-        }
-
-        public static java.io.File getCacheFileForKey(String key) {
-            // FEATURE: be smarter here
-            return new java.io.File(cacheDir.getPath() + File.separatorChar + new String(Base64.encode(key.getBytes())));
-        }
-
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/core/Main.java b/upstream/org.ibex.core/build/java/org/ibex/core/Main.java
deleted file mode 100644 (file)
index b7be374..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.core;
-
-import java.net.*;
-import java.io.*;
-import java.util.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.plat.*;
-import org.ibex.graphics.*;
-
-/** Entry point for the Ibex Engine; handles splash screen, initial xwar loading, and argument processing */
-public class Main {
-
-    /**
-     *  FEATURE: this should be implemented using self-emulation
-     *  Used for security checks. If this is null, it means that only
-     *  scripts originating from the local filesystem are loaded in
-     *  the engine (maximum permissions). If scripts have been loaded
-     *  from multiple locations, this will be 0.0.0.0 (the invalid
-     *  IP).
-     */
-    public static java.net.InetAddress originAddr = null;
-    public static String originHost = null;
-    public static String origin = null;
-    public static String initialTemplate = null;
-    
-    public static final Stream builtin = new Stream.Zip(new Stream.Builtin());
-
-    public static void printUsage() {
-        System.err.println("Usage: ibex [-lawp] [ url | file | directory ]");
-        System.err.println("");
-        System.err.println("    -l <level>      set logging level to { debug, info (default), warn, error, silent }");
-        System.err.println("    -l rpc          log all XML-RPC and SOAP conversations");
-        System.err.println("    -l user@host    email log to user@host");
-        System.err.println("    -l host:port    emit log to TCP socket");
-        System.err.println("    -l <file>       write log to a file on disk");
-        System.err.println("    -a              check assertions");
-        System.err.println("    -w <window-id>  reserved for libibex");
-        System.err.println("    -p              dump profiling information [not yet supported]");
-        Runtime.getRuntime().exit(-1);
-    }
-
-    public static void main(String[] args) throws UnknownHostException, JSExn, IOException {
-        int startargs = 0;
-        while (true) {
-            if (startargs > args.length - 1) printUsage();
-            else if (args[startargs].equals("-a")) JS.checkAssertions = true;
-            else if (args[startargs].equals("-l")) {
-                startargs++;
-                StringTokenizer opts = new StringTokenizer(args[startargs], ",");
-                while(opts.hasMoreTokens()) {
-                    String opt = opts.nextToken();
-                    if (opt.indexOf('@') != -1) Log.email(opt);
-                    else if (opt.indexOf(':') != -1)
-                        Log.tcp(opt.substring(0, opt.indexOf(':')),
-                                Integer.parseInt(opt.substring(opt.indexOf(':') + 1)));
-                    else if (opt.equals("debug")) Log.level = Log.DEBUG;
-                    else if (opt.equals("info")) Log.level = Log.INFO;
-                    else if (opt.equals("warn")) Log.level = Log.WARN;
-                    else if (opt.equals("error")) Log.level = Log.ERROR;
-                    else if (opt.equals("silent")) Log.level = Log.SILENT;
-                    else if (opt.equals("rpc")) Log.rpc = true;
-                    else Log.file(opt);
-                }
-            }
-            else break;
-            startargs++;
-        }
-
-        org.ibex.plat.Platform.forceLoad();
-        if (Log.on) for(int i=0; i<args.length; i++) Log.info(Main.class, "argument " + i + ": " + args[i]);
-
-        initialTemplate = args.length > startargs + 1 ? args[startargs + 1] : "main";
-        origin = args[startargs];
-
-        Stream rr;
-        final String startupTemplate;
-        if (origin.startsWith("http://") || origin.startsWith("https://")) {
-            originHost = origin.substring(origin.indexOf('/') + 2);
-            originHost = originHost.substring(0, originHost.indexOf('/') == -1 ? originHost.length() : originHost.indexOf('/'));
-            if (originHost.indexOf('@') != -1) originHost = originHost.substring(originHost.indexOf('@') + 1);
-            originAddr = InetAddress.getByName(originHost);
-            rr = builtin;
-            startupTemplate = "org.ibex.builtin.splash";
-        } else {
-            rr = new Stream.File(origin);
-            if (!new File(origin).isDirectory()) rr = new Stream.Zip(rr);
-            startupTemplate = initialTemplate;
-        }
-
-        if (Log.on) Log.info(Main.class, "loading xwar");
-        final Ibex ibex = new Ibex(rr);
-
-        org.ibex.graphics.Surface.scarImage =
-            Picture.load((Stream)Main.builtin.get("org/ibex/core/builtin/scar.png"),
-                         new Task() { public void perform() throws JSExn, UnknownHostException {
-                             if (Log.on) Log.info(Main.class, "invoking initial template");
-                             ibex.resolveString(startupTemplate, false).call(new Box(), null, null, null, 1);
-                         } });
-
-        Scheduler.init();
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/core/Template.java b/upstream/org.ibex.core/build/java/org/ibex/core/Template.java
deleted file mode 100644 (file)
index 6e29c4a..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.core;
-
-import java.io.*;
-import java.util.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-
-/**
- *  Encapsulates a template node (the &lt;template/&gt; element of a
- *  .ibex file, or any child element thereof).
- *
- *  Note that the Template instance corresponding to the
- *  &lt;template/&gt; node carries all the header information -- hence
- *  some of the instance members are not meaningful on non-root
- *  Template instances. We refer to these non-root instances as
- *  <i>anonymous templates</i>.
- *
- *  See the Ibex reference for information on the order in which
- *  templates are applied, attributes are put, and scripts are run.
- */
-public class Template {
-
-    // Instance Members ///////////////////////////////////////////////////////
-
-    String id = null;                   ///< the id of this box
-    String redirect = null;             ///< the id of the redirect target; only meaningful on a root node
-    private String[] keys;              ///< keys to be "put" to instances of this template; elements correspond to those of vals
-    private Object[] vals;              ///< values to be "put" to instances of this template; elements correspond to those of keys
-    private String[] urikeys;
-    private String[] urivals;
-    private Vec children = new Vec();   ///< during XML parsing, this holds the list of currently-parsed children; null otherwise
-    private JS script = null;           ///< the script on this node
-    Template prev;
-    Template prev2;
-    JSScope staticScope = null;         ///< the scope in which the static block is executed
-    JS staticObject = null;
-
-
-    // Only used during parsing /////////////////////////////////////////////////////////////////
-
-    private StringBuffer content = null;   ///< during XML parsing, this holds partially-read character data; null otherwise
-    private int content_start = 0;         ///< line number of the first line of <tt>content</tt>
-    private int startLine = -1;            ///< the line number that this element starts on
-    private Ibex ibex;
-
-
-    // Static data/methods ///////////////////////////////////////////////////////////////////
-
-    // for non-root nodes
-    private Template(Template t, int startLine) { prev = t; this.ibex = t.ibex; this.startLine = startLine; }
-    private Template(Ibex ibex) { this.ibex = ibex; }
-    
-
-    // Methods to apply templates ////////////////////////////////////////////////////////
-
-   
-    /** Applies the template to Box b
-     *  @param pboxes a vector of all box parents on which to put $-references
-     *  @param ptemplates a vector of the fileNames to recieve private references on the pboxes
-     */
-    public void apply(Box b) throws JSExn {
-        try {
-            apply(b, null);
-        } catch (IOException e) {
-            b.clear(Box.VISIBLE);
-            b.mark_for_repack();
-            Log.warn(this, e);
-            throw new JSExn(e.toString());
-        } catch (JSExn e) {
-            b.clear(Box.VISIBLE);
-            b.mark_for_repack();
-            Log.warn(this, e);
-            throw e;
-        }
-    }
-
-    private void apply(Box b, PerInstantiationScope parentPis) throws JSExn, IOException {
-        if (prev != null) prev.apply(b, null);
-        if (prev2 != null) prev2.apply(b, null);
-
-        // FIXME this dollar stuff is all wrong
-        if (id != null) parentPis.putDollar(id, b);
-
-        PerInstantiationScope pis = new PerInstantiationScope(b, ibex, parentPis, staticObject);
-        for(int i=0; i<urikeys.length; i++) {
-            if (urikeys[i] == null) continue;
-            pis.declare(urikeys[i]);
-            pis.put(urikeys[i], ibex.resolveString(urivals[i], true));
-        }
-
-        // FIXME needs to obey the new application-ordering rules
-        for (int i=0; children != null && i<children.size(); i++) {
-            Box kid = new Box();
-            ((Template)children.elementAt(i)).apply(kid, pis);
-            b.putAndTriggerTraps(b.get("numchildren"), kid);
-        }
-
-        if (script != null) JS.cloneWithNewParentScope(script, pis).call(null, null, null, null, 0);
-
-        Object key, val;
-        for(int i=0; keys != null && i < keys.length; i++) {
-            if (keys[i] == null) continue;
-            key = keys[i];
-            val = vals[i];
-
-            if ("null".equals(val)) val = null;
-
-            if (val != null && val instanceof String && ((String)val).length() > 0) {
-                switch (((String)val).charAt(0)) {
-                    case '$':
-                        val = pis.get(val);
-                        if (val == null) throw new JSExn("unknown box id '"+vals[i]+"' referenced in XML attribute");
-                        break;
-                    case '.':
-                        val = ibex.resolveString(((String)val).substring(1), false);
-                    // FIXME: url case
-                    // FIXME: should we be resolving all of these in the XML-parsing code?
-                }
-            }
-            b.putAndTriggerTraps(key, val);
-        }
-    }
-
-
-
-    // XML Parsing /////////////////////////////////////////////////////////////////
-
-    public static Template buildTemplate(String sourceName, Object s, Ibex ibex) {
-        try {
-            return new TemplateHelper(sourceName, s, ibex).t;
-        } catch (Exception e) {
-            Log.error(Template.class, e);
-            return null;
-        }
-    }
-
-    /** handles XML parsing; builds a Template tree as it goes */
-    static final class TemplateHelper extends XML {
-
-       String sourceName;
-        private int state = STATE_INITIAL;
-        private static final int STATE_INITIAL = 0;
-        private static final int STATE_IN_ROOT_NODE = 1;
-        private static final int STATE_IN_TEMPLATE_NODE = 2; 
-        private static final int STATE_IN_META_NODE = 3;
-
-        StringBuffer static_content = null;
-        int static_content_start = 0;
-        Vec nodeStack = new Vec();
-        Template t = null;
-        int meta = 0;
-        Ibex ibex;
-
-        String initial_uri = "";
-
-       public TemplateHelper(String sourceName, Object s, Ibex ibex) throws XML.Exn, IOException, JSExn {
-            this.sourceName = sourceName;
-            this.ibex = ibex;
-            InputStream is = Stream.getInputStream(s);
-            Ibex.Blessing b = Ibex.Blessing.getBlessing(s).parent;
-            while(b != null) {
-                if(b.parentkey != null) initial_uri = b.parentkey + (initial_uri.equals("") ? "" : "." + initial_uri);
-                b = b.parent;
-            }
-            initial_uri = "";
-            parse(new InputStreamReader(is));
-            JS staticScript = parseScript(static_content, static_content_start);
-            t.staticObject = new JS();
-            t.staticScope = new PerInstantiationScope(null, ibex, null, t.staticObject);
-            if (staticScript != null) JS.cloneWithNewParentScope(staticScript, t.staticScope).call(null, null, null, null, 0);
-        }
-
-        private JS parseScript(StringBuffer content, int content_start) throws IOException {
-            if (content == null) return null;
-            String contentString = content.toString();
-            if (contentString.trim().length() > 0) return JS.fromReader(sourceName, content_start, new StringReader(contentString));
-            return null;
-        }
-
-        public void startElement(XML.Element c) throws XML.Exn {
-            switch(state) {
-                case STATE_IN_META_NODE: { meta++; return; }
-                case STATE_INITIAL:
-                    if (!"ibex".equals(c.getLocalName()))
-                        throw new XML.Exn("root element was not <ibex>", XML.Exn.SCHEMA, getLine(), getCol());
-                    if (c.getAttrLen() != 0)
-                        throw new XML.Exn("root element must not have attributes", XML.Exn.SCHEMA, getLine(), getCol());
-                    if (c.getUri("ui") == null || "".equals(c.getUri("ui"))) c.addUri("ui", "ibex://ui");
-                    if (c.getUri("meta") == null || "".equals(c.getUri("meta"))) c.addUri("meta", "ibex://meta");
-                    if (c.getUri("") == null || "".equals(c.getUri(""))) c.addUri("", initial_uri);
-                    state = STATE_IN_ROOT_NODE;
-                    return;
-                case STATE_IN_ROOT_NODE:
-                    if ("ibex://meta".equals(c.getUri())) { state = STATE_IN_META_NODE; meta = 0; return; }
-                    state = STATE_IN_TEMPLATE_NODE;
-                    t = (t == null) ? new Template(ibex) : new Template(t, getLine());
-                    break;
-                case STATE_IN_TEMPLATE_NODE:
-                    nodeStack.addElement(t);
-                    t = new Template(ibex);
-                    break;
-            }
-
-            if (!("ibex://ui".equals(c.getUri()) && "box".equals(c.getLocalName()))) {
-                String tagname = (c.getUri().equals("") ? "" : (c.getUri() + ".")) + c.getLocalName();
-                // GROSS hack
-                try {
-                    // GROSSER hack
-                    t.prev2 = (Template)t.ibex.resolveString(tagname, false).call(null, null, null, null, 9999);
-                } catch (Exception e) {
-                    Log.error(Template.class, e);
-                }
-            }
-                
-            Hash urimap = c.getUriMap();
-            t.urikeys = new String[urimap.size()];
-            t.urivals = new String[urimap.size()];
-            Enumeration uriEnumeration = urimap.keys();
-            int ii = 0;
-            while(uriEnumeration.hasMoreElements()) {
-                String key = (String)uriEnumeration.nextElement();
-                String val = (String)urimap.get(key);
-                if (val.equals("ibex://ui")) continue;
-                if (val.equals("ibex://meta")) continue;
-                t.urikeys[ii] = key;
-                if (val.length() > 0 && val.charAt(0) == '.') val = val.substring(1);
-                t.urivals[ii] = val;
-                ii++;
-            }
-            
-            Vec keys = new Vec(c.getAttrLen());
-            Vec vals = new Vec(c.getAttrLen());
-
-            // process attributes into Vecs, dealing with any XML Namespaces in the process
-            ATTR: for (int i=0; i < c.getAttrLen(); i++) {
-                if (c.getAttrKey(i).equals("id")) {
-                    t.id = c.getAttrVal(i).toString().intern();
-                    continue ATTR;
-                }
-
-                // treat value starting with '.' as resource reference
-                String uri = c.getAttrUri(i); if (!uri.equals("")) uri = '.' + uri;
-                keys.addElement(c.getAttrKey(i));
-                vals.addElement((c.getAttrVal(i).startsWith(".") ? uri : "") + c.getAttrVal(i));
-            }
-
-            if (keys.size() == 0) return;
-
-            // sort the attributes lexicographically
-            Vec.sort(keys, vals, new Vec.CompareFunc() { public int compare(Object a, Object b) {
-                return ((String)a).compareTo((String)b);
-            } });
-
-            t.keys = new String[keys.size()];
-            t.vals = new Object[vals.size()];
-            keys.copyInto(t.keys);
-            vals.copyInto(t.vals);
-
-            // convert attributes to appropriate types and intern strings
-            for(int i=0; i<t.keys.length; i++) {
-                t.keys[i] = t.keys[i].intern();
-
-                String valString = t.vals[i].toString();
-                
-                if (valString.equals("true")) t.vals[i] = Boolean.TRUE;
-                else if (valString.equals("false")) t.vals[i] = Boolean.FALSE;
-                else if (valString.equals("null")) t.vals[i] = null;
-                else {
-                    boolean hasNonNumeral = false;
-                    boolean periodUsed = false;
-                    for(int j=0; j<valString.length(); j++)
-                        if (j == 0 && valString.charAt(j) == '-') {
-                        } else if (valString.charAt(j) == '.' && !periodUsed && j != valString.length() - 1) {
-                            periodUsed = true;
-                        } else if (!Character.isDigit(valString.charAt(j))) {
-                            hasNonNumeral = true;
-                            break;
-                        }
-                    if (valString.length() > 0 && !hasNonNumeral) t.vals[i] = new Double(valString);
-                    else t.vals[i] = valString.intern();
-                }
-            }
-        }
-
-        public void endElement(XML.Element c) throws XML.Exn, IOException {
-            switch(state) {
-                case STATE_IN_META_NODE: if (--meta < 0) state = STATE_IN_ROOT_NODE; return;
-                case STATE_IN_ROOT_NODE: return;
-                case STATE_IN_TEMPLATE_NODE: {
-                    if (t.content != null) { t.script = parseScript(t.content, t.content_start); t.content = null; }
-                    if (nodeStack.size() == 0) { state = STATE_IN_ROOT_NODE; return; }
-                    Template oldt = t;
-                    t = (Template)nodeStack.lastElement();
-                    nodeStack.setSize(nodeStack.size() - 1);
-                    t.children.addElement(oldt);
-                    int oldt_lines = getLine() - oldt.startLine;
-                    if (t.content == null) t.content = new StringBuffer();
-                    for (int i=0; oldt_lines > i; i++) t.content.append('\n');
-                }
-            }
-        }
-
-        public void characters(char[] ch, int start, int length) throws XML.Exn {
-            for (int i=0; length >i; i++) if (ch[start+i] == '\t')
-                Log.error(Template.class, "tabs are not allowed in Ibex files ("+getLine()+":"+getCol()+")");
-            switch(state) {
-                case STATE_IN_TEMPLATE_NODE:
-                    if (t.content == null) {
-                        t.content_start = getLine();
-                        t.content = new StringBuffer();
-                    }
-                    t.content.append(ch, start, length);
-                    return;
-                case STATE_IN_ROOT_NODE:
-                    if (static_content == null) {
-                        static_content_start = getLine();
-                        static_content = new StringBuffer();
-                    }
-                    static_content.append(ch, start, length);
-                    return;
-            }
-        }
-
-        public void whitespace(char[] ch, int start, int length) throws XML.Exn { }
-    }
-
-    private static class PerInstantiationScope extends JSScope {
-        Ibex ibex = null;
-        PerInstantiationScope parentBoxPis = null;
-        JS myStatic = null;
-        void putDollar(String key, Box target) throws JSExn {
-            if (parentBoxPis != null) parentBoxPis.putDollar(key, target);
-            declare("$" + key);
-            put("$" + key, target);
-        }
-        public PerInstantiationScope(JSScope parentScope, Ibex ibex, PerInstantiationScope parentBoxPis, JS myStatic) {
-            super(parentScope);
-            this.parentBoxPis = parentBoxPis;
-            this.ibex = ibex;
-            this.myStatic = myStatic;
-        }
-        public Object get(Object key) throws JSExn {
-            if (super.has(key)) return super.get(key);
-            if (key.equals("ibex")) return ibex;
-            if (key.equals("")) return ibex.get("");
-            if (key.equals("static")) return myStatic;
-            return super.get(key);
-        }
-    }
-
-}
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Affine.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Affine.java
deleted file mode 100644 (file)
index 1b47071..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-// FIXME
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import java.util.*;
-
-/** an affine transform; all operations are destructive */
-public final class Affine {
-
-    //  [ a b e ]
-    //  [ c d f ]
-    //  [ 0 0 1 ]
-    public float a, b, c, d, e, f;
-
-    Affine(float _a, float _b, float _c, float _d, float _e, float _f) { a = _a; b = _b; c = _c; d = _d; e = _e; f = _f; }
-    public String toString() { return "[ " + a + ", " + b + ", " + c + ", " + d + ", " + e + ", " + f + " ]"; }
-    public Affine copy() { return new Affine(a, b, c, d, e, f); }
-    public static Affine identity() { return new Affine(1, 0, 0, 1, 0, 0); }
-    public static Affine scale(float sx, float sy) { return new Affine(sx, 0, 0, sy, 0, 0); }
-    public static Affine shear(float degrees) {
-        return new Affine(1, 0, (float)Math.tan(degrees * (float)(Math.PI / 180.0)), 1, 0, 0); }
-    public static Affine translate(float tx, float ty) { return new Affine(1, 0, 0, 1, tx, ty); }
-    public static Affine flip(boolean horiz, boolean vert) { return new Affine(horiz ? -1 : 1, 0, 0, vert ? -1 : 1, 0, 0); }
-    public float multiply_px(float x, float y) { return x * a + y * c + e; }
-    public float multiply_py(float x, float y) { return x * b + y * d + f; }
-    public boolean equalsIgnoringTranslation(Affine x) { return a == x.a && b == x.b && c == x.c && d == x.d; }
-
-    public boolean equals(Object o) {
-        if (!(o instanceof Affine)) return false;
-        Affine x = (Affine)o;
-        return a == x.a && b == x.b && c == x.c && d == x.d && e == x.e && f == x.f;
-    }
-
-    public static Affine rotate(float degrees) {
-        float s = (float)Math.sin(degrees * (float)(Math.PI / 180.0));
-        float c = (float)Math.cos(degrees * (float)(Math.PI / 180.0));
-        return new Affine(c, s, -s, c, 0, 0);
-    }
-
-    /** this = this * a */
-    public Affine multiply(Affine A) {
-        float _a = this.a * A.a + this.b * A.c;
-        float _b = this.a * A.b + this.b * A.d;
-        float _c = this.c * A.a + this.d * A.c;
-        float _d = this.c * A.b + this.d * A.d;
-        float _e = this.e * A.a + this.f * A.c + A.e;
-        float _f = this.e * A.b + this.f * A.d + A.f;
-        a = _a; b = _b; c = _c; d = _d; e = _e; f = _f;
-        return this;
-    }
-
-    /** this = a * this */
-    public Affine premultiply(Affine A) {
-        float _a = A.a * this.a + A.b * this.c;
-        float _b = A.a * this.b + A.b * this.d;
-        float _c = A.c * this.a + A.d * this.c;
-        float _d = A.c * this.b + A.d * this.d;
-        float _e = A.e * this.a + A.f * this.c + this.e;
-        float _f = A.e * this.b + A.f * this.d + this.f;
-        a = _a; b = _b; c = _c; d = _d; e = _e; f = _f;
-        return this;
-    }
-
-    public void invert() {
-        float det = 1 / (a * d - b * c);
-        float _a = d * det;
-        float _b = -1 * b * det;
-        float _c = -1 * c * det;
-        float _d = a * det;
-        float _e = -1 * e * a - f * c;
-        float _f = -1 * e * b - f * d;
-        a = _a; b = _b; c = _c; d = _d; e = _e; f = _f;
-    }
-
-    public static Affine parse(String t) {
-        if (t == null) return null;
-        t = t.trim();
-        Affine ret = Affine.identity();
-        while (t.length() > 0) {
-            if (t.startsWith("skewX(")) {
-                // FIXME
-                
-            } else if (t.startsWith("shear(")) {
-                // FIXME: nonstandard; remove this
-                ret.multiply(Affine.shear(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(')')))));
-                
-            } else if (t.startsWith("skewY(")) {
-                // FIXME
-                
-            } else if (t.startsWith("rotate(")) {
-                String sub = t.substring(t.indexOf('(') + 1, t.indexOf(')'));
-                if (sub.indexOf(',') != -1) {
-                    float angle = Float.parseFloat(sub.substring(0, sub.indexOf(',')));
-                    sub = sub.substring(sub.indexOf(',') + 1);
-                    float cx = Float.parseFloat(sub.substring(0, sub.indexOf(',')));
-                    sub = sub.substring(sub.indexOf(',') + 1);
-                    float cy = Float.parseFloat(sub);
-                    ret.multiply(Affine.translate(cx, cy));
-                    ret.multiply(Affine.rotate(angle));
-                    ret.multiply(Affine.translate(-1 * cx, -1 * cy));
-                } else {
-                    ret.multiply(Affine.rotate(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(')')))));
-                }
-                
-            } else if (t.startsWith("translate(")) {
-                String sub = t.substring(t.indexOf('(') + 1, t.indexOf(')'));
-                if (sub.indexOf(',') > -1) {
-                    ret.multiply(Affine.translate(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))),
-                                                                 Float.parseFloat(t.substring(t.indexOf(',') + 1, t.indexOf(')')))));
-                } else {
-                    ret.multiply(Affine.translate(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))), 0));
-                }
-                
-            } else if (t.startsWith("flip(")) {
-                String which = t.substring(t.indexOf('(') + 1, t.indexOf(')'));
-                ret.multiply(Affine.flip(which.equals("horizontal"), which.equals("vertical")));
-                
-            } else if (t.startsWith("scale(")) {
-                String sub = t.substring(t.indexOf('(') + 1, t.indexOf(')'));
-                if (sub.indexOf(',') > -1) {
-                    ret.multiply(Affine.scale(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))),
-                                                             Float.parseFloat(t.substring(t.indexOf(',') + 1, t.indexOf(')')))));
-                } else {
-                    ret.multiply(Affine.scale(Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(','))),
-                                                             Float.parseFloat(t.substring(t.indexOf('(') + 1, t.indexOf(',')))));
-                }
-                
-            } else if (t.startsWith("matrix(")) {
-                // FIXME: is this mapped right?
-                float d[] = new float[6];
-                StringTokenizer st = new StringTokenizer(t, ",", false);
-                for(int i=0; i<6; i++)
-                    d[i] = Float.parseFloat(st.nextToken());
-                ret.multiply(new Affine(d[0], d[1], d[2], d[3], d[4], d[5]));
-            }
-            t = t.substring(t.indexOf(')') + 1).trim();
-        }
-        return ret;
-    }
-    
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Color.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Color.java
deleted file mode 100644 (file)
index 210aade..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import java.util.*;
-import org.ibex.util.*;
-
-public class Color {
-    
-    public static int stringToColor(String s) {
-        // FIXME support three-char strings by doubling digits
-        if (s == null) return 0x00000000;
-        else if (standard.get(s) != null) return 0xFF000000 | org.ibex.js.JS.toInt(standard.get(s));
-        else if (s.length() == 7 && s.charAt(0) == '#') try {
-            // FEATURE  alpha
-            return 0xFF000000 |
-                (Integer.parseInt(s.substring(1, 3), 16) << 16) |
-                (Integer.parseInt(s.substring(3, 5), 16) << 8) |
-                Integer.parseInt(s.substring(5, 7), 16);
-        } catch (NumberFormatException e) {
-            Log.info(Color.class, "invalid color " + s);
-            return 0;
-        }
-        else return 0; // FEATURE: error?
-    }
-
-    public static String colorToString(int argb) {
-        if ((argb & 0xFF000000) == 0) return null;
-        String red = Integer.toHexString((argb & 0x00FF0000) >> 16);
-        String green = Integer.toHexString((argb & 0x0000FF00) >> 8);
-        String blue = Integer.toHexString(argb & 0x000000FF);
-        if (red.length() < 2) red = "0" + red;
-        if (blue.length() < 2) blue = "0" + blue;
-        if (green.length() < 2) green = "0" + green;
-        return "#" + red + green + blue;
-    }
-
-    /** Copied verbatim from the SVG specification */
-    private static Hashtable standard = new Hashtable(400);
-    static {
-       standard.put("aliceblue", new Integer((240 << 16) | (248 << 8) | 255));
-       standard.put("antiquewhite", new Integer((250 << 16) | (235 << 8) | 215));
-       standard.put("aqua", new Integer((0 << 16) | (255 << 8) | 255));
-       standard.put("aquamarine", new Integer((127 << 16) | (255 << 8) | 212));
-       standard.put("azure", new Integer((240 << 16) | (255 << 8) | 255));
-       standard.put("beige", new Integer((245 << 16) | (245 << 8) | 220));
-       standard.put("bisque", new Integer((255 << 16) | (228 << 8) | 196));
-       standard.put("black", new Integer((0 << 16) | (0 << 8) | 0));
-       standard.put("blanchedalmond", new Integer((255 << 16) | (235 << 8) | 205));
-       standard.put("blue", new Integer((0 << 16) | (0 << 8) | 255));
-       standard.put("blueviolet", new Integer((138 << 16) | (43 << 8) | 226));
-       standard.put("brown", new Integer((165 << 16) | (42 << 8) | 42));
-       standard.put("burlywood", new Integer((222 << 16) | (184 << 8) | 135));
-       standard.put("cadetblue", new Integer((95 << 16) | (158 << 8) | 160));
-       standard.put("chartreuse", new Integer((127 << 16) | (255 << 8) | 0));
-       standard.put("chocolate", new Integer((210 << 16) | (105 << 8) | 30));
-       standard.put("coral", new Integer((255 << 16) | (127 << 8) | 80));
-       standard.put("cornflowerblue", new Integer((100 << 16) | (149 << 8) | 237));
-       standard.put("cornsilk", new Integer((255 << 16) | (248 << 8) | 220));
-       standard.put("crimson", new Integer((220 << 16) | (20 << 8) | 60));
-       standard.put("cyan", new Integer((0 << 16) | (255 << 8) | 255));
-       standard.put("darkblue", new Integer((0 << 16) | (0 << 8) | 139));
-       standard.put("darkcyan", new Integer((0 << 16) | (139 << 8) | 139));
-       standard.put("darkgoldenrod", new Integer((184 << 16) | (134 << 8) | 11));
-       standard.put("darkgray", new Integer((169 << 16) | (169 << 8) | 169));
-       standard.put("darkgreen", new Integer((0 << 16) | (100 << 8) | 0));
-       standard.put("darkgrey", new Integer((169 << 16) | (169 << 8) | 169));
-       standard.put("darkkhaki", new Integer((189 << 16) | (183 << 8) | 107));
-       standard.put("darkmagenta", new Integer((139 << 16) | (0 << 8) | 139));
-       standard.put("darkolivegreen", new Integer((85 << 16) | (107 << 8) | 47));
-       standard.put("darkorange", new Integer((255 << 16) | (140 << 8) | 0));
-       standard.put("darkorchid", new Integer((153 << 16) | (50 << 8) | 204));
-       standard.put("darkred", new Integer((139 << 16) | (0 << 8) | 0));
-       standard.put("darksalmon", new Integer((233 << 16) | (150 << 8) | 122));
-       standard.put("darkseagreen", new Integer((143 << 16) | (188 << 8) | 143));
-       standard.put("darkslateblue", new Integer((72 << 16) | (61 << 8) | 139));
-       standard.put("darkslategray", new Integer((47 << 16) | (79 << 8) | 79));
-       standard.put("darkslategrey", new Integer((47 << 16) | (79 << 8) | 79));
-       standard.put("darkturquoise", new Integer((0 << 16) | (206 << 8) | 209));
-       standard.put("darkviolet", new Integer((148 << 16) | (0 << 8) | 211));
-       standard.put("deeppink", new Integer((255 << 16) | (20 << 8) | 147));
-       standard.put("deepskyblue", new Integer((0 << 16) | (191 << 8) | 255));
-       standard.put("dimgray", new Integer((105 << 16) | (105 << 8) | 105));
-       standard.put("dimgrey", new Integer((105 << 16) | (105 << 8) | 105));
-       standard.put("dodgerblue", new Integer((30 << 16) | (144 << 8) | 255));
-       standard.put("firebrick", new Integer((178 << 16) | (34 << 8) | 34));
-       standard.put("floralwhite", new Integer((255 << 16) | (250 << 8) | 240));
-       standard.put("forestgreen", new Integer((34 << 16) | (139 << 8) | 34));
-       standard.put("fuchsia", new Integer((255 << 16) | (0 << 8) | 255));
-       standard.put("gainsboro", new Integer((220 << 16) | (220 << 8) | 220));
-       standard.put("ghostwhite", new Integer((248 << 16) | (248 << 8) | 255));
-       standard.put("gold", new Integer((255 << 16) | (215 << 8) | 0));
-       standard.put("goldenrod", new Integer((218 << 16) | (165 << 8) | 32));
-       standard.put("gray", new Integer((128 << 16) | (128 << 8) | 128));
-       standard.put("grey", new Integer((128 << 16) | (128 << 8) | 128));
-       standard.put("green", new Integer((0 << 16) | (128 << 8) | 0));
-       standard.put("greenyellow", new Integer((173 << 16) | (255 << 8) | 47));
-       standard.put("honeydew", new Integer((240 << 16) | (255 << 8) | 240));
-       standard.put("hotpink", new Integer((255 << 16) | (105 << 8) | 180));
-       standard.put("indianred", new Integer((205 << 16) | (92 << 8) | 92));
-       standard.put("indigo", new Integer((75 << 16) | (0 << 8) | 130));
-       standard.put("ivory", new Integer((255 << 16) | (255 << 8) | 240));
-       standard.put("khaki", new Integer((240 << 16) | (230 << 8) | 140));
-       standard.put("lavender", new Integer((230 << 16) | (230 << 8) | 250));
-       standard.put("lavenderblush", new Integer((255 << 16) | (240 << 8) | 245));
-       standard.put("lawngreen", new Integer((124 << 16) | (252 << 8) | 0));
-       standard.put("lemonchiffon", new Integer((255 << 16) | (250 << 8) | 205));
-       standard.put("lightblue", new Integer((173 << 16) | (216 << 8) | 230));
-       standard.put("lightcoral", new Integer((240 << 16) | (128 << 8) | 128));
-       standard.put("lightcyan", new Integer((224 << 16) | (255 << 8) | 255));
-       standard.put("lightgoldenrodyellow", new Integer((250 << 16) | (250 << 8) | 210));
-       standard.put("lightgray", new Integer((211 << 16) | (211 << 8) | 211));
-       standard.put("lightgreen", new Integer((144 << 16) | (238 << 8) | 144));
-       standard.put("lightgrey", new Integer((211 << 16) | (211 << 8) | 211));
-       standard.put("lightpink", new Integer((255 << 16) | (182 << 8) | 193));
-       standard.put("lightsalmon", new Integer((255 << 16) | (160 << 8) | 122));
-       standard.put("lightseagreen", new Integer((32 << 16) | (178 << 8) | 170));
-       standard.put("lightskyblue", new Integer((135 << 16) | (206 << 8) | 250));
-       standard.put("lightslategray", new Integer((119 << 16) | (136 << 8) | 153));
-       standard.put("lightslategrey", new Integer((119 << 16) | (136 << 8) | 153));
-       standard.put("lightsteelblue", new Integer((176 << 16) | (196 << 8) | 222));
-       standard.put("lightyellow", new Integer((255 << 16) | (255 << 8) | 224));
-       standard.put("lime", new Integer((0 << 16) | (255 << 8) | 0));
-       standard.put("limegreen", new Integer((50 << 16) | (205 << 8) | 50));
-       standard.put("linen", new Integer((250 << 16) | (240 << 8) | 230));
-       standard.put("magenta", new Integer((255 << 16) | (0 << 8) | 255));
-       standard.put("maroon", new Integer((128 << 16) | (0 << 8) | 0));
-       standard.put("mediumaquamarine", new Integer((102 << 16) | (205 << 8) | 170));
-       standard.put("mediumblue", new Integer((0 << 16) | (0 << 8) | 205));
-       standard.put("mediumorchid", new Integer((186 << 16) | (85 << 8) | 211));
-       standard.put("mediumpurple", new Integer((147 << 16) | (112 << 8) | 219));
-       standard.put("mediumseagreen", new Integer((60 << 16) | (179 << 8) | 113));
-       standard.put("mediumslateblue", new Integer((123 << 16) | (104 << 8) | 238));
-       standard.put("mediumspringgreen", new Integer((0 << 16) | (250 << 8) | 154));
-       standard.put("mediumturquoise", new Integer((72 << 16) | (209 << 8) | 204));
-       standard.put("mediumvioletred", new Integer((199 << 16) | (21 << 8) | 133));
-       standard.put("midnightblue", new Integer((25 << 16) | (25 << 8) | 112));
-       standard.put("mintcream", new Integer((245 << 16) | (255 << 8) | 250));
-       standard.put("mistyrose", new Integer((255 << 16) | (228 << 8) | 225));
-       standard.put("moccasin", new Integer((255 << 16) | (228 << 8) | 181));
-       standard.put("navajowhite", new Integer((255 << 16) | (222 << 8) | 173));
-       standard.put("navy", new Integer((0 << 16) | (0 << 8) | 128));
-       standard.put("oldlace", new Integer((253 << 16) | (245 << 8) | 230));
-       standard.put("olive", new Integer((128 << 16) | (128 << 8) | 0));
-       standard.put("olivedrab", new Integer((107 << 16) | (142 << 8) | 35));
-       standard.put("orange", new Integer((255 << 16) | (165 << 8) | 0));
-       standard.put("orangered", new Integer((255 << 16) | (69 << 8) | 0));
-       standard.put("orchid", new Integer((218 << 16) | (112 << 8) | 214));
-       standard.put("palegoldenrod", new Integer((238 << 16) | (232 << 8) | 170));
-       standard.put("palegreen", new Integer((152 << 16) | (251 << 8) | 152));
-       standard.put("paleturquoise", new Integer((175 << 16) | (238 << 8) | 238));
-       standard.put("palevioletred", new Integer((219 << 16) | (112 << 8) | 147));
-       standard.put("papayawhip", new Integer((255 << 16) | (239 << 8) | 213));
-       standard.put("peachpuff", new Integer((255 << 16) | (218 << 8) | 185));
-       standard.put("peru", new Integer((205 << 16) | (133 << 8) | 63));
-       standard.put("pink", new Integer((255 << 16) | (192 << 8) | 203));
-       standard.put("plum", new Integer((221 << 16) | (160 << 8) | 221));
-       standard.put("powderblue", new Integer((176 << 16) | (224 << 8) | 230));
-       standard.put("purple", new Integer((128 << 16) | (0 << 8) | 128));
-       standard.put("red", new Integer((255 << 16) | (0 << 8) | 0));
-       standard.put("rosybrown", new Integer((188 << 16) | (143 << 8) | 143));
-       standard.put("royalblue", new Integer((65 << 16) | (105 << 8) | 225));
-       standard.put("saddlebrown", new Integer((139 << 16) | (69 << 8) | 19));
-       standard.put("salmon", new Integer((250 << 16) | (128 << 8) | 114));
-       standard.put("sandybrown", new Integer((244 << 16) | (164 << 8) | 96));
-       standard.put("seagreen", new Integer((46 << 16) | (139 << 8) | 87));
-       standard.put("seashell", new Integer((255 << 16) | (245 << 8) | 238));
-       standard.put("sienna", new Integer((160 << 16) | (82 << 8) | 45));
-       standard.put("silver", new Integer((192 << 16) | (192 << 8) | 192));
-       standard.put("skyblue", new Integer((135 << 16) | (206 << 8) | 235));
-       standard.put("slateblue", new Integer((106 << 16) | (90 << 8) | 205));
-       standard.put("slategray", new Integer((112 << 16) | (128 << 8) | 144));
-       standard.put("slategrey", new Integer((112 << 16) | (128 << 8) | 144));
-       standard.put("snow", new Integer((255 << 16) | (250 << 8) | 250));
-       standard.put("springgreen", new Integer((0 << 16) | (255 << 8) | 127));
-       standard.put("steelblue", new Integer((70 << 16) | (130 << 8) | 180));
-       standard.put("tan", new Integer((210 << 16) | (180 << 8) | 140));
-       standard.put("teal", new Integer((0 << 16) | (128 << 8) | 128));
-       standard.put("thistle", new Integer((216 << 16) | (191 << 8) | 216));
-       standard.put("tomato", new Integer((255 << 16) | (99 << 8) | 71));
-       standard.put("turquoise", new Integer((64 << 16) | (224 << 8) | 208));
-       standard.put("violet", new Integer((238 << 16) | (130 << 8) | 238));
-       standard.put("wheat", new Integer((245 << 16) | (222 << 8) | 179));
-       standard.put("white", new Integer((255 << 16) | (255 << 8) | 255));
-       standard.put("whitesmoke", new Integer((245 << 16) | (245 << 8) | 245));
-       standard.put("yellow", new Integer((255 << 16) | (255 << 8) | 0));
-       standard.put("yellowgreen", new Integer((154 << 16) | (205 << 8) | 50));
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Font.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Font.java
deleted file mode 100644 (file)
index 76dfb5e..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import org.ibex.util.*;
-import java.io.*;
-import java.util.Hashtable;
-import org.ibex.js.*;
-import org.ibex.nestedvm.*;
-import org.ibex.plat.*;
-import org.ibex.nestedvm.Runtime;
-
-// FEATURE: this could be cleaner
-/** encapsulates a single font (a set of Glyphs) */
-public class Font {
-
-    private Font(Stream stream, int pointsize) { this.stream = stream; this.pointsize = pointsize; }
-
-    private static boolean glyphRenderingTaskIsScheduled = false;
-
-    public final int pointsize;                 ///< the size of the font
-    public final Stream stream;                 ///< the stream from which this font was loaded
-    public int max_ascent;                      ///< the maximum ascent, in pixels
-    public int max_descent;                     ///< the maximum descent, in pixels
-    boolean latinCharsPreloaded = false;        ///< true if a request to preload ASCII 32-127 has begun
-    public Glyph[] glyphs = new Glyph[65535];          ///< the glyphs that comprise this font
-
-    public abstract static class Glyph {
-        protected Glyph(Font font, char c) { this.font = font; this.c = c; }
-        public final Font font;
-        public final char c;
-        public int baseline;                    ///< within the alphamask, this is the y-coordinate of the baseline
-        public int advance;                     ///< amount to increment the x-coordinate
-        public boolean isLoaded = false;        ///< true iff the glyph is loaded
-        public int width = -1;                  ///< the width of the glyph
-        public int height = -1;                 ///< the height of the glyph
-        public byte[] data = null;              ///< the alpha channel samples for this font
-        public String path = null; // FIXME this should be shared across point sizes
-        void render() {
-            if (!isLoaded) try { renderGlyph(this); } catch (IOException e) { Log.info(Font.class, e); }
-            isLoaded = true;
-        }
-    }
-
-
-    // Statics //////////////////////////////////////////////////////////////////////
-
-    static final Hashtable glyphsToBeCached = new Hashtable();
-    static final Hashtable glyphsToBeDisplayed = new Hashtable();
-    private static Cache fontCache = new Cache(100);
-    public static Font getFont(Stream stream, int pointsize) {
-        Font ret = (Font)fontCache.get(stream, new Integer(pointsize));
-        if (ret == null) fontCache.put(stream, new Integer(pointsize), ret = new Font(stream, pointsize));
-        return ret;
-    }
-
-
-    // Methods //////////////////////////////////////////////////////////////////////
-
-    /**
-     *  Rasterize the glyphs of <code>text</code>.
-     *  @returns <code>(width&lt;&lt;32)|height</code>
-     */
-    public long rasterizeGlyphs(String text, PixelBuffer pb, int textcolor, int x, int y, int cx1, int cy1, int cx2, int cy2) {
-        int width = 0, height = 0;
-        if (!latinCharsPreloaded) {       // preload the Latin-1 charset with low priority (we'll probably want it)
-            for(int i=48; i<57; i++) if (glyphs[i]==null) glyphsToBeCached.put(glyphs[i]=Platform.createGlyph(this, (char)i),"");
-            for(int i=32; i<47; i++) if (glyphs[i]==null) glyphsToBeCached.put(glyphs[i]=Platform.createGlyph(this, (char)i),"");
-            for(int i=57; i<128; i++) if (glyphs[i]==null) glyphsToBeCached.put(glyphs[i]=Platform.createGlyph(this, (char)i),"");
-            if (!glyphRenderingTaskIsScheduled) {
-                Scheduler.add(glyphRenderingTask);
-                glyphRenderingTaskIsScheduled = true;
-            }
-            latinCharsPreloaded = true;
-        }
-        for(int i=0; i<text.length(); i++) {
-            final char c = text.charAt(i);
-            Glyph g = glyphs[c];
-            if (g == null) glyphs[c] = g = Platform.createGlyph(this, c);
-            g.render();
-            if (pb != null) pb.drawGlyph(g, x + width, y + g.font.max_ascent - g.baseline, cx1, cy1, cx2, cy2, textcolor);
-            width += g.advance;
-            height = java.lang.Math.max(height, max_ascent + max_descent);
-        }
-        return ((((long)width) << 32) | (long)(height & 0xffffffffL));
-    }
-
-    // FEATURE do we really need to be caching sizes?
-    private static Cache sizeCache = new Cache(1000);
-    public int textwidth(String s) { return (int)((textsize(s) >>> 32) & 0xffffffff); }
-    public int textheight(String s) { return (int)(textsize(s) & 0xffffffffL); }
-    public long textsize(String s) {
-        Long l = (Long)sizeCache.get(s);
-        if (l != null) return ((Long)l).longValue();
-        long ret = rasterizeGlyphs(s, null, 0, 0, 0, 0, 0, 0, 0);
-        sizeCache.put(s, new Long(ret));
-        return ret;
-    }
-
-    static final Task glyphRenderingTask = new Task() { public void perform() {
-        // FIXME: this should be a low-priority task
-        glyphRenderingTaskIsScheduled = false;
-        if (glyphsToBeCached.isEmpty()) return;
-        Glyph g = (Glyph)glyphsToBeCached.keys().nextElement();
-        if (g == null) return;
-        glyphsToBeCached.remove(g);
-        Log.debug(Font.class, "glyphRenderingTask rendering " + g.c + " of " + g.font);
-        g.render();
-        Log.debug(Glyph.class, "   done rendering glyph " + g.c);
-        glyphRenderingTaskIsScheduled = true;
-        Scheduler.add(this);
-    } };
-
-
-    // FreeType Interface //////////////////////////////////////////////////////////////////////////////
-
-    // FEATURE: use streams, not memoryfont's
-    // FEATURE: kerning pairs
-    private static final Runtime rt;
-    private static Stream loadedStream;
-    private static int loadedStreamAddr;
-
-    static {
-        try {
-            rt = (Runtime)Class.forName("org.ibex.util.MIPSApps").newInstance();
-        } catch(Exception e) {
-            throw new Error("Error instantiating freetype: " + e);
-        }
-        rt.start(new String[]{"freetype"});
-        rt.execute();
-        rtCheck();
-    }
-    
-    private static void rtCheck() { if(rt.getState() != Runtime.PAUSED) throw new Error("Freetype exited " + rt.exitStatus()); }
-    
-    private static void loadFontByteStream(Stream res) {
-        if(loadedStream == res) return;
-        
-        try {
-            Log.info(Font.class, "loading font " + res);
-            InputStream is = Stream.getInputStream(res);
-            byte[] fontstream = InputStreamToByteArray.convert(is);
-            rt.free(loadedStreamAddr);
-            loadedStreamAddr = rt.xmalloc(fontstream.length);
-            rt.copyout(fontstream, loadedStreamAddr, fontstream.length);
-            if(rt.call("load_font", loadedStreamAddr, fontstream.length) != 0)
-                throw new RuntimeException("load_font failed"); // FEATURE: better error
-            rtCheck();
-            loadedStream = res;
-        } catch (Exception e) {
-            // FEATURE: Better error reporting (thow an exception?)
-            Log.info(Font.class, e);
-        }
-    }
-
-    private static synchronized void renderGlyph(Font.Glyph glyph) throws IOException {
-        try {
-            Log.debug(Font.class, "rasterizing glyph " + glyph.c + " of font " + glyph.font);
-            if (loadedStream != glyph.font.stream) loadFontByteStream(glyph.font.stream);
-            
-            long start = System.currentTimeMillis();
-            
-            rt.call("render",glyph.c,glyph.font.pointsize);
-            rtCheck();
-            
-            glyph.font.max_ascent = rt.getUserInfo(3);
-            glyph.font.max_descent = rt.getUserInfo(4);
-            glyph.baseline = rt.getUserInfo(5);
-            glyph.advance = rt.getUserInfo(6);
-            
-            glyph.width = rt.getUserInfo(1);
-            glyph.height = rt.getUserInfo(2);
-
-            glyph.data = new byte[glyph.width * glyph.height];
-            int addr = rt.getUserInfo(0);
-            rt.copyin(addr, glyph.data, glyph.width * glyph.height);
-            
-            byte[] path = new byte[rt.getUserInfo(8)];
-            rt.copyin(rt.getUserInfo(7), path, rt.getUserInfo(8));
-            glyph.path = new String(path);
-            glyph.path += " m " + (64 * glyph.advance) + " 0 "; 
-
-            glyph.isLoaded = true;
-        } catch (Exception e) {
-            // FEATURE: Better error reporting (thow an exception?)
-            Log.info(Font.class, e);
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/GIF.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/GIF.java
deleted file mode 100644 (file)
index 81eeafb..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * This file was adapted from D J Hagberg's GifDecoder.java
- *
- * This software is copyrighted by D. J. Hagberg, Jr., and other parties.
- * The following terms apply to all files associated with the software
- * unless explicitly disclaimed in individual files.
- * 
- * The authors hereby grant permission to use, copy, modify, distribute,
- * and license this software and its documentation for any purpose, provided
- * that existing copyright notices are retained in all copies and that this
- * notice is included verbatim in any distributions. No written agreement,
- * license, or royalty fee is required for any of the authorized uses.
- * Modifications to this software may be copyrighted by their authors
- * and need not follow the licensing terms described here, provided that
- * the new terms are clearly indicated on the first page of each file where
- * they apply.
- * 
- * IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
- * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
- * DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- * 
- * THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
- * IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
- * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
- * MODIFICATIONS.
- * 
- * GOVERNMENT USE: If you are acquiring this software on behalf of the
- * U.S. government, the Government shall have only "Restricted Rights"
- * in the software and related documentation as defined in the Federal 
- * Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
- * are acquiring the software on behalf of the Department of Defense, the
- * software shall be classified as "Commercial Computer Software" and the
- * Government shall have only "Restricted Rights" as defined in Clause
- * 252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
- * authors grant the U.S. Government and others acting in its behalf
- * permission to use and distribute the software in accordance with the
- * terms specified in this license.
- *
- */
-package org.ibex.graphics;
-
-import org.ibex.util.*;
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/** Converts an InputStream carrying a GIF image into an ARGB int[] */
-public class GIF {
-
-    // Public Methods /////////////////////////////////////////////////////////
-
-    private GIF() { }
-
-    private static Queue instances = new Queue(10);
-
-    public static void load(InputStream is, Picture p) {
-        GIF g = (GIF)instances.remove(false);
-        if (g == null) g = new GIF();
-        try {
-            g._load(is, p);
-        } catch (Exception e) {
-            if (Log.on) Log.info(GIF.class, e);
-            return;
-        }
-        // FIXME: must reset fields
-        // if (instances.size() < 10) instances.append(g);
-    }
-
-    private void _load(InputStream is, Picture p) throws IOException {
-        this.p = p;
-        if (is instanceof BufferedInputStream) _in = (BufferedInputStream)is;
-        else _in = new BufferedInputStream(is);
-        decodeAsBufferedImage(0);
-        p.isLoaded = true;
-        p = null;
-        _in = null;
-    }
-
-
-    /** Decode a particular frame from the GIF file. Frames must be decoded in order, starting with 0. */
-    private void decodeAsBufferedImage(int page) throws IOException, IOException {
-
-        // If the user requested a page already decoded, we cannot go back.
-        if (page <= index ) return;
-
-        // If we just started reading this stream, initialize the global info.
-        if (index < 0 ) {
-            if (!readIntoBuf(6) || _buf[0] != 'G' || _buf[1] != 'I' || _buf[2] != 'F' ||
-                _buf[3] != '8' || !(_buf[4] == '7' || _buf[4] == '9') || _buf[5] != 'a')
-                throw new IOException("Not a GIF8Xa file.");
-            if (!readGlobalImageDescriptor()) throw new IOException("Unable to read GIF header.");
-        }
-        
-        // Loop through the blocks in the image.
-        int block_identifier;
-        while (true) {
-            if(!readIntoBuf(1)) throw new IOException("Unexpected EOF(1)");
-            block_identifier = _buf[0];
-            if (block_identifier == ';') throw new IOException("No image data");
-            if (block_identifier == '!') {
-                if (!readExtensionBlock()) throw new IOException("Unexpected EOF(2)");
-                continue;
-            }
-
-            // not a valid start character -- ignore it.
-            if (block_identifier != ',') continue;
-
-            if (!readLocalImageDescriptor()) throw new IOException("Unexpected EOF(3)");
-            p.data = new int[p.width * p.height];
-            readImage();
-
-            // If we did not decode the requested index, need to go on
-            // to the next one (future implementations should consider
-            // caching already-decoded images here to allow for random
-            // access to animated GIF pages).
-            index++;
-            if (index < page) continue;
-            
-            // If we did decode the requested index, we can return.
-            break;
-        }
-        
-        // Return the image thus-far decoded
-        return;
-    }
-
-    /** Actually read the image data */
-    private void readImage() 
-        throws IOException, IOException {
-        int len = p.width;
-        int rows = p.height;
-        int initialCodeSize;
-        int v;
-        int xpos = 0, ypos = 0, pass = 0, i;
-        int prefix[] = new int[(1 << MAX_LWZ_BITS)];
-        int append[] = new int[(1 << MAX_LWZ_BITS)];
-        int stack[] = new int[(1 << MAX_LWZ_BITS)*2];
-        int top_idx;
-        int codeSize, clearCode, inCode, endCode, oldCode, maxCode, code, firstCode;
-        
-        // Initialize the decoder
-        if (!readIntoBuf(1)) throw new IOException("Unexpected EOF decoding image");
-        initialCodeSize = _buf[0];
-
-        // Look at the right color map, setting up transparency if called for.
-        int[] cmap = global_color_map;
-        if (hascmap) cmap = color_map;
-        if (trans_idx >= 0) cmap[trans_idx] = 0x00000000;
-
-        /* Initialize the decoder */
-        /* Set values for "special" numbers:
-         * clear code   reset the decoder
-         * end code     stop decoding
-         * code size    size of the next code to retrieve
-         * max code     next available table position
-         */
-        clearCode   = 1 << initialCodeSize;
-        endCode     = clearCode + 1;
-        codeSize    = initialCodeSize + 1;
-        maxCode     = clearCode + 2;
-        oldCode     = -1;
-        firstCode   = -1;
-        
-        for (i = 0; i < clearCode; i++) append[i] = i;
-        top_idx = 0; // top of stack.
-        
-        bitsInWindow = 0;
-        bytes = 0;
-        window = 0L;
-        done = false;
-        c = -1;
-        
-        /* Read until we finish the image */
-        ypos = 0;
-        for (i = 0; i < rows; i++) {
-            for (xpos = 0; xpos < len;) {
-                
-                if (top_idx == 0) {
-                    /* Bummer -- our stack is empty.  Now we have to work! */
-                    code = getCode(codeSize);
-                    if (code < 0) return;
-                    
-                    if (code > maxCode || code == endCode) return;
-                    if (code == clearCode) {
-                        codeSize    = initialCodeSize + 1;
-                        maxCode     = clearCode + 2;
-                        oldCode     = -1;
-                        continue;
-                    }
-                    
-                    // Last pass reset the decoder, so the first code we
-                    // see must be a singleton.  Seed the stack with it,
-                    // and set up the old/first code pointers for
-                    // insertion into the string table.  We can't just
-                    // roll this into the clearCode test above, because
-                    // at that point we have not yet read the next code.
-                    if (oldCode == -1) {
-                        stack[top_idx++] = append[code];
-                        oldCode = code;
-                        firstCode = code;
-                        continue;
-                    }
-                    
-                    inCode = code;
-
-                    // maxCode is always one bigger than our
-                    // highest assigned code.  If the code we see
-                    // is equal to maxCode, then we are about to
-                    // add a new string to the table. ???  
-                    if (code == maxCode) {
-                        stack[top_idx++] = firstCode;
-                        code = oldCode;
-                    }
-                    
-                    // Populate the stack by tracing the string in the
-                    // string table from its tail to its head
-                    while (code > clearCode) {
-                        stack[top_idx++] = append[code];
-                        code = prefix[code];
-                    }
-                    firstCode = append[code];
-                    
-                    // If there's no more room in our string table, quit.
-                    // Otherwise, add a new string to the table
-                    if (maxCode >= (1 << MAX_LWZ_BITS)) return;
-                    
-                    // Push the head of the string onto the stack
-                    stack[top_idx++] = firstCode;
-                    
-                    // Add a new string to the string table
-                    prefix[maxCode] = oldCode;
-                    append[maxCode] = firstCode;
-                    maxCode++;
-                    
-                    // maxCode tells us the maximum code value we can accept.
-                    // If we see that we need more bits to represent it than
-                    // we are requesting from the unpacker, we need to increase
-                    // the number we ask for.
-                    if ((maxCode >= (1 << codeSize)) && (maxCode < (1<<MAX_LWZ_BITS))) codeSize++;
-                    oldCode = inCode;
-                }
-                
-                // Pop the next color index off the stack
-                v = stack[--top_idx];
-                if (v < 0) return;
-                
-                // Finally, we can set a pixel!  Joy!
-                p.data[xpos + ypos * p.width] = cmap[v];
-                xpos++;
-            }
-            
-            // If interlacing, the next ypos is not just +1
-            if (interlaced) {
-                ypos += _interlaceStep[pass];
-                while (ypos >= rows) {
-                    pass++;
-                    if (pass > 3) return;
-                    ypos = _interlaceStart[pass];
-                }
-            } else ypos++;
-        }
-        return;
-    }
-
-    /** Extract the next compression code from the file. */
-    private int getCode(int code_size) throws IOException {
-        int ret;
-        
-        while (bitsInWindow < code_size) {
-            // Not enough bits in our window to cover the request
-            if (done) return -1;
-            
-            if (bytes == 0) {
-                // Not enough bytes in our buffer to add to the window
-                bytes = getDataBlock();
-                c = 0;
-                if (bytes <= 0) {
-                    done = true;
-                    break;
-                }
-            }
-            // Tack another byte onto the window, see if that's enough
-            window += (_buf[c]) << bitsInWindow;
-            ++c;
-            bitsInWindow += 8;
-            bytes--;
-        }
-        
-        
-        // The next code will always be the last code_size bits of the window
-        ret = ((int)window) & ((1 << code_size) - 1);
-        
-        // Shift data in the window to put the next code at the end
-        window >>= code_size;
-        bitsInWindow -= code_size;
-        return ret;
-    }
-    
-    /** Read the global image descriptor and optional global color map. Sets global_* variables. */
-    private boolean readGlobalImageDescriptor() throws IOException {
-        int packed;
-        int aspect; // we ignore this.
-        int ofs;
-        
-        if (!readIntoBuf(7) ) return false;
-        global_width     = _buf[0] | (_buf[1] << 8);
-        global_height    = _buf[2] | (_buf[3] << 8);
-        packed       = _buf[4];
-        global_bgcolor   = _buf[5];
-        aspect       = _buf[6];
-        global_cmapsize  = 2 << (packed & 0x07);
-        global_hascmap   = (packed & GLOBALCOLORMAP) == GLOBALCOLORMAP;
-        global_color_map = null;
-        
-        // Read the color map, if we have one.
-        if (global_hascmap) {
-            if (!readColorMap(global_cmapsize,true)) {
-                return false;
-            }
-        }
-        
-        return true;
-    }
-    
-    /** Read a local image descriptor and optional local color map. */
-    private boolean readLocalImageDescriptor() throws IOException {
-        int packed;
-        
-        if (!readIntoBuf(9) ) return false;
-        
-        left       = _buf[0] | (_buf[1] << 8);
-        top        = _buf[2] | (_buf[3] << 8);
-        p.width      = _buf[4] | (_buf[5] << 8);
-        p.height     = _buf[6] | (_buf[7] << 8);
-        packed        = _buf[8];
-        hascmap    = (packed & LOCALCOLORMAP) == LOCALCOLORMAP;
-        cmapsize   = 2 << (packed & 0x07);
-        interlaced = (packed & INTERLACE) == INTERLACE;
-        color_map  = null;
-        
-        // Read the local color table, if there is one.
-        return !(hascmap && !readColorMap(cmapsize,false));
-    }
-
-    /** Read a color map (global or local). */
-    private boolean readColorMap(int nColors, boolean isGlobal)
-        throws IOException {
-        int[] map = new int[nColors];
-        for( int i=0; i < nColors; ++i) {
-            if (!readIntoBuf(3) ) return false;
-            map[i] = (_buf[0] << 16) | (_buf[1] << 8) | _buf[2] | 0xFF000000;
-        }
-        if (isGlobal) global_color_map = map;
-        else color_map = map;
-        return true;
-    }
-
-    /** Read the contents of a GIF89a Graphical Extension Block. */
-    private boolean readExtensionBlock() throws IOException {
-        if (!readIntoBuf(1) ) return false;
-        int label = _buf[0];
-        int count = -1;
-        switch (label) {
-        case 0x01:      // Plain Text Extension
-        case 0xff:      // Application Extension
-        case 0xfe:      // Comment Extension
-            break;
-        case 0xf9:      // Graphic Control Extension
-            count = getDataBlock();
-            if (count < 0) return true;
-            // Check for transparency setting.
-            if ((_buf[0] & HASTRANSPARENCY) != 0) trans_idx = _buf[3];
-            else trans_idx = -1;
-        }
-        do { count = getDataBlock(); } while (count > 0);
-        return true;
-    }
-
-    /** Read a block of data from the GIF file. */
-    private int getDataBlock() throws IOException {
-        if (!readIntoBuf(1) ) return -1;
-        int count = _buf[0];
-        if (count != 0) if (!readIntoBuf(count) ) return -1;
-        return count;
-    }
-    
-    /** Read the indicated number of bytes into _buf, our instance-wide buffer. */
-    private boolean readIntoBuf(int count) throws IOException {
-        for(int i = 0; i < count; i++) if ((_buf[i] = _in.read()) == -1) return false;
-        return true;
-    }
-
-    // Private Data //////////////////////////////////////////////////////////
-
-    private Picture p;
-
-    // State management stuff
-    private int index = -1;
-    private BufferedInputStream _in = null;
-    private int[] _buf = new int[BUFSIZE];
-
-    // Transparency settings
-    private int trans_idx = -1;
-
-    // Global image descriptor contents
-    private int global_width = 0;
-    private int global_height = 0;
-    private int global_bgcolor = 0;
-    private int global_cmapsize = 0;
-    private boolean global_hascmap = false;
-    private int[] global_color_map = null;
-
-    // Local image descriptor contents
-    private int left = 0;
-    private int top = 0;
-    private int cmapsize = 0;
-    private boolean hascmap = false;
-    private boolean interlaced = false;
-    private int[] color_map = null;
-
-    // Variables used in getCode(...) to track sliding bit-window.
-    private int     bytes = 0;
-    private boolean done;
-    private int     c;
-    private long    window;
-    private int     bitsInWindow = 0;
-
-    // Class-wide constants.
-    private static final int INTERLACE      = 0x40;
-    private static final int GLOBALCOLORMAP = 0x80;
-    private static final int LOCALCOLORMAP  = 0x80;
-    private static final int HASTRANSPARENCY    = 0x01;
-    private static final int MAX_LWZ_BITS   = 12;
-    private static final int BUFSIZE        = 280;
-    private static final int[] _interlaceStep   = { 8, 8, 4, 2 };
-    private static final int[] _interlaceStart  = { 0, 4, 2, 1 };
-}
-
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/HTML.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/HTML.java
deleted file mode 100644 (file)
index 47de2e0..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-
-import java.util.*;
-import java.net.*;
-import java.io.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-
-/* 
- * While entities are limited to a subset of Unicode characters ,
- * numeric character references can specify any character. Numeric
- * character references may be given in decimal or hexadecimal, though
- * browser support is stronger for decimal references. Decimal
- * references are of the form &#number; while hexadecimal references
- * take the case-insensitive form &#xnumber;. Examples of numeric
- * character references include &#169; or &#xA9; for the copyright
- * symbol, &#913; or &#x391; for the Greek capital letter alpha, and
- * &#1575; or &#x627; for the Arabic letter ALEF.
- *
- * http://www.htmlhelp.com/reference/html40/entities/special.html
- * http://www.htmlhelp.com/reference/html40/entities/symbols.html
- * http://www.htmlhelp.com/reference/html40/entities/latin1.html
- */
-
-/**
- *   This class parses an InputStream containing HTML and returns it
- *   as an XWT DOM tree. Each HTML Element is returned as a struct,
- *   with the following members:
- *
- *   Since HTML may have multiple top level elements (unlike XML),
- *   this class will search all top level elements for one with a tag
- *   name 'html'. If such a node is found, only it is returned. If no
- *   top-level element has the tag name 'html', such a node is
- *   fabricated, and all top level elements become the children of
- *   that node, which is then returned.
- */
-public class HTML {
-
-    private final static String[] noEndTag =
-        new String[] { "area", "base", "basefont", "br", "col", "frame", "hr", "img",
-                       "input", "isindex", "link", "meta", "param" };
-
-    /** we keep a char[] around for use by removeRedundantWhitespace() */
-    private static char[] cbuf = null;
-
-    /** we keep a StringBuffer around for use by removeRedundantWhitespace() */
-    private static StringBuffer sbuf = null;
-
-    /** true iff we have encountered an LI more recently than the last OL/UL */
-    private static boolean withinLI = false;
-
-    public static synchronized JS parseReader(Reader r) throws IOException, JSExn {
-        CharStream cs = new CharStream(r);
-        JS h = new JS();
-
-        withinLI = false;
-        h.put("$name", "html");
-
-        try {
-            while (true) parseBody(cs, h, null);
-        } catch (EOFException e) {
-            // continue until we get an EOFException
-        }
-        
-        /* FIXME
-        Object[] ids = h.keys();
-        for(int i=0; i<ids.length; i++) {
-            Object el = h.get((String)ids[i]);
-            if (el instanceof JS && "html".equals(((JS)el).get("$name")))
-                return (JS)el;
-        }
-        */        
-        return h;
-    }
-
-    /**
-     *  Parses a single element and stores it in <tt>h</tt>. The
-     *  CharStream should be positioned immediately <i>after</i> the
-     *  open bracket.
-     *
-     *  If a close tag not matching this open tag is found, the
-     *  tagname on the close tag will be returned in order to
-     *  facilitate correcting broken HTML. Otherwise, this returns
-     *  null.
-     */
-    private static String parseElement(CharStream cs, JS h) throws IOException, JSExn {
-        // scan element name
-        while(Character.isSpace(cs.peek())) cs.get();
-        String elementName = parseElementName(cs);
-
-        boolean saveWithinLI = withinLI;
-        if (elementName.equals("li")) {
-            if (withinLI) {
-                cs.unread(new char[] { '<', 'l', 'i', ' ' });
-                return "li";
-            } else {
-                withinLI = true;
-            }
-        } else if (elementName.equals("ol") || elementName.equals("ul")) {
-            withinLI = false;
-        }
-
-        h.put("$name", elementName);
-        if (elementName.equals("!--")) {
-            h.put("0", parseComment(cs));
-            h.put("$numchildren", new Integer(0));
-            return null;
-        }
-
-        // scan attributes
-        while (cs.peek() != '>') {
-            String name = parseAttributeName(cs);
-            if (name.equals("")) break;
-            String value = expandEntities(parseAttributeValue(cs));
-            h.put(name, value);
-        } 
-
-        // eat the close-angle bracket
-        cs.get();
-
-        // bodyless tags return here
-        for(int i=0; i<noEndTag.length; i++)
-            if (noEndTag[i].equals(elementName))
-                return null;
-
-        // scan body
-        String ret = parseBody(cs, h, elementName);
-        withinLI = saveWithinLI;
-        return ret;
-    }
-
-    /**
-     *  Parses the body of an element. The CharStream should be
-     *  positioned at the character immediately after the right
-     *  bracket closing the start-tag
-     */
-    private static String parseBody(CharStream cs, JS h, String elementName) throws IOException, JSExn {
-        String cdata = "";
-        int length = h.get("$numchildren") == null ? 0 : Integer.parseInt(h.get("$numchildren").toString());
-        while(true) {
-            String closetag = null;
-
-            try {
-                char c = cs.get();
-                if (c != '<') { cdata += c; continue; }
-                String expanded = removeRedundantWhitespace(expandEntities(cdata));
-                if (expanded.length() > 0) {
-                    h.put(String.valueOf(length), expanded);
-                    h.put("$numchildren", new Integer(++length));
-                }
-                cdata = "";
-
-            } catch (EOFException e) {
-                String expanded = removeRedundantWhitespace(expandEntities(cdata));
-                if (expanded.length() > 0) {
-                    h.put(String.valueOf(length), expanded);
-                    h.put("$numchildren", new Integer(++length));
-                }
-                throw e;
-            }
-                
-            try {
-                // scan subelement
-                if (cs.peek() != '/') {
-                    JS kid = new JS();
-                    closetag = parseElement(cs, kid);
-                    h.put(String.valueOf(length), kid); 
-                    h.put("$numchildren", new Integer(++length));
-                    
-                // scan close-tag
-                } else {
-                    cs.get(); // drop the slash
-                    closetag = parseElementName(cs);
-                    while(cs.get() != '>');
-                }
-            } catch (EOFException e) {
-                throw e;
-
-            }
-            
-            if (closetag != null)
-                return closetag.equals(elementName) ? null : closetag;
-        }
-    }
-
-    /** Parses an element name and returns it. The CharStream should
-     *  be positioned at the first character of the name.
-     */
-    private static String parseElementName(CharStream cs) throws IOException, JSExn {
-        String ret = "";
-        while (cs.peek() != '>' && !Character.isSpace(cs.peek())) ret += cs.get();
-        return ret.toLowerCase();
-    }
-
-    /** Parses an attribute name and returns it. The CharStream should
-     *  be positioned at the first character of the name, possibly
-     *  with intervening whitespace.
-     */
-    private static String parseAttributeName(CharStream cs) throws IOException, JSExn {
-        while(Character.isSpace(cs.peek())) cs.get();
-        String ret = "";
-        while(!Character.isSpace(cs.peek()) && cs.peek() != '=' && cs.peek() != '>') ret += cs.get();
-        return ret.toLowerCase();
-    }
-
-    /** Parses an attribute value and returns it. The CharStream
-     *  should be positioned at the equals sign, possibly with
-     *  intervening whitespace.
-     */
-    private static String parseAttributeValue(CharStream cs) throws IOException, JSExn {
-
-        // eat whitespace and equals sign
-        while(Character.isSpace(cs.peek())) cs.get();
-        if (cs.peek() != '=') return "";
-        cs.get();
-        while(Character.isSpace(cs.peek())) cs.get();
-
-        boolean doublequoted = false;
-        boolean singlequoted = false;
-        String ret = "";
-
-        if (cs.peek() == '\"') { doublequoted = true; cs.get(); }
-        else if (cs.peek() == '\'') { singlequoted = true; cs.get(); }
-
-        while(true) {
-            char c = cs.peek();
-            if (!doublequoted && !singlequoted && (Character.isSpace(c) || c == '>')) break;
-            if (singlequoted && c == '\'') { cs.get(); break; }
-            if (doublequoted && c == '\"') { cs.get(); break; }
-            ret += cs.get();
-        }
-        return ret;
-    }
-
-    /** Parses a comment and returns its body. The CharStream should
-     *  be positioned immediately after the &lt;!--
-     */
-    private static String parseComment(CharStream cs) throws IOException, JSExn {
-        int dashes = 0;
-        String ret = "";
-        while(true) {
-            char c = cs.get();
-            if (c == '>' && dashes == 2) return ret.substring(0, ret.length() - 2);
-            if (c == '-') dashes++;
-            else dashes = 0;
-            ret += c;
-        }
-    }
-
-    /** Expands all SGML entities in string <tt>s</tt> */
-    public static String expandEntities(String s) throws IOException, JSExn {
-        if (s.indexOf('&') == -1) return s;
-        StringBuffer sb = new StringBuffer();
-        int i=0;
-        int nextamp = 0;
-        while(nextamp != -1) {
-            nextamp = s.indexOf('&', i);
-            sb.append(nextamp == -1 ? s.substring(i) : s.substring(i, nextamp));
-            if (nextamp == -1) break;
-            if (s.regionMatches(nextamp, "&amp;", 0, 5)) {
-                sb.append("&");
-                i = nextamp + 5;
-            } else if (s.regionMatches(nextamp, "&gt;", 0, 4)) {
-                sb.append(">");
-                i = nextamp + 4;
-            } else if (s.regionMatches(nextamp, "&lt;", 0, 4)) {
-                sb.append("<");
-                i = nextamp + 4;
-            } else if (s.regionMatches(nextamp, "&quot;", 0, 6)) {
-                sb.append("\"");
-                i = nextamp + 6;
-            } else if (s.regionMatches(nextamp, "&nbsp;", 0, 6)) {
-                // FEATURE: perhaps we should distinguish this somehow
-                sb.append(" ");
-                i = nextamp + 6;
-            } else {
-                sb.append("&");
-                i = nextamp + 1;
-            }
-        }
-        return sb.toString();
-    }
-
-    /** removes all redundant whitespace */
-    private static String removeRedundantWhitespace(String s) throws JSExn {
-
-        if (s.indexOf(' ') == -1 && s.indexOf('\n') == -1 && s.indexOf('\t') == -1 && s.indexOf('\r') == -1) return s;
-
-        int len = s.length();
-        if (cbuf == null || cbuf.length < len) {
-            cbuf = new char[len * 2];
-            sbuf = new StringBuffer(len * 2);
-        }
-        sbuf.setLength(0);
-        s.getChars(0, len, cbuf, 0);
-
-        int last = 0;
-        boolean lastWasWhitespace = false;
-        for(int i=0; i<len; i++) {
-            boolean lastlast = lastWasWhitespace;
-            switch(cbuf[i]) {
-            case '\n': case '\r': case '\t':
-                cbuf[i] = ' ';
-            case ' ':
-                lastWasWhitespace = true;
-                break;
-            default:
-                lastWasWhitespace = false;
-                break;
-            }
-            if (lastWasWhitespace && lastlast) {
-                if (last != i) sbuf.append(cbuf, last, i - last);
-                last = i+1;
-            }
-        }
-            
-        if (last != len) sbuf.append(cbuf, last, len - last);
-        return sbuf.toString().trim();
-    }
-
-    // CharStream /////////////////////////////////////////////////////////////////////
-
-    private static class CharStream extends PushbackReader {
-        public CharStream(Reader r) { super(r, 1024); }
-
-        public char peek() throws IOException {
-            char c = get();
-            unread(c);
-            return c;
-        }
-
-        public char get() throws IOException {
-            int i = read();
-            if (i == -1) throw new EOFException();
-            return (char)i;
-        }
-    }
-
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/PNG.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/PNG.java
deleted file mode 100644 (file)
index 76867fc..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- * This file was adapted from Jason Marshall's PNGImageProducer.java
- *
- * Copyright (c) 1997, Jason Marshall.  All Rights Reserved
- *
- * The author makes no representations or warranties regarding the suitability,
- * reliability or stability of this code.  This code is provided AS IS.  The
- * author shall not be liable for any damages suffered as a result of using,
- * modifying or redistributing this software or any derivitives thereof.
- * Permission to use, reproduce, modify and/or (re)distribute this software is
- * hereby granted.
- */
-
-package org.ibex.graphics;
-
-import org.ibex.util.*;
-import java.io.*;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.zip.*;
-
-/** Converts an InputStream carrying a PNG image into an ARGB int[] */
-public class PNG {
-
-    public PNG() { }
-    
-    private static Queue instances = new Queue(10);
-    private Picture p;
-
-    public static void load(InputStream is, Picture p) {
-        PNG g = (PNG)instances.remove(false);
-        if (g == null) g = new PNG();
-        try {
-            g._load(is, p);
-            p.data = g.data;
-        } catch (Exception e) {
-            if (Log.on) Log.info(PNG.class, e);
-            return;
-        }
-        // FIXME: must reset fields
-        // if (instances.size() < 10) instances.append(g);
-    }
-
-    // Public Methods ///////////////////////////////////////////////////////////////////////////////
-
-    /** process a PNG as an inputstream; returns null if there is an error
-        @param name A string describing the image, to be used when logging errors
-    */
-    private void _load(InputStream is, Picture pic) throws IOException {
-        p = pic;
-        if (is instanceof BufferedInputStream) underlyingStream = (BufferedInputStream)is;
-        else underlyingStream = new BufferedInputStream(is);
-        target_offset = 0;
-        inputStream = new DataInputStream(underlyingStream);
-        
-        // consume the header
-        if ((inputStream.read() != 137) || (inputStream.read() != 80) || (inputStream.read() != 78) || (inputStream.read() != 71) ||
-            (inputStream.read() != 13) || (inputStream.read() != 10) || (inputStream.read() != 26) || (inputStream.read() != 10)) {
-            Log.info(this, "PNG: error: input file is not a PNG file");
-            data = p.data = new int[] { };
-            p.width = p.height = 0;
-            return;
-        }
-        
-
-        while (!error) {
-            if (needChunkInfo) {
-                chunkLength = inputStream.readInt();
-                chunkType = inputStream.readInt();
-                needChunkInfo = false;
-            }
-            
-           // I rewrote this as an if/else to work around a JODE bug with switch() blocks
-           if (chunkType == CHUNK_bKGD) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_cHRM) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_gAMA) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_hIST) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_pHYs) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_sBIT) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_tEXt) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_zTXt) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_tIME) inputStream.skip(chunkLength);
-           else if (chunkType == CHUNK_IHDR) handleIHDR();
-           else if (chunkType == CHUNK_PLTE) handlePLTE();
-           else if (chunkType == CHUNK_tRNS) handletRNS();
-           else if (chunkType == CHUNK_IDAT) handleIDAT();
-           else if (chunkType == CHUNK_IEND) break;
-           else {
-                System.err.println("unrecognized chunk type " + Integer.toHexString(chunkType) + ". skipping");
-                inputStream.skip(chunkLength);
-            }
-            
-            int crc = inputStream.readInt();
-            needChunkInfo = true;
-        }
-        p.isLoaded = true;
-    }
-
-    // Chunk Handlers ///////////////////////////////////////////////////////////////////////
-
-    /** handle data chunk */
-    private void handleIDAT() throws IOException {
-        if (p.width == -1 || p.height == -1) throw new IOException("never got image width/height");
-        switch (depth) {
-        case 1: mask = 0x1; break;
-        case 2: mask = 0x3; break;
-        case 4: mask = 0xf; break;
-        case 8: case 16: mask = 0xff; break;
-        default: mask = 0x0; break;
-        }
-        if (depth < 8) smask = mask << depth;
-        else smask = mask << 8;
-
-        int count = p.width * p.height;
-
-        switch (colorType) {
-        case 0:
-        case 2:
-        case 6:
-        case 4:
-            ipixels = new int[count];
-            pixels = ipixels;
-            break;
-        case 3:
-            bpixels = new byte[count];
-            pixels = bpixels;
-            break;
-        default:
-            throw new IOException("Image has unknown color type");
-        }
-        if (interlaceMethod != 0) multipass = true;
-        readImageData();
-    }
-
-    /** handle header chunk */
-    private void handleIHDR() throws IOException {
-        if (headerFound) throw new IOException("Extraneous IHDR chunk encountered.");
-        if (chunkLength != 13) throw new IOException("IHDR chunk length wrong: " + chunkLength);
-        p.width = inputStream.readInt();
-        p.height = inputStream.readInt();
-        depth = inputStream.read();
-        colorType = inputStream.read();
-        compressionMethod = inputStream.read();
-        filterMethod = inputStream.read();
-        interlaceMethod = inputStream.read();
-    }
-
-    /** handle pallette chunk */
-    private void handlePLTE() throws IOException {
-        if (colorType == 3) {
-            palette = new byte[chunkLength];
-            inputStream.readFully(palette);
-        } else {
-            // Ignore suggested palette
-            inputStream.skip(chunkLength);
-        }
-    }
-
-    /** handle transparency chunk; modifies palette */
-    private void handletRNS() throws IOException {
-        int chunkLen = chunkLength;
-        if (palette == null) {
-            if (Log.on) Log.info(this, "warning: tRNS chunk encountered before pLTE; ignoring alpha channel");
-            inputStream.skip(chunkLength);
-            return;
-        }
-        int len = palette.length;
-        if (colorType == 3) {
-            transparency = true;
-
-            int transLength = len/3;
-            byte[] trans = new byte[transLength];
-            for (int i = 0; i < transLength; i++) trans[i] = (byte) 0xff;
-            inputStream.readFully(trans, 0, chunkLength);
-
-            byte[] newPalette = new byte[len + transLength];
-            for (int i = newPalette.length; i > 0;) {
-                newPalette[--i] = trans[--transLength];
-                newPalette[--i] = palette[--len];
-                newPalette[--i] = palette[--len];
-                newPalette[--i] = palette[--len];
-            }
-            palette = newPalette;
-
-        } else {
-            inputStream.skip(chunkLength);
-        }
-    }
-
-    /// Helper functions for IDAT ///////////////////////////////////////////////////////////////////////////////////////////
-
-    /** Read Image data in off of a compression stream */
-    private void readImageData() throws IOException {
-        InputStream dataStream = new SequenceInputStream(new IDATEnumeration(this));
-        DataInputStream dis = new DataInputStream(new BufferedInputStream(new InflaterInputStream(dataStream, new Inflater())));
-        int bps, filterOffset;
-        switch (colorType) {
-          case 0: case 3: bps = depth; break;
-          case 2: bps = 3 * depth; break;
-          case 4: bps = depth<<1; break;
-          case 6: bps = depth<<2; break;
-          default: throw new IOException("Unknown color type encountered.");
-        }
-
-        filterOffset = (bps + 7) >> 3;
-
-        for (pass = (multipass ? 1 : 0); pass < 8; pass++) {
-            int pass = this.pass;
-            int rInc = rowInc[pass];
-            int cInc = colInc[pass];
-            int sCol = startingCol[pass];
-            int val = (p.width - sCol + cInc - 1) / cInc;
-            int samples = val * filterOffset;
-            int rowSize = (val * bps)>>3;
-            int sRow = startingRow[pass];
-            if (p.height <= sRow || rowSize == 0) continue;
-            int sInc = rInc * p.width;
-            byte inbuf[] = new byte[rowSize];
-            int pix[] = new int[rowSize];
-            int upix[] = null;
-            int temp[] = new int[rowSize];
-            int nextY = sRow;               // next Y value and number of rows to report to sendPixels
-            int rows = 0;
-            int rowStart = sRow * p.width;
-
-            for (int y = sRow; y < p.height; y += rInc, rowStart += sInc) {
-                rows += rInc;
-                int rowFilter = dis.read();
-                dis.readFully(inbuf);
-                if (!filterRow(inbuf, pix, upix, rowFilter, filterOffset)) throw new IOException("Unknown filter type: " + rowFilter);
-                insertPixels(pix, rowStart + sCol, samples);
-                if (multipass && (pass < 6)) blockFill(rowStart);
-                upix = pix;
-                pix = temp;
-                temp = upix;
-            }
-            if (!multipass) break;
-        }
-        while(dis.read() != -1) System.err.println("Leftover data encountered.");
-
-        // 24-bit color is our native format
-        if (colorType == 2 || colorType == 6) {
-            data = (int[])pixels;
-            if (colorType == 2) {
-                for(int i=0; i<data.length; i++)
-                    data[i] |= 0xFF000000;
-            }
-
-        } else if (colorType == 3) {
-            byte[] pix = (byte[])pixels;
-            data = new int[pix.length];
-            for(int i=0; i<pix.length; i++) {
-                if (transparency) {
-                    data[i] =
-                        ((palette[4 * (pix[i] & 0xff) + 3] & 0xff) << 24) |
-                        ((palette[4 * (pix[i] & 0xff) + 0] & 0xff) << 16) |
-                        ((palette[4 * (pix[i] & 0xff) + 1] & 0xff) << 8) |
-                        (palette[4 * (pix[i] & 0xff) + 2] & 0xff);
-                } else {
-                    data[i] =
-                        0xFF000000 |
-                        ((palette[3 * (pix[i] & 0xff) + 0] & 0xff) << 16) |
-                        ((palette[3 * (pix[i] & 0xff) + 1] & 0xff) << 8) |
-                        (palette[3 * (pix[i] & 0xff) + 2] & 0xff);
-                }
-            }
-
-        } else if (colorType == 0 || colorType == 4) {
-            if (depth == 16) depth = 8;
-            int[] pix = (int[])pixels;
-            data = new int[pix.length];
-            for(int i=0; i<pix.length; i ++) {
-                if (colorType == 0) {
-                    int val = (pix[i] & 0xff) << (8 - depth);
-                    data[i] =
-                        0xFF000000 | 
-                        (val << 16) | 
-                        (val << 8) | 
-                        val;
-                } else {
-                    int alpha = (pix[i] & mask) << (8 - depth);
-                    int val = ((pix[i] & smask) >> depth) << (8 - depth);
-                    data[i] =
-                        (alpha << 24) |
-                        (val << 16) | 
-                        (val << 8) | 
-                        val;
-                }
-            }
-        }
-
-    }
-
-    private void insertGreyPixels(int pix[], int offset, int samples) {
-        int p = pix[0];
-        int ipix[] = ipixels;
-        int cInc = colInc[pass];
-        int rs = 0;
-
-        if (colorType == 0) {
-            switch (depth) {
-            case 1:
-                for (int j = 0; j < samples; j++, offset += cInc) {
-                    if (rs != 0) rs--;
-                    else { rs = 7; p = pix[j>>3]; }
-                    ipix[offset] = (p>>rs) & 0x1;
-                }
-                break;
-            case 2:
-                for (int j = 0; j < samples; j++, offset += cInc) {
-                    if (rs != 0) rs -= 2;
-                    else { rs = 6; p = pix[j>>2]; }
-                    ipix[offset] = (p>>rs) & 0x3;
-                }
-                break;
-            case 4:
-                for (int j = 0; j < samples; j++, offset += cInc) {
-                    if (rs != 0) rs = 0;
-                    else { rs = 4; p = pix[j>>1]; }
-                    ipix[offset] = (p>>rs) & 0xf;
-                }
-                break;
-            case 8:
-                for (int j = 0; j < samples; offset += cInc) ipix[offset] = (byte) pix[j++];
-                break;
-            case 16:
-                samples = samples<<1;
-                for (int j = 0; j < samples; j += 2, offset += cInc) ipix[offset] = pix[j];
-                break;
-            default: break;
-            }
-        } else if (colorType == 4) {
-            if (depth == 8) {
-                for (int j = 0; j < samples; offset += cInc) ipix[offset] = (pix[j++]<<8) | pix[j++];
-            } else {
-                samples = samples<<1;
-                for (int j = 0; j < samples; j += 2, offset += cInc) ipix[offset] = (pix[j]<<8) | pix[j+=2];
-            }
-        }
-    }
-
-    private void insertPalettedPixels(int pix[], int offset, int samples) {
-        int rs = 0;
-        int p = pix[0];
-        byte bpix[] = bpixels;
-        int cInc = colInc[pass];
-
-        switch (depth) {
-          case 1:
-            for (int j = 0; j < samples; j++, offset += cInc) {
-                if (rs != 0) rs--;
-                else { rs = 7; p = pix[j>>3]; }
-                bpix[offset] = (byte) ((p>>rs) & 0x1);
-            }
-            break;
-          case 2:
-            for (int j = 0; j < samples; j++, offset += cInc) {
-                if (rs != 0) rs -= 2;
-                else { rs = 6; p = pix[j>>2]; }
-                bpix[offset] = (byte) ((p>>rs) & 0x3);
-            }
-            break;
-          case 4:
-            for (int j = 0; j < samples; j++, offset += cInc) {
-                if (rs != 0) rs = 0;
-                else { rs = 4; p = pix[j>>1]; }
-                bpix[offset] = (byte) ((p>>rs) & 0xf);
-            }
-            break;
-          case 8:
-            for (int j = 0; j < samples; j++, offset += cInc) bpix[offset] = (byte) pix[j];
-            break;
-        }
-    }
-
-    private void insertPixels(int pix[], int offset, int samples) {
-        switch (colorType) {
-        case 0:
-        case 4:
-            insertGreyPixels(pix, offset, samples);
-            break;
-        case 2: {
-            int j = 0;
-            int ipix[] = ipixels;
-            int cInc = colInc[pass];
-            if (depth == 8) {
-                for (j = 0; j < samples; offset += cInc)
-                    ipix[offset] = (pix[j++]<<16) | (pix[j++]<<8) | pix[j++];
-            } else {
-                samples = samples<<1;
-                for (j = 0; j < samples; j += 2, offset += cInc)
-                    ipix[offset] = (pix[j]<<16) | (pix[j+=2]<<8) | pix[j+=2];
-            }
-            break; }
-        case 3:
-            insertPalettedPixels(pix, offset, samples);
-            break;
-        case 6: {
-            int j = 0;
-            int ipix[] = ipixels;
-            int cInc = colInc[pass];
-            if (depth == 8) {
-                for (j = 0; j < samples; offset += cInc) {
-                    ipix[offset] = (pix[j++]<<16) | (pix[j++]<<8) | pix[j++] |
-                                    (pix[j++]<<24);
-                }
-            } else {
-                samples = samples<<1;
-                for (j = 0; j < samples; j += 2, offset += cInc) {
-                    ipix[offset] = (pix[j]<<16) | (pix[j+=2]<<8) | pix[j+=2] |
-                                    (pix[j+=2]<<24);
-                }
-            }
-            break; }
-          default:
-            break;
-        }
-    }
-
-    private void blockFill(int rowStart) {
-        int counter;
-        int dw = p.width;
-        int pass = this.pass;
-        int w = blockWidth[pass];
-        int sCol = startingCol[pass];
-        int cInc = colInc[pass];
-        int wInc = cInc - w;
-        int maxW = rowStart + dw - w;
-        int len;
-        int h = blockHeight[pass];
-        int maxH = rowStart + (dw * h);
-        int startPos = rowStart + sCol;
-        counter = startPos;
-
-        if (colorType == 3) {
-            byte bpix[] = bpixels;
-            byte pixel;
-            len = bpix.length;
-            for (; counter <= maxW;) {
-                int end = counter + w;
-                pixel = bpix[counter++];
-                for (; counter < end; counter++) bpix[counter] = pixel;
-                counter += wInc;
-            }
-            maxW += w;
-            if (counter < maxW)
-                for (pixel = bpix[counter++]; counter < maxW; counter++)
-                    bpix[counter] = pixel;
-            if (len < maxH) maxH = len;
-            for (counter = startPos + dw; counter < maxH; counter += dw)
-                System.arraycopy(bpix, startPos, bpix, counter, dw - sCol);
-        } else {
-            int ipix[] = ipixels;
-            int pixel;
-            len = ipix.length;
-            for (; counter <= maxW;) {
-                int end = counter + w;
-                pixel = ipix[counter++];
-                for (; counter < end; counter++)
-                    ipix[counter] = pixel;
-                counter += wInc;
-            }
-            maxW += w;
-            if (counter < maxW)
-                for (pixel = ipix[counter++]; counter < maxW; counter++)
-                    ipix[counter] = pixel;
-            if (len < maxH) maxH = len;
-            for (counter = startPos + dw; counter < maxH; counter += dw)
-                System.arraycopy(ipix, startPos, ipix, counter, dw - sCol);
-        }
-    }
-
-    private boolean filterRow(byte inbuf[], int pix[], int upix[], int rowFilter, int boff) {
-        int rowWidth = pix.length;
-        switch (rowFilter) {
-        case 0: {
-            for (int x = 0; x < rowWidth; x++) pix[x] = 0xff & inbuf[x];
-            break; }
-        case 1: {
-            int x = 0;
-            for ( ; x < boff; x++) pix[x] = 0xff & inbuf[x];
-            for ( ; x < rowWidth; x++) pix[x] = 0xff & (inbuf[x] + pix[x - boff]);
-            break; }
-        case 2: {
-            if (upix != null) {
-                for (int x = 0; x < rowWidth; x++)
-                    pix[x] = 0xff & (upix[x] + inbuf[x]);
-            } else {
-                for (int x = 0; x < rowWidth; x++)
-                    pix[x] = 0xff & inbuf[x];
-            }
-            break; }
-        case 3: {
-            if (upix != null) {
-                int x = 0;
-                for ( ; x < boff; x++) {
-                    int rval = upix[x];
-                    pix[x] = 0xff & ((rval>>1) + inbuf[x]);
-                }
-                for ( ; x < rowWidth; x++) {
-                    int rval = upix[x] + pix[x - boff];
-                    pix[x] = 0xff & ((rval>>1) + inbuf[x]);
-                }
-            } else {
-                int x = 0;
-                for ( ; x < boff; x++) pix[x] = 0xff & inbuf[x];
-                for ( ; x < rowWidth; x++) {
-                    int rval = pix[x - boff];
-                    pix[x] = 0xff & ((rval>>1) + inbuf[x]);
-                }
-            }
-            break; }
-        case 4: {
-            if (upix != null) {
-                int x = 0;
-                for ( ; x < boff; x++) pix[x] = 0xff & (upix[x] + inbuf[x]);
-                for ( ; x < rowWidth; x++) {
-                    int a, b, c, p, pa, pb, pc, rval;
-                    a = pix[x - boff];
-                    b = upix[x];
-                    c = upix[x - boff];
-                    p = a + b - c;
-                    pa = p > a ? p - a : a - p;
-                    pb = p > b ? p - b : b - p;
-                    pc = p > c ? p - c : c - p;
-                    if ((pa <= pb) && (pa <= pc)) rval = a;
-                    else if (pb <= pc) rval = b;
-                    else rval = c;
-                    pix[x] = 0xff & (rval + inbuf[x]);
-                }
-            } else {
-                int x = 0;
-                for ( ; x < boff; x++) pix[x] = 0xff & inbuf[x];
-                for ( ; x < rowWidth; x++) {
-                    int rval = pix[x - boff];
-                    pix[x] = 0xff & (rval + inbuf[x]);
-                }
-            }
-            break; }
-        default: return false;
-        }
-        return true;
-    }
-
-    // Private Data ///////////////////////////////////////////////////////////////////////////////////////
-    
-    private int target_offset = 0;
-    private int sigmask = 0xffff;
-    private Object pixels = null;
-    private int ipixels[] = null;
-    private byte bpixels[] = null;
-    private boolean multipass = false;
-    private boolean complete = false;
-    private boolean error = false;
-
-    int[] data = null;
-
-    private InputStream underlyingStream = null;
-    private DataInputStream inputStream = null;
-    private Thread controlThread = null;
-    private boolean infoAvailable = false;
-    private int updateDelay = 750;
-
-    // Image decoding state variables
-    private boolean headerFound = false;
-    private int compressionMethod = -1;
-    private int depth = -1;
-    private int colorType = -1;
-    private int filterMethod = -1;
-    private int interlaceMethod = -1;
-    private int pass = 0;
-    private byte palette[] = null;
-    private int mask = 0x0;
-    private int smask = 0x0;
-    private boolean transparency = false;
-
-    private int chunkLength = 0;
-    private int chunkType = 0;
-    private boolean needChunkInfo = true;
-
-    private static final int CHUNK_bKGD = 0x624B4744;   // "bKGD"
-    private static final int CHUNK_cHRM = 0x6348524D;   // "cHRM"
-    private static final int CHUNK_gAMA = 0x67414D41;   // "gAMA"
-    private static final int CHUNK_hIST = 0x68495354;   // "hIST"
-    private static final int CHUNK_IDAT = 0x49444154;   // "IDAT"
-    private static final int CHUNK_IEND = 0x49454E44;   // "IEND"
-    private static final int CHUNK_IHDR = 0x49484452;   // "IHDR"
-    private static final int CHUNK_PLTE = 0x504C5445;   // "PLTE"
-    private static final int CHUNK_pHYs = 0x70485973;   // "pHYs"
-    private static final int CHUNK_sBIT = 0x73424954;   // "sBIT"
-    private static final int CHUNK_tEXt = 0x74455874;   // "tEXt"
-    private static final int CHUNK_tIME = 0x74494D45;   // "tIME"
-    private static final int CHUNK_tRNS = 0x74524E53;   // "tIME"
-    private static final int CHUNK_zTXt = 0x7A545874;   // "zTXt"
-
-    private static final int startingRow[]  =  { 0, 0, 0, 4, 0, 2, 0, 1 };
-    private static final int startingCol[]  =  { 0, 0, 4, 0, 2, 0, 1, 0 };
-    private static final int rowInc[]       =  { 1, 8, 8, 8, 4, 4, 2, 2 };
-    private static final int colInc[]       =  { 1, 8, 8, 4, 4, 2, 2, 1 };
-    private static final int blockHeight[]  =  { 1, 8, 8, 4, 4, 2, 2, 1 };
-    private static final int blockWidth[]   =  { 1, 8, 4, 4, 2, 2, 1, 1 };
-
-    // Helper Classes ////////////////////////////////////////////////////////////////////
-
-    private static class MeteredInputStream extends FilterInputStream {
-        int bytesLeft;
-        int marked;
-        
-        public MeteredInputStream(InputStream in, int size) {
-            super(in);
-            bytesLeft = size;
-        }
-        
-        public final int read() throws IOException {
-            if (bytesLeft > 0) {
-                int val = in.read();
-                if (val != -1) bytesLeft--;
-                return val;
-            }
-            return -1;
-        }
-        
-        public final int read(byte b[]) throws IOException {
-            return read(b, 0, b.length);
-        }
-        
-        public final int read(byte b[], int off, int len) throws IOException {
-            if (bytesLeft > 0) {
-                len = (len > bytesLeft ? bytesLeft : len);
-                int read = in.read(b, off, len);
-                if (read > 0) bytesLeft -= read;
-                return read;
-            }
-            return -1;
-        }
-        
-        public final long skip(long n) throws IOException {
-            n = (n > bytesLeft ? bytesLeft : n);
-            long skipped = in.skip(n);
-            if (skipped > 0) bytesLeft -= skipped;
-            return skipped;
-        }
-        
-        public final int available() throws IOException {
-            int n = in.available();
-            return (n > bytesLeft ? bytesLeft : n);
-        }
-        
-        public final void close() throws IOException { /* Eat this */ }
-
-        public final void mark(int readlimit) {
-            marked = bytesLeft;
-            in.mark(readlimit);
-        }
-        
-        public final void reset() throws IOException {
-            in.reset();
-            bytesLeft = marked;
-        }
-        
-        public final boolean markSupported() { return in.markSupported(); }
-    }
-
-    /** Support class, used to eat the IDAT headers dividing up the deflated stream */
-    private static class IDATEnumeration implements Enumeration {
-        InputStream underlyingStream;
-        PNG owner;
-        boolean firstStream = true;
-        
-        public IDATEnumeration(PNG owner) {
-            this.owner = owner;
-            this.underlyingStream = owner.underlyingStream;
-        }
-        
-        public Object nextElement() {
-            firstStream = false;
-            return new MeteredInputStream(underlyingStream, owner.chunkLength);
-        }
-        
-        public boolean hasMoreElements() {
-            DataInputStream dis = new DataInputStream(underlyingStream);
-            if (!firstStream) {
-                try {
-                    int crc = dis.readInt();
-                    owner.needChunkInfo = false;
-                    owner.chunkLength = dis.readInt();
-                    owner.chunkType = dis.readInt();
-                } catch (IOException ioe) {
-                    return false;
-                }
-            }
-            if (owner.chunkType == PNG.CHUNK_IDAT) return true;
-            return false;
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Paint.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Paint.java
deleted file mode 100644 (file)
index 46c43ee..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// FIXME
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import java.util.*;
-
-public abstract class Paint {
-    public abstract void fillTrapezoid(int tx1, int tx2, int ty1, int tx3, int tx4, int ty2, PixelBuffer buf);
-
-    public static class SingleColorPaint extends Paint {
-        int color;
-        public SingleColorPaint(int color) { this.color = color; }
-        public void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, PixelBuffer buf) {
-            buf.fillTrapezoid(x1, x2, y1, x3, x4, y2, color);
-        }
-    }
-
-
-    /*
-      public static abstract class GradientPaint extends Paint {
-      public GradientPaint(boolean reflect, boolean repeat, Affine gradientTransform,
-      int[] stop_colors, float[] stop_offsets) {
-      this.reflect = reflect; this.repeat = repeat;
-      this.gradientTransform = gradientTransform;
-      this.stop_colors = stop_colors;
-      this.stop_offsets = stop_offsets;
-      }
-      Affine gradientTransform = Affine.identity();
-      boolean useBoundingBox = false;            // FIXME not supported
-      boolean patternUseBoundingBox = false;     // FIXME not supported
-
-      // it's invalid for both of these to be true
-      boolean reflect = false;                   // FIXME not supported
-      boolean repeat = false;                    // FIXME not supported
-      int[] stop_colors;
-      float[] stop_offsets;
-
-      public void fillTrapezoid(float tx1, float tx2, float ty1, float tx3, float tx4, float ty2, PixelBuffer buf) {
-      Affine a = buf.a;
-      Affine inverse = a.copy().invert();
-      float slope1 = (tx3 - tx1) / (ty2 - ty1);
-      float slope2 = (tx4 - tx2) / (ty2 - ty1);
-      for(float y=ty1; y<ty2; y++) {
-      float _x1 = (y - ty1) * slope1 + tx1;
-      float _x2 = (y - ty1) * slope2 + tx2;
-      if (_x1 > _x2) { float _x0 = _x1; _x1 = _x2; _x2 = _x0; }
-
-      for(float x=_x1; x<_x2; x++) {
-                   
-      float distance = isLinear ?
-      // length of projection of <x,y> onto the gradient vector == {<x,y> \dot {grad \over |grad|}}
-      (x * (x2 - x1) + y * (y2 - y1)) / (float)Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) :
-                       
-      // radial form is simple! FIXME, not quite right
-      (float)Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));
-                       
-      // FIXME: offsets are 0..1, not 0..length(gradient)
-      int i = 0; for(; i<stop_offsets.length; i++) if (distance < stop_offsets[i]) break;
-
-      // FIXME: handle points beyond the bounds
-      if (i < 0 || i >= stop_offsets.length) continue;
-
-      // gradate from offsets[i - 1] to offsets[i]
-      float percentage = ((distance - stop_offsets[i - 1]) / (stop_offsets[i] - stop_offsets[i - 1]));
-
-      int a = (int)((((stop_colors[i] >> 24) & 0xff) - ((stop_colors[i - 1] >> 24) & 0xff)) * percentage) +
-      ((stop_colors[i - 1] >> 24) & 0xff);
-      int r = (int)((((stop_colors[i] >> 16) & 0xff) - ((stop_colors[i - 1] >> 16) & 0xff)) * percentage) +
-      ((stop_colors[i - 1] >> 16) & 0xff);
-      int g = (int)((((stop_colors[i] >> 8) & 0xff)  - ((stop_colors[i - 1] >> 8) & 0xff)) * percentage) +
-      ((stop_colors[i - 1] >> 8) & 0xff);
-      int b = (int)((((stop_colors[i] >> 0) & 0xff)  - ((stop_colors[i - 1] >> 0) & 0xff)) * percentage) +
-      ((stop_colors[i - 1] >> 0) & 0xff);
-      int argb = (a << 24) | (r << 16) | (g << 8) | b;
-      buf.drawPoint((int)x, (int)Math.floor(y), argb);
-      }
-      }
-      }
-      }
-
-      public static class LinearGradientPaint extends GradientPaint {
-      public LinearGradientPaint(float x1, float y1, float x2, float y2, boolean reflect, boolean repeat,
-      Affine gradientTransform,  int[] stop_colors, float[] stop_offsets) {
-      super(reflect, repeat, gradientTransform, stop_colors, stop_offsets);
-      this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2;
-      }
-      float x1 = 0, y1 = 0, x2 = 300, y2 = 300;
-      }
-
-      public static class RadialGradientPaint extends GradientPaint {
-      public RadialGradientPaint(float cx, float cy, float fx, float fy, float r, boolean reflect, boolean repeat,
-      Affine gradientTransform, int[] stop_colors, float[] stop_offsets) {
-      super(reflect, repeat, gradientTransform, stop_colors, stop_offsets);
-      this.cx = cx; this.cy = cy; this.fx = fx; this.fy = fy; this.r = r;
-      }
-            
-      float cx, cy, r, fx, fy;
-
-      }
-    */
-
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Path.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Path.java
deleted file mode 100644 (file)
index 7557209..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-// FIXME
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import java.util.*;
-
-/** an abstract path; may contain splines and arcs */
-public class Path {
-
-    public static final float PX_PER_INCH = 72;
-    public static final float INCHES_PER_CM = (float)0.3937;
-    public static final float INCHES_PER_MM = INCHES_PER_CM / 10;
-    private static final int DEFAULT_PATHLEN = 1000;
-    private static final float PI = (float)Math.PI;
-
-    // the number of vertices on this path
-    int numvertices = 0;
-
-    // the vertices of the path
-    float[] x = new float[DEFAULT_PATHLEN];
-    float[] y = new float[DEFAULT_PATHLEN];
-
-    // the type of each edge; type[i] is the type of the edge from x[i],y[i] to x[i+1],y[i+1]
-    byte[] type = new byte[DEFAULT_PATHLEN];
-
-    // bezier control points
-    float[] c1x = new float[DEFAULT_PATHLEN];  // or rx (arcto)
-    float[] c1y = new float[DEFAULT_PATHLEN];  // or ry (arcto)
-    float[] c2x = new float[DEFAULT_PATHLEN];  // or x-axis-rotation (arcto)
-    float[] c2y = new float[DEFAULT_PATHLEN];  // or large-arc << 1 | sweep (arcto)
-
-    boolean closed = false;
-
-    static final byte TYPE_MOVETO = 0;
-    static final byte TYPE_LINETO = 1;
-    static final byte TYPE_ARCTO = 2;
-    static final byte TYPE_CUBIC = 3;
-    static final byte TYPE_QUADRADIC = 4;
-
-    public static Path parse(String s) { return Tokenizer.parse(s); }
-
-    // FIXME: hack
-    private String toString;
-    private Path(String s) { this.toString = s; }
-    public String toString() { return toString; }
-
-    public static class Tokenizer {
-        // FIXME: check array bounds exception for improperly terminated string
-        String s;
-        int i = 0;
-        char lastCommand = 'M';
-        public Tokenizer(String s) { this.s = s; }
-            
-        public static Path parse(String s) {
-            if (s == null) return null;
-            Tokenizer t = new Tokenizer(s);
-            Path ret = new Path(s);
-            char last_command = 'M';
-            boolean first = true;
-            while(t.hasMoreTokens()) {
-                char command = t.parseCommand();
-                if (first && command != 'M') throw new RuntimeException("the first command of a path must be 'M'");
-                first = false;
-                boolean relative = Character.toLowerCase(command) == command;
-                command = Character.toLowerCase(command);
-                ret.parseSingleCommandAndArguments(t, command, relative);
-                last_command = command;
-            }
-            return ret;
-        }
-
-        private void consumeWhitespace() {
-            while(i < s.length() && (Character.isWhitespace(s.charAt(i)))) i++;
-            if (i < s.length() && s.charAt(i) == ',') i++;
-            while(i < s.length() && (Character.isWhitespace(s.charAt(i)))) i++;
-        }
-        public boolean hasMoreTokens() { consumeWhitespace(); return i < s.length(); }
-        public char parseCommand() {
-            consumeWhitespace();
-            char c = s.charAt(i);
-            if (!Character.isLetter(c)) return lastCommand;
-            i++;
-            return lastCommand = c;
-        }
-        public float parseFloat() {
-            consumeWhitespace();
-            int start = i;
-            float multiplier = 1;
-            for(; i < s.length(); i++) {
-                char c = s.charAt(i);
-                if (Character.isWhitespace(c) || c == ',' || (c == '-' && i != start)) break;
-                if (!((c >= '0' && c <= '9') || c == '.' || c == 'e' || c == 'E' || c == '-')) {
-                    if (c == '%') {                                // FIXME
-                    } else if (s.regionMatches(i, "pt", 0, i+2)) { // FIXME
-                    } else if (s.regionMatches(i, "em", 0, i+2)) { // FIXME
-                    } else if (s.regionMatches(i, "pc", 0, i+2)) { // FIXME
-                    } else if (s.regionMatches(i, "ex", 0, i+2)) { // FIXME
-                    } else if (s.regionMatches(i, "mm", 0, i+2)) { i += 2; multiplier = INCHES_PER_MM * PX_PER_INCH; break;
-                    } else if (s.regionMatches(i, "cm", 0, i+2)) { i += 2; multiplier = INCHES_PER_CM * PX_PER_INCH; break;
-                    } else if (s.regionMatches(i, "in", 0, i+2)) { i += 2; multiplier = PX_PER_INCH; break;
-                    } else if (s.regionMatches(i, "px", 0, i+2)) { i += 2; break;
-                    } else if (Character.isLetter(c)) break;
-                    throw new RuntimeException("didn't expect character \"" + c + "\" in a numeric constant");
-                }
-            }
-            if (start == i) throw new RuntimeException("FIXME");
-            return Float.parseFloat(s.substring(start, i)) * multiplier;
-        }
-    }
-
-    /** Creates a concrete vector path transformed through the given matrix. */
-    public Raster realize(Affine a) {
-
-        Raster ret = new Raster();
-        int NUMSTEPS = 5;  // FIXME
-        ret.numvertices = 1;
-        ret.x[0] = (int)Math.round(a.multiply_px(x[0], y[0]));
-        ret.y[0] = (int)Math.round(a.multiply_py(x[0], y[0]));
-
-        for(int i=1; i<numvertices; i++) {
-            if (type[i] == TYPE_LINETO) {
-                float rx = x[i];
-                float ry = y[i];
-                ret.x[ret.numvertices] = (int)Math.round(a.multiply_px(rx, ry));
-                ret.y[ret.numvertices] = (int)Math.round(a.multiply_py(rx, ry));
-                ret.edges[ret.numedges++] = ret.numvertices - 1; ret.numvertices++;
-
-            } else if (type[i] == TYPE_MOVETO) {
-                float rx = x[i];
-                float ry = y[i];
-                ret.x[ret.numvertices] = (int)Math.round(a.multiply_px(rx, ry));
-                ret.y[ret.numvertices] = (int)Math.round(a.multiply_py(rx, ry));
-                ret.numvertices++;
-
-            } else if (type[i] == TYPE_ARCTO) {
-                float rx = c1x[i];
-                float ry = c1y[i];
-                float phi = c2x[i];
-                float fa = ((int)c2y[i]) >> 1;
-                float fs = ((int)c2y[i]) & 1;
-                float x1 = x[i];
-                float y1 = y[i];
-                float x2 = x[i+1];
-                float y2 = y[i+1];
-
-                // F.6.5: given x1,y1,x2,y2,fa,fs, compute cx,cy,theta1,dtheta
-                float x1_ = (float)Math.cos(phi) * (x1 - x2) / 2 + (float)Math.sin(phi) * (y1 - y2) / 2;
-                float y1_ = -1 * (float)Math.sin(phi) * (x1 - x2) / 2 + (float)Math.cos(phi) * (y1 - y2) / 2;
-                float tmp = (float)Math.sqrt((rx * rx * ry * ry - rx * rx * y1_ * y1_ - ry * ry * x1_ * x1_) /
-                                             (rx * rx * y1_ * y1_ + ry * ry * x1_ * x1_));
-                float cx_ = (fa == fs ? -1 : 1) * tmp * (rx * y1_ / ry);
-                float cy_ = (fa == fs ? -1 : 1) * -1 * tmp * (ry * x1_ / rx);
-                float cx = (float)Math.cos(phi) * cx_ - (float)Math.sin(phi) * cy_ + (x1 + x2) / 2;
-                float cy = (float)Math.sin(phi) * cx_ + (float)Math.cos(phi) * cy_ + (y1 + y2) / 2;
-
-                // F.6.4 Conversion from center to endpoint parameterization
-                float ux = 1, uy = 0, vx = (x1_ - cx_) / rx, vy = (y1_ - cy_) / ry;
-                float det = ux * vy - uy * vx;
-                float theta1 = (det < 0 ? -1 : 1) *
-                    (float)Math.acos((ux * vx + uy * vy) / 
-                                     ((float)Math.sqrt(ux * ux + uy * uy) * (float)Math.sqrt(vx * vx + vy * vy)));
-                ux = (x1_ - cx_) / rx; uy = (y1_ - cy_) / ry;
-                vx = (-1 * x1_ - cx_) / rx; vy = (-1 * y1_ - cy_) / ry;
-                det = ux * vy - uy * vx;
-                float dtheta = (det < 0 ? -1 : 1) *
-                    (float)Math.acos((ux * vx + uy * vy) / 
-                                     ((float)Math.sqrt(ux * ux + uy * uy) * (float)Math.sqrt(vx * vx + vy * vy)));
-                dtheta = dtheta % (float)(2 * Math.PI);
-
-                if (fs == 0 && dtheta > 0) theta1 -= 2 * PI; 
-                if (fs == 1 && dtheta < 0) theta1 += 2 * PI;
-
-                if (fa == 1 && dtheta < 0) dtheta = 2 * PI + dtheta;
-                else if (fa == 1 && dtheta > 0) dtheta = -1 * (2 * PI - dtheta);
-
-                // FIXME: integrate F.6.6
-                // FIXME: isn't quite ending where it should...
-
-                // F.6.3: Parameterization alternatives
-                float theta = theta1;
-                for(int j=0; j<NUMSTEPS; j++) {
-                    float rasterx = rx * (float)Math.cos(theta) * (float)Math.cos(phi) -
-                        ry * (float)Math.sin(theta) * (float)Math.sin(phi) + cx;
-                    float rastery = rx * (float)Math.cos(theta) * (float)Math.sin(phi) +
-                        ry * (float)Math.cos(phi) * (float)Math.sin(theta) + cy;
-                    ret.x[ret.numvertices] = (int)Math.round(a.multiply_px(rasterx, rastery));
-                    ret.y[ret.numvertices] = (int)Math.round(a.multiply_py(rasterx, rastery));
-                    ret.edges[ret.numedges++] = ret.numvertices - 1; ret.numvertices++;
-                    theta += dtheta / NUMSTEPS;
-                }
-
-            } else if (type[i] == TYPE_CUBIC) {
-
-                float ax = x[i+1] - 3 * c2x[i] + 3 * c1x[i] - x[i];
-                float bx = 3 * c2x[i] - 6 * c1x[i] + 3 * x[i];
-                float cx = 3 * c1x[i] - 3 * x[i];
-                float dx = x[i];
-                float ay = y[i+1] - 3 * c2y[i] + 3 * c1y[i] - y[i];
-                float by = 3 * c2y[i] - 6 * c1y[i] + 3 * y[i];
-                float cy = 3 * c1y[i] - 3 * y[i];
-                float dy = y[i];
-                   
-                for(float t=0; t<1; t += 1 / (float)NUMSTEPS) {
-                    float rx = ax * t * t * t + bx * t * t + cx * t + dx;
-                    float ry = ay * t * t * t + by * t * t + cy * t + dy;
-                    ret.x[ret.numvertices] = (int)Math.round(a.multiply_px(rx, ry));
-                    ret.y[ret.numvertices] = (int)Math.round(a.multiply_py(rx, ry));
-                    ret.edges[ret.numedges++] = ret.numvertices - 1; ret.numvertices++;
-                }
-
-
-            } else if (type[i] == TYPE_QUADRADIC) {
-
-                float bx = x[i+1] - 2 * c1x[i] + x[i];
-                float cx = 2 * c1x[i] - 2 * x[i];
-                float dx = x[i];
-                float by = y[i+1] - 2 * c1y[i] + y[i];
-                float cy = 2 * c1y[i] - 2 * y[i];
-                float dy = y[i];
-                       
-                for(float t=0; t<1; t += 1 / (float)NUMSTEPS) {
-                    float rx = bx * t * t + cx * t + dx;
-                    float ry = by * t * t + cy * t + dy;
-                    ret.x[ret.numvertices] = (int)Math.round(a.multiply_px(rx, ry));
-                    ret.y[ret.numvertices] = (int)Math.round(a.multiply_py(rx, ry));
-                    ret.edges[ret.numedges++] = ret.numvertices - 1; ret.numvertices++;
-                }
-
-            }
-
-        }
-            
-        if (ret.numedges > 0) ret.sort(0, ret.numedges - 1, false);
-        return ret;
-    }
-
-    protected void parseSingleCommandAndArguments(Tokenizer t, char command, boolean relative) {
-        if (numvertices == 0 && command != 'm') throw new RuntimeException("first command MUST be an 'm'");
-        if (numvertices > x.length - 2) {
-            float[] new_x = new float[x.length * 2]; System.arraycopy(x, 0, new_x, 0, x.length); x = new_x;
-            float[] new_y = new float[y.length * 2]; System.arraycopy(y, 0, new_y, 0, y.length); y = new_y;
-        }
-        switch(command) {
-            case 'z': {
-               int where;
-                type[numvertices-1] = TYPE_LINETO;
-               for(where = numvertices - 1; where > 0; where--)
-                   if (type[where - 1] == TYPE_MOVETO) break;
-                x[numvertices] = x[where];
-                y[numvertices] = y[where];
-                numvertices++;
-                closed = true;
-                break;
-            }
-
-            case 'm': {
-                if (numvertices > 0) type[numvertices-1] = TYPE_MOVETO;
-               x[numvertices] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-               y[numvertices] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-               numvertices++;
-                break;
-            }
-
-            case 'l': case 'h': case 'v': {
-                type[numvertices-1] = TYPE_LINETO;
-                float first = t.parseFloat(), second;
-                if (command == 'h') {
-                    second = relative ? 0 : y[numvertices - 1];
-                } else if (command == 'v') {
-                    second = first; first = relative ? 0 : x[numvertices - 1];
-                } else {
-                    second = t.parseFloat();
-                }
-                x[numvertices] = first + (relative ? x[numvertices - 1] : 0);
-                y[numvertices] = second + (relative ? y[numvertices - 1] : 0);
-                numvertices++;
-                break;
-            }
-            
-            case 'a': {
-               type[numvertices-1] = TYPE_ARCTO;
-               c1x[numvertices-1] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-               c1y[numvertices-1] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-               c2x[numvertices-1] = (t.parseFloat() / 360) * 2 * PI;
-               c2y[numvertices-1] = (((int)t.parseFloat()) << 1) | (int)t.parseFloat();
-               x[numvertices] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-               y[numvertices] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-                numvertices++;
-                break;
-            }
-
-            case 's': case 'c': {
-                type[numvertices-1] = TYPE_CUBIC;
-                if (command == 'c') {
-                    c1x[numvertices-1] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-                    c1y[numvertices-1] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-                } else if (numvertices > 1 && type[numvertices-2] == TYPE_CUBIC) {
-                    c1x[numvertices-1] = 2 * x[numvertices - 1] - c2x[numvertices-2];
-                    c1y[numvertices-1] = 2 * y[numvertices - 1] - c2y[numvertices-2];
-                } else {
-                    c1x[numvertices-1] = x[numvertices-1];
-                    c1y[numvertices-1] = y[numvertices-1];
-                }
-                c2x[numvertices-1] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-                c2y[numvertices-1] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-               x[numvertices] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-               y[numvertices] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-                numvertices++;
-                break;
-            }
-
-            case 't': case 'q': {
-                type[numvertices-1] = TYPE_QUADRADIC;
-                if (command == 'q') {
-                    c1x[numvertices-1] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-                    c1y[numvertices-1] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-                } else if (numvertices > 1 && type[numvertices-2] == TYPE_QUADRADIC) {
-                    c1x[numvertices-1] = 2 * x[numvertices - 1] - c1x[numvertices-2];
-                    c1y[numvertices-1] = 2 * y[numvertices - 1] - c1y[numvertices-2];
-                } else {
-                    c1x[numvertices-1] = x[numvertices-1];
-                    c1y[numvertices-1] = y[numvertices-1];
-                }
-                x[numvertices] = t.parseFloat() + (relative ? x[numvertices - 1] : 0);
-                y[numvertices] = t.parseFloat() + (relative ? y[numvertices - 1] : 0);
-                numvertices++;
-                break;
-            }
-
-            default:
-                // FIXME
-        }
-
-        /*
-        // invariant: after this loop, no two lines intersect other than at a vertex
-        // FIXME: cleanup
-        int index = numvertices - 2;
-        for(int i=0; i<Math.min(numvertices - 3, index); i++) {
-        for(int j = index; j < numvertices - 1; j++) {
-
-        // I'm not sure how to deal with vertical lines...
-        if (x[i+1] == x[i] || x[j+1] == x[j]) continue;
-                       
-        float islope = (y[i+1] - y[i]) / (x[i+1] - x[i]);
-        float jslope = (y[j+1] - y[j]) / (x[j+1] - x[j]);
-        if (islope == jslope) continue;   // parallel lines can't intersect
-                       
-        float _x = (islope * x[i] - jslope * x[j] + y[j] - y[i]) / (islope - jslope);
-        float _y = islope * (_x - x[i]) + y[i];
-                       
-        if (_x > Math.min(x[i+1], x[i]) && _x < Math.max(x[i+1], x[i]) &&
-        _x > Math.min(x[j+1], x[j]) && _x < Math.max(x[j+1], x[j])) {
-        // FIXME: something's not right in here.  See if we can do without fracturing line 'i'.
-        for(int k = ++numvertices; k>i; k--) { x[k] = x[k - 1]; y[k] = y[k - 1]; }
-        x[i+1] = _x;
-        y[i+1] = _y;
-        x[numvertices] = x[numvertices - 1];  x[numvertices - 1] = _x;
-        y[numvertices] = y[numvertices - 1];  y[numvertices - 1] = _y;
-        edges[numedges++] = numvertices - 1; numvertices++;
-        index++;
-        break;  // actually 'continue' the outermost loop
-        }
-        }
-        }
-        */
-
-    }
-
-
-    // Rasterized Vector Path //////////////////////////////////////////////////////////////////////////////
-    
-    /** a vector path */
-    public static class Raster {
-
-       // the vertices of this path
-       int[] x = new int[DEFAULT_PATHLEN];
-       int[] y = new int[DEFAULT_PATHLEN];
-       int numvertices = 0;
-
-        /**
-         *  A list of the vertices on this path which *start* an *edge* (rather than a moveto), sorted by increasing y.
-         *  example: x[edges[1]],y[edges[1]] - x[edges[i]+1],y[edges[i]+1] is the second-topmost edge
-         *  note that if x[i],y[i] - x[i+1],y[i+1] is a MOVETO, then no element in edges will be equal to i
-         */
-       int[] edges = new int[DEFAULT_PATHLEN];
-        int numedges = 0;
-
-        /** translate a rasterized path */
-        public void translate(int dx, int dy) { for(int i=0; i<numvertices; i++) { x[i] += dx; y[i] += dy; } }
-
-        /** simple quicksort, from http://sourceforge.net/snippet/detail.php?type=snippet&id=100240 */
-        int sort(int left, int right, boolean partition) {
-           if (partition) {
-               int i, j, middle;
-               middle = (left + right) / 2;
-               int s = edges[right]; edges[right] = edges[middle]; edges[middle] = s;
-               for (i = left - 1, j = right; ; ) {
-                   while (y[edges[++i]] < y[edges[right]]);
-                   while (j > left && y[edges[--j]] > y[edges[right]]);
-                   if (i >= j) break;
-                   s = edges[i]; edges[i] = edges[j]; edges[j] = s;
-               }
-               s = edges[right]; edges[right] = edges[i]; edges[i] = s;
-               return i;
-           } else {
-               if (left >= right) return 0;
-               int p = sort(left, right, true);
-               sort(left, p - 1, false);
-               sort(p + 1, right, false);
-               return 0;
-           }
-        }
-
-        /** finds the x value at which the line intercepts the line y=_y */
-       private int intercept(int i, float _y, boolean includeTop, boolean includeBottom) {
-            if (includeTop ? (_y < Math.min(y[i], y[i+1])) : (_y <= Math.min(y[i], y[i+1])))
-                return Integer.MIN_VALUE;
-            if (includeBottom ? (_y > Math.max(y[i], y[i+1])) : (_y >= Math.max(y[i], y[i+1])))
-                return Integer.MIN_VALUE;
-           return (int)Math.round((((float)(x[i + 1] - x[i])) /
-                                    ((float)(y[i + 1] - y[i])) ) * ((float)(_y - y[i])) + x[i]);
-       }
-
-        /** fill the interior of the path */
-       public void fill(PixelBuffer buf, Paint paint) {
-            if (numedges == 0) return;
-           int y0 = y[edges[0]], y1 = y0;
-           boolean useEvenOdd = false;
-
-            // we iterate over all endpoints in increasing y-coordinate order
-            for(int index = 1; index<numedges; index++) {
-                int count = 0;
-
-                // we now examine the horizontal band between y=y0 and y=y1
-               y0 = y1;
-               y1 = y[edges[index]];
-                if (y0 == y1) continue;
-                // within this band, we iterate over all edges
-                int x0 = Integer.MIN_VALUE;
-                int leftSegment = -1;
-                while(true) {
-                    int x1 = Integer.MAX_VALUE;
-                    int rightSegment = Integer.MAX_VALUE;
-                    for(int i=0; i<numedges; i++) {
-                        if (y[edges[i]] == y[edges[i]+1]) continue; // ignore horizontal lines; they are irrelevant.
-                        // we order the segments by the x-coordinate of their midpoint;
-                        // since segments cannot intersect, this is a well-ordering
-                        int i0 = intercept(edges[i], y0, true, false);
-                        int i1 = intercept(edges[i], y1, false, true);
-                        if (i0 == Integer.MIN_VALUE || i1 == Integer.MIN_VALUE) continue;
-                        int midpoint = i0 + i1;
-                        if (midpoint < x0) continue;
-                        if (midpoint == x0 && i <= leftSegment) continue;
-                        if (midpoint > x1) continue;
-                        if (midpoint == x1 && i >= rightSegment) continue;
-                        rightSegment = i;
-                        x1 = midpoint;
-                    }
-                    if (leftSegment == rightSegment || rightSegment == Integer.MAX_VALUE) break;
-                    if (leftSegment != -1)
-                        if ((useEvenOdd && count % 2 != 0) || (!useEvenOdd && count != 0))
-                            paint.fillTrapezoid(intercept(edges[leftSegment], y0, true, true),
-                                                intercept(edges[rightSegment], y0, true, true), y0,
-                                                intercept(edges[leftSegment], y1, true, true),
-                                                intercept(edges[rightSegment], y1, true, true), y1,
-                                                buf);
-                    if (useEvenOdd) count++;
-                    else count += (y[edges[rightSegment]] < y[edges[rightSegment]+1]) ? -1 : 1;
-                    leftSegment = rightSegment; x0 = x1;
-                }
-            }
-        }
-        
-        /** stroke the outline of the path */
-        public void stroke(PixelBuffer buf, int width, int color) { stroke(buf, width, color, null, 0, 0); }
-        public void stroke(PixelBuffer buf, int width, int color, String dashArray, int dashOffset, float segLength) {
-
-            if (dashArray == null) {
-                for(int i=0; i<numedges; i++)
-                    buf.drawLine((int)x[edges[i]],
-                                 (int)y[edges[i]], (int)x[edges[i]+1], (int)y[edges[i]+1], width, color, false);
-                return;
-            }
-
-            float ratio = 1;
-            if (segLength > 0) {
-                float actualLength = 0;
-                for(int i=0; i<numvertices; i++) {
-                    // skip over MOVETOs -- they do not contribute to path length
-                    if (x[i] == x[i+1] && y[i] == y[i+1]) continue;
-                    if (x[i+1] == x[i+2] && y[i+1] == y[i+2]) continue;
-                    int x1 = x[i];
-                    int x2 = x[i + 1];
-                    int y1 = y[i];
-                    int y2 = y[i + 1];
-                    actualLength += java.lang.Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
-                }
-                ratio = actualLength / segLength;
-            }
-            Tokenizer pt = new Tokenizer(dashArray);
-            Vector v = new Vector();
-            while (pt.hasMoreTokens()) v.addElement(new Float(pt.parseFloat()));
-            float[] dashes = new float[v.size() % 2 == 0 ? v.size() : 2 * v.size()];
-            for(int i=0; i<dashes.length; i++) dashes[i] = ((Float)v.elementAt(i % v.size())).floatValue();
-            int dashpos = dashOffset;
-            boolean on = dashpos % 2 == 0;
-            for(int i=0; i<numvertices; i++) {
-                // skip over MOVETOs -- they do not contribute to path length
-                if (x[i] == x[i+1] && y[i] == y[i+1]) continue;
-                if (x[i+1] == x[i+2] && y[i+1] == y[i+2]) continue;
-                int x1 = (int)x[i];
-                int x2 = (int)x[i + 1];
-                int y1 = (int)y[i];
-                int y2 = (int)y[i + 1];
-                float segmentLength = (float)java.lang.Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
-                int _x1 = x1, _y1 = y1;
-                float pos = 0;
-                do {
-                    pos = Math.min(segmentLength, pos + dashes[dashpos] * ratio);
-                    if (pos != segmentLength) dashpos = (dashpos + 1) % dashes.length;
-                    int _x2 = (int)((x2 * pos + x1 * (segmentLength - pos)) / segmentLength);
-                    int _y2 = (int)((y2 * pos + y1 * (segmentLength - pos)) / segmentLength);
-                    if (on) buf.drawLine(_x1, _y1, _x2, _y2, width, color, false);
-                    on = !on;
-                    _x1 = _x2; _y1 = _y2;
-                } while(pos < segmentLength);
-            }
-       }
-
-        // FEATURE: make this faster and cache it; also deal with negative coordinates
-        public int boundingBoxWidth() {
-            int ret = 0;
-            for(int i=0; i<numvertices; i++) ret = Math.max(ret, x[i]);
-            return ret;
-        }
-
-        // FEATURE: make this faster and cache it; also deal with negative coordinates
-        public int boundingBoxHeight() {
-            int ret = 0;
-            for(int i=0; i<numvertices; i++) ret = Math.max(ret, y[i]);
-            return ret;
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Picture.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Picture.java
deleted file mode 100644 (file)
index 528b0d7..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import java.io.*;
-import org.ibex.js.*;
-import org.ibex.plat.*;
-import org.ibex.util.*;
-import org.ibex.core.*;
-
-/** 
- *    The in-memory representation of a PNG or GIF image. It is
- *    read-only. It is usually passed to PixelBuffer.drawPicture()
- *
- *    Implementations of the Platform class should return objects
- *    supporting this interface from the createPicture() method. These
- *    implementations may choose to implement caching strategies (for
- *    example, using a Pixmap on X11).
- */
-public class Picture {
-
-    public Picture() { this.stream = null; }
-    public Picture(JS r) { this.stream = r; }
-    private static Cache cache = new Cache(100);   ///< Picture, keyed by the Stream that loaded them
-
-    public JS stream = null;                       ///< the stream we were loaded from
-    public int width = -1;                         ///< the width of the image
-    public int height = -1;                        ///< the height of the image
-    public int[] data = null;                      ///< argb samples
-    public boolean isLoaded = false;               ///< true iff the image is fully loaded
-
-    /** invoked when an image is fully loaded; subclasses can use this to initialize platform-specific constructs */
-    protected void loaded() { isLoaded = true; }
-
-    /** turns a stream into a Picture.Source and passes it to the callback */
-    public static Picture load(final JS stream, final Task callback) {
-        Picture ret = (Picture)cache.get(stream);
-        if (ret == null) cache.put(stream, ret = Platform.createPicture(stream));
-        final Picture p = ret;
-        if (!ret.isLoaded && callback != null) {
-            final Ibex.Blessing b = Ibex.Blessing.getBlessing(stream);
-            new java.lang.Thread() { public void run() {
-                InputStream in = null;
-                try {
-                    in = b == null ? Stream.getInputStream(stream) : b.getImage();
-                } catch (IOException e) { Log.error(Picture.class, e);
-                } catch (JSExn e) { Log.error(Picture.class, e);
-                }
-                if (in == null) { Log.warn(Picture.class, "couldn't load image for stream " + stream.unclone()); return; }
-                try {
-                    PushbackInputStream pbis = new PushbackInputStream(in);
-                    int firstByte = pbis.read();
-                    if (firstByte == -1) throw new JSExn("empty stream reading image");
-                    pbis.unread(firstByte);
-                    if ((firstByte & 0xff) == 'G') GIF.load(pbis, p);
-                    else if ((firstByte & 0xff) == 137)  PNG.load(pbis, p);
-                    else if ((firstByte & 0xff) == 0xff) Platform.decodeJPEG(pbis, p);
-                    else throw new JSExn("couldn't figure out image type from first byte");
-                    p.loaded();
-                    Scheduler.add(callback);
-                } catch (Exception e) {
-                    Log.info(this, "exception while loading image");
-                    Log.info(this, e);
-                }
-            } }.start();
-        }
-        return ret;
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/PixelBuffer.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/PixelBuffer.java
deleted file mode 100644 (file)
index 6107f71..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-
-/**
- *  <p>
- *  A block of pixels which can be drawn on.
- *  </p>
- *
- *  <p>
- *  Implementations of the Platform class should return objects
- *  supporting this interface from the _createPixelBuffer()
- *  method. These implementations may choose to use off-screen video
- *  ram for this purpose (for example, a Pixmap on X11).
- *  </p>
- *
- *  <p>
- *  Many of these functions come in pairs, one that uses ints and one
- *  that uses floats.  The int functions are intended for situations
- *  in which the CTM is the identity transform.
- *  </p>
- */
-public abstract class PixelBuffer {
-
-    /** draw the picture at (dx1, dy1), cropping to (cx1, cy1, cx2, cy2) */
-    public abstract void drawPicture(Picture source, int dx1, int dy1, int cx1, int cy1, int cx2, int cy2);
-
-    /** fill a trapezoid whose top and bottom edges are horizontal */
-    public abstract void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, int color);
-
-    /**
-     *  Same as drawPicture, but only uses the alpha channel of the Picture, and is allowed to destructively modify the RGB
-     *  channels of the Picture in the process.  This method may assume that the RGB channels of the image are all zero IFF it
-     *  restores this invariant before returning.
-     */
-    public abstract void drawGlyph(Font.Glyph source, int dx1, int dy1, int cx1, int cy1, int cx2, int cy2, int rgb);
-
-    // FEATURE: we want floats (inter-pixel spacing) for antialiasing, but this hoses the fastpath line drawing... argh!
-    /** draws a line of width <tt>w</tt>; note that the coordinates here are <i>post-transform</i> */
-    public void drawLine(int x1, int y1, int x2, int y2, int w, int color, boolean capped) {
-
-       if (y1 > y2) { int t = x1; x1 = x2; x2 = t; t = y1; y1 = y2; y2 = t; }
-
-       if (x1 == x2) {
-            fillTrapezoid(x1 - w / 2, x2 + w / 2, y1 - (capped ? w / 2 : 0),
-                          x1 - w / 2, x2 + w / 2, y2 + (capped ? w / 2 : 0), color);
-            return;
-        }
-
-        // fastpath for single-pixel width lines
-        if (w == 1) {
-            float slope = (float)(y2 - y1) / (float)(x2 - x1);
-            int last_x = x1;
-            for(int y=y1; y<=y2; y++) {
-                int new_x = (int)((float)(y - y1) / slope) + x1;
-                if (slope >= 0) fillTrapezoid(last_x + 1, y != y2 ? new_x + 1 : new_x, y,
-                                              last_x + 1, y != y2 ? new_x + 1 : new_x, y + 1, color);
-                else fillTrapezoid(y != y2 ? new_x : new_x + 1, last_x, y,
-                                   y != y2 ? new_x : new_x + 1, last_x, y + 1, color);
-                last_x = new_x;
-            }
-            return;
-        }
-
-        // actually half-width
-       float width = (float)w / 2;
-       float phi = (float)Math.atan((y2 - y1) / (x2 - x1));
-       if (phi < 0.0) phi += (float)Math.PI * 2;
-       float theta = (float)Math.PI / 2 - phi;
-
-       // dx and dy are the x and y distance between each endpoint and the corner of the stroke
-       int dx = (int)(width * Math.cos(theta));
-       int dy = (int)(width * Math.sin(theta));
-
-       // slice is the longest possible length of a horizontal line across the stroke
-       int slice = (int)(2 * width / Math.cos(theta));
-
-       if (capped) {
-           x1 -= width * Math.cos(phi);
-           x2 += width * Math.cos(phi);
-           y1 -= width * Math.sin(phi);
-           y2 += width * Math.sin(phi);
-       }
-
-       fillTrapezoid(x1 + dx, x1 + dx, y1 - dy, x1 - dx, x1 - dx + slice, y1 + dy, color);           // top corner
-       fillTrapezoid(x2 + dx - slice, x2 + dx, y2 - dy, x2 - dx, x2 - dx, y2 + dy, color);           // bottom corner
-       fillTrapezoid(x1 - dx, x1 - dx + slice, y1 + dy, x2 + dx - slice, x2 + dx, y2 - dy, color);   // middle
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/SVG.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/SVG.java
deleted file mode 100644 (file)
index 90311a6..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-import java.util.*;
-
-
-// FIXME: offer a "subpixel" mode where we pass floats to the Platform and don't do any snapping
-// FIXME: fracture when realizing instead of when parsing?
-
-/*
-    v1.0
-    - textpath
-    - gradients
-    - patterns
-    - clipping/masking
-    - filters (filtering of a group must be performed AFTER the group is assembled; sep. canvas)
-
-    v1.1
-    - bump caps [requires Paint that can fill circles...] [remember to distinguish between closed/unclosed]
-    - line joins
-        - mitre    (hard)
-        - bevel    (easy)
-        - bump     (easy, but requires 'round' Paint)
-    - subtree sharing? otherwise the memory consumption might be outrageous... clone="" attribute?
-    - better clipping
-        - intersect clip regions (linearity)
-        - clip on trapezoids, not pixels
-    - faster gradients and patterns:
-        - transform each corner of the trapezoid and then interpolate
-*/
-
-// FIXME: need to support style sheets and the 'style=' attribute
-// FIXME: need to convert markers into subboxes
-public class SVG {
-
-    /*
-    public static void parseNode(String name, String[] keys, Object[] vals, Template t) {
-        Hash h = new Hash();
-        for(int i=0; i<keys.length; i++) if (vals[i] != null) h.put(keys[i], vals[i]);
-
-        Hash props = new Hash();
-        props.put("transform", h.get("transform"));
-        props.put("fill", h.get("fill"));
-        props.put("stroke", h.get("stroke"));
-        if ("visible".equals(h.get("overflow")) || "auto".equals(h.get("overflow")))
-            Log.info(VectorGraphics.class, "warning: overflow={auto|visible} not supported; ignoring");
-        if (h.get("display") != null) props.put("invisible", new Boolean("none".equals(h.get("display"))));
-
-
-        // FIXME: "the automatic transformation that is created due to
-        // a viewBox does not affect the x, y, width and height
-        // attributes".  Also, transform+viewbox together?
-
-        if (h.get("preserveAspectRatio") != null) {
-            StringTokenizer st = new StringTokenizer((String)h.get("preserveAspectRatio"), " ");
-            String align = st.nextToken();
-            if ("defer".equals(align)) align = st.nextToken();
-            if (!align.equals("none")) {
-                // FIXME, need to beef up XWT's align property
-                align = "";
-                if (align.startsWith("yMin")) align = "top";
-                else if (align.startsWith("yMax")) align = "bottom";
-                if (align.startsWith("xMin")) align += "left";
-                else if (align.startsWith("xMax")) align += "right";
-                props.put("align", align);
-            }
-            // FIXME: need to implement scaling property on boxes, also size-to-viewbox
-            props.put("scaling", "uniform");
-            if (st.hasMoreTokens()) {
-                String meetOrSlice = st.nextToken();
-                if (meetOrSlice.equals("meet")) props.put("scaling", "meet");          // keep within viewport
-                else if (meetOrSlice.equals("slice")) props.put("scaling", "slice");   // expand beyond viewport
-            }
-        }
-
-        // FIXME: insert an extra layer of boxen and put this transform on the inner layer
-        if (h.get("viewBox") != null) {
-            PathTokenizer pt = new PathTokenizer(h.get("viewBox").toString());
-            String transform = (String)props.get("transform");
-            if (transform == null) transform = "";
-            transform = "translate(" + (-1 * pt.parseFloat()) + ", " + (-1 * pt.parseFloat()) + ") " + 
-                "scale(" + pt.parseFloat() + "%, " + pt.parseFloat() + "%) ";
-        }
-        
-        String path = (String)h.get("d");
-        if (name.equals("g")) {
-            path = null;
-
-        } else if (name.equals("font")) {
-            VectorGraphics.Font f = currentFont = new VectorGraphics.Font();
-            if (h.get("horiz-origin-x") != null) f.horiz_origin_x = Float.parseFloat(h.get("horiz-origin-x").toString());
-            if (h.get("horiz-origin-y") != null) f.horiz_origin_y = Float.parseFloat(h.get("horiz-origin-y").toString());
-            if (h.get("horiz-adv-x") != null) f.horiz_adv_x = Float.parseFloat(h.get("horiz-adv-x").toString());
-            if (h.get("vert-origin-x") != null) f.vert_origin_x = Float.parseFloat(h.get("vert-origin-x").toString());
-            if (h.get("vert-origin-y") != null) f.vert_origin_y = Float.parseFloat(h.get("vert-origin_y").toString());
-            if (h.get("vert-adv-y") != null) f.vert_adv_y = Float.parseFloat(h.get("vert-adv-y").toString());
-
-        } else if (name.equals("hkern")) {
-        //FIXME
-
-        } else if (name.equals("vkern")) {
-        //FIXME
-
-        } else if (name.equals("font-face")) {
-        //FIXME
-
-        } else if (name.equals("glyph") || name.equals("missing-glyph")) {
-            String glyphName = name.equals("missing-glyph") ? "missing-glyph" : (String)h.get("glyph-name");
-            VectorGraphics.Font.Glyph g = new VectorGraphics.Font.Glyph(glyphName, (String)h.get("unicode"), t, currentFont);
-            if (h.get("horiz-adv-x") != null) g.horiz_adv_x = Float.parseFloat(h.get("horiz-adv-x").toString());
-            if (h.get("vert-origin-x") != null) g.vert_origin_x = Float.parseFloat(h.get("vert-origin-x").toString());
-            if (h.get("vert-origin-y") != null) g.vert_origin_y = Float.parseFloat(h.get("vert-origin-y").toString());
-            if (h.get("vert-adv-y") != null) g.vert_adv_y = Float.parseFloat(h.get("vert-adv-y").toString());
-            if ("v".equals(h.get("orientation"))) g.isVerticallyOriented = true;
-
-        } else if (name.equals("svg")) {
-            // FIXME: handle percentages
-            // FIXME: what if these aren't provided?
-            // FIXME (in general)
-            float x = Float.parseFloat(h.get("x").toString());
-            float y = Float.parseFloat(h.get("y").toString());
-            float width = Float.parseFloat(h.get("width").toString());
-            float height = Float.parseFloat(h.get("height").toString());
-            h.put("viewBox", x + ", " + y + ", " + (x + width) + ", " + (y + height));
-            path = "";
-            
-        } else if (name.equals("path")) {
-            path = h.get("d").toString();
-           
-        } else if (name.equals("rect")) {
-            float x = Float.parseFloat(h.get("x").toString());
-            float y = Float.parseFloat(h.get("y").toString());
-            float width = Float.parseFloat(h.get("width").toString());
-            float height = Float.parseFloat(h.get("height").toString());
-            float rx = Float.parseFloat(h.get("rx").toString());
-            float ry = Float.parseFloat(h.get("ry").toString());
-            path =
-                "M" + (x + rx) + "," + y +
-                "H" + (x + width - rx) +
-                "A" + rx + "," + rx + ",0,0,1," + (x + width) + "," + (y + ry) +
-                "V" + (y + width - ry) +
-                "A" + rx + "," + rx + ",0,0,1," + (x + width - rx) + "," +
-                (y + height) +
-                "H" + (x + rx) +
-                "A" + rx + "," + rx + ",0,0,1," + x + "," + (y + height - ry) +
-                "V" + (y + ry) +
-                "A" + rx + "," + rx + ",0,0,1," + (x + rx) + "," + (y + ry) +
-                "Z";
-           
-        } else if (name.equals("circle")) {
-            float r = Float.parseFloat(h.get("r").toString());
-            float cx = Float.parseFloat(h.get("cx").toString());
-            float cy = Float.parseFloat(h.get("cy").toString());
-            path = "A " + r + " " + r + " 1 1 " + cx + " " + cy;
-           
-        } else if (name.equals("ellipse")) {
-            float rx = Float.parseFloat(h.get("rx").toString());
-            float ry = Float.parseFloat(h.get("ry").toString());
-            float cx = Float.parseFloat(h.get("cx").toString());
-            float cy = Float.parseFloat(h.get("cy").toString());
-            path = "A " + rx + " " + ry + " 1 1 " + cx + " " + cy;
-           
-        } else if (name.equals("line")) {
-            float x1 = Float.parseFloat(h.get("x1").toString());
-            float y1 = Float.parseFloat(h.get("y1").toString());
-            float x2 = Float.parseFloat(h.get("x2").toString());
-            float y2 = Float.parseFloat(h.get("y2").toString());
-            path = "M " + x1 + " " + y1 + " L " + x2 + " " + y2;
-                
-        } else if (name.equals("polyline") || name.equals("polygon")) {
-            StringTokenizer st = new StringTokenizer(h.get("points").toString(), ", ", false);
-            String s = "M ";
-            while(st.hasMoreTokens()) s += st.nextToken() + " " + st.nextToken() + " ";
-            path = s + (name.equals("polygon") ? "z" : "");
-
-        } else {
-            Log.info(VectorGraphics.class, "unknown element in VectorGraphics namespace: " + name);
-        }
-        props.put("path", path);
-        t.keys = new String[props.size()];
-        System.arraycopy(props.keys(), 0, t.keys, 0, t.keys.length);
-        t.vals = new String[props.size()];
-        for(int i=0; i<t.keys.length; i++) t.vals[i] = props.get(t.keys[i]);
-        
-
-        // FIXME!!!!
-        if (h.get("viewBox") != null) {
-        StringTokenizer st = new StringTokenizer(h.get("viewBox").toString(), ", ", false);
-        if (t.transform == null) t.transform = "";
-        Point p1, p2;
-        VectorGraphics.RasterPath.fromString(path).getBoundingBox(p1, p2);
-        
-        float minx = st.parseFloat();
-        float miny = st.parseFloat();
-        float width = st.parseFloat();
-        float height = st.parseFloat();
-        t.transform += "translate(" + (-1 * p1.x) + ", " + (-1 * p1.y) + ") " +
-        "scale(" + ((p2.x - p1.x) / width) + ", " + ((p2.y - p1.y) / height) + ") " + 
-        "translate(" + minx + ", " + miny + ") ";
-        
-        // FIXME: preserveAspectRatio
-        }
-
-    }
-    */
-
-    /*
-    public static class Font {
-        Font() { }
-        float horiz_origin_x = 0,  horiz_origin_y = 0, horiz_adv_x = 0;
-        float vert_origin_x = 0, vert_origin_y = 0, vert_adv_y = 0;
-
-        // FIXME: avoid using substring() in here ore creating any objects
-        public void render(String text, DoubleBuffer buf, int x, int y, int fillcolor, int strokecolor, int size) {
-            // FIXME: points, not pixels
-            Affine a = buf.a;
-            float scaleFactor = (float)(1.0/1000.0) * (float)size;
-            for(int pos=0; pos<text.length(); pos++) { 
-                Glyph g;
-                for(g = (Glyph)glyphByUnicode.get(text.substring(pos, pos+1));
-                    g != null && !g.unicode.equals(text.substring(pos, pos + g.unicode.length()));
-                    g = g.next);
-                if (g == null) {
-                    g = (Glyph)glyphByName.get("missing-glyph");
-                } else {
-                    pos += g.unicode.length() - 1;
-                }
-                if (g != null) {
-                    System.out.println("  " + g.unicode);
-                    g.render(buf, x, y, fillcolor, strokecolor, scaleFactor);
-                    x += (int)(g.horiz_adv_x * size / 1000.0);
-                } else {
-                    x += (int)(horiz_adv_x * size / 1000.0);
-                }
-            }
-            buf.setTransform(a);
-        }
-
-        / ** all glyphs, keyed by their <tt>name</tt> property * /
-        Hashtable glyphByName = new Hashtable();
-
-        / ** linked list of glyphs, stored by the first character of their <tt>unicode</tt> property * /
-        Hashtable glyphByUnicode = new Hashtable();
-
-        // a Glyph in an VectorGraphics font
-        public static class Glyph {
-
-            // FIXME: lang attribute
-            boolean isVerticallyOriented = false;
-            Template t = null;
-            Box b = null;
-
-            float horiz_adv_x = 0;
-            float vert_origin_x = 0;
-            float vert_origin_y = 0;
-            float vert_adv_y = 0;
-
-            String unicode = null;
-
-            // forms the linked list in glyphByUnicode; glyphs appear in the order specified in the font
-            public Glyph next = null;
-
-            Glyph(String name, String unicode, Template t, VectorGraphics.Font f) {
-                if (unicode != null)
-                    if (f.glyphByUnicode.get(unicode.substring(0, 1)) == null) {
-                        f.glyphByUnicode.put(unicode.substring(0, 1), this);
-                    } else {
-                        Glyph g;
-                        for(g = (Glyph)f.glyphByUnicode.get(unicode.substring(0, 1)); g.next != null; g = g.next);
-                        g.next = this;
-                    }
-                if (name != null) f.glyphByUnicode.put(name, this);
-                this.unicode = unicode;
-                this.t = t;
-                horiz_adv_x = f.horiz_adv_x;
-                vert_origin_x = f.vert_origin_x;
-                vert_origin_y = f.vert_origin_y;
-                vert_adv_y = f.vert_adv_y;
-            }
-            public void render(DoubleBuffer buf, int x, int y, int fillcolor, int strokecolor, float scaleFactor) {
-                // FEATURE: make b double-buffered for increased performance
-                if (b == null) {
-                    b = new Box(t, new org.ibex.util.Vec(), new org.ibex.util.Vec(), null, 0, 0);
-                    b.put("absolute", Boolean.TRUE);
-                    b.prerender();
-                    t = null;
-                }
-                // FIXME
-                b.put("width", new Integer(1000));
-                b.put("height", new Integer(1000));
-                b.fillcolor = fillcolor;
-                b.strokecolor = strokecolor;
-
-                // we toss an extra flip on the ctm so that fonts stick "up" instead of down
-                b.render(0, 0, buf.getWidth(), buf.getHeight(), buf,
-                         Affine.flip(false, true).multiply(Affine.scale(scaleFactor, scaleFactor).multiply(Affine.translate(x, y))).multiply(buf.a));
-            }
-        }
-    }
-    */
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/graphics/Surface.java b/upstream/org.ibex.core/build/java/org/ibex/graphics/Surface.java
deleted file mode 100644 (file)
index 31ac36e..0000000
+++ /dev/null
@@ -1,405 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.graphics;
-
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.plat.*;
-
-import org.ibex.core.*;  // FIXME
-
-/** 
- *  A Surface, as described in the Ibex Reference.
- *
- *  Platform subclasses should include an inner class subclass of
- *  Surface to return from the Platform._createSurface() method
- */
-public abstract class Surface extends PixelBuffer implements Task {
-
-    // Static Data ////////////////////////////////////////////////////////////////////////////////
-
-    private static Boolean T = Boolean.TRUE;
-    private static Boolean F = Boolean.FALSE;
-
-    /** all instances of Surface which need to be refreshed by the Scheduler */
-    public static Vec allSurfaces = new Vec();
-    
-    /** When set to true, render() should abort as soon as possible and restart the rendering process */
-    public volatile boolean abort = false;
-
-    // these three variables are used to ensure that user resizes trump programmatic resizes
-    public volatile boolean syncRootBoxToSurface = false;
-    public volatile int pendingWidth = 0;
-    public volatile int pendingHeight = 0;
-
-    public static boolean alt = false;          ///< true iff the alt button is pressed down
-    public static boolean control = false;      ///< true iff the control button is pressed down
-    public static boolean shift = false;        ///< true iff the shift button is pressed down
-    public static boolean button1 = false;      ///< true iff button 1 is depressed
-    public static boolean button2 = false;      ///< true iff button 2 is depressed
-    public static boolean button3 = false;      ///< true iff button 3 is depressed
-
-
-    // Instance Data ///////////////////////////////////////////////////////////////////////
-
-    public Box root;                                   ///< The Box at the root of this surface
-    public String cursor = "default";                  ///< The active cursor to switch to when syncCursor() is called
-    public int mousex;                                 ///< x position of the mouse
-    public int mousey;                                 ///< y position of the mouse
-    public int _mousex;                                ///< x position of the mouse FIXME
-    public int _mousey;                                ///< y position of the mouse FIXME
-    public int newmousex = -1;                         ///< x position of the mouse, in real time; this lets us collapse Move's
-    public int newmousey = -1;                         ///< y position of the mouse, in real time; this lets us collapse Move's
-    public boolean minimized = false;                  ///< True iff this surface is minimized, in real time
-    public boolean maximized = false;                  ///< True iff this surface is maximized, in real time
-    public boolean unrendered = true;                  ///< True iff this surface has not yet been rendered
-    DirtyList dirtyRegions = new DirtyList();          ///< Dirty regions on the surface
-
-    // Used For Simulating Clicks and DoubleClicks /////////////////////////////////////////////////
-
-    int last_press_x = Integer.MAX_VALUE;      ///< the x-position of the mouse the last time a Press message was enqueued
-    int last_press_y = Integer.MAX_VALUE;      ///< the y-position of the mouse the last time a Press message was enqueued
-    static int lastClickButton = 0;            ///< the last button to recieve a Click message; used for simulating DoubleClick's
-    static long lastClickTime = 0;             ///< the last time a Click message was processed; used for simulating DoubleClick's
-    
-    
-    // Methods to be overridden by subclasses ///////////////////////////////////////////////////////
-
-    public abstract void toBack();                     ///< should push surface to the back of the stacking order
-    public abstract void toFront();                    ///< should pull surface to the front of the stacking order
-    public abstract void syncCursor();                 ///< set the actual cursor to this.cursor if they do not match
-    public abstract void setInvisible(boolean b);      ///< If <tt>b</tt>, make window invisible; otherwise, make it non-invisible.
-    protected abstract void _setMaximized(boolean b);  ///< If <tt>b</tt>, maximize the surface; otherwise, un-maximize it.
-    protected abstract void _setMinimized(boolean b);  ///< If <tt>b</tt>, minimize the surface; otherwise, un-minimize it.
-    public abstract void setLocation();                ///< Set the surface's x/y position to that of the root box
-    protected abstract void _setSize(int w, int h);    ///< set the actual size of the surface
-    public abstract void setTitleBarText(String s);    ///< Sets the surface's title bar text, if applicable
-    public abstract void setIcon(Picture i);           ///< Sets the surface's title bar text, if applicable
-    public abstract void _dispose();                   ///< Destroy the surface
-    public void setMinimumSize(int minx, int miny, boolean resizable) { }
-    protected void setSize(int w, int h) { _setSize(w, h); }
-
-    public static Picture scarImage = null;
-
-    // Helper methods for subclasses ////////////////////////////////////////////////////////////
-
-    protected final void Press(final int button) {
-        last_press_x = mousex;
-        last_press_y = mousey;
-
-        if (button == 1) button1 = true;
-        else if (button == 2) button2 = true;
-        else if (button == 3) button3 = true;
-
-        if (button == 1) new Message("_Press1", T, root);
-        else if (button == 2) new Message("_Press2", T, root);
-        else if (button == 3) {
-            Scheduler.add(new Task() { public void perform() throws JSExn {
-                Platform.clipboardReadEnabled = true;
-                try {
-                    root.putAndTriggerTraps("_Press3", T);
-                } finally {
-                    Platform.clipboardReadEnabled = false;
-                }
-            }});
-        }
-    }
-
-    protected final void Release(int button) {
-        if (button == 1) button1 = false;
-        else if (button == 2) button2 = false;
-        else if (button == 3) button3 = false;
-
-        if (button == 1) new Message("_Release1", T, root);
-        else if (button == 2) new Message("_Release2", T, root);
-        else if (button == 3) new Message("_Release3", T, root);
-
-        if (Platform.needsAutoClick() && Math.abs(last_press_x - mousex) < 5 && Math.abs(last_press_y - mousey) < 5) Click(button);
-        last_press_x = Integer.MAX_VALUE;
-        last_press_y = Integer.MAX_VALUE;
-    }
-
-    protected final void Click(int button) {
-        if (button == 1) new Message("_Click1", T, root);
-        else if (button == 2) new Message("_Click2", T, root);
-        else if (button == 3) new Message("_Click3", T, root);
-        if (Platform.needsAutoDoubleClick()) {
-            long now = System.currentTimeMillis();
-            if (lastClickButton == button && now - lastClickTime < 350) DoubleClick(button);
-            lastClickButton = button;
-            lastClickTime = now;
-        }
-    }
-
-    /** we enqueue ourselves in the Scheduler when we have a Move message to deal with */
-    private Task mover = new Task() {
-            public void perform() {
-                if (mousex == newmousex && mousey == newmousey) return;
-                int oldmousex = mousex;     mousex = newmousex;
-                int oldmousey = mousey;     mousey = newmousey;
-                String oldcursor = cursor;  cursor = "default";
-                // FIXME: Root (ONLY) gets motion events outside itself (if trapped)
-                if (oldmousex != mousex || oldmousey != mousey)
-                    root.putAndTriggerTrapsAndCatchExceptions("_Move", T);
-                if (!cursor.equals(oldcursor)) syncCursor();
-            } };
-
-    /**
-     *  Notify Ibex that the mouse has moved. If the mouse leaves the
-     *  surface, but the host windowing system does not provide its new
-     *  position (for example, a Java MouseListener.mouseExited()
-     *  message), the subclass should use (-1,-1).
-     */
-    protected final void Move(final int newmousex, final int newmousey) {
-        this.newmousex = newmousex;
-        this.newmousey = newmousey;
-        Scheduler.add(mover);
-    }
-
-    protected final void HScroll(int pixels) { new Message("_HScroll", new Integer(pixels), root); }
-    protected final void VScroll(int pixels) { new Message("_VScroll", new Integer(pixels), root); }
-    protected final void HScroll(float lines) { new Message("_HScroll", new Float(lines), root); }
-    protected final void VScroll(float lines) { new Message("_VScroll", new Float(lines), root); }
-
-    /** subclasses should invoke this method when the user resizes the window */
-    protected final void SizeChange(final int width, final int height) {
-        if (unrendered || (pendingWidth == width && pendingHeight == height)) return;
-        pendingWidth = width;
-        pendingHeight = height;
-        syncRootBoxToSurface = true;
-        abort = true;
-        Scheduler.renderAll();
-    }
-
-    // FEATURE: can we avoid creating objects here?
-    protected final void PosChange(final int x, final int y) {
-        Scheduler.add(new Task() { public void perform() throws JSExn {
-            root.x = x;
-            root.y = y;
-            root.putAndTriggerTrapsAndCatchExceptions("PosChange", T);
-        }});
-    }
-
-    private final String[] doubleClick = new String[] { null, "_DoubleClick1", "_DoubleClick2", "_DoubleClick3" };
-    protected final void DoubleClick(int button) { new Message(doubleClick[button], T, root); }
-    protected final void KeyPressed(String key) { new Message("_KeyPressed", key, root); }
-    protected final void KeyReleased(String key) { new Message("_KeyReleased", key, root); }
-    protected final void Close() { new Message("Close", T, root); }
-    protected final void Minimized(boolean b) { minimized = b; new Message("Minimized", b ? T : F, root); }
-    protected final void Maximized(boolean b) { maximized = b; new Message("Maximized", b ? T : F, root); }
-    protected final void Focused(boolean b) { new Message("Focused", b ? T : F, root); }
-
-    private boolean scheduled = false;
-    public void Refresh() { if (!scheduled) Scheduler.add(this); scheduled = true; }
-    public void perform() { scheduled = false; Scheduler.renderAll(); }
-
-    public final void setMaximized(boolean b) { if (b != maximized) _setMaximized(maximized = b); }
-    public final void setMinimized(boolean b) { if (b != minimized) _setMinimized(minimized = b); }
-
-
-    // Other Methods ///////////////////////////////////////////////////////////////////////////////
-
-    /** Indicates that the Surface is no longer needed */
-    public final void dispose(boolean quitIfAllSurfacesGone) {
-        if (Log.on) Log.info(this, "disposing " + this);
-        allSurfaces.removeElement(this);
-        _dispose();
-        if (allSurfaces.size() == 0) {
-            if (Log.on) Log.info(this, "exiting because last surface was destroyed");
-            System.exit(0);
-        }
-    }
-
-    public void dirty(int x, int y, int w, int h) {
-        dirtyRegions.dirty(x, y, w, h);
-        Refresh();
-    }
-
-    public static Surface fromBox(Box b) {
-        // FIXME use a hash table here
-        for(int i=0; i<allSurfaces.size(); i++) {
-            Surface s = (Surface)allSurfaces.elementAt(i);
-            if (s.root == b) return s;
-        }
-        return null;
-    }
-
-    public Surface(Box root) {
-        this.root = root;
-        // FIXME: document this in the reference
-        if (!root.test(root.HSHRINK) && root.maxwidth == Integer.MAX_VALUE)
-            root.maxwidth = Platform.getScreenWidth() / 2;
-        if (!root.test(root.VSHRINK) && root.maxheight == Integer.MAX_VALUE)
-            root.maxheight = Platform.getScreenHeight() / 2;
-        root.setWidth(root.minwidth,
-                      root.test(root.HSHRINK)
-                      ? Math.max(root.minwidth, root.contentwidth)
-                      : Math.min(Platform.getScreenWidth(), root.maxwidth));
-        root.setHeight(root.minheight,
-                      root.test(root.VSHRINK)
-                      ? Math.max(root.minheight, root.contentheight)
-                      : Math.min(Platform.getScreenHeight(), root.maxheight));
-        Surface old = fromBox(root);
-        if (old != null) old.dispose(false);
-        else root.removeSelf();
-        Refresh();
-    }
-
-    private static Affine identity = Affine.identity();
-
-    /** runs the prerender() and render() pipelines in the root Box to regenerate the backbuffer, then blits it to the screen */
-    public synchronized void render() {
-        scheduled = false;
-        // make sure the root is properly sized
-        do {
-            abort = false;
-            root.pack();
-            if (syncRootBoxToSurface) {
-                root.setWidth(root.minwidth, pendingWidth);
-                root.setHeight(root.minheight, pendingHeight);
-                syncRootBoxToSurface = false;
-            }
-            int rootwidth = root.test(root.HSHRINK) ? root.contentwidth : root.maxwidth;
-            int rootheight = root.test(root.VSHRINK) ? root.contentheight : root.maxheight;
-            if (rootwidth != root.width || rootheight != root.height) {
-                // dirty the place where the scar used to be and where it is now
-                dirty(0, root.height - scarImage.height, scarImage.width, scarImage.height);
-                dirty(0, rootheight - scarImage.height, scarImage.width, scarImage.height);
-            }
-            root.reflow();
-            setSize(rootwidth, rootheight);
-            /*String oldcursor = cursor;
-            cursor = "default";
-            root.putAndTriggerTrapsAndCatchExceptions("_Move", JS.T);
-            if (!cursor.equals(oldcursor)) syncCursor();*/
-        } while(abort);
-
-        int[][] dirt = dirtyRegions.flush();
-        for(int i = 0; dirt != null && i < dirt.length; i++) {
-            if (dirt[i] == null) continue;
-            int x = dirt[i][0], y = dirt[i][1], w = dirt[i][2], h = dirt[i][3];
-            if (x < 0) x = 0;
-            if (y < 0) y = 0;
-            if (x+w > root.width) w = root.width - x;
-            if (y+h > root.height) h = root.height - y;
-            if (w <= 0 || h <= 0) continue;
-
-            root.render(0, 0, x, y, x + w, y + h, this, identity);
-            drawPicture(scarImage, 0, root.height - scarImage.height, x, y, x+w, y+h);
-            
-            if (abort) {
-                // x,y,w,h is only partially reconstructed, so we must be careful not to re-blit it
-                dirtyRegions.dirty(x, y, w, h);
-                // put back all the dirty regions we haven't yet processed (including the current one)
-                for(int j=i; j<dirt.length; j++)
-                    if (dirt[j] != null)
-                        dirtyRegions.dirty(dirt[j][0], dirt[j][1], dirt[j][2], dirt[j][3]);
-                return;
-            }
-        }
-
-        unrendered = false;
-    }
-
-    // FEATURE: reinstate recycler
-    public class Message implements Task {
-        
-        private Box boxContainingMouse;
-        private Object value;
-        public String name;
-        
-        Message(String name, Object value, Box boxContainingMouse) {
-            this.boxContainingMouse = boxContainingMouse;
-            this.name = name;
-            this.value = value;
-            Scheduler.add(this);
-        }
-        
-        public void perform() {
-            if (name.equals("_KeyPressed")) {
-                String value = (String)this.value;
-                if (value.toLowerCase().endsWith("shift")) shift = true;     else if (shift) value = value.toUpperCase();
-                if (value.toLowerCase().equals("alt")) alt = true;           else if (alt) value = "A-" + value;
-                if (value.toLowerCase().endsWith("control")) control = true; else if (control) value = "C-" + value;
-                if (value.equals("C-v") || value.equals("A-v")) Platform.clipboardReadEnabled = true;
-                this.value = value;
-            } else if (name.equals("_KeyReleased")) {
-                String value = (String)this.value;
-                if (value.toLowerCase().equals("alt")) alt = false;
-                else if (value.toLowerCase().equals("control")) control = false;
-                else if (value.toLowerCase().equals("shift")) shift = false;
-                this.value = value;
-            } else if (name.equals("_HScroll") || name.equals("_VScroll")) {
-                // FIXME: technically points != pixels
-                if (value instanceof Integer)
-                    value = new Float(((Integer)value).intValue() * root.fontSize());
-            }
-            try {
-                boxContainingMouse.putAndTriggerTrapsAndCatchExceptions(name, value);
-            } finally {
-                Platform.clipboardReadEnabled = false;
-            }
-        }
-        public String toString() { return "Message [name=" + name + ", value=" + value + "]"; }
-    }
-
-
-    // Default PixelBuffer implementation /////////////////////////////////////////////////////////
-
-    public static abstract class DoubleBufferedSurface extends Surface {
-
-        public DoubleBufferedSurface(Box root) { super(root); }
-        PixelBuffer backbuffer = Platform.createPixelBuffer(Platform.getScreenWidth(), Platform.getScreenHeight(), this);
-        DirtyList screenDirtyRegions = new DirtyList();
-
-        public void drawPicture(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2) {
-            screenDirtyRegions.dirty(cx1, cy1, cx2 - cx1, cy2 - cy1);
-            backbuffer.drawPicture(source, dx, dy, cx1, cy1, cx2, cy2);
-        }
-
-        public void drawGlyph(Font.Glyph source, int dx, int dy, int cx1, int cy1, int cx2, int cy2, int argb) {
-            screenDirtyRegions.dirty(cx1, cy1, cx2 - cx1, cy2 - cy1);
-            backbuffer.drawGlyph(source, dx, dy, cx1, cy1, cx2, cy2, argb);
-        }
-
-        public void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, int color) {
-            screenDirtyRegions.dirty(Math.min(x1, x3), y1, Math.max(x2, x4) - Math.min(x1, x3), y2 - y1);
-            backbuffer.fillTrapezoid(x1, x2, y1, x3, x4, y2, color);
-        }
-
-        public void render() {
-            super.render();
-            if (abort) return;
-            int[][] dirt = screenDirtyRegions.flush();
-            for(int i = 0; dirt != null && i < dirt.length; i++) {
-                if (dirt[i] == null) continue;
-                int x = dirt[i][0];
-                int y = dirt[i][1];
-                int w = dirt[i][2];
-                int h = dirt[i][3];
-                if (x < 0) x = 0;
-                if (y < 0) y = 0;
-                if (x+w > root.width) w = root.width - x;
-                if (y+h > root.height) h = root.height - y;
-                if (w <= 0 || h <= 0) continue;
-                if (abort) return;
-                blit(backbuffer, x, y, x, y, w + x, h + y);
-            }
-        }
-
-        /** This is how subclasses signal a 'shallow dirty', indicating that although the backbuffer is valid, the screen is not */
-        public final void Dirty(int x, int y, int w, int h) {
-            screenDirtyRegions.dirty(x, y, w, h);
-            Scheduler.renderAll();
-        }
-
-        public void dirty(int x, int y, int w, int h) {
-            screenDirtyRegions.dirty(x, y, w, h);
-            super.dirty(x, y, w, h);
-        }
-
-        /** copies a region from the doublebuffer to this surface */
-        public abstract void blit(PixelBuffer source, int sx, int sy, int dx, int dy, int dx2, int dy2);
-
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/ByteCodes.java b/upstream/org.ibex.core/build/java/org/ibex/js/ByteCodes.java
deleted file mode 100644 (file)
index e8170f1..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-/**
- *  Constants for the various JavaScript ByteCode operations.
- *
- *  Each instruction is an opcode and an optional literal literal;
- *  some Tokens are also valid; see Tokens.java
- */
-interface ByteCodes {
-
-    /** push the literal onto the stack */
-    public static final byte LITERAL = -2;
-
-    /** push a new array onto the stack with length equal to the literal */
-    public static final byte ARRAY = -3;         
-
-    /** push an empty object onto the stack */
-    public static final byte OBJECT = -4;        
-
-    /** create a new instance; literal is a reference to the corresponding ForthBlock */
-    public static final byte NEWFUNCTION = -5;      
-
-    /** if given a non-null argument declare its argument in the current scope and push
-        it to the stack, else, declares the element on the top of the stack and leaves it
-        there */
-    public static final byte DECLARE = -6;       
-
-    /** push a reference to the current scope onto the stack */
-    public static final byte TOPSCOPE = -7;
-
-    /** if given a null literal pop two elements off the stack; push stack[-1].get(stack[top])
-        else pop one element off the stack, push stack[top].get(literal) */
-    public static final byte GET = -8;           
-
-    /** push stack[-1].get(stack[top]) */
-    public static final byte GET_PRESERVE = -9; 
-
-    /** pop two elements off the stack; stack[-2].put(stack[-1], stack[top]); push stack[top] */
-    public static final byte PUT = -10;           
-
-    /** literal is a relative address; pop stacktop and jump if the value is true */
-    public static final byte JT = -11;           
-
-    /** literal is a relative address; pop stacktop and jump if the value is false */
-    public static final byte JF = -12;           
-
-    /** literal is a relative address; jump to it */
-    public static final byte JMP = -13;          
-
-    /** discard the top stack element */
-    static public final byte POP = -14;          
-
-    /** pop element; call stack[top](stack[-n], stack[-n+1]...) where n is the number of args to the function */
-    public static final byte CALL = -15;         
-
-    /** pop an element; push a JS.JSArray containing the keys of the popped element */
-    public static final byte PUSHKEYS = -16;     
-
-    /** push the top element down so that (arg) elements are on top of it; all other elements retain ordering */
-    public static final byte SWAP = -17;         
-
-    /** execute the bytecode block pointed to by the literal in a fresh scope with parentScope==THIS */
-    public static final byte NEWSCOPE = -18;        
-
-    /** execute the bytecode block pointed to by the literal in a fresh scope with parentScope==THIS */
-    public static final byte OLDSCOPE = -19;
-
-    /** push a copy of the top stack element */
-    public static final byte DUP = -20;          
-
-    /** a NOP; confers a label upon the following instruction */
-    public static final byte LABEL = -21;          
-
-    /** execute the ForthBlock pointed to by the literal until BREAK encountered; push TRUE onto the stack for the first iteration
-     *  and FALSE for all subsequent iterations */
-    public static final byte LOOP = -22;        
-     
-    /** similar effect a a GET followed by a CALL */
-    public static final byte CALLMETHOD = -23;
-
-    /** finish a finally block and carry out whatever instruction initiated the finally block */
-    public static final byte FINALLY_DONE = -24;
-    
-    /** finish a finally block and carry out whatever instruction initiated the finally block */
-    public static final byte MAKE_GRAMMAR = -25;
-    
-    public static final String[] bytecodeToString = new String[] {
-        "", "", "LITERAL", "ARRAY", "OBJECT", "NEWFUNCTION", "DECLARE", "TOPSCOPE",
-        "GET", "GET_PRESERVE", "PUT", "JT", "JF", "JMP", "POP", "CALL", "PUSHKEYS",
-        "SWAP", "NEWSCOPE", "OLDSCOPE", "DUP", "LABEL", "LOOP", "CALLMETHOD",
-        "FINALLY_DONE", "MAKE_GRAMMAR"
-    };
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/Interpreter.java b/upstream/org.ibex.core/build/java/org/ibex/js/Interpreter.java
deleted file mode 100644 (file)
index 0a4e52e..0000000
+++ /dev/null
@@ -1,744 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-import org.ibex.util.*;
-import java.util.*;
-
-/** Encapsulates a single JS interpreter (ie call stack) */
-class Interpreter implements ByteCodes, Tokens {
-
-
-    // Thread-Interpreter Mapping /////////////////////////////////////////////////////////////////////////
-
-    static Interpreter current() { return (Interpreter)threadToInterpreter.get(Thread.currentThread()); }
-    private static Hashtable threadToInterpreter = new Hashtable();
-
-    
-    // Instance members and methods //////////////////////////////////////////////////////////////////////
-    
-    int pausecount;               ///< the number of times pause() has been invoked; -1 indicates unpauseable
-    JSFunction f = null;          ///< the currently-executing JSFunction
-    JSScope scope;                ///< the current top-level scope (LIFO stack via NEWSCOPE/OLDSCOPE)
-    Vec stack = new Vec();        ///< the object stack
-    int pc = 0;                   ///< the program counter
-
-    Interpreter(JSFunction f, boolean pauseable, JSArray args) {
-        stack.push(new Interpreter.CallMarker(this));    // the "root function returned" marker -- f==null
-        this.f = f;
-        this.pausecount = pauseable ? 0 : -1;
-        this.scope = new JSScope(f.parentScope);
-        stack.push(args);
-    }
-    
-    /** this is the only synchronization point we need in order to be threadsafe */
-    synchronized Object resume() throws JSExn {
-        Thread t = Thread.currentThread();
-        Interpreter old = (Interpreter)threadToInterpreter.get(t);
-        threadToInterpreter.put(t, this);
-        try {
-            return run();
-        } finally {
-            if (old == null) threadToInterpreter.remove(t);
-            else threadToInterpreter.put(t, old);
-        }
-    }
-
-    static int getLine() {
-        Interpreter c = Interpreter.current();
-        return c == null || c.f == null || c.pc < 0 || c.pc >= c.f.size ? -1 : c.f.line[c.pc];
-    }
-
-    static String getSourceName() {
-        Interpreter c = Interpreter.current();
-        return c == null || c.f == null ? null : c.f.sourceName;
-    } 
-
-    private static JSExn je(String s) { return new JSExn(getSourceName() + ":" + getLine() + " " + s); }
-
-    // FIXME: double check the trap logic
-    private Object run() throws JSExn {
-
-        // if pausecount changes after a get/put/call, we know we've been paused
-        final int initialPauseCount = pausecount;
-
-        OUTER: for(;; pc++) {
-        try {
-            if (f == null) return stack.pop();
-            int op = f.op[pc];
-            Object arg = f.arg[pc];
-            if(op == FINALLY_DONE) {
-                FinallyData fd = (FinallyData) stack.pop();
-                if(fd == null) continue OUTER; // NOP
-                if(fd.exn != null) throw fd.exn;
-                op = fd.op;
-                arg = fd.arg;
-            }
-            switch(op) {
-            case LITERAL: stack.push(arg); break;
-            case OBJECT: stack.push(new JS()); break;
-            case ARRAY: stack.push(new JSArray(JS.toNumber(arg).intValue())); break;
-            case DECLARE: scope.declare((String)(arg==null ? stack.peek() : arg)); if(arg != null) stack.push(arg); break;
-            case TOPSCOPE: stack.push(scope); break;
-            case JT: if (JS.toBoolean(stack.pop())) pc += JS.toNumber(arg).intValue() - 1; break;
-            case JF: if (!JS.toBoolean(stack.pop())) pc += JS.toNumber(arg).intValue() - 1; break;
-            case JMP: pc += JS.toNumber(arg).intValue() - 1; break;
-            case POP: stack.pop(); break;
-            case SWAP: {
-                int depth = (arg == null ? 1 : JS.toInt(arg));
-                Object save = stack.elementAt(stack.size() - 1);
-                for(int i=stack.size() - 1; i > stack.size() - 1 - depth; i--)
-                    stack.setElementAt(stack.elementAt(i-1), i);
-                stack.setElementAt(save, stack.size() - depth - 1);
-                break; }
-            case DUP: stack.push(stack.peek()); break;
-            case NEWSCOPE: scope = new JSScope(scope); break;
-            case OLDSCOPE: scope = scope.getParentScope(); break;
-            case ASSERT:
-                if (JS.checkAssertions && !JS.toBoolean(stack.pop()))
-                    throw je("ibex.assertion.failed" /*FEATURE: line number*/); break;
-            case BITNOT: stack.push(JS.N(~JS.toLong(stack.pop()))); break;
-            case BANG: stack.push(JS.B(!JS.toBoolean(stack.pop()))); break;
-            case NEWFUNCTION: stack.push(((JSFunction)arg)._cloneWithNewParentScope(scope)); break;
-            case LABEL: break;
-
-            case TYPEOF: {
-                Object o = stack.pop();
-                if (o == null) stack.push(null);
-                else if (o instanceof JS) stack.push("object");
-                else if (o instanceof String) stack.push("string");
-                else if (o instanceof Number) stack.push("number");
-                else if (o instanceof Boolean) stack.push("boolean");
-                else throw new Error("this should not happen");
-                break;
-            }
-
-            case PUSHKEYS: {
-                Object o = stack.peek();
-                Enumeration e = ((JS)o).keys();
-                JSArray a = new JSArray();
-                while(e.hasMoreElements()) a.addElement(e.nextElement());
-                stack.push(a);
-                break;
-            }
-
-            case LOOP:
-                stack.push(new LoopMarker(pc, pc > 0 && f.op[pc - 1] == LABEL ? (String)f.arg[pc - 1] : (String)null, scope));
-                stack.push(Boolean.TRUE);
-                break;
-
-            case BREAK:
-            case CONTINUE:
-                while(stack.size() > 0) {
-                    Object o = stack.pop();
-                    if (o instanceof CallMarker) je("break or continue not within a loop");
-                    if (o instanceof TryMarker) {
-                        if(((TryMarker)o).finallyLoc < 0) continue; // no finally block, keep going
-                        stack.push(new FinallyData(op, arg));
-                        scope = ((TryMarker)o).scope;
-                        pc = ((TryMarker)o).finallyLoc - 1;
-                        continue OUTER;
-                    }
-                    if (o instanceof LoopMarker) {
-                        if (arg == null || arg.equals(((LoopMarker)o).label)) {
-                            int loopInstructionLocation = ((LoopMarker)o).location;
-                            int endOfLoop = ((Integer)f.arg[loopInstructionLocation]).intValue() + loopInstructionLocation;
-                            scope = ((LoopMarker)o).scope;
-                            if (op == CONTINUE) { stack.push(o); stack.push(Boolean.FALSE); }
-                            pc = op == BREAK ? endOfLoop - 1 : loopInstructionLocation;
-                            continue OUTER;
-                        }
-                    }
-                }
-                throw new Error("CONTINUE/BREAK invoked but couldn't find LoopMarker at " +
-                                getSourceName() + ":" + getLine());
-
-            case TRY: {
-                int[] jmps = (int[]) arg;
-                // jmps[0] is how far away the catch block is, jmps[1] is how far away the finally block is
-                // each can be < 0 if the specified block does not exist
-                stack.push(new TryMarker(jmps[0] < 0 ? -1 : pc + jmps[0], jmps[1] < 0 ? -1 : pc + jmps[1], this));
-                break;
-            }
-
-            case RETURN: {
-                Object retval = stack.pop();
-                while(stack.size() > 0) {
-                    Object o = stack.pop();
-                    if (o instanceof TryMarker) {
-                        if(((TryMarker)o).finallyLoc < 0) continue;
-                        stack.push(retval); 
-                        stack.push(new FinallyData(RETURN));
-                        scope = ((TryMarker)o).scope;
-                        pc = ((TryMarker)o).finallyLoc - 1;
-                        continue OUTER;
-                    } else if (o instanceof CallMarker) {
-                        if (scope instanceof Trap.TrapScope) { // handles return component of a read trap
-                            Trap.TrapScope ts = (Trap.TrapScope)scope;
-                            if (retval != null && retval instanceof Boolean && ((Boolean)retval).booleanValue())
-                                ts.cascadeHappened = true;
-                            if (!ts.cascadeHappened) {
-                                ts.cascadeHappened = true;
-                                Trap t = ts.t.next;
-                                while (t != null && t.f.numFormalArgs == 0) t = t.next;
-                                if (t == null) {
-                                    ((JS)ts.t.trapee).put(ts.t.name, ts.val);
-                                    if (pausecount > initialPauseCount) { pc++; return null; }   // we were paused
-                                } else {
-                                    stack.push(o);
-                                    JSArray args = new JSArray();
-                                    args.addElement(ts.val);
-                                    stack.push(args);
-                                    f = t.f;
-                                    scope = new Trap.TrapScope(f.parentScope, t, ts.val);
-                                    pc = -1;
-                                    continue OUTER;
-                                }
-                            }
-                        }
-                        scope = ((CallMarker)o).scope;
-                        pc = ((CallMarker)o).pc - 1;
-                        f = (JSFunction)((CallMarker)o).f;
-                        stack.push(retval);
-                        continue OUTER;
-                    }
-                }
-                throw new Error("error: RETURN invoked but couldn't find a CallMarker!");
-            }
-
-            case PUT: {
-                Object val = stack.pop();
-                Object key = stack.pop();
-                Object target = stack.peek();
-                if (target == null)
-                    throw je("tried to put a value to the " + key + " property on the null value");
-                if (!(target instanceof JS))
-                    throw je("tried to put a value to the " + key + " property on a " + target.getClass().getName());
-                if (key == null)
-                    throw je("tried to assign \"" + (val==null?"(null)":val.toString()) + "\" to the null key");
-
-                Trap t = null;
-                if (target instanceof JSScope && key.equals("cascade")) {
-                   Trap.TrapScope ts = null;
-                    JSScope p = (JSScope)target; // search the scope-path for the trap
-                   if (target instanceof Trap.TrapScope) {
-                       ts = (Trap.TrapScope)target;
-                   }
-                   else {
-                       while (ts == null && p.getParentScope() != null) {
-                           p = p.getParentScope();
-                           if (p instanceof Trap.TrapScope) {
-                               ts = (Trap.TrapScope)p;
-                           }
-                       }
-                   }
-                   t = ts.t.next;
-                   ts.cascadeHappened = true;
-                    while (t != null && t.f.numFormalArgs == 0) t = t.next;
-                    if (t == null) { target = ts.t.trapee; key = ts.t.name; }
-
-                } else if (target instanceof Trap.TrapScope && key.equals(((Trap.TrapScope)target).t.name)) {
-                    throw je("tried to put to " + key + " inside a trap it owns; use cascade instead"); 
-
-                } else if (target instanceof JS) {
-                    if (target instanceof JSScope) {
-                        JSScope p = (JSScope)target; // search the scope-path for the trap
-                        t = p.getTrap(key);
-                        while (t == null && p.getParentScope() != null) { p = p.getParentScope(); t = p.getTrap(key); }
-                    } else {
-                        t = ((JS)target).getTrap(key);
-                    }
-                    while (t != null && t.f.numFormalArgs == 0) t = t.next; // find the first write trap
-                }
-                if (t != null) {
-                    stack.push(new CallMarker(this));
-                    JSArray args = new JSArray();
-                    args.addElement(val);
-                    stack.push(args);
-                    f = t.f;
-                    scope = new Trap.TrapScope(f.parentScope, t, val);
-                    pc = -1;
-                    break;
-                }
-                ((JS)target).put(key, val);
-                if (pausecount > initialPauseCount) { pc++; return null; }   // we were paused
-                stack.push(val);
-                break;
-            }
-
-            case GET:
-            case GET_PRESERVE: {
-                Object o, v;
-                if (op == GET) {
-                    v = arg == null ? stack.pop() : arg;
-                    o = stack.pop();
-                } else {
-                    v = stack.pop();
-                    o = stack.peek();
-                    stack.push(v);
-                }
-                Object ret = null;
-                if (v == null) throw je("tried to get the null key from " + o);
-                if (o == null) throw je("tried to get property \"" + v + "\" from the null object");
-                if (o instanceof String || o instanceof Number || o instanceof Boolean) {
-                    ret = getFromPrimitive(o,v);
-                    stack.push(ret);
-                    break;
-                } else if (o instanceof JS) {
-                    Trap t = null;
-                    if (o instanceof Trap.TrapScope && v.equals("cascade")) {
-                        t = ((Trap.TrapScope)o).t.next;
-                        while (t != null && t.f.numFormalArgs != 0) t = t.next;
-                        if (t == null) { v = ((Trap.TrapScope)o).t.name; o = ((Trap.TrapScope)o).t.trapee; }
-
-                    } else if (o instanceof JS) {
-                        if (o instanceof JSScope) {
-                            JSScope p = (JSScope)o; // search the scope-path for the trap
-                            t = p.getTrap(v);
-                            while (t == null && p.getParentScope() != null) { p = p.getParentScope(); t = p.getTrap(v); }
-                        } else {
-                            t = ((JS)o).getTrap(v);
-                        }
-                        while (t != null && t.f.numFormalArgs != 0) t = t.next; // get first read trap
-                    }
-                    if (t != null) {
-                        stack.push(new CallMarker(this));
-                        JSArray args = new JSArray();
-                        stack.push(args);
-                        f = t.f;
-                        scope = new Trap.TrapScope(f.parentScope, t, null);
-                        ((Trap.TrapScope)scope).cascadeHappened = true;
-                        pc = -1;
-                        break;
-                    }
-                    ret = ((JS)o).get(v);
-                    if (ret == JS.METHOD) ret = new Stub((JS)o, v);
-                    if (pausecount > initialPauseCount) { pc++; return null; }   // we were paused
-                    stack.push(ret);
-                    break;
-                }
-                throw je("tried to get property " + v + " from a " + o.getClass().getName());
-            }
-            
-            case CALL: case CALLMETHOD: {
-                int numArgs = JS.toInt(arg);
-                Object method = null;
-                Object ret = null;
-                Object object = stack.pop();
-
-                if (op == CALLMETHOD) {
-                    if (object == JS.METHOD) {
-                        method = stack.pop();
-                        object = stack.pop();
-                    } else if (object == null) {
-                        Object name = stack.pop();
-                        stack.pop();
-                        throw new JSExn("function '"+name+"' not found");
-                    } else {
-                        stack.pop();
-                        stack.pop();
-                    }
-                }
-                Object[] rest = numArgs > 3 ? new Object[numArgs - 3] : null;
-                for(int i=numArgs - 1; i>2; i--) rest[i-3] = stack.pop();
-                Object a2 = numArgs <= 2 ? null : stack.pop();
-                Object a1 = numArgs <= 1 ? null : stack.pop();
-                Object a0 = numArgs <= 0 ? null : stack.pop();
-
-                if (object instanceof String || object instanceof Number || object instanceof Boolean) {
-                    ret = callMethodOnPrimitive(object, method, a0, a1, a2, null, numArgs);
-
-                } else if (object instanceof JSFunction) {
-                    // FIXME: use something similar to call0/call1/call2 here
-                    JSArray arguments = new JSArray();
-                    for(int i=0; i<numArgs; i++) arguments.addElement(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
-                    stack.push(new CallMarker(this));
-                    stack.push(arguments);
-                    f = (JSFunction)object;
-                    scope = new JSScope(f.parentScope);
-                    pc = -1;
-                    break;
-
-                } else if (object instanceof JS) {
-                    JS c = (JS)object;
-                    ret = method == null ? c.call(a0, a1, a2, rest, numArgs) : c.callMethod(method, a0, a1, a2, rest, numArgs);
-
-                } else {
-                    throw new JSExn("can't call a " + object + " @" + pc + "\n" + f.dump());
-
-                }
-                if (pausecount > initialPauseCount) { pc++; return null; }
-                stack.push(ret);
-                break;
-            }
-
-            case THROW:
-                throw new JSExn(stack.pop(), stack, f, pc, scope);
-
-                /* FIXME
-            case MAKE_GRAMMAR: {
-                final Grammar r = (Grammar)arg;
-                final JSScope final_scope = scope;
-                Grammar r2 = new Grammar() {
-                        public int match(String s, int start, Hash v, JSScope scope) throws JSExn {
-                            return r.match(s, start, v, final_scope);
-                        }
-                        public int matchAndWrite(String s, int start, Hash v, JSScope scope, String key) throws JSExn {
-                            return r.matchAndWrite(s, start, v, final_scope, key);
-                        }
-                        public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-                            Hash v = new Hash();
-                            r.matchAndWrite((String)a0, 0, v, final_scope, "foo");
-                            return v.get("foo");
-                        }
-                    };
-                Object obj = stack.pop();
-                if (obj != null && obj instanceof Grammar) r2 = new Grammar.Alternative((Grammar)obj, r2);
-                stack.push(r2);
-                break;
-            }
-                */
-            case ADD_TRAP: case DEL_TRAP: {
-                Object val = stack.pop();
-                Object key = stack.pop();
-                Object obj = stack.peek();
-                // A trap addition/removal
-                JS js = obj instanceof JSScope ? ((JSScope)obj).top() : (JS) obj;
-                if(op == ADD_TRAP) js.addTrap(key, (JSFunction)val);
-                else js.delTrap(key, (JSFunction)val);
-                break;
-            }
-
-            case ASSIGN_SUB: case ASSIGN_ADD: {
-                Object val = stack.pop();
-                Object key = stack.pop();
-                Object obj = stack.peek();
-                // The following setup is VERY important. The generated bytecode depends on the stack
-                // being setup like this (top to bottom) KEY, OBJ, VAL, KEY, OBJ
-                stack.push(key);
-                stack.push(val);
-                stack.push(obj);
-                stack.push(key);
-                break;
-            }
-
-            case ADD: {
-                int count = ((Number)arg).intValue();
-                if(count < 2) throw new Error("this should never happen");
-                if(count == 2) {
-                    // common case
-                    Object right = stack.pop();
-                    Object left = stack.pop();
-                    if(left instanceof String || right instanceof String)
-                        stack.push(JS.toString(left).concat(JS.toString(right)));
-                    else stack.push(JS.N(JS.toDouble(left) + JS.toDouble(right)));
-                } else {
-                    Object[] args = new Object[count];
-                    while(--count >= 0) args[count] = stack.pop();
-                    if(args[0] instanceof String) {
-                        StringBuffer sb = new StringBuffer(64);
-                        for(int i=0;i<args.length;i++) sb.append(JS.toString(args[i]));
-                        stack.push(sb.toString());
-                    } else {
-                        int numStrings = 0;
-                        for(int i=0;i<args.length;i++) if(args[i] instanceof String) numStrings++;
-                        if(numStrings == 0) {
-                            double d = 0.0;
-                            for(int i=0;i<args.length;i++) d += JS.toDouble(args[i]);
-                            stack.push(JS.N(d));
-                        } else {
-                            int i=0;
-                            StringBuffer sb = new StringBuffer(64);
-                            if(!(args[0] instanceof String || args[1] instanceof String)) {
-                                double d=0.0;
-                                do {
-                                    d += JS.toDouble(args[i++]);
-                                } while(!(args[i] instanceof String));
-                                sb.append(JS.toString(JS.N(d)));
-                            }
-                            while(i < args.length) sb.append(JS.toString(args[i++]));
-                            stack.push(sb.toString());
-                        }
-                    }
-                }
-                break;
-            }
-
-            default: {
-                Object right = stack.pop();
-                Object left = stack.pop();
-                switch(op) {
-                        
-                case BITOR: stack.push(JS.N(JS.toLong(left) | JS.toLong(right))); break;
-                case BITXOR: stack.push(JS.N(JS.toLong(left) ^ JS.toLong(right))); break;
-                case BITAND: stack.push(JS.N(JS.toLong(left) & JS.toLong(right))); break;
-
-                case SUB: stack.push(JS.N(JS.toDouble(left) - JS.toDouble(right))); break;
-                case MUL: stack.push(JS.N(JS.toDouble(left) * JS.toDouble(right))); break;
-                case DIV: stack.push(JS.N(JS.toDouble(left) / JS.toDouble(right))); break;
-                case MOD: stack.push(JS.N(JS.toDouble(left) % JS.toDouble(right))); break;
-                        
-                case LSH: stack.push(JS.N(JS.toLong(left) << JS.toLong(right))); break;
-                case RSH: stack.push(JS.N(JS.toLong(left) >> JS.toLong(right))); break;
-                case URSH: stack.push(JS.N(JS.toLong(left) >>> JS.toLong(right))); break;
-                        
-                case LT: case LE: case GT: case GE: {
-                    if (left == null) left = JS.N(0);
-                    if (right == null) right = JS.N(0);
-                    int result = 0;
-                    if (left instanceof String || right instanceof String) {
-                        result = left.toString().compareTo(right.toString());
-                    } else {
-                        result = (int)java.lang.Math.ceil(JS.toDouble(left) - JS.toDouble(right));
-                    }
-                    stack.push(JS.B((op == LT && result < 0) || (op == LE && result <= 0) ||
-                               (op == GT && result > 0) || (op == GE && result >= 0)));
-                    break;
-                }
-                    
-                case EQ:
-                case NE: {
-                    Object l = left;
-                    Object r = right;
-                    boolean ret;
-                    if (l == null) { Object tmp = r; r = l; l = tmp; }
-                    if (l == null && r == null) ret = true;
-                    else if (r == null) ret = false; // l != null, so its false
-                    else if (l instanceof Boolean) ret = JS.B(JS.toBoolean(r)).equals(l);
-                    else if (l instanceof Number) ret = JS.toNumber(r).doubleValue() == JS.toNumber(l).doubleValue();
-                    else if (l instanceof String) ret = r != null && l.equals(r.toString());
-                    else ret = l.equals(r);
-                    stack.push(JS.B(op == EQ ? ret : !ret)); break;
-                }
-
-                default: throw new Error("unknown opcode " + op);
-                } }
-            }
-
-        } catch(JSExn e) {
-            while(stack.size() > 0) {
-                Object o = stack.pop();
-                if (o instanceof CatchMarker || o instanceof TryMarker) {
-                    boolean inCatch = o instanceof CatchMarker;
-                    if(inCatch) {
-                        o = stack.pop();
-                        if(((TryMarker)o).finallyLoc < 0) continue; // no finally block, keep going
-                    }
-                    if(!inCatch && ((TryMarker)o).catchLoc >= 0) {
-                        // run the catch block, this will implicitly run the finally block, if it exists
-                        stack.push(o);
-                        stack.push(catchMarker);
-                        stack.push(e.getObject());
-                        f = ((TryMarker)o).f;
-                        scope = ((TryMarker)o).scope;
-                        pc = ((TryMarker)o).catchLoc - 1;
-                        continue OUTER;
-                    } else {
-                        stack.push(new FinallyData(e));
-                        f = ((TryMarker)o).f;
-                        scope = ((TryMarker)o).scope;
-                        pc = ((TryMarker)o).finallyLoc - 1;
-                        continue OUTER;
-                    }
-                }
-            }
-            throw e;
-        } // end try/catch
-        } // end for
-    }
-
-
-
-    // Markers //////////////////////////////////////////////////////////////////////
-
-    public static class CallMarker {
-        int pc;
-        JSScope scope;
-        JSFunction f;
-        public CallMarker(Interpreter cx) { pc = cx.pc + 1; scope = cx.scope; f = cx.f; }
-    }
-    
-    public static class CatchMarker { }
-    private static CatchMarker catchMarker = new CatchMarker();
-    
-    public static class LoopMarker {
-        public int location;
-        public String label;
-        public JSScope scope;
-        public LoopMarker(int location, String label, JSScope scope) {
-            this.location = location;
-            this.label = label;
-            this.scope = scope;
-        }
-    }
-    public static class TryMarker {
-        public int catchLoc;
-        public int finallyLoc;
-        public JSScope scope;
-        public JSFunction f;
-        public TryMarker(int catchLoc, int finallyLoc, Interpreter cx) {
-            this.catchLoc = catchLoc;
-            this.finallyLoc = finallyLoc;
-            this.scope = cx.scope;
-            this.f = cx.f;
-        }
-    }
-    public static class FinallyData {
-        public int op;
-        public Object arg;
-        public JSExn exn;
-        public FinallyData(int op) { this(op,null); }
-        public FinallyData(int op, Object arg) { this.op = op; this.arg = arg; }
-        public FinallyData(JSExn exn) { this.exn = exn; } // Just throw this exn
-    }
-
-
-    // Operations on Primitives //////////////////////////////////////////////////////////////////////
-
-    static Object callMethodOnPrimitive(Object o, Object method, Object arg0, Object arg1, Object arg2, Object[] rest, int alength) throws JSExn {
-        if (method == null || !(method instanceof String) || "".equals(method))
-            throw new JSExn("attempt to call a non-existant method on a primitive");
-
-        if (o instanceof Number) {
-final String ccSwitch0 = (String)(method);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 7: { switch(ccSwitch0.charAt(0)) { case 't': if ("toFixed".equals(ccSwitch0)) { if (true) do { throw new JSExn("toFixed() not implemented");
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 't': if ("toString".equals(ccSwitch0)) { if (true) do { {
-int radix = alength >= 1 ? JS.toInt(arg0) : 10;
-return Long.toString(((Number)o).longValue(),radix);
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch0.charAt(0)) { case 't': if ("toPrecision".equals(ccSwitch0)) { if (true) do { throw new JSExn("toPrecision() not implemented");
- } while(false); break SUCCESS; } break;  }; break; }  case 13: { switch(ccSwitch0.charAt(0)) { case 't': if ("toExponential".equals(ccSwitch0)) { if (true) do { throw new JSExn("toExponential() not implemented");
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        } else if (o instanceof Boolean) {
-            // No methods for Booleans
-            throw new JSExn("attempt to call a method on a Boolean");
-        }
-
-        String s = JS.toString(o);
-        int slength = s.length();
-final String ccSwitch1 = (String)(method);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 5: { switch(ccSwitch1.charAt(0)) { case 'm': if ("match".equals(ccSwitch1)) { if (true) do { return JSRegexp.stringMatch(s,arg0);
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch1.charAt(1)) { case 'l': if ("slice".equals(ccSwitch1)) { if (true) do { {
-int a = alength >= 1 ? JS.toInt(arg0) : 0;
-int b = alength >= 2 ? JS.toInt(arg1) : slength;
-if (a < 0) a = slength + a;
-if (b < 0) b = slength + b;
-if (a < 0) a = 0;
-if (b < 0) b = 0;
-if (a > slength) a = slength;
-if (b > slength) b = slength;
-if (a > b) return "";
-return s.substring(a,b);
-}
- } while(false); break SUCCESS; } break;  case 'p': if ("split".equals(ccSwitch1)) { if (true) do { return JSRegexp.stringSplit(s,arg0,arg1,alength);
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 6: { switch(ccSwitch1.charAt(0)) { case 'c': { switch(ccSwitch1.charAt(1)) { case 'h': if ("charAt".equals(ccSwitch1)) { if (true) do { {
-int p = alength >= 1 ? JS.toInt(arg0) : 0;
-if (p < 0 || p >= slength) return "";
-return s.substring(p,p+1);
-}
- } while(false); break SUCCESS; } break;  case 'o': if ("concat".equals(ccSwitch1)) { if (true) do { {
-StringBuffer sb = new StringBuffer(slength*2).append(s);
-for(int i=0;i<alength;i++) sb.append(i==0?arg0:i==1?arg1:i==2?arg2:rest[i-3]);
-return sb.toString();
-}
- } while(false); break SUCCESS; } break;  } break; } case 's': { switch(ccSwitch1.charAt(1)) { case 'e': if ("search".equals(ccSwitch1)) { if (true) do { return JSRegexp.stringSearch(s,arg0);
- } while(false); break SUCCESS; } break;  case 'u': if ("substr".equals(ccSwitch1)) { if (true) do { {
-int start = alength >= 1 ? JS.toInt(arg0) : 0;
-int len = alength >= 2 ? JS.toInt(arg1) : Integer.MAX_VALUE;
-if (start < 0) start = slength + start;
-if (start < 0) start = 0;
-if (len < 0) len = 0;
-if (len > slength - start) len = slength - start;
-if (len <= 0) return "";
-return s.substring(start,start+len);
-}
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 7: { switch(ccSwitch1.charAt(0)) { case 'i': if ("indexOf".equals(ccSwitch1)) { if (true) do { {
-String search = alength >= 1 ? arg0.toString() : "null";
-int start = alength >= 2 ? JS.toInt(arg1) : 0;
-
-return JS.N(s.indexOf(search,start));
-}
- } while(false); break SUCCESS; } break;  case 'r': if ("replace".equals(ccSwitch1)) { if (true) do { return JSRegexp.stringReplace(s,arg0,arg1);
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch1.charAt(0)) { case 't': if ("toString".equals(ccSwitch1)) { if (true) do { return s;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch1.charAt(0)) { case 's': if ("substring".equals(ccSwitch1)) { if (true) do { {
-int a = alength >= 1 ? JS.toInt(arg0) : 0;
-int b = alength >= 2 ? JS.toInt(arg1) : slength;
-if (a > slength) a = slength;
-if (b > slength) b = slength;
-if (a < 0) a = 0;
-if (b < 0) b = 0;
-if (a > b) { int tmp = a; a = b; b = tmp; }
-return s.substring(a,b);
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch1.charAt(0)) { case 'c': if ("charCodeAt".equals(ccSwitch1)) { if (true) do { {
-int p = alength >= 1 ? JS.toInt(arg0) : 0;
-if (p < 0 || p >= slength) return JS.N(Double.NaN);
-return JS.N(s.charAt(p));
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch1.charAt(0)) { case 'l': if ("lastIndexOf".equals(ccSwitch1)) { if (true) do { {
-String search = alength >= 1 ? arg0.toString() : "null";
-int start = alength >= 2 ? JS.toInt(arg1) : 0;
-
-return JS.N(s.lastIndexOf(search,start));
-}
- } while(false); break SUCCESS; } break;  case 't': { switch(ccSwitch1.charAt(1)) { case 'o': { switch(ccSwitch1.charAt(2)) { case 'L': if ("toLowerCase".equals(ccSwitch1)) { if (true) do { return s.toLowerCase();
- } while(false); break SUCCESS; } break;  case 'U': if ("toUpperCase".equals(ccSwitch1)) { if (true) do { return s.toUpperCase();
- } while(false); break SUCCESS; } break;  } break; } } break; } }; break; }  } /* switch */  } while(false); /* OUTER */
-        throw new JSExn("Attempted to call non-existent method: " + method);
-    }
-    
-    static Object getFromPrimitive(Object o, Object key) throws JSExn {
-        boolean returnJS = false;
-        if (o instanceof Boolean) {
-            throw new JSExn("Booleans do not have properties");
-        } else if (o instanceof Number) {
-            if (key.equals("toPrecision") || key.equals("toExponential") || key.equals("toFixed"))
-                returnJS = true;
-        }
-        if (!returnJS) {
-            // the string stuff applies to everything
-            String s = o.toString();
-            
-            // this is sort of ugly, but this list should never change
-            // These should provide a complete (enough) implementation of the ECMA-262 String object
-
-final String ccSwitch2 = (String)(key);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 5: { switch(ccSwitch2.charAt(0)) { case 'm': if ("match".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch2.charAt(1)) { case 'l': if ("slice".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 'p': if ("split".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 6: { switch(ccSwitch2.charAt(0)) { case 'c': { switch(ccSwitch2.charAt(1)) { case 'h': if ("charAt".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 'o': if ("concat".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  } break; } case 'l': if ("length".equals(ccSwitch2)) { if (true) do { return JS.N(s.length());
- } while(false); break SUCCESS; } break;  case 's': { switch(ccSwitch2.charAt(1)) { case 'e': if ("seatch".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 'u': if ("substr".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 7: { switch(ccSwitch2.charAt(0)) { case 'i': if ("indexOf".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 'r': if ("replace".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch2.charAt(0)) { case 't': if ("toString".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch2.charAt(0)) { case 's': if ("substring".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch2.charAt(0)) { case 'c': if ("charCodeAt".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch2.charAt(0)) { case 'l': if ("lastIndexOf".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 't': { switch(ccSwitch2.charAt(1)) { case 'o': { switch(ccSwitch2.charAt(2)) { case 'L': if ("toLowerCase".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  case 'U': if ("toUpperCase".equals(ccSwitch2)) { if (true) do { returnJS = true; break;
- } while(false); break SUCCESS; } break;  } break; } } break; } }; break; }  } /* switch */  } while(false); /* OUTER */
-        }
-        if (returnJS) {
-            final Object target = o;
-            final String method = key.toString();
-            return new JS() {
-                    public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-                        if (nargs > 2) throw new JSExn("cannot call that method with that many arguments");
-                        return callMethodOnPrimitive(target, method, a0, a1, a2, rest, nargs);
-                    }
-            };
-        }
-        return null;
-    }
-
-    private static class Stub extends JS {
-        private Object method;
-        JS obj;
-        public Stub(JS obj, Object method) { this.obj = obj; this.method = method; }
-        public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-            return ((JS)obj).callMethod(method, a0, a1, a2, rest, nargs);
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JS.java b/upstream/org.ibex.core/build/java/org/ibex/js/JS.java
deleted file mode 100644 (file)
index 7a78623..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] 
-package org.ibex.js; 
-
-import org.ibex.util.*; 
-import java.io.*;
-import java.util.*;
-
-/** The minimum set of functionality required for objects which are manipulated by JavaScript */
-public class JS extends org.ibex.util.BalancedTree { 
-
-    public static boolean checkAssertions = false;
-
-    public static final Object METHOD = new Object();
-    public final JS unclone() { return _unclone(); }
-    public Enumeration keys() throws JSExn { return entries == null ? emptyEnumeration : entries.keys(); }
-    public Object get(Object key) throws JSExn { return entries == null ? null : entries.get(key, null); }
-    public void put(Object key, Object val) throws JSExn { (entries==null?entries=new Hash():entries).put(key,null,val); }
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        throw new JSExn("attempted to call the null value (method "+method+")");
-    }    
-    public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        throw new JSExn("you cannot call this object (class=" + this.getClass().getName() +")");
-    }
-
-    JS _unclone() { return this; }
-    public static class Cloneable extends JS {
-        public Object jsclone() throws JSExn {
-            return new Clone(this);
-        }
-    }
-
-    public static class Clone extends JS.Cloneable {
-        protected JS.Cloneable clonee = null;
-        JS _unclone() { return clonee.unclone(); }
-        public JS.Cloneable getClonee() { return clonee; }
-        public Clone(JS.Cloneable clonee) { this.clonee = clonee; }
-        public boolean equals(Object o) {
-            if (!(o instanceof JS)) return false;
-            return unclone() == ((JS)o).unclone();
-        }
-        public Enumeration keys() throws JSExn { return clonee.keys(); }
-        public Object get(Object key) throws JSExn { return clonee.get(key); }
-        public void put(Object key, Object val) throws JSExn { clonee.put(key, val); }
-        public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-            return clonee.callMethod(method, a0, a1, a2, rest, nargs);
-        }    
-        public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-            return clonee.call(a0, a1, a2, rest, nargs);
-        }
-    }
-
-    // Static Interpreter Control Methods ///////////////////////////////////////////////////////////////
-
-    /** log a message with the current JavaScript sourceName/line */
-    public static void log(Object message) { info(message); }
-    public static void debug(Object message) { Log.debug(Interpreter.getSourceName() + ":" + Interpreter.getLine(), message); }
-    public static void info(Object message) { Log.info(Interpreter.getSourceName() + ":" + Interpreter.getLine(), message); }
-    public static void warn(Object message) { Log.warn(Interpreter.getSourceName() + ":" + Interpreter.getLine(), message); }
-    public static void error(Object message) { Log.error(Interpreter.getSourceName() + ":" + Interpreter.getLine(), message); }
-
-    public static class NotPauseableException extends Exception { NotPauseableException() { } }
-
-    /** returns a callback which will restart the context; expects a value to be pushed onto the stack when unpaused */
-    public static UnpauseCallback pause() throws NotPauseableException {
-        Interpreter i = Interpreter.current();
-        if (i.pausecount == -1) throw new NotPauseableException();
-        i.pausecount++;
-        return new JS.UnpauseCallback(i);
-    }
-
-    public static class UnpauseCallback implements Task {
-        Interpreter i;
-        UnpauseCallback(Interpreter i) { this.i = i; }
-        public void perform() throws JSExn { unpause(null); }
-        public void unpause(Object o) throws JSExn {
-            // FIXME: if o instanceof JSExn, throw it into the JSworld
-            i.stack.push(o);
-            i.resume();
-        }
-    }
-
-
-
-    // Static Helper Methods ///////////////////////////////////////////////////////////////////////////////////
-
-    /** coerce an object to a Boolean */
-    public static boolean toBoolean(Object o) {
-        if (o == null) return false;
-        if (o instanceof Boolean) return ((Boolean)o).booleanValue();
-        if (o instanceof Long) return ((Long)o).longValue() != 0;
-        if (o instanceof Integer) return ((Integer)o).intValue() != 0;
-        if (o instanceof Number) {
-            double d = ((Number) o).doubleValue();
-            // NOTE: d == d is a test for NaN. It should be faster than Double.isNaN()
-            return d != 0.0 && d == d;
-        }
-        if (o instanceof String) return ((String)o).length() != 0;
-        return true;
-    }
-
-    /** coerce an object to a Long */
-    public static long toLong(Object o) { return toNumber(o).longValue(); }
-
-    /** coerce an object to an Int */
-    public static int toInt(Object o) { return toNumber(o).intValue(); }
-
-    /** coerce an object to a Double */
-    public static double toDouble(Object o) { return toNumber(o).doubleValue(); }
-
-    /** coerce an object to a Number */
-    public static Number toNumber(Object o) {
-        if (o == null) return ZERO;
-        if (o instanceof Number) return ((Number)o);
-
-        // NOTE: There are about 3 pages of rules in ecma262 about string to number conversions
-        //       We aren't even close to following all those rules.  We probably never will be.
-        if (o instanceof String) try { return N((String)o); } catch (NumberFormatException e) { return N(Double.NaN); }
-        if (o instanceof Boolean) return ((Boolean)o).booleanValue() ? N(1) : ZERO;
-        throw new Error("toNumber() got object of type " + o.getClass().getName() + " which we don't know how to handle");
-    }
-
-    /** coerce an object to a String */
-    public static String toString(Object o) {
-        if(o == null) return "null";
-        if(o instanceof String) return (String) o;
-        if(o instanceof Integer || o instanceof Long || o instanceof Boolean) return o.toString();
-        if(o instanceof JSArray) return o.toString();
-        if(o instanceof JSDate) return o.toString();
-        if(o instanceof Double || o instanceof Float) {
-            double d = ((Number)o).doubleValue();
-            if((int)d == d) return Integer.toString((int)d);
-            return o.toString();
-        }
-        throw new RuntimeException("can't coerce "+o+" [" + o.getClass().getName() + "] to type String.");
-    }
-
-    // Instance Methods ////////////////////////////////////////////////////////////////////
-
-    public static final Integer ZERO = new Integer(0);
-    // this gets around a wierd fluke in the Java type checking rules for ?..:
-    public static final Object T = Boolean.TRUE;
-    public static final Object F = Boolean.FALSE;
-
-    public static final Boolean B(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }
-    public static final Boolean B(int i) { return i==0 ? Boolean.FALSE : Boolean.TRUE; }
-    public static final Number N(String s) { return s.indexOf('.') == -1 ? N(Integer.parseInt(s)) : new Double(s); }
-    public static final Number N(double d) { return (int)d == d ? N((int)d) : new Double(d); }
-    public static final Number N(long l) { return N((int)l); }
-
-    private static final Integer[] smallIntCache = new Integer[65535 / 4];
-    private static final Integer[] largeIntCache = new Integer[65535 / 4];
-    public static final Number N(int i) {
-        Integer ret = null;
-        int idx = i + smallIntCache.length / 2;
-        if (idx < smallIntCache.length && idx > 0) {
-            ret = smallIntCache[idx];
-            if (ret != null) return ret;
-        }
-        else ret = largeIntCache[Math.abs(idx % largeIntCache.length)];
-        if (ret == null || ret.intValue() != i) {
-            ret = new Integer(i);
-            if (idx < smallIntCache.length && idx > 0) smallIntCache[idx] = ret;
-            else largeIntCache[Math.abs(idx % largeIntCache.length)] = ret;
-        }
-        return ret;
-    }
-    
-    private static Enumeration emptyEnumeration = new Enumeration() {
-            public boolean hasMoreElements() { return false; }
-            public Object nextElement() { throw new NoSuchElementException(); }
-        };
-    
-    private Hash entries = null;
-
-    public static JS fromReader(String sourceName, int firstLine, Reader sourceCode) throws IOException {
-        return JSFunction._fromReader(sourceName, firstLine, sourceCode);
-    }
-
-    // HACK: caller can't know if the argument is a JSFunction or not...
-    public static JS cloneWithNewParentScope(JS j, JSScope s) {
-        return ((JSFunction)j)._cloneWithNewParentScope(s);
-    }
-
-
-    // Trap support //////////////////////////////////////////////////////////////////////////////
-
-    /** override and return true to allow placing traps on this object.
-     *  if isRead true, this is a read trap, otherwise write trap
-     **/
-    protected boolean isTrappable(Object name, boolean isRead) { return true; }
-
-    /** performs a put, triggering traps if present; traps are run in an unpauseable interpreter */
-    public void putAndTriggerTraps(Object key, Object value) throws JSExn {
-        Trap t = getTrap(key);
-        if (t != null) t.invoke(value);
-        else put(key, value);
-    }
-
-    /** performs a get, triggering traps if present; traps are run in an unpauseable interpreter */
-    public Object getAndTriggerTraps(Object key) throws JSExn {
-        Trap t = getTrap(key);
-        if (t != null) return t.invoke();
-        else return get(key);
-    }
-
-    /** retrieve a trap from the entries hash */
-    protected final Trap getTrap(Object key) {
-        return entries == null ? null : (Trap)entries.get(key, Trap.class);
-    }
-
-    /** retrieve a trap from the entries hash */
-    protected final void putTrap(Object key, Trap value) {
-        if (entries == null) entries = new Hash();
-        entries.put(key, Trap.class, value);
-    }
-
-    /** adds a trap, avoiding duplicates */
-    protected final void addTrap(Object name, JSFunction f) throws JSExn {
-        if (f.numFormalArgs > 1) throw new JSExn("traps must take either one argument (write) or no arguments (read)");
-        boolean isRead = f.numFormalArgs == 0;
-        if (!isTrappable(name, isRead)) throw new JSExn("not allowed "+(isRead?"read":"write")+" trap on property: "+name);
-        for(Trap t = getTrap(name); t != null; t = t.next) if (t.f == f) return;
-        putTrap(name, new Trap(this, name.toString(), f, (Trap)getTrap(name)));
-    }
-
-    /** deletes a trap, if present */
-    protected final void delTrap(Object name, JSFunction f) {
-        Trap t = (Trap)getTrap(name);
-        if (t == null) return;
-        if (t.f == f) { putTrap(t.name, t.next); return; }
-        for(; t.next != null; t = t.next) if (t.next.f == f) { t.next = t.next.next; return; }
-    }
-
-
-} 
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSArray.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSArray.java
deleted file mode 100644 (file)
index 8a70773..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] 
-package org.ibex.js; 
-
-import org.ibex.util.*; 
-import java.util.*;
-
-/** A JavaScript JSArray */
-public class JSArray extends JS {
-    private static final Object NULL = new Object();
-    
-    public JSArray() { }
-    public JSArray(int size) { setSize(size); }
-    
-    private static int intVal(Object o) {
-        if (o instanceof Number) {
-            int intVal = ((Number)o).intValue();
-            if (intVal == ((Number)o).doubleValue()) return intVal;
-            return Integer.MIN_VALUE;
-        }
-        if (!(o instanceof String)) return Integer.MIN_VALUE;
-        String s = (String)o;
-        for(int i=0; i<s.length(); i++) if (s.charAt(i) < '0' || s.charAt(i) > '9') return Integer.MIN_VALUE;
-        return Integer.parseInt(s);
-    }
-    
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-final String ccSwitch0 = (String)(method);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 3: { switch(ccSwitch0.charAt(0)) { case 'p': if ("pop".equals(ccSwitch0)) { if (true) do { {
-int oldSize = size();
-if(oldSize == 0) return null;
-return removeElementAt(oldSize-1);
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch0.charAt(0)) { case 'j': if ("join".equals(ccSwitch0)) { if (true) do { 
-return join(nargs == 0 ? "," : JS.toString(a0));
- } while(false); break SUCCESS; } break;  case 'p': if ("push".equals(ccSwitch0)) { if (true) do { {
-int oldSize = size();
-for(int i=0; i<nargs; i++) insertElementAt(i==0?a0:i==1?a1:i==2?a2:rest[i-3],oldSize+i);
-return N(oldSize + nargs);
-}
- } while(false); break SUCCESS; } break;  case 's': if ("sort".equals(ccSwitch0)) { if (true) do { 
-return sort(nargs < 1 ? null : a0);
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch0.charAt(0)) { case 's': { switch(ccSwitch0.charAt(1)) { case 'h': if ("shift".equals(ccSwitch0)) { if (true) do { 
-if(length() == 0) return null;
-return removeElementAt(0);
- } while(false); break SUCCESS; } break;  case 'l': if ("slice".equals(ccSwitch0)) { if (true) do { 
-int start = toInt(nargs < 1 ? null : a0);
-int end = nargs < 2 ? length() : toInt(a1);
-return slice(start, end);
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 6: { switch(ccSwitch0.charAt(0)) { case 's': if ("splice".equals(ccSwitch0)) { if (true) do { 
-JSArray array = new JSArray();
-for(int i=0; i<nargs; i++) array.addElement(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
-return splice(array);
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch0.charAt(0)) { case 'r': if ("reverse".equals(ccSwitch0)) { if (true) do { return reverse();
- } while(false); break SUCCESS; } break;  case 'u': if ("unshift".equals(ccSwitch0)) { if (true) do { 
-for(int i=0; i<nargs; i++) insertElementAt(i==0?a0:i==1?a1:i==2?a2:rest[i-3],i);
-return N(size());
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 't': if ("toString".equals(ccSwitch0)) { if (true) do { return join(",");
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        return super.callMethod(method, a0, a1, a2, rest, nargs);
-    }
-        
-    public Object get(Object key) throws JSExn {
-        int i = intVal(key);
-        if (i != Integer.MIN_VALUE) {
-            if (i < 0 || i >= size()) return null;
-            return elementAt(i);
-        }
-final String ccSwitch1 = (String)(key);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 3: { switch(ccSwitch1.charAt(0)) { case 'p': if ("pop".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch1.charAt(0)) { case 'j': if ("join".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'p': if ("push".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("sort".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch1.charAt(0)) { case 's': { switch(ccSwitch1.charAt(1)) { case 'h': if ("shift".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'l': if ("slice".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 6: { switch(ccSwitch1.charAt(0)) { case 'l': if ("length".equals(ccSwitch1)) { if (true) do { return N(size());
- } while(false); break SUCCESS; } break;  case 's': if ("splice".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch1.charAt(0)) { case 'r': if ("reverse".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': if ("unshift".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch1.charAt(0)) { case 't': if ("toString".equals(ccSwitch1)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        return super.get(key);
-    }
-
-    public void put(Object key, Object val) throws JSExn {
-        if (key.equals("length")) setSize(toInt(val));
-        int i = intVal(key);
-        if (i == Integer.MIN_VALUE)
-            super.put(key, val);
-        else {
-            int oldSize = size();
-            if(i < oldSize) {
-                setElementAt(val,i);
-            } else {
-                if(i > oldSize) setSize(i);
-                insertElementAt(val,i);
-            }
-        }
-    }
-
-    public Enumeration keys() {
-        return new Enumeration() {
-                private int n = size();
-                public boolean hasMoreElements() { return n > 0; }
-                public Object nextElement() {
-                    if(n == 0) throw new NoSuchElementException();
-                    return new Integer(--n);
-                }
-            };
-    }
-
-    public final void setSize(int newSize) {
-        // FEATURE: This could be done a lot more efficiently in BalancedTree
-        int oldSize = size();
-        for(int i=oldSize;i<newSize;i++) insertElementAt(null,i);
-        for(int i=oldSize-1;i>=newSize;i--) removeElementAt(i);
-    }
-    
-    public final int length() { return size(); }
-    public final Object elementAt(int i) { 
-        if(i < 0 || i >= size()) throw new ArrayIndexOutOfBoundsException(i);
-        Object o = getNode(i);
-        return o == NULL ? null : o;
-    }
-    public final void addElement(Object o) { 
-        insertNode(size(),o==null ? NULL : o);
-    }
-    public final void setElementAt(Object o, int i) {
-        if(i < 0 || i >= size()) throw new ArrayIndexOutOfBoundsException(i);
-        replaceNode(i,o==null ? NULL : o);
-    }
-    public final void insertElementAt(Object o, int i) {
-        if(i < 0 || i > size()) throw new ArrayIndexOutOfBoundsException(i);
-        insertNode(i,o==null ? NULL : o);
-    }
-    public final Object removeElementAt(int i) {
-        if(i < 0 || i >= size()) throw new ArrayIndexOutOfBoundsException(i);
-        Object o = deleteNode(i);
-        return o == NULL ? null : o;
-    }
-    
-    public final int size() { return treeSize(); }
-    public String typeName() { return "array"; }
-        
-    private Object join(String sep) {
-        int length = size();
-        if(length == 0) return "";
-        StringBuffer sb = new StringBuffer(64);
-        int i=0;
-        while(true) {
-            Object o = elementAt(i);
-            if(o != null) sb.append(JS.toString(o));
-            if(++i == length) break;
-            sb.append(sep);
-        }
-        return sb.toString();
-    }
-    
-    // FEATURE: Implement this more efficiently
-    private Object reverse() {
-        int size = size();
-        if(size < 2) return this;
-        Vec vec = toVec();
-        clear();
-        for(int i=size-1,j=0;i>=0;i--,j++) insertElementAt(vec.elementAt(i),j);
-        return this;
-    }
-    
-    private Object slice(int start, int end) {
-        int length = length();
-        if(start < 0) start = length+start;
-        if(end < 0) end = length+end;
-        if(start < 0) start = 0;
-        if(end < 0) end = 0;
-        if(start > length) start = length;
-        if(end > length) end = length;
-        JSArray a = new JSArray(end-start);
-        for(int i=0;i<end-start;i++)
-            a.setElementAt(elementAt(start+i),i);
-        return a;
-    }
-    
-    private static final Vec.CompareFunc defaultSort = new Vec.CompareFunc() {
-        public int compare(Object a, Object b) {
-            return JS.toString(a).compareTo(JS.toString(b));
-        }
-    };
-    private Object sort(Object tmp) throws JSExn {
-        Vec vec = toVec();
-        if(tmp instanceof JS) {
-            final JSArray funcArgs = new JSArray(2);
-            final JS jsFunc = (JS) tmp;
-            vec.sort(new Vec.CompareFunc() {
-                public int compare(Object a, Object b) {
-                    try {
-                        funcArgs.setElementAt(a,0);
-                        funcArgs.setElementAt(b,1);
-                        return JS.toInt(jsFunc.call(a, b, null, null, 2));
-                    } catch (Exception e) {
-                        // FIXME
-                        throw new JSRuntimeExn(e.toString());
-                    }
-                }
-            });
-        } else {
-            vec.sort(defaultSort);
-        }
-        setFromVec(vec);
-        return this;
-    }
-    
-    private Object splice(JSArray args) {
-        int oldLength = length();
-        int start = JS.toInt(args.length() < 1 ? null : args.elementAt(0));
-        int deleteCount = JS.toInt(args.length() < 2 ? null : args.elementAt(1));
-        int newCount = args.length() - 2;
-        if(newCount < 0) newCount = 0;
-        if(start < 0) start = oldLength+start;
-        if(start < 0) start = 0;
-        if(start > oldLength) start = oldLength;
-        if(deleteCount < 0) deleteCount = 0;
-        if(deleteCount > oldLength-start) deleteCount = oldLength-start;
-        int newLength = oldLength - deleteCount + newCount;
-        int lengthChange = newLength - oldLength;
-        JSArray ret = new JSArray(deleteCount);
-        for(int i=0;i<deleteCount;i++)
-            ret.setElementAt(elementAt(start+i),i);
-        if(lengthChange > 0) {
-            setSize(newLength);
-            for(int i=newLength-1;i>=start+newCount;i--)
-                setElementAt(elementAt(i-lengthChange),i);
-        } else if(lengthChange < 0) {
-            for(int i=start+newCount;i<newLength;i++)
-                setElementAt(elementAt(i-lengthChange),i);
-            setSize(newLength);
-        }
-        for(int i=0;i<newCount;i++)
-            setElementAt(args.elementAt(i+2),start+i);
-        return ret;
-    }
-    
-    protected Vec toVec() {
-        int count = size();
-        Vec vec = new Vec();
-        vec.setSize(count);
-        for(int i=0;i<count;i++) {
-            Object o = getNode(i);
-            vec.setElementAt(o == NULL ? null : o,i);
-        }
-        return vec;
-    }
-    
-    protected void setFromVec(Vec vec) {
-        int count = vec.size();
-        clear();
-        for(int i=0;i<count;i++) {
-            Object o = vec.elementAt(i);
-            insertNode(i,o==null ? NULL : o);
-        }
-    }
-    
-    public String toString() { return JS.toString(join(",")); }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSDate.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSDate.java
deleted file mode 100644 (file)
index 32f0cdd..0000000
+++ /dev/null
@@ -1,1253 +0,0 @@
-/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * The contents of this file are subject to the Netscape Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code is Rhino code, released
- * May 6, 1999.
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation.  Portions created by Netscape are
- * Copyright (C) 1997-1999 Netscape Communications Corporation. All
- * Rights Reserved.
- *
- * Contributor(s):
- * Norris Boyd
- * Mike McCabe
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU Public License (the "GPL"), in which case the
- * provisions of the GPL are applicable instead of those above.
- * If you wish to allow use of your version of this file only
- * under the terms of the GPL and not to allow others to use your
- * version of this file under the NPL, indicate your decision by
- * deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL.  If you do not delete
- * the provisions above, a recipient may use your version of this
- * file under either the NPL or the GPL.
- */
-
-package org.ibex.js;
-
-import java.text.DateFormat;
-
-/**
- * This class implements the Date native object.
- * See ECMA 15.9.
- * @author Mike McCabe
- * @author Adam Megacz (many modifications
- */
-public class JSDate extends JS {
-
-    public JSDate() {
-        if (thisTimeZone == null) {
-            // j.u.TimeZone is synchronized, so setting class statics from it
-            // should be OK.
-            thisTimeZone = java.util.TimeZone.getDefault();
-            LocalTZA = thisTimeZone.getRawOffset();
-        }
-    }
-
-    public String toString() { return date_format(date, FORMATSPEC_FULL); }
-
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        switch(nargs) {
-            case 0: {
-final String ccSwitch0 = (String)(method);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 6: { switch(ccSwitch0.charAt(0)) { case 'g': if ("getDay".equals(ccSwitch0)) { if (true) do { return N(WeekDay(LocalTime(date)));
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch0.charAt(0)) { case 'g': { switch(ccSwitch0.charAt(1)) { case 'e': { switch(ccSwitch0.charAt(2)) { case 't': { switch(ccSwitch0.charAt(3)) { case 'D': if ("getDate".equals(ccSwitch0)) { if (true) do { return N(DateFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  case 'T': if ("getTime".equals(ccSwitch0)) { if (true) do { return N(this.date);
- } while(false); break SUCCESS; } break;  case 'Y': if ("getYear".equals(ccSwitch0)) { if (true) do { return N(getYear(date));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 'v': if ("valueOf".equals(ccSwitch0)) { if (true) do { return N(this.date);
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 'g': { switch(ccSwitch0.charAt(1)) { case 'e': { switch(ccSwitch0.charAt(2)) { case 't': { switch(ccSwitch0.charAt(3)) { case 'H': if ("getHours".equals(ccSwitch0)) { if (true) do { return N(HourFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  case 'M': if ("getMonth".equals(ccSwitch0)) { if (true) do { return N(MonthFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 't': if ("toString".equals(ccSwitch0)) { if (true) do { return date_format(date, FORMATSPEC_FULL);
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch0.charAt(0)) { case 'g': if ("getUTCDay".equals(ccSwitch0)) { if (true) do { return N(WeekDay(date));
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch0.charAt(0)) { case 'g': { switch(ccSwitch0.charAt(1)) { case 'e': { switch(ccSwitch0.charAt(2)) { case 't': { switch(ccSwitch0.charAt(3)) { case 'M': if ("getMinutes".equals(ccSwitch0)) { if (true) do { return N(MinFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  case 'S': if ("getSeconds".equals(ccSwitch0)) { if (true) do { return N(SecFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  case 'U': if ("getUTCDate".equals(ccSwitch0)) { if (true) do { return N(DateFromTime(date));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 11: { switch(ccSwitch0.charAt(0)) { case 'g': { switch(ccSwitch0.charAt(1)) { case 'e': { switch(ccSwitch0.charAt(2)) { case 't': { switch(ccSwitch0.charAt(3)) { case 'F': if ("getFullYear".equals(ccSwitch0)) { if (true) do { return N(YearFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  case 'U': { switch(ccSwitch0.charAt(4)) { case 'T': { switch(ccSwitch0.charAt(5)) { case 'C': { switch(ccSwitch0.charAt(6)) { case 'H': if ("getUTCHours".equals(ccSwitch0)) { if (true) do { return N(HourFromTime(date));
- } while(false); break SUCCESS; } break;  case 'M': if ("getUTCMonth".equals(ccSwitch0)) { if (true) do { return N(MonthFromTime(date));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } case 't': if ("toUTCString".equals(ccSwitch0)) { if (true) do { return toUTCString(date);
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch0.charAt(0)) { case 't': { switch(ccSwitch0.charAt(1)) { case 'o': { switch(ccSwitch0.charAt(2)) { case 'D': if ("toDateString".equals(ccSwitch0)) { if (true) do { return date_format(date, FORMATSPEC_DATE);
- } while(false); break SUCCESS; } break;  case 'T': if ("toTimeString".equals(ccSwitch0)) { if (true) do { return date_format(date, FORMATSPEC_TIME);
- } while(false); break SUCCESS; } break;  } break; } } break; } }; break; }  case 13: { switch(ccSwitch0.charAt(0)) { case 'g': { switch(ccSwitch0.charAt(1)) { case 'e': { switch(ccSwitch0.charAt(2)) { case 't': { switch(ccSwitch0.charAt(3)) { case 'U': { switch(ccSwitch0.charAt(4)) { case 'T': { switch(ccSwitch0.charAt(5)) { case 'C': { switch(ccSwitch0.charAt(6)) { case 'M': if ("getUTCMinutes".equals(ccSwitch0)) { if (true) do { return N(MinFromTime(date));
- } while(false); break SUCCESS; } break;  case 'S': if ("getUTCSeconds".equals(ccSwitch0)) { if (true) do { return N(SecFromTime(date));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 14: { switch(ccSwitch0.charAt(0)) { case 'g': if ("getUTCFullYear".equals(ccSwitch0)) { if (true) do { return N(YearFromTime(date));
- } while(false); break SUCCESS; } break;  case 't': if ("toLocaleString".equals(ccSwitch0)) { if (true) do { return toLocaleString(date);
- } while(false); break SUCCESS; } break;  }; break; }  case 15: { switch(ccSwitch0.charAt(0)) { case 'g': if ("getMilliseconds".equals(ccSwitch0)) { if (true) do { return N(msFromTime(LocalTime(date)));
- } while(false); break SUCCESS; } break;  }; break; }  case 17: { switch(ccSwitch0.charAt(0)) { case 'g': if ("getTimezoneOffset".equals(ccSwitch0)) { if (true) do { return N(getTimezoneOffset(date));
- } while(false); break SUCCESS; } break;  }; break; }  case 18: { switch(ccSwitch0.charAt(0)) { case 'g': if ("getUTCMilliseconds".equals(ccSwitch0)) { if (true) do { return N(msFromTime(date));
- } while(false); break SUCCESS; } break;  case 't': { switch(ccSwitch0.charAt(1)) { case 'o': { switch(ccSwitch0.charAt(2)) { case 'L': { switch(ccSwitch0.charAt(3)) { case 'o': { switch(ccSwitch0.charAt(4)) { case 'c': { switch(ccSwitch0.charAt(5)) { case 'a': { switch(ccSwitch0.charAt(6)) { case 'l': { switch(ccSwitch0.charAt(7)) { case 'e': { switch(ccSwitch0.charAt(8)) { case 'D': if ("toLocaleDateString".equals(ccSwitch0)) { if (true) do { return toLocaleDateString(date);
- } while(false); break SUCCESS; } break;  case 'T': if ("toLocaleTimeString".equals(ccSwitch0)) { if (true) do { return toLocaleTimeString(date);
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  } /* switch */  } while(false); /* OUTER */
-                return super.callMethod(method, a0, a1, a2, rest, nargs);
-            }
-            case 1: {
-final String ccSwitch1 = (String)(method);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 7: { switch(ccSwitch1.charAt(0)) { case 's': { switch(ccSwitch1.charAt(1)) { case 'e': { switch(ccSwitch1.charAt(2)) { case 't': { switch(ccSwitch1.charAt(3)) { case 'T': if ("setTime".equals(ccSwitch1)) { if (true) do { return N(this.setTime(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 'Y': if ("setYear".equals(ccSwitch1)) { if (true) do { return N(this.setYear(toDouble(a0)));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  } /* switch */  } while(false); /* OUTER */
-                // fall through
-            }
-            default: {
-                Object[] args = new Object[nargs];
-                for(int i=0; i<nargs; i++) args[i] = i==0 ? a0 : i==1 ? a1 : i==2 ? a2 : rest[i-3];
-final String ccSwitch2 = (String)(method);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 7: { switch(ccSwitch2.charAt(0)) { case 's': if ("setDate".equals(ccSwitch2)) { if (true) do { return N(this.makeDate(args, 1, true));
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch2.charAt(0)) { case 's': { switch(ccSwitch2.charAt(1)) { case 'e': { switch(ccSwitch2.charAt(2)) { case 't': { switch(ccSwitch2.charAt(3)) { case 'H': if ("setHours".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 4, true));
- } while(false); break SUCCESS; } break;  case 'M': if ("setMonth".equals(ccSwitch2)) { if (true) do { return N(this.makeDate(args, 2, true));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 10: { switch(ccSwitch2.charAt(0)) { case 's': { switch(ccSwitch2.charAt(1)) { case 'e': { switch(ccSwitch2.charAt(2)) { case 't': { switch(ccSwitch2.charAt(3)) { case 'M': if ("setMinutes".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 3, true));
- } while(false); break SUCCESS; } break;  case 'S': if ("setSeconds".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 2, true));
- } while(false); break SUCCESS; } break;  case 'U': if ("setUTCDate".equals(ccSwitch2)) { if (true) do { return N(this.makeDate(args, 1, false));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 11: { switch(ccSwitch2.charAt(0)) { case 's': { switch(ccSwitch2.charAt(1)) { case 'e': { switch(ccSwitch2.charAt(2)) { case 't': { switch(ccSwitch2.charAt(3)) { case 'F': if ("setFullYear".equals(ccSwitch2)) { if (true) do { return N(this.makeDate(args, 3, true));
- } while(false); break SUCCESS; } break;  case 'U': { switch(ccSwitch2.charAt(4)) { case 'T': { switch(ccSwitch2.charAt(5)) { case 'C': { switch(ccSwitch2.charAt(6)) { case 'H': if ("setUTCHours".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 4, false));
- } while(false); break SUCCESS; } break;  case 'M': if ("setUTCMonth".equals(ccSwitch2)) { if (true) do { return N(this.makeDate(args, 2, false));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 13: { switch(ccSwitch2.charAt(0)) { case 's': { switch(ccSwitch2.charAt(1)) { case 'e': { switch(ccSwitch2.charAt(2)) { case 't': { switch(ccSwitch2.charAt(3)) { case 'U': { switch(ccSwitch2.charAt(4)) { case 'T': { switch(ccSwitch2.charAt(5)) { case 'C': { switch(ccSwitch2.charAt(6)) { case 'M': if ("setUTCMinutes".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 3, false));
- } while(false); break SUCCESS; } break;  case 'S': if ("setUTCSeconds".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 2, false));
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 14: { switch(ccSwitch2.charAt(0)) { case 's': if ("setUTCFullYear".equals(ccSwitch2)) { if (true) do { return N(this.makeDate(args, 3, false));
- } while(false); break SUCCESS; } break;  }; break; }  case 15: { switch(ccSwitch2.charAt(0)) { case 's': if ("setMilliseconds".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 1, true));
- } while(false); break SUCCESS; } break;  }; break; }  case 18: { switch(ccSwitch2.charAt(0)) { case 's': if ("setUTCMilliseconds".equals(ccSwitch2)) { if (true) do { return N(this.makeTime(args, 1, false));
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-            }
-        }
-        return super.callMethod(method, a0, a1, a2, rest, nargs);
-    }
-
-    public Object get(Object key) throws JSExn {
-final String ccSwitch3 = (String)(key);  SUCCESS:do { switch(ccSwitch3.length()) {
-case 6: { switch(ccSwitch3.charAt(0)) { case 'g': if ("getDay".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch3.charAt(0)) { case 'g': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'D': if ("getDate".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'T': if ("getTime".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'Y': if ("getYear".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 's': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'D': if ("setDate".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'T': if ("setTime".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'Y': if ("setYear".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 'v': if ("valueOf".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch3.charAt(0)) { case 'g': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'H': if ("getHours".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'M': if ("getMonth".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 's': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'H': if ("setHours".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'M': if ("setMonth".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 't': if ("toString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch3.charAt(0)) { case 'g': if ("getUTCDay".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch3.charAt(0)) { case 'g': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'M': if ("getMinutes".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'S': if ("getSeconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'U': if ("getUTCDate".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } case 's': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'M': if ("setMinutes".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'S': if ("setSeconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'U': if ("setUTCDate".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } }; break; }  case 11: { switch(ccSwitch3.charAt(0)) { case 'g': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'F': if ("getFullYear".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'U': { switch(ccSwitch3.charAt(4)) { case 'T': { switch(ccSwitch3.charAt(5)) { case 'C': { switch(ccSwitch3.charAt(6)) { case 'H': if ("getUTCHours".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'M': if ("getUTCMonth".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } case 's': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'F': if ("setFullYear".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'U': { switch(ccSwitch3.charAt(4)) { case 'T': { switch(ccSwitch3.charAt(5)) { case 'C': { switch(ccSwitch3.charAt(6)) { case 'H': if ("setUTCHours".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'M': if ("setUTCMonth".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } case 't': if ("toUTCString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch3.charAt(0)) { case 't': { switch(ccSwitch3.charAt(1)) { case 'o': { switch(ccSwitch3.charAt(2)) { case 'D': if ("toDateString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'T': if ("toTimeString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } }; break; }  case 13: { switch(ccSwitch3.charAt(0)) { case 'g': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'U': { switch(ccSwitch3.charAt(4)) { case 'T': { switch(ccSwitch3.charAt(5)) { case 'C': { switch(ccSwitch3.charAt(6)) { case 'M': if ("getUTCMinutes".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'S': if ("getUTCSeconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } case 's': { switch(ccSwitch3.charAt(1)) { case 'e': { switch(ccSwitch3.charAt(2)) { case 't': { switch(ccSwitch3.charAt(3)) { case 'U': { switch(ccSwitch3.charAt(4)) { case 'T': { switch(ccSwitch3.charAt(5)) { case 'C': { switch(ccSwitch3.charAt(6)) { case 'M': if ("setUTCMinutes".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'S': if ("setUTCSeconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  case 14: { switch(ccSwitch3.charAt(0)) { case 'g': if ("getUTCFullYear".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("setUTCFullYear".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 't': if ("toLocaleString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 15: { switch(ccSwitch3.charAt(0)) { case 'g': if ("getMilliseconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("setMilliseconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 17: { switch(ccSwitch3.charAt(0)) { case 'g': if ("getTimezoneOffset".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 18: { switch(ccSwitch3.charAt(0)) { case 'g': if ("getUTCMilliseconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("setUTCMilliseconds".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 't': { switch(ccSwitch3.charAt(1)) { case 'o': { switch(ccSwitch3.charAt(2)) { case 'L': { switch(ccSwitch3.charAt(3)) { case 'o': { switch(ccSwitch3.charAt(4)) { case 'c': { switch(ccSwitch3.charAt(5)) { case 'a': { switch(ccSwitch3.charAt(6)) { case 'l': { switch(ccSwitch3.charAt(7)) { case 'e': { switch(ccSwitch3.charAt(8)) { case 'D': if ("toLocaleDateString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'T': if ("toLocaleTimeString".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } } break; } } break; } } break; } } break; } } break; } } break; } } break; } }; break; }  } /* switch */  } while(false); /* OUTER */
-        return super.get(key);
-    }
-
-    /* ECMA helper functions */
-
-    private static final double HalfTimeDomain = 8.64e15;
-    private static final double HoursPerDay    = 24.0;
-    private static final double MinutesPerHour = 60.0;
-    private static final double SecondsPerMinute = 60.0;
-    private static final double msPerSecond    = 1000.0;
-    private static final double MinutesPerDay  = (HoursPerDay * MinutesPerHour);
-    private static final double SecondsPerDay  = (MinutesPerDay * SecondsPerMinute);
-    private static final double SecondsPerHour = (MinutesPerHour * SecondsPerMinute);
-    private static final double msPerDay       = (SecondsPerDay * msPerSecond);
-    private static final double msPerHour      = (SecondsPerHour * msPerSecond);
-    private static final double msPerMinute    = (SecondsPerMinute * msPerSecond);
-
-    private static double Day(double t) {
-        return java.lang.Math.floor(t / msPerDay);
-    }
-
-    private static double TimeWithinDay(double t) {
-        double result;
-        result = t % msPerDay;
-        if (result < 0)
-            result += msPerDay;
-        return result;
-    }
-
-    private static int DaysInYear(int y) {
-        if (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))
-            return 366;
-        else
-            return 365;
-    }
-
-
-    /* math here has to be f.p, because we need
-     *  floor((1968 - 1969) / 4) == -1
-     */
-    private static double DayFromYear(double y) {
-        return ((365 * ((y)-1970) + java.lang.Math.floor(((y)-1969)/4.0)
-                 - java.lang.Math.floor(((y)-1901)/100.0) + java.lang.Math.floor(((y)-1601)/400.0)));
-    }
-
-    private static double TimeFromYear(double y) {
-        return DayFromYear(y) * msPerDay;
-    }
-
-    private static int YearFromTime(double t) {
-        int lo = (int) java.lang.Math.floor((t / msPerDay) / 366) + 1970;
-        int hi = (int) java.lang.Math.floor((t / msPerDay) / 365) + 1970;
-        int mid;
-
-        /* above doesn't work for negative dates... */
-        if (hi < lo) {
-            int temp = lo;
-            lo = hi;
-            hi = temp;
-        }
-
-        /* Use a simple binary search algorithm to find the right
-           year.  This seems like brute force... but the computation
-           of hi and lo years above lands within one year of the
-           correct answer for years within a thousand years of
-           1970; the loop below only requires six iterations
-           for year 270000. */
-        while (hi > lo) {
-            mid = (hi + lo) / 2;
-            if (TimeFromYear(mid) > t) {
-                hi = mid - 1;
-            } else {
-                if (TimeFromYear(mid) <= t) {
-                    int temp = mid + 1;
-                    if (TimeFromYear(temp) > t) {
-                        return mid;
-                    }
-                    lo = mid + 1;
-                }
-            }
-        }
-        return lo;
-    }
-
-    private static boolean InLeapYear(double t) {
-        return DaysInYear(YearFromTime(t)) == 366;
-    }
-
-    private static int DayWithinYear(double t) {
-        int year = YearFromTime(t);
-        return (int) (Day(t) - DayFromYear(year));
-    }
-    /*
-     * The following array contains the day of year for the first day of
-     * each month, where index 0 is January, and day 0 is January 1.
-     */
-
-    private static double DayFromMonth(int m, boolean leap) {
-        int day = m * 30;
-
-        if (m >= 7) { day += m / 2 - 1; }
-        else if (m >= 2) { day += (m - 1) / 2 - 1; }
-        else { day += m; }
-
-        if (leap && m >= 2) { ++day; }
-
-        return day;
-    }
-
-    private static int MonthFromTime(double t) {
-        int d, step;
-
-        d = DayWithinYear(t);
-
-        if (d < (step = 31))
-            return 0;
-
-        // Originally coded as step += (InLeapYear(t) ? 29 : 28);
-        // but some jits always returned 28!
-        if (InLeapYear(t))
-            step += 29;
-        else
-            step += 28;
-
-        if (d < step)
-            return 1;
-        if (d < (step += 31))
-            return 2;
-        if (d < (step += 30))
-            return 3;
-        if (d < (step += 31))
-            return 4;
-        if (d < (step += 30))
-            return 5;
-        if (d < (step += 31))
-            return 6;
-        if (d < (step += 31))
-            return 7;
-        if (d < (step += 30))
-            return 8;
-        if (d < (step += 31))
-            return 9;
-        if (d < (step += 30))
-            return 10;
-        return 11;
-    }
-
-    private static int DateFromTime(double t) {
-        int d, step, next;
-
-        d = DayWithinYear(t);
-        if (d <= (next = 30))
-            return d + 1;
-        step = next;
-
-        // Originally coded as next += (InLeapYear(t) ? 29 : 28);
-        // but some jits always returned 28!
-        if (InLeapYear(t))
-            next += 29;
-        else
-            next += 28;
-
-        if (d <= next)
-            return d - step;
-        step = next;
-        if (d <= (next += 31))
-            return d - step;
-        step = next;
-        if (d <= (next += 30))
-            return d - step;
-        step = next;
-        if (d <= (next += 31))
-            return d - step;
-        step = next;
-        if (d <= (next += 30))
-            return d - step;
-        step = next;
-        if (d <= (next += 31))
-            return d - step;
-        step = next;
-        if (d <= (next += 31))
-            return d - step;
-        step = next;
-        if (d <= (next += 30))
-            return d - step;
-        step = next;
-        if (d <= (next += 31))
-            return d - step;
-        step = next;
-        if (d <= (next += 30))
-            return d - step;
-        step = next;
-
-        return d - step;
-    }
-
-    private static int WeekDay(double t) {
-        double result;
-        result = Day(t) + 4;
-        result = result % 7;
-        if (result < 0)
-            result += 7;
-        return (int) result;
-    }
-
-    private static double Now() {
-        return (double) System.currentTimeMillis();
-    }
-
-    /* Should be possible to determine the need for this dynamically
-     * if we go with the workaround... I'm not using it now, because I
-     * can't think of any clean way to make toLocaleString() and the
-     * time zone (comment) in toString match the generated string
-     * values.  Currently it's wrong-but-consistent in all but the
-     * most recent betas of the JRE - seems to work in 1.1.7.
-     */
-    private final static boolean TZO_WORKAROUND = false;
-    private static double DaylightSavingTA(double t) {
-        if (!TZO_WORKAROUND) {
-            java.util.Date date = new java.util.Date((long) t);
-            if (thisTimeZone.inDaylightTime(date))
-                return msPerHour;
-            else
-                return 0;
-        } else {
-            /* Use getOffset if inDaylightTime() is broken, because it
-             * seems to work acceptably.  We don't switch over to it
-             * entirely, because it requires (expensive) exploded date arguments,
-             * and the api makes it impossible to handle dst
-             * changeovers cleanly.
-             */
-
-            // Hardcode the assumption that the changeover always
-            // happens at 2:00 AM:
-            t += LocalTZA + (HourFromTime(t) <= 2 ? msPerHour : 0);
-
-            int year = YearFromTime(t);
-            double offset = thisTimeZone.getOffset(year > 0 ? 1 : 0,
-                                                   year,
-                                                   MonthFromTime(t),
-                                                   DateFromTime(t),
-                                                   WeekDay(t),
-                                                   (int)TimeWithinDay(t));
-
-            if ((offset - LocalTZA) != 0)
-                return msPerHour;
-            else
-                return 0;
-            //         return offset - LocalTZA;
-        }
-    }
-
-    private static double LocalTime(double t) {
-        return t + LocalTZA + DaylightSavingTA(t);
-    }
-
-    public static double internalUTC(double t) {
-        return t - LocalTZA - DaylightSavingTA(t - LocalTZA);
-    }
-
-    private static int HourFromTime(double t) {
-        double result;
-        result = java.lang.Math.floor(t / msPerHour) % HoursPerDay;
-        if (result < 0)
-            result += HoursPerDay;
-        return (int) result;
-    }
-
-    private static int MinFromTime(double t) {
-        double result;
-        result = java.lang.Math.floor(t / msPerMinute) % MinutesPerHour;
-        if (result < 0)
-            result += MinutesPerHour;
-        return (int) result;
-    }
-
-    private static int SecFromTime(double t) {
-        double result;
-        result = java.lang.Math.floor(t / msPerSecond) % SecondsPerMinute;
-        if (result < 0)
-            result += SecondsPerMinute;
-        return (int) result;
-    }
-
-    private static int msFromTime(double t) {
-        double result;
-        result =  t % msPerSecond;
-        if (result < 0)
-            result += msPerSecond;
-        return (int) result;
-    }
-
-    private static double MakeTime(double hour, double min,
-                                   double sec, double ms)
-    {
-        return ((hour * MinutesPerHour + min) * SecondsPerMinute + sec)
-            * msPerSecond + ms;
-    }
-
-    private static double MakeDay(double year, double month, double date) {
-        double result;
-        boolean leap;
-        double yearday;
-        double monthday;
-
-        year += java.lang.Math.floor(month / 12);
-
-        month = month % 12;
-        if (month < 0)
-            month += 12;
-
-        leap = (DaysInYear((int) year) == 366);
-
-        yearday = java.lang.Math.floor(TimeFromYear(year) / msPerDay);
-        monthday = DayFromMonth((int) month, leap);
-
-        result = yearday
-            + monthday
-            + date - 1;
-        return result;
-    }
-
-    private static double MakeDate(double day, double time) {
-        return day * msPerDay + time;
-    }
-
-    private static double TimeClip(double d) {
-        if (d != d ||
-            d == Double.POSITIVE_INFINITY ||
-            d == Double.NEGATIVE_INFINITY ||
-            java.lang.Math.abs(d) > HalfTimeDomain)
-        {
-            return Double.NaN;
-        }
-        if (d > 0.0)
-            return java.lang.Math.floor(d + 0.);
-        else
-            return java.lang.Math.ceil(d + 0.);
-    }
-
-    /* end of ECMA helper functions */
-
-    /* find UTC time from given date... no 1900 correction! */
-    public static double date_msecFromDate(double year, double mon,
-                                            double mday, double hour,
-                                            double min, double sec,
-                                            double msec)
-    {
-        double day;
-        double time;
-        double result;
-
-        day = MakeDay(year, mon, mday);
-        time = MakeTime(hour, min, sec, msec);
-        result = MakeDate(day, time);
-        return result;
-    }
-
-
-    private static final int MAXARGS = 7;
-    private static double jsStaticJSFunction_UTC(Object[] args) {
-        double array[] = new double[MAXARGS];
-        int loop;
-        double d;
-
-        for (loop = 0; loop < MAXARGS; loop++) {
-            if (loop < args.length) {
-                d = _toNumber(args[loop]);
-                if (d != d || Double.isInfinite(d)) {
-                    return Double.NaN;
-                }
-                array[loop] = toDouble(args[loop]);
-            } else {
-                array[loop] = 0;
-            }
-        }
-
-        /* adjust 2-digit years into the 20th century */
-        if (array[0] >= 0 && array[0] <= 99)
-            array[0] += 1900;
-
-            /* if we got a 0 for 'date' (which is out of range)
-             * pretend it's a 1.  (So Date.UTC(1972, 5) works) */
-        if (array[2] < 1)
-            array[2] = 1;
-
-        d = date_msecFromDate(array[0], array[1], array[2],
-                              array[3], array[4], array[5], array[6]);
-        d = TimeClip(d);
-        return d;
-        //        return N(d);
-    }
-
-    /*
-     * Use ported code from jsdate.c rather than the locale-specific
-     * date-parsing code from Java, to keep js and rhino consistent.
-     * Is this the right strategy?
-     */
-
-    /* for use by date_parse */
-
-    /* replace this with byte arrays?  Cheaper? */
-    private static String wtb[] = {
-        "am", "pm",
-        "monday", "tuesday", "wednesday", "thursday", "friday",
-        "saturday", "sunday",
-        "january", "february", "march", "april", "may", "june",
-        "july", "august", "september", "october", "november", "december",
-        "gmt", "ut", "utc", "est", "edt", "cst", "cdt",
-        "mst", "mdt", "pst", "pdt"
-        /* time zone table needs to be expanded */
-    };
-
-    private static int ttb[] = {
-        -1, -2, 0, 0, 0, 0, 0, 0, 0,     /* AM/PM */
-        2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
-        10000 + 0, 10000 + 0, 10000 + 0, /* UT/UTC */
-        10000 + 5 * 60, 10000 + 4 * 60,  /* EDT */
-        10000 + 6 * 60, 10000 + 5 * 60,
-        10000 + 7 * 60, 10000 + 6 * 60,
-        10000 + 8 * 60, 10000 + 7 * 60
-    };
-
-    /* helper for date_parse */
-    private static boolean date_regionMatches(String s1, int s1off,
-                                              String s2, int s2off,
-                                              int count)
-    {
-        boolean result = false;
-        /* return true if matches, otherwise, false */
-        int s1len = s1.length();
-        int s2len = s2.length();
-
-        while (count > 0 && s1off < s1len && s2off < s2len) {
-            if (Character.toLowerCase(s1.charAt(s1off)) !=
-                Character.toLowerCase(s2.charAt(s2off)))
-                break;
-            s1off++;
-            s2off++;
-            count--;
-        }
-
-        if (count == 0) {
-            result = true;
-        }
-        return result;
-    }
-
-    private static double date_parseString(String s) {
-        double msec;
-
-        int year = -1;
-        int mon = -1;
-        int mday = -1;
-        int hour = -1;
-        int min = -1;
-        int sec = -1;
-        char c = 0;
-        char si = 0;
-        int i = 0;
-        int n = -1;
-        double tzoffset = -1;
-        char prevc = 0;
-        int limit = 0;
-        boolean seenplusminus = false;
-
-        if (s == null)  // ??? Will s be null?
-            return Double.NaN;
-        limit = s.length();
-        while (i < limit) {
-            c = s.charAt(i);
-            i++;
-            if (c <= ' ' || c == ',' || c == '-') {
-                if (i < limit) {
-                    si = s.charAt(i);
-                    if (c == '-' && '0' <= si && si <= '9') {
-                        prevc = c;
-                    }
-                }
-                continue;
-            }
-            if (c == '(') { /* comments) */
-                int depth = 1;
-                while (i < limit) {
-                    c = s.charAt(i);
-                    i++;
-                    if (c == '(')
-                        depth++;
-                    else if (c == ')')
-                        if (--depth <= 0)
-                            break;
-                }
-                continue;
-            }
-            if ('0' <= c && c <= '9') {
-                n = c - '0';
-                while (i < limit && '0' <= (c = s.charAt(i)) && c <= '9') {
-                    n = n * 10 + c - '0';
-                    i++;
-                }
-
-                /* allow TZA before the year, so
-                 * 'Wed Nov 05 21:49:11 GMT-0800 1997'
-                 * works */
-
-                /* uses of seenplusminus allow : in TZA, so Java
-                 * no-timezone style of GMT+4:30 works
-                 */
-                if ((prevc == '+' || prevc == '-')/*  && year>=0 */) {
-                    /* make ':' case below change tzoffset */
-                    seenplusminus = true;
-
-                    /* offset */
-                    if (n < 24)
-                        n = n * 60; /* EG. "GMT-3" */
-                    else
-                        n = n % 100 + n / 100 * 60; /* eg "GMT-0430" */
-                    if (prevc == '+')       /* plus means east of GMT */
-                        n = -n;
-                    if (tzoffset != 0 && tzoffset != -1)
-                        return Double.NaN;
-                    tzoffset = n;
-                } else if (n >= 70  ||
-                           (prevc == '/' && mon >= 0 && mday >= 0 && year < 0)) {
-                    if (year >= 0)
-                        return Double.NaN;
-                    else if (c <= ' ' || c == ',' || c == '/' || i >= limit)
-                        year = n < 100 ? n + 1900 : n;
-                    else
-                        return Double.NaN;
-                } else if (c == ':') {
-                    if (hour < 0)
-                        hour = /*byte*/ n;
-                    else if (min < 0)
-                        min = /*byte*/ n;
-                    else
-                        return Double.NaN;
-                } else if (c == '/') {
-                    if (mon < 0)
-                        mon = /*byte*/ n-1;
-                    else if (mday < 0)
-                        mday = /*byte*/ n;
-                    else
-                        return Double.NaN;
-                } else if (i < limit && c != ',' && c > ' ' && c != '-') {
-                    return Double.NaN;
-                } else if (seenplusminus && n < 60) {  /* handle GMT-3:30 */
-                    if (tzoffset < 0)
-                        tzoffset -= n;
-                    else
-                        tzoffset += n;
-                } else if (hour >= 0 && min < 0) {
-                    min = /*byte*/ n;
-                } else if (min >= 0 && sec < 0) {
-                    sec = /*byte*/ n;
-                } else if (mday < 0) {
-                    mday = /*byte*/ n;
-                } else {
-                    return Double.NaN;
-                }
-                prevc = 0;
-            } else if (c == '/' || c == ':' || c == '+' || c == '-') {
-                prevc = c;
-            } else {
-                int st = i - 1;
-                int k;
-                while (i < limit) {
-                    c = s.charAt(i);
-                    if (!(('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')))
-                        break;
-                    i++;
-                }
-                if (i <= st + 1)
-                    return Double.NaN;
-                for (k = wtb.length; --k >= 0;)
-                    if (date_regionMatches(wtb[k], 0, s, st, i-st)) {
-                        int action = ttb[k];
-                        if (action != 0) {
-                            if (action < 0) {
-                                /*
-                                 * AM/PM. Count 12:30 AM as 00:30, 12:30 PM as
-                                 * 12:30, instead of blindly adding 12 if PM.
-                                 */
-                                if (hour > 12 || hour < 0) {
-                                    return Double.NaN;
-                                } else {
-                                    if (action == -1 && hour == 12) { // am
-                                        hour = 0;
-                                    } else if (action == -2 && hour != 12) {// pm
-                                        hour += 12;
-                                    }
-                                }
-                            } else if (action <= 13) { /* month! */
-                                if (mon < 0) {
-                                    mon = /*byte*/ (action - 2);
-                                } else {
-                                    return Double.NaN;
-                                }
-                            } else {
-                                tzoffset = action - 10000;
-                            }
-                        }
-                        break;
-                    }
-                if (k < 0)
-                    return Double.NaN;
-                prevc = 0;
-            }
-        }
-        if (year < 0 || mon < 0 || mday < 0)
-            return Double.NaN;
-        if (sec < 0)
-            sec = 0;
-        if (min < 0)
-            min = 0;
-        if (hour < 0)
-            hour = 0;
-        if (tzoffset == -1) { /* no time zone specified, have to use local */
-            double time;
-            time = date_msecFromDate(year, mon, mday, hour, min, sec, 0);
-            return internalUTC(time);
-        }
-
-        msec = date_msecFromDate(year, mon, mday, hour, min, sec, 0);
-        msec += tzoffset * msPerMinute;
-        return msec;
-    }
-
-    private static double jsStaticJSFunction_parse(String s) {
-        return date_parseString(s);
-    }
-
-    private static final int FORMATSPEC_FULL = 0;
-    private static final int FORMATSPEC_DATE = 1;
-    private static final int FORMATSPEC_TIME = 2;
-
-    private static String date_format(double t, int format) {
-        if (t != t)
-            return NaN_date_str;
-
-        StringBuffer result = new StringBuffer(60);
-        double local = LocalTime(t);
-
-        /* offset from GMT in minutes.  The offset includes daylight savings,
-           if it applies. */
-        int minutes = (int) java.lang.Math.floor((LocalTZA + DaylightSavingTA(t))
-                                       / msPerMinute);
-        /* map 510 minutes to 0830 hours */
-        int offset = (minutes / 60) * 100 + minutes % 60;
-
-        String dateStr = Integer.toString(DateFromTime(local));
-        String hourStr = Integer.toString(HourFromTime(local));
-        String minStr = Integer.toString(MinFromTime(local));
-        String secStr = Integer.toString(SecFromTime(local));
-        String offsetStr = Integer.toString(offset > 0 ? offset : -offset);
-        int year = YearFromTime(local);
-        String yearStr = Integer.toString(year > 0 ? year : -year);
-
-        /* Tue Oct 31 09:41:40 GMT-0800 (PST) 2000 */
-        /* Tue Oct 31 2000 */
-        /* 09:41:40 GMT-0800 (PST) */
-
-        if (format != FORMATSPEC_TIME) {
-            result.append(days[WeekDay(local)]);
-            result.append(' ');
-            result.append(months[MonthFromTime(local)]);
-            if (dateStr.length() == 1)
-                result.append(" 0");
-            else
-                result.append(' ');
-            result.append(dateStr);
-            result.append(' ');
-        }
-
-        if (format != FORMATSPEC_DATE) {
-            if (hourStr.length() == 1)
-                result.append('0');
-            result.append(hourStr);
-            if (minStr.length() == 1)
-                result.append(":0");
-            else
-                result.append(':');
-            result.append(minStr);
-            if (secStr.length() == 1)
-                result.append(":0");
-            else
-                result.append(':');
-            result.append(secStr);
-            if (offset > 0)
-                result.append(" GMT+");
-            else
-                result.append(" GMT-");
-            for (int i = offsetStr.length(); i < 4; i++)
-                result.append('0');
-            result.append(offsetStr);
-
-            if (timeZoneFormatter == null)
-                timeZoneFormatter = new java.text.SimpleDateFormat("zzz");
-
-            if (timeZoneFormatter != null) {
-                result.append(" (");
-                java.util.Date date = new java.util.Date((long) t);
-                result.append(timeZoneFormatter.format(date));
-                result.append(')');
-            }
-            if (format != FORMATSPEC_TIME)
-                result.append(' ');
-        }
-
-        if (format != FORMATSPEC_TIME) {
-            if (year < 0)
-                result.append('-');
-            for (int i = yearStr.length(); i < 4; i++)
-                result.append('0');
-            result.append(yearStr);
-        }
-
-        return result.toString();
-    }
-
-    private static double _toNumber(Object o) { return JS.toDouble(o); }
-    private static double _toNumber(Object[] o, int index) { return JS.toDouble(o[index]); }
-    private static double toDouble(double d) { return d; }
-
-    public JSDate(Object a0, Object a1, Object a2, Object[] rest, int nargs) {
-
-        JSDate obj = this;
-        switch (nargs) {
-            case 0: {
-                obj.date = Now();
-                return;
-            }
-            case 1: {
-                double date;
-                if (a0 instanceof JS)
-                    a0 = ((JS) a0).toString();
-                if (!(a0 instanceof String)) {
-                    // if it's not a string, use it as a millisecond date
-                    date = _toNumber(a0);
-                } else {
-                    // it's a string; parse it.
-                    String str = (String) a0;
-                    date = date_parseString(str);
-                }
-                obj.date = TimeClip(date);
-                return;
-            }
-            default: {
-                // multiple arguments; year, month, day etc.
-                double array[] = new double[MAXARGS];
-                array[0] = toDouble(a0);
-                array[1] = toDouble(a1);
-                if (nargs >= 2) array[2] = toDouble(a2);
-                for(int i=0; i<nargs; i++) {
-                    double d = _toNumber(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
-                    if (d != d || Double.isInfinite(d)) {
-                        obj.date = Double.NaN;
-                        return;
-                    }
-                    array[i] = d;
-                }
-                
-                /* adjust 2-digit years into the 20th century */
-                if (array[0] >= 0 && array[0] <= 99)
-                    array[0] += 1900;
-                
-                /* if we got a 0 for 'date' (which is out of range)
-                 * pretend it's a 1 */
-                if (array[2] < 1)
-                    array[2] = 1;
-                
-                double day = MakeDay(array[0], array[1], array[2]);
-                double time = MakeTime(array[3], array[4], array[5], array[6]);
-                time = MakeDate(day, time);
-                time = internalUTC(time);
-                obj.date = TimeClip(time);
-                
-                return;
-            }
-        }
-    }
-
-    /* constants for toString, toUTCString */
-    private static String NaN_date_str = "Invalid Date";
-
-    private static String[] days = {
-        "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
-    };
-
-    private static String[] months = {
-        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
-        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-    };
-
-    private static String toLocale_helper(double t,
-                                          java.text.DateFormat formatter)
-    {
-        if (t != t)
-            return NaN_date_str;
-
-        java.util.Date tempdate = new java.util.Date((long) t);
-        return formatter.format(tempdate);
-    }
-
-    private static String toLocaleString(double date) {
-        if (localeDateTimeFormatter == null)
-            localeDateTimeFormatter =
-                DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
-
-        return toLocale_helper(date, localeDateTimeFormatter);
-    }
-
-    private static String toLocaleTimeString(double date) {
-        if (localeTimeFormatter == null)
-            localeTimeFormatter = DateFormat.getTimeInstance(DateFormat.LONG);
-
-        return toLocale_helper(date, localeTimeFormatter);
-    }
-
-    private static String toLocaleDateString(double date) {
-        if (localeDateFormatter == null)
-            localeDateFormatter = DateFormat.getDateInstance(DateFormat.LONG);
-
-        return toLocale_helper(date, localeDateFormatter);
-    }
-
-    private static String toUTCString(double date) {
-        StringBuffer result = new StringBuffer(60);
-
-        String dateStr = Integer.toString(DateFromTime(date));
-        String hourStr = Integer.toString(HourFromTime(date));
-        String minStr = Integer.toString(MinFromTime(date));
-        String secStr = Integer.toString(SecFromTime(date));
-        int year = YearFromTime(date);
-        String yearStr = Integer.toString(year > 0 ? year : -year);
-
-        result.append(days[WeekDay(date)]);
-        result.append(", ");
-        if (dateStr.length() == 1)
-            result.append('0');
-        result.append(dateStr);
-        result.append(' ');
-        result.append(months[MonthFromTime(date)]);
-        if (year < 0)
-            result.append(" -");
-        else
-            result.append(' ');
-        int i;
-        for (i = yearStr.length(); i < 4; i++)
-            result.append('0');
-        result.append(yearStr);
-
-        if (hourStr.length() == 1)
-            result.append(" 0");
-        else
-            result.append(' ');
-        result.append(hourStr);
-        if (minStr.length() == 1)
-            result.append(":0");
-        else
-            result.append(':');
-        result.append(minStr);
-        if (secStr.length() == 1)
-            result.append(":0");
-        else
-            result.append(':');
-        result.append(secStr);
-
-        result.append(" GMT");
-        return result.toString();
-    }
-
-    private static double getYear(double date) {
-        int result = YearFromTime(LocalTime(date));
-        result -= 1900;
-        return result;
-    }
-
-    private static double getTimezoneOffset(double date) {
-        return (date - LocalTime(date)) / msPerMinute;
-    }
-
-    public double setTime(double time) {
-        this.date = TimeClip(time);
-        return this.date;
-    }
-
-    private double makeTime(Object[] args, int maxargs, boolean local) {
-        int i;
-        double conv[] = new double[4];
-        double hour, min, sec, msec;
-        double lorutime; /* Local or UTC version of date */
-
-        double time;
-        double result;
-
-        double date = this.date;
-
-        /* just return NaN if the date is already NaN */
-        if (date != date)
-            return date;
-
-        /* Satisfy the ECMA rule that if a function is called with
-         * fewer arguments than the specified formal arguments, the
-         * remaining arguments are set to undefined.  Seems like all
-         * the Date.setWhatever functions in ECMA are only varargs
-         * beyond the first argument; this should be set to undefined
-         * if it's not given.  This means that "d = new Date();
-         * d.setMilliseconds()" returns NaN.  Blech.
-         */
-        if (args.length == 0)
-            args = new Object[] { null };
-
-        for (i = 0; i < args.length && i < maxargs; i++) {
-            conv[i] = _toNumber(args[i]);
-
-            // limit checks that happen in MakeTime in ECMA.
-            if (conv[i] != conv[i] || Double.isInfinite(conv[i])) {
-                this.date = Double.NaN;
-                return this.date;
-            }
-            conv[i] = toDouble(conv[i]);
-        }
-
-        if (local)
-            lorutime = LocalTime(date);
-        else
-            lorutime = date;
-
-        i = 0;
-        int stop = args.length;
-
-        if (maxargs >= 4 && i < stop)
-            hour = conv[i++];
-        else
-            hour = HourFromTime(lorutime);
-
-        if (maxargs >= 3 && i < stop)
-            min = conv[i++];
-        else
-            min = MinFromTime(lorutime);
-
-        if (maxargs >= 2 && i < stop)
-            sec = conv[i++];
-        else
-            sec = SecFromTime(lorutime);
-
-        if (maxargs >= 1 && i < stop)
-            msec = conv[i++];
-        else
-            msec = msFromTime(lorutime);
-
-        time = MakeTime(hour, min, sec, msec);
-        result = MakeDate(Day(lorutime), time);
-
-        if (local)
-            result = internalUTC(result);
-        date = TimeClip(result);
-
-        this.date = date;
-        return date;
-    }
-
-    private double setHours(Object[] args) {
-        return makeTime(args, 4, true);
-    }
-
-    private double setUTCHours(Object[] args) {
-        return makeTime(args, 4, false);
-    }
-
-    private double makeDate(Object[] args, int maxargs, boolean local) {
-        int i;
-        double conv[] = new double[3];
-        double year, month, day;
-        double lorutime; /* local or UTC version of date */
-        double result;
-
-        double date = this.date;
-
-        /* See arg padding comment in makeTime.*/
-        if (args.length == 0)
-            args = new Object[] { null };
-
-        for (i = 0; i < args.length && i < maxargs; i++) {
-            conv[i] = _toNumber(args[i]);
-
-            // limit checks that happen in MakeDate in ECMA.
-            if (conv[i] != conv[i] || Double.isInfinite(conv[i])) {
-                this.date = Double.NaN;
-                return this.date;
-            }
-            conv[i] = toDouble(conv[i]);
-        }
-
-        /* return NaN if date is NaN and we're not setting the year,
-         * If we are, use 0 as the time. */
-        if (date != date) {
-            if (args.length < 3) {
-                return Double.NaN;
-            } else {
-                lorutime = 0;
-            }
-        } else {
-            if (local)
-                lorutime = LocalTime(date);
-            else
-                lorutime = date;
-        }
-
-        i = 0;
-        int stop = args.length;
-
-        if (maxargs >= 3 && i < stop)
-            year = conv[i++];
-        else
-            year = YearFromTime(lorutime);
-
-        if (maxargs >= 2 && i < stop)
-            month = conv[i++];
-        else
-            month = MonthFromTime(lorutime);
-
-        if (maxargs >= 1 && i < stop)
-            day = conv[i++];
-        else
-            day = DateFromTime(lorutime);
-
-        day = MakeDay(year, month, day); /* day within year */
-        result = MakeDate(day, TimeWithinDay(lorutime));
-
-        if (local)
-            result = internalUTC(result);
-
-        date = TimeClip(result);
-
-        this.date = date;
-        return date;
-    }
-
-    private double setYear(double year) {
-        double day, result;
-        if (year != year || Double.isInfinite(year)) {
-            this.date = Double.NaN;
-            return this.date;
-        }
-
-        if (this.date != this.date) {
-            this.date = 0;
-        } else {
-            this.date = LocalTime(this.date);
-        }
-
-        if (year >= 0 && year <= 99)
-            year += 1900;
-
-        day = MakeDay(year, MonthFromTime(this.date), DateFromTime(this.date));
-        result = MakeDate(day, TimeWithinDay(this.date));
-        result = internalUTC(result);
-
-        this.date = TimeClip(result);
-        return this.date;
-    }
-
-
-    //    private static final int
-    //        Id_toGMTString  =  Id_toUTCString; // Alias, see Ecma B.2.6
-// #/string_id_map#
-
-    /* cached values */
-    private static java.util.TimeZone thisTimeZone;
-    private static double LocalTZA;
-    private static java.text.DateFormat timeZoneFormatter;
-    private static java.text.DateFormat localeDateTimeFormatter;
-    private static java.text.DateFormat localeDateFormatter;
-    private static java.text.DateFormat localeTimeFormatter;
-
-    private double date;
-
-    public long getRawTime() { return (long)this.date; }
-}
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSExn.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSExn.java
deleted file mode 100644 (file)
index ff4abc5..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] 
-package org.ibex.js; 
-
-import org.ibex.util.*; 
-import java.io.*;
-
-/** An exception which can be thrown and caught by JavaScript code */
-public class JSExn extends Exception { 
-    private Vec backtrace = new Vec();
-    private Object js = null; 
-    public JSExn(Object js) {
-        this.js = js;
-        if (Interpreter.current() != null)
-            fill(Interpreter.current().stack, Interpreter.current().f, Interpreter.current().pc, Interpreter.current().scope);
-    }
-    public JSExn(Object js, Vec stack, JSFunction f, int pc, JSScope scope) { this.js = js; fill(stack, f, pc, scope); }
-    private void fill(Vec stack, JSFunction f, int pc, JSScope scope) {
-        addBacktrace(f.sourceName + ":" + f.line[pc]);
-        if (scope != null && scope instanceof Trap.TrapScope)
-            addBacktrace("trap on property \"" + ((Trap.TrapScope)scope).t.name + "\"");
-        for(int i=stack.size()-1; i>=0; i--) {
-            Object element = stack.elementAt(i);
-            if (element instanceof Interpreter.CallMarker) {
-                Interpreter.CallMarker cm = (Interpreter.CallMarker)element;
-                if (cm.f != null)
-                    addBacktrace(cm.f.sourceName + ":" + cm.f.line[cm.pc-1]);
-                if (cm.scope != null && cm.scope instanceof Trap.TrapScope)
-                    addBacktrace("trap on property \"" + ((Trap.TrapScope)cm.scope).t.name + "\"");
-            }
-        }
-    }
-    public void printStackTrace() { printStackTrace(System.err); }
-    public void printStackTrace(PrintWriter pw) {
-        for(int i=0; i<backtrace.size(); i++) pw.println("    at " + (String) backtrace.elementAt(i));
-        super.printStackTrace(pw);
-    }
-    public void printStackTrace(PrintStream ps) {
-        for(int i=0; i<backtrace.size(); i++) ps.println("    at " + (String) backtrace.elementAt(i));
-        super.printStackTrace(ps);
-    }
-    public String toString() { return "JSExn: " + js; }
-    public String getMessage() { return toString(); }
-    public Object getObject() { return js; } 
-    public void addBacktrace(String line) { backtrace.addElement(line); }
-
-
-    public static class IO extends JSExn {
-        public IO(java.io.IOException ioe) {
-            super("ibex.io: " + ioe.toString());
-            JS.warn(ioe);
-        }
-    }
-} 
-
-/** should only be used for failed coercions */
-class JSRuntimeExn extends RuntimeException {
-    private Object js = null; 
-    public JSRuntimeExn(Object js) { this.js = js; } 
-    public String toString() { return "JSRuntimeExn: " + js; }
-    public String getMessage() { return toString(); }
-    public Object getObject() { return js; } 
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSFunction.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSFunction.java
deleted file mode 100644 (file)
index 4bf41e4..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-import java.io.*;
-import org.ibex.util.*;
-
-/** A JavaScript function, compiled into bytecode */
-class JSFunction extends JS implements ByteCodes, Tokens, Task {
-
-
-    // Fields and Accessors ///////////////////////////////////////////////
-
-    int numFormalArgs = 0;         ///< the number of formal arguments
-
-    String sourceName;             ///< the source code file that this block was drawn from
-    private int firstLine = -1;    ///< the first line of this script
-
-    int[] line = new int[10];      ///< the line numbers
-    int[] op = new int[10];        ///< the instructions
-    Object[] arg = new Object[10]; ///< the arguments to the instructions
-    int size = 0;                  ///< the number of instruction/argument pairs
-
-    JSScope parentScope;           ///< the default scope to use as a parent scope when executing this
-
-
-    // Public //////////////////////////////////////////////////////////////////////////////
-
-    // FEATURE: make sure that this can only be called from the Scheduler...
-    /** if you enqueue a function, it gets invoked in its own pauseable context */
-    public void perform() throws JSExn {
-        Interpreter i = new Interpreter(this, true, new JSArray());
-        i.resume();
-    }
-
-    /** parse and compile a function */
-    public static JSFunction _fromReader(String sourceName, int firstLine, Reader sourceCode) throws IOException {
-        JSFunction ret = new JSFunction(sourceName, firstLine, null);
-        if (sourceCode == null) return ret;
-        Parser p = new Parser(sourceCode, sourceName, firstLine);
-        while(true) {
-            int s = ret.size;
-            p.parseStatement(ret, null);
-            if (s == ret.size) break;
-        }
-        ret.add(-1, LITERAL, null); 
-        ret.add(-1, RETURN);
-        return ret;
-    }
-
-    public JSFunction _cloneWithNewParentScope(JSScope s) {
-        JSFunction ret = new JSFunction(sourceName, firstLine, s);
-        // Reuse the same op, arg, line, and size variables for the new "instance" of the function
-        // NOTE: Neither *this* function nor the new function should be modified after this call
-        ret.op = this.op;
-        ret.arg = this.arg;
-        ret.line = this.line;
-        ret.size = this.size;
-        ret.numFormalArgs = this.numFormalArgs;
-        return ret;
-    }
-
-    /** Note: code gets run in an <i>unpauseable</i> context. */
-    public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        JSArray args = new JSArray();
-        if (nargs > 0) args.addElement(a0);
-        if (nargs > 1) args.addElement(a1);
-        if (nargs > 2) args.addElement(a2);
-        for(int i=3; i<nargs; i++) args.addElement(rest[i-3]);
-        Interpreter cx = new Interpreter(this, false, args);
-        return cx.resume();
-    }
-
-    public JSScope getParentScope() { return parentScope; }
-
-    // Adding and Altering Bytecodes ///////////////////////////////////////////////////
-
-    JSFunction(String sourceName, int firstLine, JSScope parentScope) {
-        this.sourceName = sourceName;
-        this.firstLine = firstLine;
-        this.parentScope = parentScope;
-    }
-
-    int get(int pos) { return op[pos]; }
-    Object getArg(int pos) { return arg[pos]; }
-    void set(int pos, int op_, Object arg_) { op[pos] = op_; arg[pos] = arg_; }
-    void set(int pos, Object arg_) { arg[pos] = arg_; }
-    int pop() { size--; arg[size] = null; return op[size]; }
-    void paste(JSFunction other) { for(int i=0; i<other.size; i++) add(other.line[i], other.op[i], other.arg[i]); }
-    JSFunction add(int line, int op_) { return add(line, op_, null); }
-    JSFunction add(int line, int op_, Object arg_) {
-        if (size == op.length - 1) {
-            int[] line2 = new int[op.length * 2]; System.arraycopy(this.line, 0, line2, 0, op.length); this.line = line2;
-            Object[] arg2 = new Object[op.length * 2]; System.arraycopy(arg, 0, arg2, 0, arg.length); arg = arg2;
-            int[] op2 = new int[op.length * 2]; System.arraycopy(op, 0, op2, 0, op.length); op = op2;
-        }
-        this.line[size] = line;
-        op[size] = op_;
-        arg[size] = arg_;
-        size++;
-        return this;
-    }
-    
-
-    // Debugging //////////////////////////////////////////////////////////////////////
-
-    public String toString() { return "JSFunction [" + sourceName + ":" + firstLine + "]"; }
-
-    public String dump() {
-        StringBuffer sb = new StringBuffer(1024);
-        sb.append("\n" + sourceName + ": " + firstLine + "\n");
-        for (int i=0; i < size; i++) {
-            sb.append(i).append(" (").append(line[i]).append(") :");
-            if (op[i] < 0) sb.append(bytecodeToString[-op[i]]);
-            else sb.append(codeToString[op[i]]);
-            sb.append(" ");
-            sb.append(arg[i] == null ? "(no arg)" : arg[i]);
-            if((op[i] == JF || op[i] == JT || op[i] == JMP) && arg[i] != null && arg[i] instanceof Number) {
-                sb.append(" jump to ").append(i+((Number) arg[i]).intValue());
-            } else  if(op[i] == TRY) {
-                int[] jmps = (int[]) arg[i];
-                sb.append(" catch: ").append(jmps[0] < 0 ? "No catch block" : ""+(i+jmps[0]));
-                sb.append(" finally: ").append(jmps[1] < 0 ? "No finally block" : ""+(i+jmps[1]));
-            }
-            sb.append("\n");
-        }
-        return sb.toString();
-    } 
-
-
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSMath.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSMath.java
deleted file mode 100644 (file)
index 52060cb..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL ]
-
-package org.ibex.js; 
-
-/** The JavaScript Math object */
-public class JSMath extends JS {
-
-    public static JSMath singleton = new JSMath();
-
-    private static final Double E       = new Double(java.lang.Math.E);
-    private static final Double PI      = new Double(java.lang.Math.PI);
-    private static final Double LN10    = new Double(java.lang.Math.log(10));
-    private static final Double LN2     = new Double(java.lang.Math.log(2));
-    private static final Double LOG10E  = new Double(1/java.lang.Math.log(10));
-    private static final Double LOG2E   = new Double(1/java.lang.Math.log(2));
-    private static final Double SQRT1_2 = new Double(1/java.lang.Math.sqrt(2));
-    private static final Double SQRT2   = new Double(java.lang.Math.sqrt(2));
-
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        switch(nargs) {
-            case 0: {
-final String ccSwitch0 = (String)(method);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 6: { switch(ccSwitch0.charAt(0)) { case 'r': if ("random".equals(ccSwitch0)) { if (true) do { return new Double(java.lang.Math.random());
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                break;
-            }
-            case 1: {
-final String ccSwitch1 = (String)(method);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 3: { switch(ccSwitch1.charAt(0)) { case 'a': if ("abs".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.abs(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 'c': if ("cos".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.cos(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 'e': if ("exp".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.exp(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 'l': if ("log".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.log(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 's': if ("sin".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.sin(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 't': if ("tan".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.tan(toDouble(a0)));
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch1.charAt(0)) { case 'a': { switch(ccSwitch1.charAt(1)) { case 'c': if ("acos".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.acos(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 's': if ("asin".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.asin(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 't': if ("atan".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.atan(toDouble(a0)));
- } while(false); break SUCCESS; } break;  } break; } case 'c': if ("ceil".equals(ccSwitch1)) { if (true) do { return new Long((long)java.lang.Math.ceil(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 's': if ("sqrt".equals(ccSwitch1)) { if (true) do { return new Double(java.lang.Math.sqrt(toDouble(a0)));
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch1.charAt(0)) { case 'f': if ("floor".equals(ccSwitch1)) { if (true) do { return new Long((long)java.lang.Math.floor(toDouble(a0)));
- } while(false); break SUCCESS; } break;  case 'r': if ("round".equals(ccSwitch1)) { if (true) do { return new Long((long)java.lang.Math.round(toDouble(a0)));
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                break;
-            }
-            case 2: {
-final String ccSwitch2 = (String)(method);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 3: { switch(ccSwitch2.charAt(0)) { case 'm': { switch(ccSwitch2.charAt(1)) { case 'a': if ("max".equals(ccSwitch2)) { if (true) do { return new Double(java.lang.Math.max(toDouble(a0), toDouble(a1)));
- } while(false); break SUCCESS; } break;  case 'i': if ("min".equals(ccSwitch2)) { if (true) do { return new Double(java.lang.Math.min(toDouble(a0), toDouble(a1)));
- } while(false); break SUCCESS; } break;  } break; } case 'p': if ("pow".equals(ccSwitch2)) { if (true) do { return new Double(java.lang.Math.pow(toDouble(a0), toDouble(a1)));
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch2.charAt(0)) { case 'a': if ("atan2".equals(ccSwitch2)) { if (true) do { return new Double(java.lang.Math.atan2(toDouble(a0), toDouble(a1)));
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                break;
-            }
-        }
-        return super.callMethod(method, a0, a1, a2, rest, nargs);
-    }
-
-    public void put(Object key, Object val) { }
-
-    public Object get(Object key) throws JSExn {
-final String ccSwitch3 = (String)(key);  SUCCESS:do { switch(ccSwitch3.length()) {
-case 1: { switch(ccSwitch3.charAt(0)) { case 'E': if ("E".equals(ccSwitch3)) { if (true) do { return E;
- } while(false); break SUCCESS; } break;  }; break; }  case 2: { switch(ccSwitch3.charAt(0)) { case 'P': if ("PI".equals(ccSwitch3)) { if (true) do { return PI;
- } while(false); break SUCCESS; } break;  }; break; }  case 3: { switch(ccSwitch3.charAt(0)) { case 'L': if ("LN2".equals(ccSwitch3)) { if (true) do { return LN2;
- } while(false); break SUCCESS; } break;  case 'a': if ("abs".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'c': if ("cos".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'e': if ("exp".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'l': if ("log".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'm': { switch(ccSwitch3.charAt(1)) { case 'a': if ("max".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'i': if ("min".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } case 'p': if ("pow".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("sin".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 't': if ("tan".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch3.charAt(0)) { case 'L': if ("LN10".equals(ccSwitch3)) { if (true) do { return LN10;
- } while(false); break SUCCESS; } break;  case 'a': { switch(ccSwitch3.charAt(1)) { case 'c': if ("acos".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("asin".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 't': if ("atan".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  } break; } case 'c': if ("ceil".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("sqrt".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch3.charAt(0)) { case 'L': if ("LOG2E".equals(ccSwitch3)) { if (true) do { return LOG2E;
- } while(false); break SUCCESS; } break;  case 'S': if ("SQRT2".equals(ccSwitch3)) { if (true) do { return SQRT2;
- } while(false); break SUCCESS; } break;  case 'a': if ("atan2".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'f': if ("floor".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'r': if ("round".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch3.charAt(0)) { case 'L': if ("LOG10E".equals(ccSwitch3)) { if (true) do { return LOG10E;
- } while(false); break SUCCESS; } break;  case 'r': if ("random".equals(ccSwitch3)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch3.charAt(0)) { case 'S': if ("SQRT1_2".equals(ccSwitch3)) { if (true) do { return SQRT1_2;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        return super.get(key);
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSReflection.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSReflection.java
deleted file mode 100644 (file)
index 070a35b..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] 
-package org.ibex.js; 
-
-import org.ibex.util.*; 
-import java.io.*;
-import java.util.*;
-import java.lang.reflect.*;
-
-/** Automatic JS-ification via Reflection (not for use in the core) */
-public class JSReflection extends JS {
-
-    public static Object wrap(Object o) throws JSExn {
-        if (o instanceof String) return o;
-        if (o instanceof Boolean) return o;
-        if (o instanceof Number) return o;
-        if (o instanceof JS) return o;
-        if (o instanceof Object[]) {
-            // FIXME: get element type here
-        }
-        throw new JSExn("Reflection object tried to return a " + o.getClass().getName());
-    }
-
-    public static class Array extends JS {
-        final Object[] arr;
-        public Array(Object[] arr) { this.arr = arr; }
-        public Enumeration keys() throws JSExn { return new CounterEnumeration(arr.length); }
-        public Object get(Object key) throws JSExn { return wrap(arr[toInt(key)]); }
-        public void put(Object key, Object val) throws JSExn { throw new JSExn("can't write to org.ibex.js.Reflection.Array's"); }
-    }
-
-    // FIXME public static class Hash { }
-    // FIXME public Enumeration keys() throws JSExn {  }
-
-    public Object get(Object key) throws JSExn {
-        String k = toString(key);
-        try {
-            Field f = this.getClass().getField(k);
-            return wrap(f.get(this));
-        } catch (NoSuchFieldException nfe) {
-        } catch (IllegalAccessException nfe) {
-        } catch (SecurityException nfe) { }
-
-        try {
-            Method[] methods = this.getClass().getMethods();
-            for(int i=0; i<methods.length; i++) if (methods[i].getName().equals(k)) return METHOD;
-        } catch (SecurityException nfe) { }
-        return null;
-    }
-
-    public void put(Object key, Object val) throws JSExn {
-        throw new JSExn("put() not supported yet");
-    }
-
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        String k = toString(method);
-        try {
-            Method[] methods = this.getClass().getMethods();
-            for(int j=0; j<methods.length; j++) {
-                if (methods[j].getName().equals(k) && methods[j].getParameterTypes().length == nargs) {
-                    Object[] args = new Object[nargs];
-                    for(int i = 0; i<args.length; i++) {
-                        if (i==0) args[i] = a0;
-                        else if (i==1) args[i] = a1;
-                        else if (i==2) args[i] = a2;
-                        else args[i] = rest[i-3];
-                    }
-                    return wrap(methods[j].invoke(this, args));
-                }
-            }
-        } catch (IllegalAccessException nfe) {
-        } catch (InvocationTargetException it) {
-            Throwable ite = it.getTargetException();
-            if (ite instanceof JSExn) throw ((JSExn)ite);
-            JS.warn(ite);
-            throw new JSExn("unhandled reflected exception: " + ite.toString());
-        } catch (SecurityException nfe) { }
-        throw new JSExn("called a reflection method with the wrong number of arguments");
-    }    
-} 
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSRegexp.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSRegexp.java
deleted file mode 100644 (file)
index d74324e..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-import gnu.regexp.*;
-
-/** A JavaScript regular expression object */
-public class JSRegexp extends JS {
-    private boolean global;
-    private RE re;
-    private int lastIndex;
-    
-    public JSRegexp(Object arg0, Object arg1) throws JSExn {
-        if(arg0 instanceof JSRegexp) {
-            JSRegexp r = (JSRegexp) arg0;
-            this.global = r.global;
-            this.re = r.re;
-            this.lastIndex = r.lastIndex;
-        } else {
-            String pattern = (String)arg0;
-            String sFlags = null;
-            int flags = 0;
-            if(arg1 != null) sFlags = (String)arg1;
-            if(sFlags == null) sFlags = "";
-            for(int i=0;i<sFlags.length();i++) {
-                switch(sFlags.charAt(i)) {
-                    case 'i': flags |= RE.REG_ICASE; break;
-                    case 'm': flags |= RE.REG_MULTILINE; break;
-                    case 'g': global = true; break;
-                    default: throw new JSExn("Invalid flag in regexp \"" + sFlags.charAt(i) + "\"");
-                }
-            }
-            re = newRE(pattern,flags);
-            put("source", pattern);
-            put("global", B(global));
-            put("ignoreCase", B(flags & RE.REG_ICASE));
-            put("multiline", B(flags & RE.REG_MULTILINE));
-        }
-    }
-
-    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        switch(nargs) {
-            case 1: {
-final String ccSwitch0 = (String)(method);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 4: { switch(ccSwitch0.charAt(0)) { case 'e': if ("exec".equals(ccSwitch0)) { if (true) do { {
-String s = (String)a0;
-int start = global ? lastIndex : 0;
-if(start < 0 || start >= s.length()) { lastIndex = 0; return null; }
-REMatch match = re.getMatch(s,start);
-if(global) lastIndex = match == null ? s.length() : match.getEndIndex();
-return match == null ? null : matchToExecResult(match,re,s);
-}
- } while(false); break SUCCESS; } break;  case 't': if ("test".equals(ccSwitch0)) { if (true) do { {
-String s = (String)a0;
-if (!global) return B(re.getMatch(s) != null);
-int start = global ? lastIndex : 0;
-if(start < 0 || start >= s.length()) { lastIndex = 0; return null; }
-REMatch match = re.getMatch(s,start);
-lastIndex = match != null ? s.length() : match.getEndIndex();
-return B(match != null);
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 't': if ("toString".equals(ccSwitch0)) { if (true) do { return toString(a0);
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch0.charAt(0)) { case 's': if ("stringMatch".equals(ccSwitch0)) { if (true) do { return stringMatch(a0,a1);
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch0.charAt(0)) { case 's': if ("stringSearch".equals(ccSwitch0)) { if (true) do { return stringSearch(a0,a1);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                break;
-            }
-            case 2: {
-final String ccSwitch1 = (String)(method);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 13: { switch(ccSwitch1.charAt(0)) { case 's': if ("stringReplace".equals(ccSwitch1)) { if (true) do { return stringReplace(a0, a1,a2);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                break;
-            }
-        }
-        return super.callMethod(method, a0, a1, a2, rest, nargs);
-    }
-    
-    public Object get(Object key) throws JSExn {
-final String ccSwitch2 = (String)(key);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 4: { switch(ccSwitch2.charAt(0)) { case 'e': if ("exec".equals(ccSwitch2)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 't': if ("test".equals(ccSwitch2)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch2.charAt(0)) { case 't': if ("toString".equals(ccSwitch2)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch2.charAt(0)) { case 'l': if ("lastIndex".equals(ccSwitch2)) { if (true) do { return N(lastIndex);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        return super.get(key);
-    }
-    
-    public void put(Object key, Object value) throws JSExn {
-        if(key.equals("lastIndex")) lastIndex = JS.toNumber(value).intValue();
-        super.put(key,value);
-    }
-  
-    private static Object matchToExecResult(REMatch match, RE re, String s) {
-        try {
-            JS ret = new JS();
-            ret.put("index", N(match.getStartIndex()));
-            ret.put("input",s);
-            int n = re.getNumSubs();
-            ret.put("length", N(n+1));
-            ret.put("0",match.toString());
-            for(int i=1;i<=n;i++) ret.put(Integer.toString(i),match.toString(i));
-            return ret;
-        } catch (JSExn e) {
-            throw new Error("this should never happen");
-        }
-    }
-    
-    public String toString() {
-        try {
-            StringBuffer sb = new StringBuffer();
-            sb.append('/');
-            sb.append(get("source"));
-            sb.append('/');
-            if(global) sb.append('g');
-            if(Boolean.TRUE.equals(get("ignoreCase"))) sb.append('i');
-            if(Boolean.TRUE.equals(get("multiline"))) sb.append('m');
-            return sb.toString();
-        } catch (JSExn e) {
-            throw new Error("this should never happen");
-        }
-    }
-    
-    public static Object stringMatch(Object o, Object arg0) throws JSExn {
-        String s = o.toString();
-        RE re;
-        JSRegexp regexp = null;
-        if(arg0 instanceof JSRegexp) {
-            regexp = (JSRegexp) arg0;
-            re = regexp.re;
-        } else {
-            re = newRE(arg0.toString(),0);
-        }
-        
-        if(regexp == null) {
-            REMatch match = re.getMatch(s);
-            return matchToExecResult(match,re,s);
-        }
-        if(!regexp.global) return regexp.callMethod("exec", s, null, null, null, 1);
-        
-        JSArray ret = new JSArray();
-        REMatch[] matches = re.getAllMatches(s);
-        for(int i=0;i<matches.length;i++) ret.addElement(matches[i].toString());
-        regexp.lastIndex = matches.length > 0 ? matches[matches.length-1].getEndIndex() : s.length();
-        return ret;
-    }
-    
-    public static Object stringSearch(Object o, Object arg0) throws JSExn  {
-        String s = o.toString();
-        RE re = arg0 instanceof JSRegexp ? ((JSRegexp)arg0).re : newRE(arg0.toString(),0);
-        REMatch match = re.getMatch(s);
-        return match == null ? N(-1) : N(match.getStartIndex());
-    }
-    
-    public static Object stringReplace(Object o, Object arg0, Object arg1) throws JSExn {
-        String s = o.toString();
-        RE re;
-        JSFunction replaceFunc = null;
-        String replaceString = null;
-        JSRegexp regexp = null;
-        if(arg0 instanceof JSRegexp) {
-            regexp = (JSRegexp) arg0;
-            re = regexp.re;
-        } else {
-            re = newRE(arg0.toString(),0);
-        }
-        if(arg1 instanceof JSFunction)
-            replaceFunc = (JSFunction) arg1;
-        else
-            replaceString = JS.toString(arg1.toString());
-        REMatch[] matches;
-        if(regexp != null && regexp.global) {
-            matches = re.getAllMatches(s);
-            if(regexp != null) {
-                if(matches.length > 0)
-                    regexp.lastIndex = matches[matches.length-1].getEndIndex();
-                else
-                    regexp.lastIndex = s.length();
-            }
-        } else {
-            REMatch match = re.getMatch(s);
-            if(match != null)
-                matches = new REMatch[]{ match };
-            else
-                matches = new REMatch[0];
-        }
-        
-        StringBuffer sb = new StringBuffer(s.length());
-        int pos = 0;
-        char[] sa = s.toCharArray();
-        for(int i=0;i<matches.length;i++) {
-            REMatch match = matches[i];
-            sb.append(sa,pos,match.getStartIndex()-pos);
-            pos = match.getEndIndex();
-            if(replaceFunc != null) {
-                int n = (regexp == null ? 0 : re.getNumSubs());
-                int numArgs = 3 + n;
-                Object[] rest = new Object[numArgs - 3];
-                Object a0 = match.toString();
-                Object a1 = null;
-                Object a2 = null;
-                for(int j=1;j<=n;j++)
-                    switch(j) {
-                        case 1: a1 = match.toString(j); break;
-                        case 2: a2 = match.toString(j); break;
-                        default: rest[j - 3] = match.toString(j); break;
-                    }
-                switch(numArgs) {
-                    case 3:
-                        a1 = N(match.getStartIndex());
-                        a2 = s;
-                        break;
-                    case 4:
-                        a2 = N(match.getStartIndex());
-                        rest[0] = s;
-                        break;
-                    default:
-                        rest[rest.length - 2] = N(match.getStartIndex());
-                        rest[rest.length - 1] = s;
-                }
-
-                // note: can't perform pausing operations in here
-                sb.append((String)replaceFunc.call(a0, a1, a2, rest, numArgs));
-
-            } else {
-                sb.append(mySubstitute(match,replaceString,s));
-            }
-        }
-        int end = matches.length == 0 ? 0 : matches[matches.length-1].getEndIndex();
-        sb.append(sa,end,sa.length-end);
-        return sb.toString();
-    }
-    
-    private static String mySubstitute(REMatch match, String s, String source) {
-        StringBuffer sb = new StringBuffer();
-        int i,n;
-        char c,c2;
-        for(i=0;i<s.length()-1;i++) {
-           c = s.charAt(i);
-            if(c != '$') {
-                sb.append(c);
-                continue;
-            }
-            i++;
-            c = s.charAt(i);
-            switch(c) {
-                case '0': case '1': case '2': case '3': case '4':
-                case '5': case '6': case '7': case '8': case '9':
-                    if(i < s.length()-1 && (c2 = s.charAt(i+1)) >= '0' && c2 <= '9') {
-                        n = (c - '0') * 10 + (c2 - '0');
-                        i++;
-                    } else {
-                        n = c - '0';
-                    }
-                    if(n > 0)
-                        sb.append(match.toString(n));
-                    break;
-                case '$':
-                    sb.append('$'); break;
-                case '&':
-                    sb.append(match.toString()); break;
-                case '`':
-                    sb.append(source.substring(0,match.getStartIndex())); break;
-                case '\'':
-                    sb.append(source.substring(match.getEndIndex())); break;
-                default:
-                    sb.append('$');
-                    sb.append(c);
-            }
-        }
-        if(i < s.length()) sb.append(s.charAt(i));
-        return sb.toString();
-    }
-                    
-    
-    public static Object stringSplit(String s, Object arg0, Object arg1, int nargs) {
-        int limit = nargs < 2 ? Integer.MAX_VALUE : JS.toInt(arg1);
-        if(limit < 0) limit = Integer.MAX_VALUE;
-        if(limit == 0) return new JSArray();
-        
-        RE re = null;
-        JSRegexp regexp = null;
-        String sep = null;
-        JSArray ret = new JSArray();
-        int p = 0;
-        
-        if(arg0 instanceof JSRegexp) {
-            regexp = (JSRegexp) arg0;
-            re = regexp.re;
-        } else {
-            sep = arg0.toString();
-        }
-        
-        // special case this for speed. additionally, the code below doesn't properly handle
-        // zero length strings
-        if(sep != null && sep.length()==0) {
-            int len = s.length();
-            for(int i=0;i<len;i++)
-                ret.addElement(s.substring(i,i+1));
-            return ret;
-        }
-        
-        OUTER: while(p < s.length()) {
-            if(re != null) {
-                REMatch m = re.getMatch(s,p);
-                if(m == null) break OUTER;
-                boolean zeroLength = m.getStartIndex() == m.getEndIndex();
-                ret.addElement(s.substring(p,zeroLength ? m.getStartIndex()+1 : m.getStartIndex()));
-                p = zeroLength ? p + 1 : m.getEndIndex();
-                if(!zeroLength) {
-                    for(int i=1;i<=re.getNumSubs();i++) {
-                        ret.addElement(m.toString(i));
-                        if(ret.length() == limit) break OUTER;
-                    }
-                }
-            } else {
-                int x = s.indexOf(sep,p);
-                if(x == -1) break OUTER;
-                ret.addElement(s.substring(p,x));
-                p = x + sep.length();
-            }
-            if(ret.length() == limit) break;
-        }
-        if(p < s.length() && ret.length() != limit)
-            ret.addElement(s.substring(p));
-        return ret;
-    }
-    
-    public static RE newRE(String pattern, int flags) throws JSExn {
-        try {
-            return new RE(pattern,flags,RESyntax.RE_SYNTAX_PERL5);
-        } catch(REException e) {
-            throw new JSExn(e.toString());
-        }
-    }
-    
-    public String typeName() { return "regexp"; }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/JSScope.java b/upstream/org.ibex.core/build/java/org/ibex/js/JSScope.java
deleted file mode 100644 (file)
index 9792d11..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] 
-package org.ibex.js; 
-
-// FIXME: should allow parentScope to be a JS, not a JSScope
-/** Implementation of a JavaScript Scope */
-public class JSScope extends JS { 
-
-    private JSScope parentScope;
-
-    private static final Object NULL_PLACEHOLDER = new Object();
-
-    public JSScope(JSScope parentScope) { this.parentScope = parentScope; }
-    public void declare(String s) throws JSExn { super.put(s, NULL_PLACEHOLDER); }
-    public JSScope getParentScope() { return parentScope; }
-
-    public Object get(Object key) throws JSExn {
-        Object o = super.get(key);
-        if (o != null) return o == NULL_PLACEHOLDER ? null : o;
-        else return parentScope == null ? null : parentScope.get(key);
-    }
-
-    public boolean has(Object key) throws JSExn { return super.get(key) != null; }
-    public void put(Object key, Object val) throws JSExn {
-        if (parentScope != null && !has(key)) parentScope.put(key, val);
-        else super.put(key, val == null ? NULL_PLACEHOLDER : val);
-    }
-    
-    public JSScope top() { 
-        JSScope s = this;
-        while(s.parentScope != null) s = s.parentScope;
-        return s;
-    }
-
-    public static class Global extends JSScope {
-        private final static Double NaN = new Double(Double.NaN);
-        private final static Double POSITIVE_INFINITY = new Double(Double.POSITIVE_INFINITY);
-
-        public Global() { super(null); }
-        public Object get(Object key) throws JSExn {
-final String ccSwitch0 = (String)(key);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 3: { switch(ccSwitch0.charAt(0)) { case 'N': if ("NaN".equals(ccSwitch0)) { if (true) do { return NaN;
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch0.charAt(0)) { case 'i': if ("isNaN".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch0.charAt(0)) { case 'e': if ("escape".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 'I': if ("Infinity".equals(ccSwitch0)) { if (true) do { return POSITIVE_INFINITY;
- } while(false); break SUCCESS; } break;  case 'i': if ("isFinite".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'p': if ("parseInt".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': if ("unescape".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch0.charAt(0)) { case 'd': if ("decodeURI".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'e': if ("encodeURI".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'u': if ("undefined".equals(ccSwitch0)) { if (true) do { return null;
- } while(false); break SUCCESS; } break;  }; break; }  case 18: { switch(ccSwitch0.charAt(0)) { case 'd': if ("decodeURIComponent".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'e': if ("encodeURIComponent".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("stringFromCharCode".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-            return super.get(key);
-        }
-
-        public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-            switch(nargs) {
-                case 0: {
-final String ccSwitch1 = (String)(method);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 18: { switch(ccSwitch1.charAt(0)) { case 's': if ("stringFromCharCode".equals(ccSwitch1)) { if (true) do { 
-char buf[] = new char[nargs];
-for(int i=0; i<nargs; i++) buf[i] = (char)(JS.toInt(i==0?a0:i==1?a1:i==2?a2:rest[i-3]) & 0xffff);
-return new String(buf);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                    break;
-                }
-                case 1: {
-final String ccSwitch2 = (String)(method);  SUCCESS:do { switch(ccSwitch2.length()) {
-case 5: { switch(ccSwitch2.charAt(0)) { case 'i': if ("isNaN".equals(ccSwitch2)) { if (true) do { { double d = toDouble(a0); return d == d ? F : T; }
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch2.charAt(0)) { case 'e': if ("escape".equals(ccSwitch2)) { if (true) do { throw new JSExn("unimplemented");
- } while(false); break SUCCESS; } break;  }; break; }  case 8: { switch(ccSwitch2.charAt(0)) { case 'i': if ("isFinite".equals(ccSwitch2)) { if (true) do { { double d = toDouble(a0); return (d == d && !Double.isInfinite(d)) ? T : F; }
- } while(false); break SUCCESS; } break;  case 'p': if ("parseInt".equals(ccSwitch2)) { if (true) do { return parseInt(a0, N(0));
- } while(false); break SUCCESS; } break;  case 'u': if ("unescape".equals(ccSwitch2)) { if (true) do { throw new JSExn("unimplemented");
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch2.charAt(0)) { case 'd': if ("decodeURI".equals(ccSwitch2)) { if (true) do { throw new JSExn("unimplemented");
- } while(false); break SUCCESS; } break;  case 'e': if ("encodeURI".equals(ccSwitch2)) { if (true) do { throw new JSExn("unimplemented");
- } while(false); break SUCCESS; } break;  }; break; }  case 18: { switch(ccSwitch2.charAt(0)) { case 'd': if ("decodeURIComponent".equals(ccSwitch2)) { if (true) do { throw new JSExn("unimplemented");
- } while(false); break SUCCESS; } break;  case 'e': if ("encodeURIComponent".equals(ccSwitch2)) { if (true) do { throw new JSExn("unimplemented");
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                    break;
-                }
-                case 2: {
-final String ccSwitch3 = (String)(method);  SUCCESS:do { switch(ccSwitch3.length()) {
-case 8: { switch(ccSwitch3.charAt(0)) { case 'p': if ("parseInt".equals(ccSwitch3)) { if (true) do { return parseInt(a0, a1);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                    break;
-                }
-            }
-            return super.callMethod(method, a0, a1, a2, rest, nargs);
-        }
-
-        private Object parseInt(Object arg, Object r) {
-            int radix = JS.toInt(r);
-            String s = (String)arg;
-            int start = 0;
-            int length = s.length();
-            int sign = 1;
-            long n = 0;
-            if(radix != 0 && (radix < 2 || radix > 36)) return NaN;
-            while(start < length && Character.isWhitespace(s.charAt(start))) start++;
-            if((length >= start+1) && (s.charAt(start) == '+' || s.charAt(start) == '-')) {
-                sign = s.charAt(start) == '+' ? 1 : -1;
-                start++;
-            }
-            if(radix == 0 && length >= start+1 && s.charAt(start) == '0') {
-                start++;
-                if(length >= start+1 && (s.charAt(start) == 'x' || s.charAt(start) == 'X')) {
-                    start++;
-                    radix = 16;
-                } else {
-                    radix = 8;
-                    if(length == start || Character.digit(s.charAt(start+1),8)==-1) return JS.ZERO;
-                }
-            }
-            if(radix == 0) radix = 10;
-            if(length == start || Character.digit(s.charAt(start),radix) == -1) return NaN;
-            // try the fast way first
-            try {
-                String s2 = start == 0 ? s : s.substring(start);
-                return JS.N(sign*Integer.parseInt(s2,radix));
-            } catch(NumberFormatException e) { }
-            // fall through to a slower but emca-compliant method
-            for(int i=start;i<length;i++) {
-                int digit = Character.digit(s.charAt(i),radix);
-                if(digit < 0) break;
-                n = n*radix + digit;
-                if(n < 0) return NaN; // overflow;
-            }
-            if(n <= Integer.MAX_VALUE) return JS.N(sign*(int)n);
-            return JS.N((long)sign*n);
-        }
-
-        private Object parseFloat(Object arg) {
-            String s = (String)arg;
-            int start = 0;
-            int length = s.length();
-            while(start < length && Character.isWhitespace(s.charAt(0))) start++;
-            int end = length;
-            // as long as the string has no trailing garbage,this is fast, its slow with
-            // trailing garbage
-            while(start < end) {
-                try {
-                    return JS.N(s.substring(start,length));
-                } catch(NumberFormatException e) { }
-                end--;
-            }
-            return NaN;
-        }
-    }
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/Lexer.java b/upstream/org.ibex.core/build/java/org/ibex/js/Lexer.java
deleted file mode 100644 (file)
index 6ceea01..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-// Derived from org.mozilla.javascript.TokenStream [NPL]
-
-/**
- * The contents of this file are subject to the Netscape Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation.
- *
- * Contributor(s): Roger Lawrence, Mike McCabe
- */
-
-package org.ibex.js;
-import java.io.*;
-
-/** Lexes a stream of characters into a stream of Tokens */
-class Lexer implements Tokens {
-
-    /** for debugging */
-    public static void main(String[] s) throws IOException {
-        Lexer l = new Lexer(new InputStreamReader(System.in), "stdin", 0);
-        int tok = 0;
-        while((tok = l.getToken()) != -1) System.out.println(codeToString[tok]);
-    }
-
-    /** the token that was just parsed */
-    protected int op;
-   /** the most recently parsed token, <i>regardless of pushbacks</i> */
-    protected int mostRecentlyReadToken;
-
-    /** if the token just parsed was a NUMBER, this is the numeric value */
-    protected Number number = null;
-
-    /** if the token just parsed was a NAME or STRING, this is the string value */
-    protected String string = null;
-
-    /** the line number of the most recently <i>lexed</i> token */
-    protected int line = 0;
-
-    /** the line number of the most recently <i>parsed</i> token */
-    protected int parserLine = 0;
-
-    /** the column number of the current token */
-    protected int col = 0;
-
-    /** the name of the source code file being lexed */
-    protected String sourceName;
-
-    private SmartReader in;
-    public Lexer(Reader r, String sourceName, int line) throws IOException {
-        this.sourceName = sourceName;
-        this.line = line;
-        this.parserLine = line;
-        in = new SmartReader(r);
-    }
-
-
-    // Predicates ///////////////////////////////////////////////////////////////////////
-
-    private static boolean isAlpha(int c) { return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); }
-    private static boolean isDigit(int c) { return (c >= '0' && c <= '9'); }
-    private static int xDigitToInt(int c) {
-        if ('0' <= c && c <= '9') return c - '0';
-        else if ('a' <= c && c <= 'f') return c - ('a' - 10);
-        else if ('A' <= c && c <= 'F') return c - ('A' - 10);
-        else return -1;
-    }
-
-    
-    // Token Subtype Handlers /////////////////////////////////////////////////////////
-
-    private int getKeyword(String name) throws IOException {
-final String ccSwitch0 = (String)(name);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 2: { switch(ccSwitch0.charAt(0)) { case 'd': if ("do".equals(ccSwitch0)) { if (true) do { return DO;
- } while(false); break SUCCESS; } break;  case 'g': if ("gt".equals(ccSwitch0)) { if (true) do { return GT;
- } while(false); break SUCCESS; } break;  case 'i': { switch(ccSwitch0.charAt(1)) { case 'f': if ("if".equals(ccSwitch0)) { if (true) do { return IF;
- } while(false); break SUCCESS; } break;  case 'n': if ("in".equals(ccSwitch0)) { if (true) do { return IN;
- } while(false); break SUCCESS; } break;  } break; } case 'l': if ("lt".equals(ccSwitch0)) { if (true) do { return LT;
- } while(false); break SUCCESS; } break;  case 'o': if ("or".equals(ccSwitch0)) { if (true) do { return OR;
- } while(false); break SUCCESS; } break;  }; break; }  case 3: { switch(ccSwitch0.charAt(0)) { case 'a': if ("and".equals(ccSwitch0)) { if (true) do { return AND;
- } while(false); break SUCCESS; } break;  case 'f': if ("for".equals(ccSwitch0)) { if (true) do { return FOR;
- } while(false); break SUCCESS; } break;  case 'i': if ("int".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'n': if ("new".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 't': if ("try".equals(ccSwitch0)) { if (true) do { return TRY;
- } while(false); break SUCCESS; } break;  case 'v': if ("var".equals(ccSwitch0)) { if (true) do { return VAR;
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch0.charAt(0)) { case 'b': if ("byte".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'c': { switch(ccSwitch0.charAt(1)) { case 'a': if ("case".equals(ccSwitch0)) { if (true) do { return CASE;
- } while(false); break SUCCESS; } break;  case 'h': if ("char".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } case 'e': { switch(ccSwitch0.charAt(1)) { case 'l': if ("else".equals(ccSwitch0)) { if (true) do { return ELSE;
- } while(false); break SUCCESS; } break;  case 'n': if ("enum".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } case 'g': if ("goto".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'l': if ("long".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'n': if ("null".equals(ccSwitch0)) { if (true) do { return NULL;
- } while(false); break SUCCESS; } break;  case 't': if ("true".equals(ccSwitch0)) { if (true) do { return TRUE;
- } while(false); break SUCCESS; } break;  case 'v': if ("void".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'w': if ("with".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch0.charAt(0)) { case 'b': if ("break".equals(ccSwitch0)) { if (true) do { return BREAK;
- } while(false); break SUCCESS; } break;  case 'c': { switch(ccSwitch0.charAt(1)) { case 'a': if ("catch".equals(ccSwitch0)) { if (true) do { return CATCH;
- } while(false); break SUCCESS; } break;  case 'l': if ("class".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'o': if ("const".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } case 'f': { switch(ccSwitch0.charAt(1)) { case 'a': if ("false".equals(ccSwitch0)) { if (true) do { return FALSE;
- } while(false); break SUCCESS; } break;  case 'i': if ("final".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } case 's': if ("super".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 't': if ("throw".equals(ccSwitch0)) { if (true) do { return THROW;
- } while(false); break SUCCESS; } break;  case 'w': if ("while".equals(ccSwitch0)) { if (true) do { return WHILE;
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch0.charAt(0)) { case 'a': if ("assert".equals(ccSwitch0)) { if (true) do { return ASSERT;
- } while(false); break SUCCESS; } break;  case 'd': { switch(ccSwitch0.charAt(1)) { case 'e': if ("delete".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'o': if ("double".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } case 'p': if ("public".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'r': if ("return".equals(ccSwitch0)) { if (true) do { return RETURN;
- } while(false); break SUCCESS; } break;  case 's': if ("switch".equals(ccSwitch0)) { if (true) do { return SWITCH;
- } while(false); break SUCCESS; } break;  case 't': { switch(ccSwitch0.charAt(1)) { case 'h': if ("throws".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'y': if ("typeof".equals(ccSwitch0)) { if (true) do { return TYPEOF;
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 7: { switch(ccSwitch0.charAt(0)) { case 'b': if ("boolean".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'd': if ("default".equals(ccSwitch0)) { if (true) do { return DEFAULT;
- } while(false); break SUCCESS; } break;  case 'e': if ("extends".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'f': if ("finally".equals(ccSwitch0)) { if (true) do { return FINALLY;
- } while(false); break SUCCESS; } break;  case 'p': { switch(ccSwitch0.charAt(1)) { case 'a': if ("package".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'r': if ("private".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 8: { switch(ccSwitch0.charAt(0)) { case 'a': if ("abstract".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'c': if ("continue".equals(ccSwitch0)) { if (true) do { return CONTINUE;
- } while(false); break SUCCESS; } break;  case 'd': if ("debugger".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'f': if ("function".equals(ccSwitch0)) { if (true) do { return FUNCTION;
- } while(false); break SUCCESS; } break;  case 'v': if ("volatile".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch0.charAt(0)) { case 'i': if ("interface".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'p': if ("protected".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 't': if ("transient".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch0.charAt(0)) { case 'i': { switch(ccSwitch0.charAt(1)) { case 'm': if ("implements".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  case 'n': if ("instanceof".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  } break; } }; break; }  case 12: { switch(ccSwitch0.charAt(0)) { case 's': if ("synchronized".equals(ccSwitch0)) { if (true) do { return RESERVED;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        return -1;
-    }
-
-    private int getIdentifier(int c) throws IOException {
-        in.startString();
-        while (Character.isJavaIdentifierPart((char)(c = in.read())));
-        in.unread();
-        String str = in.getString();
-        int result = getKeyword(str);
-        if (result == RESERVED) throw new LexerException("The reserved word \"" + str + "\" is not permitted in Ibex scripts");
-        if (result != -1) return result;
-        this.string = str.intern();
-        return NAME;
-    }
-    
-    private int getNumber(int c) throws IOException {
-        int base = 10;
-        in.startString();
-        double dval = Double.NaN;
-        long longval = 0;
-        boolean isInteger = true;
-        
-        // figure out what base we're using
-        if (c == '0') {
-            if (Character.toLowerCase((char)(c = in.read())) == 'x') { base = 16; in.startString(); }
-            else if (isDigit(c)) base = 8;
-        }
-        
-        while (0 <= xDigitToInt(c) && !(base < 16 && isAlpha(c))) c = in.read();
-        if (base == 10 && (c == '.' || c == 'e' || c == 'E')) {
-            isInteger = false;
-            if (c == '.') do { c = in.read(); } while (isDigit(c));
-            if (c == 'e' || c == 'E') {
-                c = in.read();
-                if (c == '+' || c == '-') c = in.read();
-                if (!isDigit(c)) throw new LexerException("float listeral did not have an exponent value");
-                do { c = in.read(); } while (isDigit(c));
-            }
-        }
-        in.unread();
-
-        String numString = in.getString();
-        if (base == 10 && !isInteger) {
-            try { dval = (Double.valueOf(numString)).doubleValue(); }
-            catch (NumberFormatException ex) { throw new LexerException("invalid numeric literal: \"" + numString + "\""); }
-        } else {
-            if (isInteger) {
-                longval = Long.parseLong(numString, base);
-                dval = (double)longval;
-            } else {
-                dval = Double.parseDouble(numString);
-                longval = (long) dval;
-                if (longval == dval) isInteger = true;
-            }
-        }
-        
-        if (!isInteger) this.number = JS.N(dval);
-        else this.number = JS.N(longval);
-        return NUMBER;
-    }
-    
-    private int getString(int c) throws IOException {
-        StringBuffer stringBuf = null;
-        int quoteChar = c;
-        c = in.read();
-        in.startString(); // start after the first "
-        while(c != quoteChar) {
-            if (c == '\n' || c == -1) throw new LexerException("unterminated string literal");
-            if (c == '\\') {
-                if (stringBuf == null) {
-                    in.unread();   // Don't include the backslash
-                    stringBuf = new StringBuffer(in.getString());
-                    in.read();
-                }
-                switch (c = in.read()) {
-                case 'b': c = '\b'; break;
-                case 'f': c = '\f'; break;
-                case 'n': c = '\n'; break;
-                case 'r': c = '\r'; break;
-                case 't': c = '\t'; break;
-                case 'v': c = '\u000B'; break;
-                case '\\': c = '\\'; break;
-                case 'u': {
-                    int v = 0;
-                    for(int i=0; i<4; i++) {
-                        int ci = in.read();
-                        if (!((ci >= '0' && ci <= '9') || (ci >= 'a' && ci <= 'f') || (ci >= 'A' && ci <= 'F')))
-                            throw new LexerException("illegal character '" + ((char)c) + "' in \\u unicode escape sequence");
-                        v = (v << 8) | Integer.parseInt(ci + "", 16);
-                    }
-                    c = (char)v;
-                    break;
-                }
-                default:
-                    // just use the character that was escaped
-                    break;
-                }
-            }
-            if (stringBuf != null) stringBuf.append((char) c);
-            c = in.read();
-        }
-        if (stringBuf != null) this.string = stringBuf.toString().intern();
-        else {
-            in.unread(); // miss the trailing "
-            this.string = in.getString().intern();
-            in.read();
-        }
-        return STRING;
-    }
-
-    private int _getToken() throws IOException {
-        int c;
-        do { c = in.read(); } while (c == '\u0020' || c == '\u0009' || c == '\u000C' || c == '\u000B' || c == '\n' );
-        if (c == -1) return -1;
-        if (c == '\\' || Character.isJavaIdentifierStart((char)c)) return getIdentifier(c);
-        if (isDigit(c) || (c == '.' && isDigit(in.peek()))) return getNumber(c);
-        if (c == '"' || c == '\'') return getString(c);
-        switch (c) {
-        case ';': return SEMI;
-        case '[': return LB;
-        case ']': return RB;
-        case '{': return LC;
-        case '}': return RC;
-        case '(': return LP;
-        case ')': return RP;
-        case ',': return COMMA;
-        case '?': return HOOK;
-        case ':': return !in.match(':') ? COLON : in.match('=') ? GRAMMAR : le(":: is not a valid token");
-        case '.': return DOT;
-        case '|': return in.match('|') ? OR : (in.match('=') ? ASSIGN_BITOR : BITOR);
-        case '^': return in.match('=') ? ASSIGN_BITXOR : BITXOR;
-        case '&': return in.match('&') ? AND : in.match('=') ? ASSIGN_BITAND : BITAND;
-        case '=': return !in.match('=') ? ASSIGN : in.match('=') ? SHEQ : EQ;
-        case '!': return !in.match('=') ? BANG : in.match('=') ? SHNE : NE;
-        case '%': return in.match('=') ? ASSIGN_MOD : MOD;
-        case '~': return BITNOT;
-        case '+': return in.match('=') ? ASSIGN_ADD : in.match('+') ? (in.match('=') ? ADD_TRAP : INC) : ADD;
-        case '-': return in.match('=') ? ASSIGN_SUB: in.match('-') ? (in.match('=') ? DEL_TRAP : DEC) : SUB;
-        case '*': return in.match('=') ? ASSIGN_MUL : MUL;
-        case '<': return !in.match('<') ? (in.match('=') ? LE : LT) : in.match('=') ? ASSIGN_LSH : LSH;
-        case '>': return !in.match('>') ? (in.match('=') ? GE : GT) :
-            in.match('>') ? (in.match('=') ? ASSIGN_URSH : URSH) : (in.match('=') ? ASSIGN_RSH : RSH);
-        case '/':
-            if (in.match('=')) return ASSIGN_DIV;
-            if (in.match('/')) { while ((c = in.read()) != -1 && c != '\n'); in.unread(); return getToken(); }
-            if (!in.match('*')) return DIV;
-            while ((c = in.read()) != -1 && !(c == '*' && in.match('/'))) {
-                if (c == '\n' || c != '/' || !in.match('*')) continue;
-                if (in.match('/')) return getToken();
-                throw new LexerException("nested comments are not permitted");
-            }
-            if (c == -1) throw new LexerException("unterminated comment");
-            return getToken();  // `goto retry'
-        default: throw new LexerException("illegal character: \'" + ((char)c) + "\'");
-        }
-    }
-
-    private int le(String s) throws LexerException { if (true) throw new LexerException(s); return 0; }
-
-    // SmartReader ////////////////////////////////////////////////////////////////
-
-    /** a Reader that tracks line numbers and can push back tokens */
-    private class SmartReader {
-        PushbackReader reader = null;
-        int lastread = -1;
-
-        public SmartReader(Reader r) { reader = new PushbackReader(r); }
-        public void unread() throws IOException { unread((char)lastread); }
-        public void unread(char c) throws IOException {
-            reader.unread(c);
-            if(c == '\n') col = -1;
-            else col--;
-            if (accumulator != null) accumulator.setLength(accumulator.length() - 1);
-        }
-        public boolean match(char c) throws IOException { if (peek() == c) { reader.read(); return true; } else return false; }
-        public int peek() throws IOException {
-            int peeked = reader.read();
-            if (peeked != -1) reader.unread((char)peeked);
-            return peeked;
-        }
-        public int read() throws IOException {
-            lastread = reader.read();
-            if (accumulator != null) accumulator.append((char)lastread);
-            if (lastread != '\n' && lastread != '\r') col++;
-            if (lastread == '\n') {
-                // col is -1 if we just unread a newline, this is sort of ugly
-                if (col != -1) parserLine = ++line;
-                col = 0;
-            }
-            return lastread;
-        }
-
-        // FEATURE: could be much more efficient
-        StringBuffer accumulator = null;
-        public void startString() {
-            accumulator = new StringBuffer();
-            accumulator.append((char)lastread);
-        }
-        public String getString() throws IOException {
-            String ret = accumulator.toString().intern();
-            accumulator = null;
-            return ret;
-        }
-    }
-
-
-    // Token PushBack code ////////////////////////////////////////////////////////////
-
-    private int pushBackDepth = 0;
-    private int[] pushBackInts = new int[10];
-    private Object[] pushBackObjects = new Object[10];
-
-    /** push back a token */
-    public final void pushBackToken(int op, Object obj) {
-        if (pushBackDepth >= pushBackInts.length - 1) {
-            int[] newInts = new int[pushBackInts.length * 2];
-            System.arraycopy(pushBackInts, 0, newInts, 0, pushBackInts.length);
-            pushBackInts = newInts;
-            Object[] newObjects = new Object[pushBackObjects.length * 2];
-            System.arraycopy(pushBackObjects, 0, newObjects, 0, pushBackObjects.length);
-            pushBackObjects = newObjects;
-        }
-        pushBackInts[pushBackDepth] = op;
-        pushBackObjects[pushBackDepth] = obj;
-        pushBackDepth++;
-    }
-
-    /** push back the most recently read token */
-    public final void pushBackToken() { pushBackToken(op, number != null ? (Object)number : (Object)string); }
-
-    /** read a token but leave it in the stream */
-    public final int peekToken() throws IOException {
-        int ret = getToken();
-        pushBackToken();
-        return ret;
-    }
-
-    /** read a token */
-    public final int getToken() throws IOException {
-        number = null;
-        string = null;
-        if (pushBackDepth == 0) {
-            mostRecentlyReadToken = op;
-            return op = _getToken();
-        }
-        pushBackDepth--;
-        op = pushBackInts[pushBackDepth];
-        if (pushBackObjects[pushBackDepth] != null) {
-            number = pushBackObjects[pushBackDepth] instanceof Number ? (Number)pushBackObjects[pushBackDepth] : null;
-            string = pushBackObjects[pushBackDepth] instanceof String ? (String)pushBackObjects[pushBackDepth] : null;
-        }
-        return op;
-    }
-
-    class LexerException extends IOException {
-        public LexerException(String s) { super(sourceName + ":" + line + "," + col + ": " + s); }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/Parser.java b/upstream/org.ibex.core/build/java/org/ibex/js/Parser.java
deleted file mode 100644 (file)
index 51b23b8..0000000
+++ /dev/null
@@ -1,982 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-import org.ibex.util.*;
-import java.io.*;
-
-/**
- *  Parses a stream of lexed tokens into a tree of JSFunction's.
- *
- *  There are three kinds of things we parse: blocks, statements, and
- *  expressions.
- *
- *  - Expressions are a special type of statement that evaluates to a
- *    value (for example, "break" is not an expression, * but "3+2"
- *    is).  Some tokens sequences start expressions (for * example,
- *    literal numbers) and others continue an expression which * has
- *    already been begun (for example, '+').  Finally, some *
- *    expressions are valid targets for an assignment operation; after
- *    * each of these expressions, continueExprAfterAssignable() is
- *    called * to check for an assignment operation.
- *
- *  - A statement ends with a semicolon and does not return a value.
- *
- *  - A block is a single statement or a sequence of statements
- *    surrounded by curly braces.
- *
- *  Each parsing method saves the parserLine before doing its actual
- *  work and restores it afterwards.  This ensures that parsing a
- *  subexpression does not modify the line number until a token
- *  *after* the subexpression has been consumed by the parent
- *  expression.
- *
- *  Technically it would be a better design for this class to build an
- *  intermediate parse tree and use that to emit bytecode.  Here's the
- *  tradeoff:
- *
- *  Advantages of building a parse tree:
- *  - easier to apply optimizations
- *  - would let us handle more sophisticated languages than JavaScript
- *
- *  Advantages of leaving out the parse tree
- *  - faster compilation
- *  - less load on the garbage collector
- *  - much simpler code, easier to understand
- *  - less error-prone
- *
- *  Fortunately JS is such a simple language that we can get away with
- *  the half-assed approach and still produce a working, complete
- *  compiler.
- *
- *  The bytecode language emitted doesn't really cause any appreciable
- *  semantic loss, and is itself a parseable language very similar to
- *  Forth or a postfix variant of LISP.  This means that the bytecode
- *  can be transformed into a parse tree, which can be manipulated.
- *  So if we ever want to add an optimizer, it could easily be done by
- *  producing a parse tree from the bytecode, optimizing that tree,
- *  and then re-emitting the bytecode.  The parse tree node class
- *  would also be much simpler since the bytecode language has so few
- *  operators.
- *
- *  Actually, the above paragraph is slightly inaccurate -- there are
- *  places where we push a value and then perform an arbitrary number
- *  of operations using it before popping it; this doesn't parse well.
- *  But these cases are clearly marked and easy to change if we do
- *  need to move to a parse tree format.
- */
-class Parser extends Lexer implements ByteCodes {
-
-
-    // Constructors //////////////////////////////////////////////////////
-
-    public Parser(Reader r, String sourceName, int line) throws IOException { super(r, sourceName, line); }
-
-    /** for debugging */
-    public static void main(String[] s) throws IOException {
-        JS block = JS.fromReader("stdin", 0, new InputStreamReader(System.in));
-        if (block == null) return;
-        System.out.println(block);
-    }
-
-
-    // Statics ////////////////////////////////////////////////////////////
-
-    static byte[] precedence = new byte[MAX_TOKEN + 1];
-    static boolean[] isRightAssociative = new boolean[MAX_TOKEN + 1];
-    // Use this as the precedence when we want anything up to the comma
-    private final static int NO_COMMA = 2;
-    static {
-        isRightAssociative[ASSIGN] =
-            isRightAssociative[ASSIGN_BITOR] =
-            isRightAssociative[ASSIGN_BITXOR] =
-            isRightAssociative[ASSIGN_BITAND] =
-            isRightAssociative[ASSIGN_LSH] =
-            isRightAssociative[ASSIGN_RSH] =
-            isRightAssociative[ASSIGN_URSH] =
-            isRightAssociative[ASSIGN_ADD] =
-            isRightAssociative[ASSIGN_SUB] =
-            isRightAssociative[ASSIGN_MUL] =
-            isRightAssociative[ASSIGN_DIV] =
-            isRightAssociative[ASSIGN_MOD] =
-            isRightAssociative[ADD_TRAP] =
-            isRightAssociative[DEL_TRAP] =
-            true;
-
-        precedence[COMMA] = 1;
-        // 2 is intentionally left unassigned. we use minPrecedence==2 for comma separated lists
-        precedence[ASSIGN] =
-            precedence[ASSIGN_BITOR] =
-            precedence[ASSIGN_BITXOR] =
-            precedence[ASSIGN_BITAND] =
-            precedence[ASSIGN_LSH] =
-            precedence[ASSIGN_RSH] =
-            precedence[ASSIGN_URSH] =
-            precedence[ASSIGN_ADD] =
-            precedence[ASSIGN_SUB] =
-            precedence[ASSIGN_MUL] =
-            precedence[ASSIGN_DIV] =
-            precedence[ADD_TRAP] =
-            precedence[DEL_TRAP] =
-            precedence[ASSIGN_MOD] = 3;
-        precedence[HOOK] = 4;
-        precedence[OR] = 5;
-        precedence[AND] = 6;
-        precedence[BITOR] = 7;
-        precedence[BITXOR] = 8;
-        precedence[BITAND] = 9;
-        precedence[EQ] = precedence[NE] = precedence[SHEQ] = precedence[SHNE] = 10;
-        precedence[LT] = precedence[LE] = precedence[GT] = precedence[GE] = 11;
-        precedence[LSH] = precedence[RSH] = precedence[URSH] = 12;
-        precedence[ADD] = precedence[SUB] = 12;
-        precedence[MUL] = precedence[DIV] = precedence[MOD] = 13;
-        precedence[BITNOT] =  precedence[BANG] = precedence[TYPEOF] = 14;
-        precedence[DOT] = precedence[LB] = precedence[LP] =  precedence[INC] = precedence[DEC] = 15;
-    }
-
-
-    // Parsing Logic /////////////////////////////////////////////////////////
-
-    /** gets a token and throws an exception if it is not <tt>code</tt> */
-    private void consume(int code) throws IOException {
-        if (getToken() != code) {
-            if(code == NAME) switch(op) {
-                case RETURN: case TYPEOF: case BREAK: case CONTINUE: case TRY: case THROW:
-                case ASSERT: case NULL: case TRUE: case FALSE: case IN: case IF: case ELSE:
-                case SWITCH: case CASE: case DEFAULT: case WHILE: case VAR: case WITH:
-                case CATCH: case FINALLY:
-                    throw pe("Bad variable name; '" + codeToString[op].toLowerCase() + "' is a javascript keyword");
-            }
-            throw pe("expected " + codeToString[code] + ", got " + (op == -1 ? "EOF" : codeToString[op]));
-        }
-    }
-
-    /**
-     *  Parse the largest possible expression containing no operators
-     *  of precedence below <tt>minPrecedence</tt> and append the
-     *  bytecodes for that expression to <tt>appendTo</tt>; the
-     *  appended bytecodes MUST grow the stack by exactly one element.
-     */ 
-    private void startExpr(JSFunction appendTo, int minPrecedence) throws IOException {
-        int saveParserLine = parserLine;
-        _startExpr(appendTo, minPrecedence);
-        parserLine = saveParserLine;
-    }
-    private void _startExpr(JSFunction appendTo, int minPrecedence) throws IOException {
-        int tok = getToken();
-        JSFunction b = appendTo;
-
-        switch (tok) {
-        case -1: throw pe("expected expression");
-
-        // all of these simply push values onto the stack
-        case NUMBER: b.add(parserLine, LITERAL, number); break;
-        case STRING: b.add(parserLine, LITERAL, string); break;
-        case NULL: b.add(parserLine, LITERAL, null); break;
-        case TRUE: case FALSE: b.add(parserLine, LITERAL, JS.B(tok == TRUE)); break;
-
-        // (.foo) syntax
-        case DOT: {
-            consume(NAME);
-            b.add(parserLine, TOPSCOPE);
-            b.add(parserLine, LITERAL, "");
-            b.add(parserLine, GET);
-            b.add(parserLine, LITERAL, string);
-            b.add(parserLine, GET);
-            continueExpr(b, minPrecedence);
-            break;
-        }
-
-        case LB: {
-            b.add(parserLine, ARRAY, JS.ZERO);                       // push an array onto the stack
-            int size0 = b.size;
-            int i = 0;
-            if (peekToken() != RB)
-                while(true) {                                               // iterate over the initialization values
-                    b.add(parserLine, LITERAL, JS.N(i++));           // push the index in the array to place it into
-                    if (peekToken() == COMMA || peekToken() == RB)
-                        b.add(parserLine, LITERAL, null);                   // for stuff like [1,,2,]
-                    else
-                        startExpr(b, NO_COMMA);                             // push the value onto the stack
-                    b.add(parserLine, PUT);                                 // put it into the array
-                    b.add(parserLine, POP);                                 // discard the value remaining on the stack
-                    if (peekToken() == RB) break;
-                    consume(COMMA);
-                }
-            b.set(size0 - 1, JS.N(i));                               // back at the ARRAY instruction, write the size of the array
-            consume(RB);
-            break;
-        }
-        case SUB: {  // negative literal (like "3 * -1")
-            consume(NUMBER);
-            b.add(parserLine, LITERAL, JS.N(number.doubleValue() * -1));
-            break;
-        }
-        case LP: {  // grouping (not calling)
-            startExpr(b, -1);
-            consume(RP);
-            break;
-        }
-        case INC: case DEC: {  // prefix (not postfix)
-            startExpr(b, precedence[tok]);
-            int prev = b.size - 1;
-            if (b.get(prev) == GET && b.getArg(prev) != null)
-                b.set(prev, LITERAL, b.getArg(prev));
-            else if(b.get(prev) == GET)
-                b.pop();
-            else
-                throw pe("prefixed increment/decrement can only be performed on a valid assignment target");
-            b.add(parserLine, GET_PRESERVE, Boolean.TRUE);
-            b.add(parserLine, LITERAL, JS.N(1));
-            b.add(parserLine, tok == INC ? ADD : SUB, JS.N(2));
-            b.add(parserLine, PUT, null);
-            b.add(parserLine, SWAP, null);
-            b.add(parserLine, POP, null);
-            break;
-        }
-        case BANG: case BITNOT: case TYPEOF: {
-            startExpr(b, precedence[tok]);
-            b.add(parserLine, tok);
-            break;
-        }
-        case LC: { // object constructor
-            b.add(parserLine, OBJECT, null);                                     // put an object on the stack
-            if (peekToken() != RC)
-                while(true) {
-                    if (peekToken() != NAME && peekToken() != STRING)
-                        throw pe("expected NAME or STRING");
-                    getToken();
-                    b.add(parserLine, LITERAL, string);                          // grab the key
-                    consume(COLON);
-                    startExpr(b, NO_COMMA);                                      // grab the value
-                    b.add(parserLine, PUT);                                      // put the value into the object
-                    b.add(parserLine, POP);                                      // discard the remaining value
-                    if (peekToken() == RC) break;
-                    consume(COMMA);
-                    if (peekToken() == RC) break;                                // we permit {,,} -- I'm not sure if ECMA does
-                }
-            consume(RC);
-            break;
-        }
-        case NAME: {
-            b.add(parserLine, TOPSCOPE);
-            b.add(parserLine, LITERAL, string);
-            continueExprAfterAssignable(b,minPrecedence);
-            break;
-        }
-        case FUNCTION: {
-            consume(LP);
-            int numArgs = 0;
-            JSFunction b2 = new JSFunction(sourceName, parserLine, null);
-            b.add(parserLine, NEWFUNCTION, b2);
-
-            // function prelude; arguments array is already on the stack
-            b2.add(parserLine, TOPSCOPE);
-            b2.add(parserLine, SWAP);
-            b2.add(parserLine, DECLARE, "arguments");                     // declare arguments (equivalent to 'var arguments;')
-            b2.add(parserLine, SWAP);                                     // set this.arguments and leave the value on the stack
-            b2.add(parserLine, PUT);
-
-            while(peekToken() != RP) {                                    // run through the list of argument names
-                numArgs++;
-                if (peekToken() == NAME) {
-                    consume(NAME);                                        // a named argument
-                    String varName = string;
-                    
-                    b2.add(parserLine, DUP);                              // dup the args array 
-                    b2.add(parserLine, GET, JS.N(numArgs - 1));   // retrieve it from the arguments array
-                    b2.add(parserLine, TOPSCOPE);
-                    b2.add(parserLine, SWAP);
-                    b2.add(parserLine, DECLARE, varName);                  // declare the name
-                    b2.add(parserLine, SWAP);
-                    b2.add(parserLine, PUT); 
-                    b2.add(parserLine, POP);                               // pop the value
-                    b2.add(parserLine, POP);                               // pop the scope                  
-                }
-                if (peekToken() == RP) break;
-                consume(COMMA);
-            }
-            consume(RP);
-
-            b2.numFormalArgs = numArgs;
-            b2.add(parserLine, POP);                                      // pop off the arguments array
-            b2.add(parserLine, POP);                                      // pop off TOPSCOPE
-            
-           if(peekToken() != LC)
-                throw pe("JSFunctions must have a block surrounded by curly brackets");
-                
-            parseBlock(b2, null);                                   // the function body
-
-            b2.add(parserLine, LITERAL, null);                        // in case we "fall out the bottom", return NULL
-            b2.add(parserLine, RETURN);
-
-            break;
-        }
-        default: throw pe("expected expression, found " + codeToString[tok] + ", which cannot start an expression");
-        }
-
-        // attempt to continue the expression
-        continueExpr(b, minPrecedence);
-    }
-    /*
-    private Grammar parseGrammar(Grammar g) throws IOException {
-        int tok = getToken();
-        if (g != null)
-            switch(tok) {
-                case BITOR: return new Grammar.Alternative(g, parseGrammar(null));
-                case ADD:   return parseGrammar(new Grammar.Repetition(g, 1, Integer.MAX_VALUE));
-                case MUL:   return parseGrammar(new Grammar.Repetition(g, 0, Integer.MAX_VALUE));
-                case HOOK:  return parseGrammar(new Grammar.Repetition(g, 0, 1));
-            }
-        Grammar g0 = null;
-        switch(tok) {
-            //case NUMBER: g0 = new Grammar.Literal(number); break;
-            case NAME: g0 = new Grammar.Reference(string); break;
-            case STRING:
-                g0 = new Grammar.Literal(string);
-                if (peekToken() == DOT) {
-                    String old = string;
-                    consume(DOT);
-                    consume(DOT);
-                    consume(STRING);
-                    if (old.length() != 1 || string.length() != 1) throw pe("literal ranges must be single-char strings");
-                    g0 = new Grammar.Range(old.charAt(0), string.charAt(0));
-                }
-                break;
-            case LP:     g0 = parseGrammar(null); consume(RP); break;
-            default:     pushBackToken(); return g;
-        }
-        if (g == null) return parseGrammar(g0);
-        return parseGrammar(new Grammar.Juxtaposition(g, g0));
-    }
-    */
-    /**
-     *  Assuming that a complete assignable (lvalue) has just been
-     *  parsed and the object and key are on the stack,
-     *  <tt>continueExprAfterAssignable</tt> will attempt to parse an
-     *  expression that modifies the assignable.  This method always
-     *  decreases the stack depth by exactly one element.
-     */
-    private void continueExprAfterAssignable(JSFunction b,int minPrecedence) throws IOException {
-        int saveParserLine = parserLine;
-        _continueExprAfterAssignable(b,minPrecedence);
-        parserLine = saveParserLine;
-    }
-    private void _continueExprAfterAssignable(JSFunction b,int minPrecedence) throws IOException {
-        if (b == null) throw new Error("got null b; this should never happen");
-        int tok = getToken();
-        if (minPrecedence != -1 && (precedence[tok] < minPrecedence || (precedence[tok] == minPrecedence && !isRightAssociative[tok])))
-            // force the default case
-            tok = -1;
-        switch(tok) {
-            /*
-        case GRAMMAR: {
-            b.add(parserLine, GET_PRESERVE);
-            Grammar g = parseGrammar(null);
-            if (peekToken() == LC) {
-                g.action = new JSFunction(sourceName, parserLine, null);
-                parseBlock((JSFunction)g.action);
-                ((JSFunction)g.action).add(parserLine, LITERAL, null);         // in case we "fall out the bottom", return NULL              
-                ((JSFunction)g.action).add(parserLine, RETURN);
-            }
-            b.add(parserLine, MAKE_GRAMMAR, g);
-            b.add(parserLine, PUT);
-            break;
-        }
-            */
-        case ASSIGN_BITOR: case ASSIGN_BITXOR: case ASSIGN_BITAND: case ASSIGN_LSH: case ASSIGN_RSH: case ASSIGN_URSH:
-        case ASSIGN_MUL: case ASSIGN_DIV: case ASSIGN_MOD: case ASSIGN_ADD: case ASSIGN_SUB: case ADD_TRAP: case DEL_TRAP: {
-            if (tok != ADD_TRAP && tok != DEL_TRAP) b.add(parserLine, GET_PRESERVE);
-            
-            startExpr(b,  precedence[tok]);
-            
-            if (tok != ADD_TRAP && tok != DEL_TRAP) {
-                // tok-1 is always s/^ASSIGN_// (0 is BITOR, 1 is ASSIGN_BITOR, etc) 
-                b.add(parserLine, tok - 1, tok-1==ADD ? JS.N(2) : null);
-                b.add(parserLine, PUT);
-                b.add(parserLine, SWAP);
-                b.add(parserLine, POP);
-            } else {
-                b.add(parserLine, tok);
-            }
-            break;
-        }
-        case INC: case DEC: { // postfix
-            b.add(parserLine, GET_PRESERVE, Boolean.TRUE);
-            b.add(parserLine, LITERAL, JS.N(1));
-            b.add(parserLine, tok == INC ? ADD : SUB, JS.N(2));
-            b.add(parserLine, PUT, null);
-            b.add(parserLine, SWAP, null);
-            b.add(parserLine, POP, null);
-            b.add(parserLine, LITERAL, JS.N(1));
-            b.add(parserLine, tok == INC ? SUB : ADD, JS.N(2));   // undo what we just did, since this is postfix
-            break;
-        }
-        case ASSIGN: {
-            startExpr(b, precedence[tok]);
-            b.add(parserLine, PUT);
-            b.add(parserLine, SWAP);
-            b.add(parserLine, POP);
-            break;
-        }
-        case LP: {
-
-            // Method calls are implemented by doing a GET_PRESERVE
-            // first.  If the object supports method calls, it will
-            // return JS.METHOD
-            int n = parseArgs(b, 2);
-            b.add(parserLine, GET_PRESERVE);
-            b.add(parserLine, CALLMETHOD, JS.N(n));
-            break;
-        }
-        default: {
-            pushBackToken();
-            if(b.get(b.size-1) == LITERAL && b.getArg(b.size-1) != null)
-                b.set(b.size-1,GET,b.getArg(b.size-1));
-            else
-                b.add(parserLine, GET);
-            return;
-        }
-        }
-    }
-
-
-    /**
-     *  Assuming that a complete expression has just been parsed,
-     *  <tt>continueExpr</tt> will attempt to extend this expression by
-     *  parsing additional tokens and appending additional bytecodes.
-     *
-     *  No operators with precedence less than <tt>minPrecedence</tt>
-     *  will be parsed.
-     *
-     *  If any bytecodes are appended, they will not alter the stack
-     *  depth.
-     */
-    private void continueExpr(JSFunction b, int minPrecedence) throws IOException {
-        int saveParserLine = parserLine;
-        _continueExpr(b, minPrecedence);
-        parserLine = saveParserLine;
-    }
-    private void _continueExpr(JSFunction b, int minPrecedence) throws IOException {
-        if (b == null) throw new Error("got null b; this should never happen");
-        int tok = getToken();
-        if (tok == -1) return;
-        if (minPrecedence != -1 && (precedence[tok] < minPrecedence || (precedence[tok] == minPrecedence && !isRightAssociative[tok]))) {
-            pushBackToken();
-            return;
-        }
-
-        switch (tok) {
-        case LP: {  // invocation (not grouping)
-            int n = parseArgs(b, 1);
-            b.add(parserLine, CALL, JS.N(n));
-            break;
-        }
-        case BITOR: case BITXOR: case BITAND: case SHEQ: case SHNE: case LSH:
-        case RSH: case URSH: case MUL: case DIV: case MOD:
-        case GT: case GE: case EQ: case NE: case LT: case LE: case SUB: {
-            startExpr(b, precedence[tok]);
-            b.add(parserLine, tok);
-            break;
-        }
-        case ADD: {
-            int count=1;
-            int nextTok;
-            do {
-                startExpr(b,precedence[tok]);
-                count++;
-                nextTok = getToken();
-            } while(nextTok == tok);
-            pushBackToken();
-            b.add(parserLine, tok, JS.N(count));
-            break;
-        }
-        case OR: case AND: {
-            b.add(parserLine, tok == AND ? JSFunction.JF : JSFunction.JT, JS.ZERO);       // test to see if we can short-circuit
-            int size = b.size;
-            startExpr(b, precedence[tok]);                                     // otherwise check the second value
-            b.add(parserLine, JMP, JS.N(2));                            // leave the second value on the stack and jump to the end
-            b.add(parserLine, LITERAL, tok == AND ?
-                  JS.B(false) : JS.B(true));                     // target of the short-circuit jump is here
-            b.set(size - 1, JS.N(b.size - size));                     // write the target of the short-circuit jump
-            break;
-        }
-        case DOT: {
-            // support foo..bar syntax for foo[""].bar
-            if (peekToken() == DOT) {
-                string = "";
-            } else {
-                consume(NAME);
-            }
-            b.add(parserLine, LITERAL, string);
-            continueExprAfterAssignable(b,minPrecedence);
-            break;
-        }
-        case LB: { // subscripting (not array constructor)
-            startExpr(b, -1);
-            consume(RB);
-            continueExprAfterAssignable(b,minPrecedence);
-            break;
-        }
-        case HOOK: {
-            b.add(parserLine, JF, JS.ZERO);                // jump to the if-false expression
-            int size = b.size;
-            startExpr(b, minPrecedence);                          // write the if-true expression
-            b.add(parserLine, JMP, JS.ZERO);               // if true, jump *over* the if-false expression     
-            b.set(size - 1, JS.N(b.size - size + 1));    // now we know where the target of the jump is
-            consume(COLON);
-            size = b.size;
-            startExpr(b, minPrecedence);                          // write the if-false expression
-            b.set(size - 1, JS.N(b.size - size + 1));    // this is the end; jump to here
-            break;
-        }
-        case COMMA: {
-            // pop the result of the previous expression, it is ignored
-            b.add(parserLine,POP);
-            startExpr(b,-1);
-            break;
-        }
-        default: {
-            pushBackToken();
-            return;
-        }
-        }
-
-        continueExpr(b, minPrecedence);                           // try to continue the expression
-    }
-    
-    // parse a set of comma separated function arguments, assume LP has already been consumed
-    // if swap is true, (because the function is already on the stack) we will SWAP after each argument to keep it on top
-    private int parseArgs(JSFunction b, int pushdown) throws IOException {
-        int i = 0;
-        while(peekToken() != RP) {
-            i++;
-            if (peekToken() != COMMA) {
-                startExpr(b, NO_COMMA);
-                b.add(parserLine, SWAP, JS.N(pushdown));
-                if (peekToken() == RP) break;
-            }
-            consume(COMMA);
-        }
-        consume(RP);
-        return i;
-    }
-    
-    /** Parse a block of statements which must be surrounded by LC..RC. */
-    void parseBlock(JSFunction b) throws IOException { parseBlock(b, null); }
-    void parseBlock(JSFunction b, String label) throws IOException {
-        int saveParserLine = parserLine;
-        _parseBlock(b, label);
-        parserLine = saveParserLine;
-    }
-    void _parseBlock(JSFunction b, String label) throws IOException {
-        if (peekToken() == -1) return;
-        else if (peekToken() != LC) parseStatement(b, null);
-        else {
-            consume(LC);
-            while(peekToken() != RC && peekToken() != -1) parseStatement(b, null);
-            consume(RC);
-        }
-    }
-
-    /** Parse a single statement, consuming the RC or SEMI which terminates it. */
-    void parseStatement(JSFunction b, String label) throws IOException {
-        int saveParserLine = parserLine;
-        _parseStatement(b, label);
-        parserLine = saveParserLine;
-    }
-    void _parseStatement(JSFunction b, String label) throws IOException {
-        int tok = peekToken();
-        if (tok == -1) return;
-        switch(tok = getToken()) {
-            
-        case THROW: case ASSERT: case RETURN: {
-            if (tok == RETURN && peekToken() == SEMI)
-                b.add(parserLine, LITERAL, null);
-            else
-                startExpr(b, -1);
-            b.add(parserLine, tok);
-            consume(SEMI);
-            break;
-        }
-        case BREAK: case CONTINUE: {
-            if (peekToken() == NAME) consume(NAME);
-            b.add(parserLine, tok, string);
-            consume(SEMI);
-            break;
-        }
-        case VAR: {
-            b.add(parserLine, TOPSCOPE);                         // push the current scope
-            while(true) {
-                consume(NAME);
-                b.add(parserLine, DECLARE, string);               // declare it
-                if (peekToken() == ASSIGN) {                     // if there is an '=' after the variable name
-                    consume(ASSIGN);
-                    startExpr(b, NO_COMMA);
-                    b.add(parserLine, PUT);                      // assign it
-                    b.add(parserLine, POP);                      // clean the stack
-                } else {
-                    b.add(parserLine, POP);                      // pop the string pushed by declare
-                }   
-                if (peekToken() != COMMA) break;
-                consume(COMMA);
-            }
-            b.add(parserLine, POP);                              // pop off the topscope
-            if ((mostRecentlyReadToken != RC || peekToken() == SEMI) && peekToken() != -1 && mostRecentlyReadToken != SEMI) consume(SEMI);
-            break;
-        }
-        case IF: {
-            consume(LP);
-            startExpr(b, -1);
-            consume(RP);
-            
-            b.add(parserLine, JF, JS.ZERO);                    // if false, jump to the else-block
-            int size = b.size;
-            parseStatement(b, null);
-            
-            if (peekToken() == ELSE) {
-                consume(ELSE);
-                b.add(parserLine, JMP, JS.ZERO);               // if we took the true-block, jump over the else-block
-                b.set(size - 1, JS.N(b.size - size + 1));
-                size = b.size;
-                parseStatement(b, null);
-            }
-            b.set(size - 1, JS.N(b.size - size + 1));        // regardless of which branch we took, b[size] needs to point here
-            break;
-        }
-        case WHILE: {
-            consume(LP);
-            if (label != null) b.add(parserLine, LABEL, label);
-            b.add(parserLine, LOOP);
-            int size = b.size;
-            b.add(parserLine, POP);                                   // discard the first-iteration indicator
-            startExpr(b, -1);
-            b.add(parserLine, JT, JS.N(2));                    // if the while() clause is true, jump over the BREAK
-            b.add(parserLine, BREAK);
-            consume(RP);
-            parseStatement(b, null);
-            b.add(parserLine, CONTINUE);                              // if we fall out of the end, definately continue
-            b.set(size - 1, JS.N(b.size - size + 1));        // end of the loop
-            break;
-        }
-        case SWITCH: {
-            consume(LP);
-            if (label != null) b.add(parserLine, LABEL, label);
-            b.add(parserLine, LOOP);
-            int size0 = b.size;
-            startExpr(b, -1);
-            consume(RP);
-            consume(LC);
-            while(true)
-                if (peekToken() == CASE) {                         // we compile CASE statements like a bunch of if..else's
-                    consume(CASE);
-                    b.add(parserLine, DUP);                        // duplicate the switch() value; we'll consume one copy
-                    startExpr(b, -1);
-                    consume(COLON);
-                    b.add(parserLine, EQ);                         // check if we should do this case-block
-                    b.add(parserLine, JF, JS.ZERO);         // if not, jump to the next one
-                    int size = b.size;
-                    while(peekToken() != CASE && peekToken() != DEFAULT && peekToken() != RC) parseStatement(b, null);
-                    b.set(size - 1, JS.N(1 + b.size - size));
-                } else if (peekToken() == DEFAULT) {
-                    consume(DEFAULT);
-                    consume(COLON);
-                    while(peekToken() != CASE && peekToken() != DEFAULT && peekToken() != RC) parseStatement(b, null);
-                } else if (peekToken() == RC) {
-                    consume(RC);
-                    b.add(parserLine, BREAK);                      // break out of the loop if we 'fall through'
-                    break;
-                } else {
-                    throw pe("expected CASE, DEFAULT, or RC; got " + codeToString[peekToken()]);
-                }
-            b.set(size0 - 1, JS.N(b.size - size0 + 1));      // end of the loop
-            break;
-        }
-            
-        case DO: {
-            if (label != null) b.add(parserLine, LABEL, label);
-            b.add(parserLine, LOOP);
-            int size = b.size;
-            parseStatement(b, null);
-            consume(WHILE);
-            consume(LP);
-            startExpr(b, -1);
-            b.add(parserLine, JT, JS.N(2));                  // check the while() clause; jump over the BREAK if true
-            b.add(parserLine, BREAK);
-            b.add(parserLine, CONTINUE);
-            consume(RP);
-            consume(SEMI);
-            b.set(size - 1, JS.N(b.size - size + 1));      // end of the loop; write this location to the LOOP instruction
-            break;
-        }
-            
-        case TRY: {
-            b.add(parserLine, TRY); // try bytecode causes a TryMarker to be pushed
-            int tryInsn = b.size - 1;
-            // parse the expression to be TRYed
-            parseStatement(b, null); 
-            // pop the try  marker. this is pushed when the TRY bytecode is executed                              
-            b.add(parserLine, POP);
-            // jump forward to the end of the catch block, start of the finally block                             
-            b.add(parserLine, JMP);                                  
-            int successJMPInsn = b.size - 1;
-            
-            if (peekToken() != CATCH && peekToken() != FINALLY)
-                throw pe("try without catch or finally");
-            
-            int catchJMPDistance = -1;
-            if (peekToken() == CATCH) {
-                Vec catchEnds = new Vec();
-                boolean catchAll = false;
-                
-                catchJMPDistance = b.size - tryInsn;
-                
-                while(peekToken() == CATCH && !catchAll) {
-                    String exceptionVar;
-                    getToken();
-                    consume(LP);
-                    consume(NAME);
-                    exceptionVar = string;
-                    int[] writebacks = new int[] { -1, -1, -1 };
-                    if (peekToken() != RP) {
-                        // extended Ibex catch block: catch(e faultCode "foo.bar.baz")
-                        consume(NAME);
-                        b.add(parserLine, DUP);
-                        b.add(parserLine, LITERAL, string);
-                        b.add(parserLine, GET);
-                        b.add(parserLine, DUP);
-                        b.add(parserLine, LITERAL, null);
-                        b.add(parserLine, EQ);
-                        b.add(parserLine, JT);
-                        writebacks[0] = b.size - 1;
-                        if (peekToken() == STRING) {
-                            consume(STRING);
-                            b.add(parserLine, DUP);
-                            b.add(parserLine, LITERAL, string);
-                            b.add(parserLine, LT);
-                            b.add(parserLine, JT);
-                            writebacks[1] = b.size - 1;
-                            b.add(parserLine, DUP);
-                            b.add(parserLine, LITERAL, string + "/");   // (slash is ASCII after dot)
-                            b.add(parserLine, GE);
-                            b.add(parserLine, JT);
-                            writebacks[2] = b.size - 1;
-                        } else {
-                            consume(NUMBER);
-                            b.add(parserLine, DUP);
-                            b.add(parserLine, LITERAL, number);
-                            b.add(parserLine, EQ);
-                            b.add(parserLine, JF);
-                            writebacks[1] = b.size - 1;
-                        }
-                        b.add(parserLine, POP);  // pop the element thats on the stack from the compare
-                    } else {
-                        catchAll = true;
-                    }
-                    consume(RP);
-                    // the exception is on top of the stack; put it to the chosen name
-                    b.add(parserLine, NEWSCOPE);
-                    b.add(parserLine, TOPSCOPE);
-                    b.add(parserLine, SWAP);
-                    b.add(parserLine, LITERAL,exceptionVar);
-                    b.add(parserLine, DECLARE);
-                    b.add(parserLine, SWAP);
-                    b.add(parserLine, PUT);
-                    b.add(parserLine, POP);
-                    b.add(parserLine, POP);
-                    parseBlock(b, null);
-                    b.add(parserLine, OLDSCOPE);
-                    
-                    b.add(parserLine, JMP);
-                    catchEnds.addElement(new Integer(b.size-1));
-                    
-                    for(int i=0; i<3; i++) if (writebacks[i] != -1) b.set(writebacks[i], JS.N(b.size-writebacks[i]));
-                    b.add(parserLine, POP); // pop the element thats on the stack from the compare
-                }
-                
-                if(!catchAll)
-                    b.add(parserLine, THROW);
-                
-                for(int i=0;i<catchEnds.size();i++) {
-                    int n = ((Integer)catchEnds.elementAt(i)).intValue();
-                    b.set(n, JS.N(b.size-n));
-                }
-                
-                // pop the try and catch markers
-                b.add(parserLine,POP);
-                b.add(parserLine,POP);
-            }
-                        
-            // jump here if no exception was thrown
-            b.set(successJMPInsn, JS.N(b.size - successJMPInsn)); 
-                        
-            int finallyJMPDistance = -1;
-            if (peekToken() == FINALLY) {
-                b.add(parserLine, LITERAL, null); // null FinallyData
-                finallyJMPDistance = b.size - tryInsn;
-                consume(FINALLY);
-                parseStatement(b, null);
-                b.add(parserLine,FINALLY_DONE); 
-            }
-            
-            // setup the TRY arguments
-            b.set(tryInsn, new int[] { catchJMPDistance, finallyJMPDistance });
-            
-            break;
-        }
-            
-        case FOR: {
-            consume(LP);
-            
-            tok = getToken();
-            boolean hadVar = false;                                      // if it's a for..in, we ignore the VAR
-            if (tok == VAR) { hadVar = true; tok = getToken(); }
-            String varName = string;
-            boolean forIn = peekToken() == IN;                           // determine if this is a for..in loop or not
-            pushBackToken(tok, varName);
-            
-            if (forIn) {
-                consume(NAME);
-                consume(IN);
-                startExpr(b,-1);
-                consume(RP);
-                
-                b.add(parserLine, PUSHKEYS);
-                b.add(parserLine, DUP); 
-                b.add(parserLine, LITERAL, "length"); 
-                b.add(parserLine, GET);
-                // Stack is now: n, keys, obj, ...
-                
-                int size = b.size;
-                b.add(parserLine, LOOP);
-                b.add(parserLine, POP);
-                // Stack is now: LoopMarker, n, keys, obj, ...
-                // NOTE: This will break if the interpreter ever becomes more strict 
-                //       and prevents bytecode from messing with the Markers
-                b.add(parserLine, SWAP, JS.N(3));
-                // Stack is now: Tn, keys, obj, LoopMarker, ...
-                
-                b.add(parserLine, LITERAL, JS.N(1));
-                b.add(parserLine, SUB);
-                b.add(parserLine, DUP);
-                // Stack is now: index, keys, obj, LoopMarker
-                b.add(parserLine, LITERAL, JS.ZERO);
-                b.add(parserLine, LT);
-                // Stack is now index<0, index, keys, obj, LoopMarker, ...
-                
-                b.add(parserLine, JF, JS.N(5)); // if we're >= 0 jump 5 down (to NEWSCOPE)
-                // Move the LoopMarker back  into place - this is sort of ugly
-                b.add(parserLine, SWAP, JS.N(3));
-                b.add(parserLine, SWAP, JS.N(3));
-                b.add(parserLine, SWAP, JS.N(3));
-                // Stack is now: LoopMarker, -1, keys, obj, ...
-                b.add(parserLine, BREAK);
-                
-                b.add(parserLine, NEWSCOPE);
-                if(hadVar) {
-                    b.add(parserLine, DECLARE, varName);
-                    b.add(parserLine, POP);
-                }
-                
-                // Stack is now: index, keys, obj, LoopMarker, ...
-                b.add(parserLine, GET_PRESERVE);     // key, index, keys, obj, LoopMarker, ...
-                b.add(parserLine, TOPSCOPE);         // scope, key, index, keys, obj, LoopMarker, ...
-                b.add(parserLine, SWAP);             // key, scope, index, keys, obj, LoopMarker, ...
-                b.add(parserLine, LITERAL, varName); // varName, key, scope, index, keys, obj, LoopMaker, ...
-                b.add(parserLine, SWAP);             // key, varName, scope, index, keys, obj, LoopMarker, ...
-                b.add(parserLine, PUT);              // key, scope, index, keys, obj, LoopMarker, ...
-                b.add(parserLine, POP);              // scope, index, keys, obj, LoopMarker
-                b.add(parserLine, POP);              // index, keys, obj, LoopMarker, ...
-                // Move the LoopMarker back into place - this is sort of ugly
-                b.add(parserLine, SWAP, JS.N(3));
-                b.add(parserLine, SWAP, JS.N(3));
-                b.add(parserLine, SWAP, JS.N(3));
-                
-                parseStatement(b, null);
-                
-                b.add(parserLine, OLDSCOPE);
-                b.add(parserLine, CONTINUE);
-                // jump here on break
-                b.set(size, JS.N(b.size - size));
-                
-                b.add(parserLine, POP); // N
-                b.add(parserLine, POP); // KEYS
-                b.add(parserLine, POP); // OBJ
-                
-            } else {
-                if (hadVar) pushBackToken(VAR, null);                    // yeah, this actually matters
-                b.add(parserLine, NEWSCOPE);                             // grab a fresh scope
-                    
-                parseStatement(b, null);                                 // initializer
-                JSFunction e2 =                                    // we need to put the incrementor before the test
-                    new JSFunction(sourceName, parserLine, null);  // so we save the test here
-                if (peekToken() != SEMI)
-                    startExpr(e2, -1);
-                else
-                    e2.add(parserLine, JSFunction.LITERAL, Boolean.TRUE);         // handle the for(foo;;foo) case
-                consume(SEMI);
-                if (label != null) b.add(parserLine, LABEL, label);
-                b.add(parserLine, LOOP);
-                int size2 = b.size;
-                    
-                b.add(parserLine, JT, JS.ZERO);                   // if we're on the first iteration, jump over the incrementor
-                int size = b.size;
-                if (peekToken() != RP) {                                 // do the increment thing
-                    startExpr(b, -1);
-                    b.add(parserLine, POP);
-                }
-                b.set(size - 1, JS.N(b.size - size + 1));
-                consume(RP);
-                    
-                b.paste(e2);                                             // ok, *now* test if we're done yet
-                b.add(parserLine, JT, JS.N(2));                   // break out if we don't meet the test
-                b.add(parserLine, BREAK);
-                parseStatement(b, null);
-                b.add(parserLine, CONTINUE);                             // if we fall out the bottom, CONTINUE
-                b.set(size2 - 1, JS.N(b.size - size2 + 1));     // end of the loop
-                    
-                b.add(parserLine, OLDSCOPE);                             // get our scope back
-            }
-            break;
-        }
-                
-        case NAME: {  // either a label or an identifier; this is the one place we're not LL(1)
-            String possiblyTheLabel = string;
-            if (peekToken() == COLON) {      // label
-                consume(COLON);
-                parseStatement(b, possiblyTheLabel);
-                break;
-            } else {                         // expression
-                pushBackToken(NAME, possiblyTheLabel);  
-                startExpr(b, -1);
-                b.add(parserLine, POP);
-                if ((mostRecentlyReadToken != RC || peekToken() == SEMI) && peekToken() != -1 && mostRecentlyReadToken != SEMI) consume(SEMI);
-                break;
-            }
-        }
-
-        case SEMI: return;                                               // yep, the null statement is valid
-
-        case LC: {  // blocks are statements too
-            pushBackToken();
-            b.add(parserLine, NEWSCOPE);
-            parseBlock(b, label);
-            b.add(parserLine, OLDSCOPE);
-            break;
-        }
-
-        default: {  // hope that it's an expression
-            pushBackToken();
-            startExpr(b, -1);
-            b.add(parserLine, POP);
-            if ((mostRecentlyReadToken != RC || peekToken() == SEMI) && peekToken() != -1 && mostRecentlyReadToken != SEMI) consume(SEMI);
-            break;
-        }
-        }
-    }
-
-
-    // ParserException //////////////////////////////////////////////////////////////////////
-    private IOException pe(String s) { return new IOException(sourceName + ":" + line + " " + s); }
-    
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/Stream.java b/upstream/org.ibex.core/build/java/org/ibex/js/Stream.java
deleted file mode 100644 (file)
index 05045e9..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-import java.io.*;
-import java.util.zip.*;
-import org.ibex.util.*;
-import org.ibex.plat.*;
-import org.ibex.net.*;
-
-/**
- *   Essentiall an InputStream "factory".  You can repeatedly ask a
- *   Stream for an InputStream, and each InputStream you get back will
- *   be totally independent of the others (ie separate stream position
- *   and state) although they draw from the same data source.
- */
-public abstract class Stream extends JS.Cloneable {
-
-    // Public Interface //////////////////////////////////////////////////////////////////////////////
-
-    public static InputStream getInputStream(Object js) throws IOException { return ((Stream)((JS)js).unclone()).getInputStream();}
-    public static class NotCacheableException extends Exception { }
-
-    // streams are "sealed" by default to prevent accidental object leakage
-    public void put(Object key, Object val) { }
-    private Cache getCache = new Cache(100);
-    protected Object _get(Object key) { return null; }
-    public final Object get(Object key) {
-        Object ret = getCache.get(key);
-        if (ret == null) getCache.put(key, ret = _get(key));
-        return ret;
-    }
-
-    // Private Interface //////////////////////////////////////////////////////////////////////////////
-
-    public abstract InputStream getInputStream() throws IOException;
-    protected String getCacheKey() throws NotCacheableException { throw new NotCacheableException(); }
-
-    /** HTTP or HTTPS resource */
-    public static class HTTP extends Stream {
-        private String url;
-        public String toString() { return "Stream.HTTP:" + url; }
-        public HTTP(String url) { while (url.endsWith("/")) url = url.substring(0, url.length() - 1); this.url = url; }
-        public Object _get(Object key) { return new HTTP(url + "/" + (String)key); }
-        public String getCacheKey(Vec path) throws NotCacheableException { return url; }
-        public InputStream getInputStream() throws IOException { return new org.ibex.net.HTTP(url).GET(); }
-    }
-
-    /** byte arrays */
-    public static class ByteArray extends Stream {
-        private byte[] bytes;
-        private String cacheKey;
-        public ByteArray(byte[] bytes, String cacheKey) { this.bytes = bytes; this.cacheKey = cacheKey; }
-        public String getCacheKey() throws NotCacheableException {
-            if (cacheKey == null) throw new NotCacheableException(); return cacheKey; }
-        public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(bytes); }
-    }
-
-    /** a file */
-    public static class File extends Stream {
-        private String path;
-        public File(String path) { this.path = path; }
-        public String toString() { return "file:" + path; }
-        public String getCacheKey() throws NotCacheableException { throw new NotCacheableException(); /* already on disk */ }
-        public InputStream getInputStream() throws IOException { return new FileInputStream(path); }
-        public Object _get(Object key) { return new File(path + java.io.File.separatorChar + (String)key); }
-    }
-
-    /** "unwrap" a Zip archive */
-    public static class Zip extends Stream {
-        private Stream parent;
-        private String path;
-        public Zip(Stream parent) { this(parent, null); }
-        public Zip(Stream parent, String path) {
-            while(path != null && path.startsWith("/")) path = path.substring(1);
-            this.parent = parent;
-            this.path = path;
-        }
-        public String getCacheKey() throws NotCacheableException { return parent.getCacheKey() + "!zip:"; }
-        public Object _get(Object key) { return new Zip(parent, path==null?(String)key:path+'/'+(String)key); }
-        public InputStream getInputStream() throws IOException {
-            InputStream pis = parent.getInputStream();
-            ZipInputStream zis = new ZipInputStream(pis);
-            ZipEntry ze = zis.getNextEntry();
-            while(ze != null && !ze.getName().equals(path)) ze = zis.getNextEntry();
-            if (ze == null) throw new IOException("requested file (" + path + ") not found in archive");
-            return new KnownLength.KnownLengthInputStream(zis, (int)ze.getSize());
-        }
-    }
-
-    /** "unwrap" a Cab archive */
-    public static class Cab extends Stream {
-        private Stream parent;
-        private String path;
-        public Cab(Stream parent) { this(parent, null); }
-        public Cab(Stream parent, String path) { this.parent = parent; this.path = path; }
-        public String getCacheKey() throws NotCacheableException { return parent.getCacheKey() + "!cab:"; }
-        public Object _get(Object key) { return new Cab(parent, path==null?(String)key:path+'/'+(String)key); }
-        public InputStream getInputStream() throws IOException { return new MSPack(parent.getInputStream()).getInputStream(path); }
-    }
-
-    /** the Builtin resource */
-    public static class Builtin extends Stream {
-        public String getCacheKey() throws NotCacheableException { throw new NotCacheableException(); }
-        public InputStream getInputStream() throws IOException { return Platform.getBuiltinInputStream(); }
-    }
-
-    /** shadow resource which replaces the graft */
-    public static class ProgressWatcher extends Stream {
-        final Stream watchee;
-        JS callback;
-        public ProgressWatcher(Stream watchee, JS callback) { this.watchee = watchee; this.callback = callback; }
-        public String getCacheKey() throws NotCacheableException { return watchee.getCacheKey(); }
-        public InputStream getInputStream() throws IOException {
-            final InputStream is = watchee.getInputStream();
-            return new FilterInputStream(is) {
-                    int bytesDownloaded = 0;
-                    public int read() throws IOException {
-                        int ret = super.read();
-                        if (ret != -1) bytesDownloaded++;
-                        return ret;
-                    }
-                    public int read(byte[] b, int off, int len) throws IOException {
-                        int ret = super.read(b, off, len);
-                        if (ret != 1) bytesDownloaded += ret;
-                        Scheduler.add(new Task() { public void perform() throws IOException, JSExn {
-                            callback.call(N(bytesDownloaded),
-                                          N(is instanceof KnownLength ? ((KnownLength)is).getLength() : 0), null, null, 2);
-                        } });
-                        return ret;
-                    }
-                };
-        }
-    }
-
-    /** subclass from this if you want a CachedInputStream for each path */
-    public static class CachedStream extends Stream {
-        private Stream parent;
-        private boolean disk = false;
-        private String key;
-        public String getCacheKey() throws NotCacheableException { return key; }
-        CachedInputStream cis = null;
-        public CachedStream(Stream p, String s, boolean d) throws NotCacheableException {
-            this.parent = p; this.disk = d; this.key = p.getCacheKey();
-        }
-        public InputStream getInputStream() throws IOException {
-            if (cis != null) return cis.getInputStream();
-            if (!disk) {
-                cis = new CachedInputStream(parent.getInputStream());
-            } else {
-                java.io.File f = org.ibex.core.LocalStorage.Cache.getCacheFileForKey(key);
-                if (f.exists()) return new FileInputStream(f);
-                cis = new CachedInputStream(parent.getInputStream(), f);
-            }
-            return cis.getInputStream();
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/Tokens.java b/upstream/org.ibex.core/build/java/org/ibex/js/Tokens.java
deleted file mode 100644 (file)
index 8970e14..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-/** this class contains a <tt>public static final int</tt> for each valid token */
-interface Tokens {
-
-    // Token Constants //////////////////////////////////////////////////////////
-
-    // arithmetic operations; also valid as bytecodes
-    public static final int BITOR         = 0;   // |
-    public static final int ASSIGN_BITOR  = 1;   // |=
-    public static final int BITXOR        = 2;   // ^
-    public static final int ASSIGN_BITXOR = 3;   // ^=
-    public static final int BITAND        = 4;   // &
-    public static final int ASSIGN_BITAND = 5;   // &=
-    public static final int LSH           = 6;   // <<
-    public static final int ASSIGN_LSH    = 7;   // <<=
-    public static final int RSH           = 8;   // >>
-    public static final int ASSIGN_RSH    = 9;   // >>=
-    public static final int URSH          = 10;  // >>>
-    public static final int ASSIGN_URSH   = 11;  // >>>=
-    public static final int ADD           = 12;  // +
-    public static final int ASSIGN_ADD    = 13;  // +=
-    public static final int SUB           = 14;  // -
-    public static final int ASSIGN_SUB    = 15;  // -=
-    public static final int MUL           = 16;  // *
-    public static final int ASSIGN_MUL    = 17;  // *=
-    public static final int DIV           = 18;  // /
-    public static final int ASSIGN_DIV    = 19;  // /=
-    public static final int MOD           = 20;  // %
-    public static final int ASSIGN_MOD    = 21;  // %=
-    public static final int BITNOT        = 22;  // ~
-    public static final int ASSIGN_BITNOT = 23;  // ~=
-
-    // logical operations; also valid as bytecodes
-    public static final int OR            = 24;  // ||
-    public static final int AND           = 25;  // &&
-    public static final int BANG          = 26;  // !
-
-    // equality operations; also valid as bytecodes
-    public static final int EQ            = 27;  // ==
-    public static final int NE            = 28;  // !=
-    public static final int LT            = 29;  // <
-    public static final int LE            = 30;  // <=
-    public static final int GT            = 31;  // >
-    public static final int GE            = 32;  // >=
-    public static final int SHEQ          = 33;  // ===
-    public static final int SHNE          = 34;  // !==
-
-    // other permissible bytecode tokens
-    public static final int RETURN        = 35;  // return
-    public static final int TYPEOF        = 36;  // typeof
-    public static final int BREAK         = 37;  // break keyword
-    public static final int CONTINUE      = 38;  // continue keyword
-    public static final int TRY           = 39;  // try
-    public static final int THROW         = 40;  // throw
-    public static final int ASSERT        = 41;  // assert keyword
-
-    public static final int NAME          = 42;  // *** identifiers ***
-    public static final int NUMBER        = 43;  // *** numeric literals ***
-    public static final int STRING        = 44;  // *** string literals ***
-    public static final int NULL          = 45;  // null
-    public static final int THIS          = 46;  // this
-    public static final int FALSE         = 47;  // false
-    public static final int TRUE          = 48;  // true
-    public static final int IN            = 49;  // in
-
-    public static final int SEMI          = 50;  // ;
-    public static final int LB            = 51;  // [
-    public static final int RB            = 52;  // ]
-    public static final int LC            = 53;  // {
-    public static final int RC            = 54;  // }
-    public static final int LP            = 55;  // (
-    public static final int RP            = 56;  // )
-    public static final int COMMA         = 57;  // ,
-    public static final int ASSIGN        = 58;  // =
-    public static final int HOOK          = 59;  // ?
-    public static final int COLON         = 60;  // :
-    public static final int INC           = 61;  // ++
-    public static final int DEC           = 62;  // --
-    public static final int DOT           = 63;  // .
-    public static final int FUNCTION      = 64;  // function
-    public static final int IF            = 65;  // if keyword
-    public static final int ELSE          = 66;  // else keyword
-    public static final int SWITCH        = 67;  // switch keyword
-    public static final int CASE          = 68;  // case keyword
-    public static final int DEFAULT       = 69;  // default keyword
-    public static final int WHILE         = 70;  // while keyword
-    public static final int DO            = 71;  // do keyword
-    public static final int FOR           = 72;  // for keyword
-    public static final int VAR           = 73;  // var keyword
-    public static final int WITH          = 74;  // with keyword
-    public static final int CATCH         = 75;  // catch keyword
-    public static final int FINALLY       = 76;  // finally keyword
-    public static final int RESERVED      = 77;  // reserved keyword
-    public static final int GRAMMAR       = 78;  // the grammar-definition operator (::=)
-    public static final int ADD_TRAP      = 79;  // the add-trap operator (++=)
-    public static final int DEL_TRAP      = 80;  // the del-trap operator (--=)
-    public static final int MAX_TOKEN = DEL_TRAP;
-
-    public final static String[] codeToString = new String[] {
-        "BITOR", "ASSIGN_BITOR", "BITXOR", "ASSIGN_BITXOR", "BITAND",
-        "ASSIGN_BITAND", "LSH", "ASSIGN_LSH", "RSH", "ASSIGN_RSH",
-        "URSH", "ASSIGN_URSH", "ADD", "ASSIGN_ADD", "SUB",
-        "ASSIGN_SUB", "MUL", "ASSIGN_MUL", "DIV", "ASSIGN_DIV", "MOD",
-        "ASSIGN_MOD", "BITNOT", "ASSIGN_BITNOT", "OR", "AND", "BANG",
-        "EQ", "NE", "LT", "LE", "GT", "GE", "SHEQ", "SHNE", "RETURN",
-        "TYPEOF", "BREAK", "CONTINUE", "TRY", "THROW", "ASSERT", "NAME",
-        "NUMBER", "STRING", "NULL", "THIS", "FALSE", "TRUE", "IN",
-        "SEMI", "LB", "RB", "LC", "RC", "LP", "RP", "COMMA", "ASSIGN",
-        "HOOK", "COLON", "INC", "DEC", "DOT", "FUNCTION", "IF",
-        "ELSE", "SWITCH", "CASE", "DEFAULT", "WHILE", "DO", "FOR",
-        "VAR", "WITH", "CATCH", "FINALLY", "RESERVED", "GRAMMAR",
-        "ADD_TRAP", "DEL_TRAP"
-    };
-
-}
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/js/Trap.java b/upstream/org.ibex.core/build/java/org/ibex/js/Trap.java
deleted file mode 100644 (file)
index 77476f6..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.js;
-
-/**
- *  This class encapsulates a single trap placed on a given node. The
- *  traps for a given property name on a given box are maintained as a
- *  linked list stack, with the most recently placed trap at the head
- *  of the list.
- */
-class Trap {
-
-    JS trapee = null;          ///< the box on which this trap was placed
-    Object name = null;        ///< the property that the trap was placed on
-
-    JSFunction f = null;       ///< the function for this trap
-    Trap next = null;          ///< the next trap down the trap stack
-
-    Trap(JS b, String n, JSFunction f, Trap nx) {
-        trapee = b; name = n; this.f = f; this.next = nx;
-    }
-
-    static final JSFunction putInvoker = new JSFunction("putInvoker", 0, null);
-    static final JSFunction getInvoker = new JSFunction("getInvoker", 0, null);
-
-    static {
-        putInvoker.add(1, ByteCodes.PUT, null);
-        putInvoker.add(2, Tokens.RETURN, null);
-        getInvoker.add(1, ByteCodes.GET, null);
-        getInvoker.add(2, Tokens.RETURN, null);
-    }
-    
-    void invoke(Object value) throws JSExn {
-        Interpreter i = new Interpreter(putInvoker, false, null);
-        i.stack.push(trapee);
-        i.stack.push(name);
-        i.stack.push(value);
-        i.resume();
-    }
-
-    Object invoke() throws JSExn {
-        Interpreter i = new Interpreter(getInvoker, false, null);
-        i.stack.push(trapee);
-        i.stack.push(name);
-        return i.resume();
-    }
-
-    // FIXME: review; is necessary?
-    static class TrapScope extends JSScope {
-        Trap t;
-        Object val = null;
-        boolean cascadeHappened = false;
-        public TrapScope(JSScope parent, Trap t, Object val) { super(parent); this.t = t; this.val = val; }
-        public Object get(Object key) throws JSExn {
-            if (key.equals("trapee")) return t.trapee;
-            if (key.equals("callee")) return t.f;
-            if (key.equals("trapname")) return t.name;
-            return super.get(key);
-        }
-    }
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/net/HTTP.java b/upstream/org.ibex.core/build/java/org/ibex/net/HTTP.java
deleted file mode 100644 (file)
index 5c7373e..0000000
+++ /dev/null
@@ -1,1303 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.net;
-
-import java.net.*;
-import java.io.*;
-import java.util.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.plat.*;
-import org.ibex.core.*;
-import org.ibex.crypto.*;
-
-/**
- *  This object encapsulates a *single* HTTP connection. Multiple requests may be pipelined over a connection (thread-safe),
- *  although any IOException encountered in a request will invalidate all later requests.
- */
-public class HTTP {
-
-
-    // Public Methods ////////////////////////////////////////////////////////////////////////////////////////
-
-    public HTTP(String url) { this(url, false); }
-    public HTTP(String url, boolean skipResolveCheck) { originalUrl = url; this.skipResolveCheck = skipResolveCheck; }
-
-    /** Performs an HTTP GET request */
-    public InputStream GET() throws IOException { return makeRequest(null, null); }
-
-    /** Performs an HTTP POST request; content is additional headers, blank line, and body */
-    public InputStream POST(String contentType, String content) throws IOException { return makeRequest(contentType, content); }
-
-    public static class HTTPException extends IOException { public HTTPException(String s) { super(s); } }
-
-    public static HTTP stdio = new HTTP("stdio:");
-
-
-    // Statics ///////////////////////////////////////////////////////////////////////////////////////////////
-
-    static Hash resolvedHosts = new Hash();            ///< cache for resolveAndCheckIfFirewalled()
-    private static Hash authCache = new Hash();        ///< cache of userInfo strings, keyed on originalUrl
-
-
-    // Instance Data ///////////////////////////////////////////////////////////////////////////////////////////////
-
-    final String originalUrl;              ///< the URL as passed to the original constructor; this is never changed
-    String url = null;                     ///< the URL to connect to; this is munged when the url is parsed */
-    String host = null;                    ///< the host to connect to
-    int port = -1;                         ///< the port to connect on
-    boolean ssl = false;                   ///< true if SSL (HTTPS) should be used
-    String path = null;                    ///< the path (URI) to retrieve on the server
-    Socket sock = null;                    ///< the socket
-    InputStream in = null;                 ///< the socket's inputstream
-    String userInfo = null;                ///< the username and password portions of the URL
-    boolean firstRequest = true;           ///< true iff this is the first request to be made on this socket
-    boolean skipResolveCheck = false;      ///< allowed to skip the resolve check when downloading PAC script
-    boolean proxied = false;               ///< true iff we're using a proxy
-
-    /** this is null if the current request is the first request on
-     *  this HTTP connection; otherwise it is a Semaphore which will be
-     *  released once the request ahead of us has recieved its response
-     */
-    Semaphore okToRecieve = null;
-
-    /**
-     *  This method isn't synchronized; however, only one thread can be in the inner synchronized block at a time, and the rest of
-     *  the method is protected by in-order one-at-a-time semaphore lock-steps
-     */
-    private InputStream makeRequest(String contentType, String content) throws IOException {
-
-        // Step 1: send the request and establish a semaphore to stop any requests that pipeline after us
-        Semaphore blockOn = null;
-        Semaphore releaseMe = null;
-        synchronized(this) {
-            try {
-                connect();
-                sendRequest(contentType, content);
-            } catch (IOException e) {
-                reset();
-                throw e;
-            }
-            blockOn = okToRecieve;
-            releaseMe = okToRecieve = new Semaphore();
-        }
-        
-        // Step 2: wait for requests ahead of us to complete, then read the reply off the stream
-        boolean doRelease = true;
-        try {
-            if (blockOn != null) blockOn.block();
-            
-            // previous call wrecked the socket connection, but we already sent our request, so we can't just retry --
-            // this could cause the server to receive the request twice, which could be bad (think of the case where the
-            // server call causes Amazon.com to ship you an item with one-click purchasing).
-            if (in == null)
-                throw new HTTPException("a previous pipelined call messed up the socket");
-            
-            Hashtable h = in == null ? null : parseHeaders(in);
-            if (h == null) {
-                if (firstRequest) throw new HTTPException("server closed the socket with no response");
-                // sometimes the server chooses to close the stream between requests
-                reset();
-                releaseMe.release();
-                return makeRequest(contentType, content);
-            }
-
-            String reply = h.get("STATUSLINE").toString();
-            
-            if (reply.startsWith("407") || reply.startsWith("401")) {
-                
-                if (reply.startsWith("407")) doProxyAuth(h, content == null ? "GET" : "POST");
-                else doWebAuth(h, content == null ? "GET" : "POST");
-                
-                if (h.get("HTTP").equals("1.0") && h.get("content-length") == null) {
-                    if (Log.on) Log.info(this, "proxy returned an HTTP/1.0 reply with no content-length...");
-                    reset();
-                } else {
-                    int cl = h.get("content-length") == null ? -1 : Integer.parseInt(h.get("content-length").toString());
-                    new HTTPInputStream(in, cl, releaseMe).close();
-                }
-                releaseMe.release();
-                return makeRequest(contentType, content);
-                
-            } else if (reply.startsWith("2")) {
-                if (h.get("HTTP").equals("1.0") && h.get("content-length") == null)
-                    throw new HTTPException("Ibex does not support HTTP/1.0 servers which fail to return the Content-Length header");
-                int cl = h.get("content-length") == null ? -1 : Integer.parseInt(h.get("content-length").toString());
-                InputStream ret = new HTTPInputStream(in, cl, releaseMe);
-                if ("gzip".equals(h.get("content-encoding"))) ret = new java.util.zip.GZIPInputStream(ret);
-                doRelease = false;
-                return ret;
-                
-            } else {
-                throw new HTTPException("HTTP Error: " + reply);
-                
-            }
-            
-        } catch (IOException e) { reset(); throw e;
-        } finally { if (doRelease) releaseMe.release();
-        }
-    }
-
-
-    // Safeguarded DNS Resolver ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     *  resolves the hostname and returns it as a string in the form "x.y.z.w"
-     *  @throws HTTPException if the host falls within a firewalled netblock
-     */
-    private void resolveAndCheckIfFirewalled(String host) throws HTTPException {
-
-        // cached
-        if (resolvedHosts.get(host) != null) return;
-
-        // if all scripts are trustworthy (local FS), continue
-        if (Main.originAddr == null) return;
-
-        // resolve using DNS
-        try {
-            InetAddress addr = InetAddress.getByName(host);
-            byte[] quadbyte = addr.getAddress();
-            if ((quadbyte[0] == 10 ||
-                 (quadbyte[0] == 192 && quadbyte[1] == 168) ||
-                 (quadbyte[0] == 172 && (quadbyte[1] & 0xF0) == 16)) && !addr.equals(Main.originAddr))
-                throw new HTTPException("security violation: " + host + " [" + addr.getHostAddress() +
-                                        "] is in a firewalled netblock");
-            return;
-        } catch (UnknownHostException uhe) { }
-
-        if (Platform.detectProxy() == null)
-            throw new HTTPException("could not resolve hostname \"" + host + "\" and no proxy configured");
-    }
-
-
-    // Methods to attempt socket creation /////////////////////////////////////////////////////////////////
-
-    private Socket getSocket(String host, int port, boolean ssl, boolean negotiate) throws IOException {
-        Socket ret = ssl ? new SSL(host, port, negotiate) : new Socket(java.net.InetAddress.getByName(host), port);
-        ret.setTcpNoDelay(true);
-        return ret;
-    }
-
-    /** Attempts a direct connection */
-    private Socket attemptDirect() {
-        try {
-            Log.info(this, "attempting to create unproxied socket to " +
-                     host + ":" + port + (ssl ? " [ssl]" : ""));
-            return getSocket(host, port, ssl, true);
-        } catch (IOException e) {
-            if (Log.on) Log.info(this, "exception in attemptDirect(): " + e);
-            return null;
-        }
-    }
-
-    /** Attempts to use an HTTP proxy, employing the CONNECT method if HTTPS is requested */
-    private Socket attemptHttpProxy(String proxyHost, int proxyPort) {
-        try {
-            if (Log.verbose) Log.info(this, "attempting to create HTTP proxied socket using proxy " + proxyHost + ":" + proxyPort);
-            Socket sock = getSocket(proxyHost, proxyPort, ssl, false);
-
-            if (!ssl) {
-                if (!path.startsWith("http://")) path = "http://" + host + ":" + port + path;
-                return sock;
-            }
-
-            PrintWriter pw = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));
-            BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
-            pw.print("CONNECT " + host + ":" + port + " HTTP/1.1\r\n\r\n");
-            pw.flush();
-            String s = br.readLine();
-            if (s.charAt(9) != '2') throw new HTTPException("proxy refused CONNECT method: \"" + s + "\"");
-            while (br.readLine().length() > 0) { };
-            ((SSL)sock).negotiate();
-            return sock;
-
-        } catch (IOException e) {
-            if (Log.on) Log.info(this, "exception in attemptHttpProxy(): " + e);
-            return null;
-        }
-    }
-
-    /**
-     *  Implements SOCKSv4 with v4a DNS extension
-     *  @see http://www.socks.nec.com/protocol/socks4.protocol
-     *  @see http://www.socks.nec.com/protocol/socks4a.protocol
-     */
-    private Socket attemptSocksProxy(String proxyHost, int proxyPort) {
-
-        // even if host is already a "x.y.z.w" string, we use this to parse it into bytes
-        InetAddress addr = null;
-        try { addr = InetAddress.getByName(host); } catch (Exception e) { }
-
-        if (Log.verbose) Log.info(this, "attempting to create SOCKSv4" + (addr == null ? "" : "a") +
-                                 " proxied socket using proxy " + proxyHost + ":" + proxyPort);
-
-        try {
-            Socket sock = getSocket(proxyHost, proxyPort, ssl, false);
-            
-            DataOutputStream dos = new DataOutputStream(sock.getOutputStream());
-            dos.writeByte(0x04);                         // SOCKSv4(a)
-            dos.writeByte(0x01);                         // CONNECT
-            dos.writeShort(port & 0xffff);               // port
-            if (addr == null) dos.writeInt(0x00000001);  // bogus IP
-            else dos.write(addr.getAddress());           // actual IP
-            dos.writeByte(0x00);                         // no userid
-            if (addr == null) {
-                PrintWriter pw = new PrintWriter(new OutputStreamWriter(dos));
-                pw.print(host);
-                pw.flush();
-                dos.writeByte(0x00);                     // hostname null terminator
-            }
-            dos.flush();
-
-            DataInputStream dis = new DataInputStream(sock.getInputStream());
-            dis.readByte();                              // reply version
-            byte success = dis.readByte();               // success/fail
-            dis.skip(6);                                 // ip/port
-            
-            if ((int)(success & 0xff) == 90) {
-                if (ssl) ((SSL)sock).negotiate();
-                return sock;
-            }
-            if (Log.on) Log.info(this, "SOCKS server denied access, code " + (success & 0xff));
-            return null;
-
-        } catch (IOException e) {
-            if (Log.on) Log.info(this, "exception in attemptSocksProxy(): " + e);
-            return null;
-        }
-    }
-
-    /** executes the PAC script and dispatches a call to one of the other attempt methods based on the result */
-    private Socket attemptPAC(org.ibex.js.JS pacFunc) {
-        if (Log.verbose) Log.info(this, "evaluating PAC script");
-        String pac = null;
-        try {
-            Object obj = pacFunc.call(url, host, null, null, 2);
-            if (Log.verbose) Log.info(this, "  PAC script returned \"" + obj + "\"");
-            pac = obj.toString();
-        } catch (Throwable e) {
-            if (Log.on) Log.info(this, "PAC script threw exception " + e);
-            return null;
-        }
-
-        StringTokenizer st = new StringTokenizer(pac, ";", false);
-        while (st.hasMoreTokens()) {
-            String token = st.nextToken().trim();
-            if (Log.verbose) Log.info(this, "  trying \"" + token + "\"...");
-            try {
-                Socket ret = null;
-                if (token.startsWith("DIRECT"))
-                    ret = attemptDirect();
-                else if (token.startsWith("PROXY"))
-                    ret = attemptHttpProxy(token.substring(token.indexOf(' ') + 1, token.indexOf(':')),
-                                           Integer.parseInt(token.substring(token.indexOf(':') + 1)));
-                else if (token.startsWith("SOCKS"))
-                    ret = attemptSocksProxy(token.substring(token.indexOf(' ') + 1, token.indexOf(':')),
-                                            Integer.parseInt(token.substring(token.indexOf(':') + 1)));
-                if (ret != null) return ret;
-            } catch (Throwable e) {
-                if (Log.on) Log.info(this, "attempt at \"" + token + "\" failed due to " + e + "; trying next token");
-            }
-        }
-        if (Log.on) Log.info(this, "all PAC results exhausted");
-        return null;
-    }
-
-
-    // Everything Else ////////////////////////////////////////////////////////////////////////////
-
-    private synchronized void connect() throws IOException {
-        if (originalUrl.equals("stdio:")) { in = new BufferedInputStream(System.in); return; }
-        if (sock != null) {
-            if (in == null) in = new BufferedInputStream(sock.getInputStream());
-            return;
-        }
-        // grab the userinfo; gcj doesn't have java.net.URL.getUserInfo()
-        String url = originalUrl;
-        userInfo = url.substring(url.indexOf("://") + 3);
-        userInfo = userInfo.indexOf('/') == -1 ? userInfo : userInfo.substring(0, userInfo.indexOf('/'));
-        if (userInfo.indexOf('@') != -1) {
-            userInfo = userInfo.substring(0, userInfo.indexOf('@'));
-            url = url.substring(0, url.indexOf("://") + 3) + url.substring(url.indexOf('@') + 1);
-        } else {
-            userInfo = null;
-        }
-
-        if (url.startsWith("https:")) {
-            ssl = true;
-        } else if (!url.startsWith("http:")) {
-            throw new IOException("HTTP only supports http/https urls");
-        }
-        if (url.indexOf("://") == -1) throw new IOException("URLs must contain a ://");
-        String temphost = url.substring(url.indexOf("://") + 3);
-        path = temphost.substring(temphost.indexOf('/'));
-        temphost = temphost.substring(0, temphost.indexOf('/'));
-        if (temphost.indexOf(':') != -1) {
-            port = Integer.parseInt(temphost.substring(temphost.indexOf(':')+1));
-            temphost = temphost.substring(0, temphost.indexOf(':'));
-        } else {
-            port = ssl ? 443 : 80;
-        }
-        if (!skipResolveCheck) resolveAndCheckIfFirewalled(temphost);
-        host = temphost;
-        if (Log.verbose) Log.info(this, "creating HTTP object for connection to " + host + ":" + port);
-
-        Proxy pi = Platform.detectProxy();
-        OUTER: do {
-            if (pi != null) {
-                for(int i=0; i<pi.excluded.length; i++) if (host.equals(pi.excluded[i])) break OUTER;
-                if (sock == null && pi.proxyAutoConfigFunction != null) sock = attemptPAC(pi.proxyAutoConfigFunction);
-                if (sock == null && ssl && pi.httpsProxyHost != null) sock = attemptHttpProxy(pi.httpsProxyHost,pi.httpsProxyPort);
-                if (sock == null && pi.httpProxyHost != null) sock = attemptHttpProxy(pi.httpProxyHost, pi.httpProxyPort);
-                if (sock == null && pi.socksProxyHost != null) sock = attemptSocksProxy(pi.socksProxyHost, pi.socksProxyPort);
-            }
-        } while (false);
-        proxied = sock != null;
-        if (sock == null) sock = attemptDirect();
-        if (sock == null) throw new HTTPException("unable to contact host " + host);
-        if (in == null) in = new BufferedInputStream(sock.getInputStream());
-    }
-
-    private void sendRequest(String contentType, String content) throws IOException {
-        PrintWriter pw = new PrintWriter(new OutputStreamWriter(originalUrl.equals("stdio:") ?
-                                                                System.out : sock.getOutputStream()));
-        if (content != null) {
-            pw.print("POST " + path + " HTTP/1.0\r\n"); // FIXME chunked encoding
-            int contentLength = content.substring(0, 2).equals("\r\n") ?
-                content.length() - 2 :
-                (content.length() - content.indexOf("\r\n\r\n") - 4);
-            pw.print("Content-Length: " + contentLength + "\r\n");
-            if (contentType != null) pw.print("Content-Type: " + contentType + "\r\n");
-        } else {
-            pw.print("GET " + path + " HTTP/1.1\r\n");
-        }
-        
-        pw.print("User-Agent: Ibex\r\n");
-        pw.print("Accept-encoding: gzip\r\n");
-        pw.print("Host: " + (host + (port == 80 ? "" : (":" + port))) + "\r\n");
-        if (proxied) pw.print("X-RequestOrigin: " + Main.originHost + "\r\n");
-
-        if (Proxy.Authorization.authorization != null) pw.print("Proxy-Authorization: "+Proxy.Authorization.authorization2+"\r\n");
-        if (authCache.get(originalUrl) != null) pw.print("Authorization: " + authCache.get(originalUrl) + "\r\n");
-
-        pw.print(content == null ? "\r\n" : content);
-        pw.print("\r\n");
-        pw.flush();
-    }
-
-    private void doWebAuth(Hashtable h0, String method) throws IOException {
-        if (userInfo == null) throw new HTTPException("web server demanded username/password, but none were supplied");
-        Hashtable h = parseAuthenticationChallenge(h0.get("www-authenticate").toString());
-        
-        if (h.get("AUTHTYPE").equals("Basic")) {
-            if (authCache.get(originalUrl) != null) throw new HTTPException("username/password rejected");
-            authCache.put(originalUrl, "Basic " + new String(Base64.encode(userInfo.getBytes("UTF8"))));
-            
-        } else if (h.get("AUTHTYPE").equals("Digest")) {
-            if (authCache.get(originalUrl) != null && !"true".equals(h.get("stale")))
-                throw new HTTPException("username/password rejected");
-            String path2 = path;
-            if (path2.startsWith("http://") || path2.startsWith("https://")) {
-                path2 = path2.substring(path2.indexOf("://") + 3);
-                path2 = path2.substring(path2.indexOf('/'));
-            }
-            String A1 = userInfo.substring(0, userInfo.indexOf(':')) + ":" + h.get("realm") + ":" +
-                userInfo.substring(userInfo.indexOf(':') + 1);
-            String A2 = method + ":" + path2;
-            authCache.put(originalUrl,
-                          "Digest " +
-                          "username=\"" + userInfo.substring(0, userInfo.indexOf(':')) + "\", " +
-                          "realm=\"" + h.get("realm") + "\", " +
-                          "nonce=\"" + h.get("nonce") + "\", " +
-                          "uri=\"" + path2 + "\", " +
-                          (h.get("opaque") == null ? "" : ("opaque=\"" + h.get("opaque") + "\", ")) + 
-                          "response=\"" + H(H(A1) + ":" + h.get("nonce") + ":" + H(A2)) + "\", " +
-                          "algorithm=MD5"
-                          );
-            
-        } else {
-            throw new HTTPException("unknown authentication type: " + h.get("AUTHTYPE"));
-        }
-    }
-
-    private void doProxyAuth(Hashtable h0, String method) throws IOException {
-        if (Log.on) Log.info(this, "Proxy AuthChallenge: " + h0.get("proxy-authenticate"));
-        Hashtable h = parseAuthenticationChallenge(h0.get("proxy-authenticate").toString());
-        String style = h.get("AUTHTYPE").toString();
-        String realm = (String)h.get("realm");
-
-        if (style.equals("NTLM") && Proxy.Authorization.authorization2 == null) {
-            Log.info(this, "Proxy identified itself as NTLM, sending Type 1 packet");
-            Proxy.Authorization.authorization2 = "NTLM " + Base64.encode(Proxy.NTLM.type1);
-            return;
-        }
-
-        if (!realm.equals("Digest") || Proxy.Authorization.authorization2 == null || !"true".equals(h.get("stale")))
-            Proxy.Authorization.getPassword(realm, style, sock.getInetAddress().getHostAddress(),
-                                            Proxy.Authorization.authorization);
-
-        if (style.equals("Basic")) {
-            Proxy.Authorization.authorization2 =
-                "Basic " + new String(Base64.encode(Proxy.Authorization.authorization.getBytes("UTF8")));
-            
-        } else if (style.equals("Digest")) {
-            String A1 = Proxy.Authorization.authorization.substring(0, userInfo.indexOf(':')) + ":" + h.get("realm") + ":" +
-                Proxy.Authorization.authorization.substring(Proxy.Authorization.authorization.indexOf(':') + 1);
-            String A2 = method + ":" + path;
-            Proxy.Authorization.authorization2 = 
-                "Digest " +
-                "username=\"" + Proxy.Authorization.authorization.substring(0, Proxy.Authorization.authorization.indexOf(':')) +
-                "\", " +
-                "realm=\"" + h.get("realm") + "\", " +
-                "nonce=\"" + h.get("nonce") + "\", " +
-                "uri=\"" + path + "\", " +
-                (h.get("opaque") == null ? "" : ("opaque=\"" + h.get("opaque") + "\", ")) + 
-                "response=\"" + H(H(A1) + ":" + h.get("nonce") + ":" + H(A2)) + "\", " +
-                "algorithm=MD5";
-
-        } else if (style.equals("NTLM")) {
-            Log.info(this, "Proxy identified itself as NTLM, got Type 2 packet");
-            byte[] type2 = Base64.decode(((String)h0.get("proxy-authenticate")).substring(5).trim());
-            for(int i=0; i<type2.length; i += 4) {
-                String log = "";
-                if (i<type2.length) log += Integer.toString(type2[i] & 0xff, 16) + " ";
-                if (i+1<type2.length) log += Integer.toString(type2[i+1] & 0xff, 16) + " ";
-                if (i+2<type2.length) log += Integer.toString(type2[i+2] & 0xff, 16) + " ";
-                if (i+3<type2.length) log += Integer.toString(type2[i+3] & 0xff, 16) + " ";
-                Log.info(this, log);
-            }
-            // FEATURE: need to keep the connection open between type1 and type3
-            // FEATURE: finish this
-            //byte[] type3 = Proxy.NTLM.getResponse(
-            //Proxy.Authorization.authorization2 = "NTLM " + Base64.encode(type3));
-        }            
-    }
-
-
-    // HTTPInputStream ///////////////////////////////////////////////////////////////////////////////////
-
-    /** An input stream that represents a subset of a longer input stream. Supports HTTP chunking as well */
-    public class HTTPInputStream extends FilterInputStream implements KnownLength {
-
-        private int length = 0;              ///< if chunking, numbytes left in this subset; else the remainder of the chunk
-        private Semaphore releaseMe = null;  ///< this semaphore will be released when the stream is closed
-        boolean chunkedDone = false;         ///< indicates that we have encountered the zero-length terminator chunk
-        boolean firstChunk = true;           ///< if we're on the first chunk, we don't pre-read a CRLF
-        private int contentLength = 0;       ///< the length of the entire content body; -1 if chunked
-
-        HTTPInputStream(InputStream in, int length, Semaphore releaseMe) throws IOException {
-            super(in);
-            this.releaseMe = releaseMe;
-            this.contentLength = length;
-            this.length = length == -1 ? 0 : length;
-        }
-
-        public int getLength() { return contentLength; }
-        public boolean markSupported() { return false; }
-        public int read(byte[] b) throws IOException { return read(b, 0, b.length); }
-        public long skip(long n) throws IOException { return read(null, -1, (int)n); }
-        public int available() throws IOException {
-            if (contentLength == -1) return java.lang.Math.min(super.available(), length);
-            return super.available();
-        }
-
-        public int read() throws IOException {
-            byte[] b = new byte[1];
-            int ret = read(b, 0, 1);
-            return ret == -1 ? -1 : b[0] & 0xff;
-        }
-
-        private void readChunk() throws IOException {
-            if (chunkedDone) return;
-            if (!firstChunk) super.skip(2); // CRLF
-            firstChunk = false;
-            String chunkLen = "";
-            while(true) {
-                int i = super.read();
-                if (i == -1) throw new HTTPException("encountered end of stream while reading chunk length");
-
-                // FEATURE: handle chunking extensions
-                if (i == '\r') {
-                    super.read();    // LF
-                    break;
-                } else {
-                    chunkLen += (char)i;
-                }
-            }
-            length = Integer.parseInt(chunkLen.trim(), 16);
-            if (length == 0) chunkedDone = true;
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-            boolean good = false;
-            try {
-                if (length == 0 && contentLength == -1) {
-                    readChunk();
-                    if (chunkedDone) { good = true; return -1; }
-                } else {
-                    if (length == 0) { good = true; return -1; }
-                }
-                if (len > length) len = length;
-                int ret = b == null ? (int)super.skip(len) : super.read(b, off, len);
-                if (ret >= 0) {
-                    length -= ret;
-                    good = true;
-                }
-                return ret;
-            } finally {
-                if (!good) reset();
-            }
-        }
-
-        public void close() throws IOException {
-            if (contentLength == -1) {
-                while(!chunkedDone) {
-                    if (length != 0) skip(length);
-                    readChunk();
-                }
-                skip(2);
-            } else {
-                if (length != 0) skip(length);
-            }
-            if (releaseMe != null) releaseMe.release();
-        }
-    }
-
-    void reset() {
-        firstRequest = true;
-        in = null;
-        sock = null;
-    }
-
-
-    // Misc Helpers ///////////////////////////////////////////////////////////////////////////////////
-
-    /** reads a set of HTTP headers off of the input stream, returning null if the stream is already at its end */
-    private Hashtable parseHeaders(InputStream in) throws IOException {
-        Hashtable ret = new Hashtable();
-
-        // we can't use a BufferedReader directly on the input stream, since it will buffer past the end of the headers
-        byte[] buf = new byte[4096];
-        int buflen = 0;
-        while(true) {
-            int read = in.read();
-            if (read == -1 && buflen == 0) return null;
-            if (read == -1) throw new HTTPException("stream closed while reading headers");
-            buf[buflen++] = (byte)read;
-            if (buflen >= 4 && buf[buflen - 4] == '\r' && buf[buflen - 3] == '\n' &&
-                buf[buflen - 2] == '\r' && buf[buflen - 1] == '\n')
-                break;
-            if (buflen >=2 && buf[buflen - 1] == '\n' && buf[buflen - 2] == '\n')
-                break;  // nice for people using stdio
-            if (buflen == buf.length) {
-                byte[] newbuf = new byte[buf.length * 2];
-                System.arraycopy(buf, 0, newbuf, 0, buflen);
-                buf = newbuf;
-            }
-        }
-
-        BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(buf, 0, buflen)));
-        String s = br.readLine();
-        if (!s.startsWith("HTTP/")) throw new HTTPException("Expected reply to start with \"HTTP/\", got: " + s);
-        ret.put("STATUSLINE", s.substring(s.indexOf(' ') + 1));
-        ret.put("HTTP", s.substring(5, s.indexOf(' ')));
-
-        while((s = br.readLine()) != null && s.length() > 0) {
-            String front = s.substring(0, s.indexOf(':')).toLowerCase();
-            String back = s.substring(s.indexOf(':') + 1).trim();
-            // ugly hack: we never replace a Digest-auth with a Basic-auth (proxy + www)
-            if (front.endsWith("-authenticate") && ret.get(front) != null && !back.equals("Digest")) continue;
-            ret.put(front, back);
-        }
-        return ret;
-    }
-
-    private Hashtable parseAuthenticationChallenge(String s) {
-        Hashtable ret = new Hashtable();
-
-        s = s.trim();
-        ret.put("AUTHTYPE", s.substring(0, s.indexOf(' ')));
-        s = s.substring(s.indexOf(' ')).trim();
-
-        while (s.length() > 0) {
-            String val = null;
-            String key = s.substring(0, s.indexOf('='));
-            s = s.substring(s.indexOf('=') + 1);
-            if (s.charAt(0) == '\"') {
-                s = s.substring(1);
-                val = s.substring(0, s.indexOf('\"'));
-                s = s.substring(s.indexOf('\"') + 1);
-            } else {
-                val = s.indexOf(',') == -1 ? s : s.substring(0, s.indexOf(','));
-                s = s.indexOf(',') == -1 ? "" : s.substring(s.indexOf(',') + 1);
-            }
-            if (s.length() > 0 && s.charAt(0) == ',') s = s.substring(1);
-            s = s.trim();
-            ret.put(key, val);
-        }
-        return ret;
-    }
-
-    private String H(String s) throws IOException {
-        byte[] b = s.getBytes("UTF8");
-        MD5 md5 = new MD5();
-        md5.update(b, 0, b.length);
-        byte[] out = new byte[md5.getDigestSize()];
-        md5.doFinal(out, 0);
-        String ret = "";
-        for(int i=0; i<out.length; i++) {
-            ret += "0123456789abcdef".charAt((out[i] & 0xf0) >> 4);
-            ret += "0123456789abcdef".charAt(out[i] & 0x0f);
-        }
-        return ret;
-    }
-
-
-    // Proxy ///////////////////////////////////////////////////////////
-
-    /** encapsulates most of the proxy logic; some is shared in HTTP.java */
-    public static class Proxy {
-        
-        public String httpProxyHost = null;                  ///< the HTTP Proxy host to use
-        public int httpProxyPort = -1;                       ///< the HTTP Proxy port to use
-        public String httpsProxyHost = null;                 ///< seperate proxy for HTTPS
-        public int httpsProxyPort = -1;
-        public String socksProxyHost = null;                 ///< the SOCKS Proxy Host to use
-        public int socksProxyPort = -1;                      ///< the SOCKS Proxy Port to use
-        public String[] excluded = new String[] { };         ///< hosts to be excluded from proxy use; wildcards permitted
-        public JS proxyAutoConfigFunction = null;  ///< the PAC script
-    
-        public static Proxy detectProxyViaManual() {
-            Proxy ret = new Proxy();
-        
-            ret.httpProxyHost = Platform.getEnv("http_proxy");
-            if (ret.httpProxyHost != null) {
-                if (ret.httpProxyHost.startsWith("http://")) ret.httpProxyHost = ret.httpProxyHost.substring(7);
-                if (ret.httpProxyHost.endsWith("/"))
-                    ret.httpProxyHost = ret.httpProxyHost.substring(0, ret.httpProxyHost.length() - 1);
-                if (ret.httpProxyHost.indexOf(':') != -1) {
-                    ret.httpProxyPort = Integer.parseInt(ret.httpProxyHost.substring(ret.httpProxyHost.indexOf(':') + 1));
-                    ret.httpProxyHost = ret.httpProxyHost.substring(0, ret.httpProxyHost.indexOf(':'));
-                } else {
-                    ret.httpProxyPort = 80;
-                }
-            }
-        
-            ret.httpsProxyHost = Platform.getEnv("https_proxy");
-            if (ret.httpsProxyHost != null) {
-                if (ret.httpsProxyHost.startsWith("https://")) ret.httpsProxyHost = ret.httpsProxyHost.substring(7);
-                if (ret.httpsProxyHost.endsWith("/"))
-                    ret.httpsProxyHost = ret.httpsProxyHost.substring(0, ret.httpsProxyHost.length() - 1);
-                if (ret.httpsProxyHost.indexOf(':') != -1) {
-                    ret.httpsProxyPort = Integer.parseInt(ret.httpsProxyHost.substring(ret.httpsProxyHost.indexOf(':') + 1));
-                    ret.httpsProxyHost = ret.httpsProxyHost.substring(0, ret.httpsProxyHost.indexOf(':'));
-                } else {
-                    ret.httpsProxyPort = 80;
-                }
-            }
-        
-            ret.socksProxyHost = Platform.getEnv("socks_proxy");
-            if (ret.socksProxyHost != null) {
-                if (ret.socksProxyHost.startsWith("socks://")) ret.socksProxyHost = ret.socksProxyHost.substring(7);
-                if (ret.socksProxyHost.endsWith("/"))
-                    ret.socksProxyHost = ret.socksProxyHost.substring(0, ret.socksProxyHost.length() - 1);
-                if (ret.socksProxyHost.indexOf(':') != -1) {
-                    ret.socksProxyPort = Integer.parseInt(ret.socksProxyHost.substring(ret.socksProxyHost.indexOf(':') + 1));
-                    ret.socksProxyHost = ret.socksProxyHost.substring(0, ret.socksProxyHost.indexOf(':'));
-                } else {
-                    ret.socksProxyPort = 80;
-                }
-            }
-        
-            String noproxy = Platform.getEnv("no_proxy");
-            if (noproxy != null) {
-                StringTokenizer st = new StringTokenizer(noproxy, ",");
-                ret.excluded = new String[st.countTokens()];
-                for(int i=0; st.hasMoreTokens(); i++) ret.excluded[i] = st.nextToken();
-            }
-        
-            if (ret.httpProxyHost == null && ret.socksProxyHost == null) return null;
-            return ret;
-        }
-    
-        public static JSScope proxyAutoConfigRootScope = new ProxyAutoConfigRootScope();
-        public static JS getProxyAutoConfigFunction(String url) {
-            try { 
-                BufferedReader br = new BufferedReader(new InputStreamReader(new HTTP(url, true).GET()));
-                String s = null;
-                String script = "";
-                while((s = br.readLine()) != null) script += s + "\n";
-                if (Log.on) Log.info(Proxy.class, "successfully retrieved WPAD PAC:");
-                if (Log.on) Log.info(Proxy.class, script);
-            
-                // MS CARP hack
-                Vector carpHosts = new Vector();
-                for(int i=0; i<script.length(); i++)
-                    if (script.regionMatches(i, "new Node(", 0, 9)) {
-                        String host = script.substring(i + 10, script.indexOf('\"', i + 11));
-                        if (Log.on) Log.info(Proxy.class, "Detected MS Proxy Server CARP Script, Host=" + host);
-                        carpHosts.addElement(host);
-                    }
-                if (carpHosts.size() > 0) {
-                    script = "function FindProxyForURL(url, host) {\nreturn \"";
-                    for(int i=0; i<carpHosts.size(); i++)
-                        script += "PROXY " + carpHosts.elementAt(i) + "; ";
-                    script += "\";\n}";
-                    if (Log.on) Log.info(Proxy.class, "DeCARPed PAC script:");
-                    if (Log.on) Log.info(Proxy.class, script);
-                }
-
-                JS scr = JS.fromReader("PAC script at " + url, 0, new StringReader(script));
-                JS.cloneWithNewParentScope(scr, proxyAutoConfigRootScope).call(null, null, null, null, 0);
-                return (JS)proxyAutoConfigRootScope.get("FindProxyForURL");
-            } catch (Exception e) {
-                if (Log.on) {
-                    Log.info(Platform.class, "WPAD detection failed due to:");
-                    if (e instanceof JSExn) {
-                        try {
-                            org.ibex.js.JSArray arr = new org.ibex.js.JSArray();
-                            arr.addElement(((JSExn)e).getObject());
-                        } catch (Exception e2) {
-                            Log.info(Platform.class, e);
-                        }
-                    }
-                    else Log.info(Platform.class, e);
-                }
-                return null;
-            }
-        }
-
-
-        // Authorization ///////////////////////////////////////////////////////////////////////////////////
-
-        public static class Authorization {
-
-            static public String authorization = null;
-            static public String authorization2 = null;
-            static public Semaphore waitingForUser = new Semaphore();
-
-            public static synchronized void getPassword(final String realm, final String style,
-                                                        final String proxyIP, String oldAuth) throws IOException {
-
-                // this handles cases where multiple threads hit the proxy auth at the same time -- all but one will block on the
-                // synchronized keyword. If 'authorization' changed while the thread was blocked, it means that the user entered
-                // a password, so we should reattempt authorization.
-
-                if (authorization != oldAuth) return;
-                if (Log.on) Log.info(Authorization.class, "displaying proxy authorization dialog");
-                Scheduler.add(new Task() {
-                        public void perform() throws IOException, JSExn {
-                            Box b = new Box();
-                            Template t = null;
-                            // FIXME
-                            //Template.buildTemplate("org/ibex/builtin/proxy_authorization.ibex", Stream.getInputStream((JS)Main.builtin.get("org/ibex/builtin/proxy_authorization.ibex")), new Ibex(null));
-                            t.apply(b);
-                            b.put("realm", realm);
-                            b.put("proxyIP", proxyIP);
-                        }
-                    });
-
-                waitingForUser.block();
-                if (Log.on) Log.info(Authorization.class, "got proxy authorization info; re-attempting connection");
-            }
-        }
-
-
-        // ProxyAutoConfigRootJSScope ////////////////////////////////////////////////////////////////////
-
-        public static class ProxyAutoConfigRootScope extends JSScope.Global {
-
-            public ProxyAutoConfigRootScope() { super(); }
-        
-            public Object get(Object name) throws JSExn {
-final String ccSwitch0 = (String)(name);  SUCCESS:do { switch(ccSwitch0.length()) {
-case 7: { switch(ccSwitch0.charAt(0)) { case 'i': if ("isInNet".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch0.charAt(0)) { case 'd': if ("dateRange".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 't': if ("timeRange".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch0.charAt(0)) { case 'd': if ("dnsResolve".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 's': if ("shExpMatch".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch0.charAt(0)) { case 'P': if ("ProxyConfig".equals(ccSwitch0)) { if (true) do { return ProxyConfig;
- } while(false); break SUCCESS; } break;  case 'd': if ("dnsDomainIs".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'm': if ("myIpAddress".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch0.charAt(0)) { case 'i': if ("isResolvable".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'w': if ("weekdayRange".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 15: { switch(ccSwitch0.charAt(0)) { case 'd': if ("dnsDomainLevels".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  case 'i': if ("isPlainHostName".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  case 19: { switch(ccSwitch0.charAt(0)) { case 'l': if ("localHostOrDomainIs".equals(ccSwitch0)) { if (true) do { return METHOD;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                return super.get(name);
-            }
-        
-            private static final JS proxyConfigBindings = new JS();
-            private static final JS ProxyConfig = new JS() {
-                    public Object get(Object name) {
-                        if (name.equals("bindings")) return proxyConfigBindings;
-                        return null;
-                    }
-                };
-
-            public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-final String ccSwitch1 = (String)(method);  SUCCESS:do { switch(ccSwitch1.length()) {
-case 7: { switch(ccSwitch1.charAt(0)) { case 'i': if ("isInNet".equals(ccSwitch1)) { if (true) do { 
-if (nargs != 3) return Boolean.FALSE;
-try {
-byte[] host = InetAddress.getByName(a0.toString()).getAddress();
-byte[] net = InetAddress.getByName(a1.toString()).getAddress();
-byte[] mask = InetAddress.getByName(a2.toString()).getAddress();
-return ((host[0] & mask[0]) == net[0] &&
-(host[1] & mask[1]) == net[1] &&
-(host[2] & mask[2]) == net[2] &&
-(host[3] & mask[3]) == net[3]) ?
-Boolean.TRUE : Boolean.FALSE;
-} catch (Exception e) {
-throw new JSExn("exception in isInNet(): " + e);
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 9: { switch(ccSwitch1.charAt(0)) { case 'd': if ("dateRange".equals(ccSwitch1)) { if (true) do { throw new JSExn("Ibex does not support dateRange() in PAC scripts");
- } while(false); break SUCCESS; } break;  case 't': if ("timeRange".equals(ccSwitch1)) { if (true) do { throw new JSExn("Ibex does not support timeRange() in PAC scripts");
- } while(false); break SUCCESS; } break;  }; break; }  case 10: { switch(ccSwitch1.charAt(0)) { case 'd': if ("dnsResolve".equals(ccSwitch1)) { if (true) do { 
-try {
-return InetAddress.getByName(a0.toString()).getHostAddress();
-} catch (UnknownHostException e) {
-return null;
-}
- } while(false); break SUCCESS; } break;  case 's': if ("shExpMatch".equals(ccSwitch1)) { if (true) do { 
-StringTokenizer st = new StringTokenizer(a1.toString(), "*", false);
-String[] arr = new String[st.countTokens()];
-String s = a0.toString();
-for (int i=0; st.hasMoreTokens(); i++) arr[i] = st.nextToken();
-return match(arr, s, 0) ? Boolean.TRUE : Boolean.FALSE;
- } while(false); break SUCCESS; } break;  }; break; }  case 11: { switch(ccSwitch1.charAt(0)) { case 'd': if ("dnsDomainIs".equals(ccSwitch1)) { if (true) do { return (a0.toString().endsWith(a1.toString())) ? Boolean.TRUE : Boolean.FALSE;
- } while(false); break SUCCESS; } break;  case 'm': if ("myIpAddress".equals(ccSwitch1)) { if (true) do { 
-try {
-return InetAddress.getLocalHost().getHostAddress();
-} catch (UnknownHostException e) {
-if (Log.on) Log.info(this, "strange... host does not know its own address");
-return null;
-}
- } while(false); break SUCCESS; } break;  }; break; }  case 12: { switch(ccSwitch1.charAt(0)) { case 'i': if ("isResolvable".equals(ccSwitch1)) { if (true) do { try {
-return (InetAddress.getByName(a0.toString()) != null) ? Boolean.TRUE : Boolean.FALSE;
-} catch (UnknownHostException e) { return F; }
- } while(false); break SUCCESS; } break;  case 'w': if ("weekdayRange".equals(ccSwitch1)) { if (true) do { 
-TimeZone tz = (nargs < 3 || a2 == null || !a2.equals("GMT")) ?
-TimeZone.getTimeZone("UTC") : TimeZone.getDefault();
-Calendar c = new GregorianCalendar();
-c.setTimeZone(tz);
-c.setTime(new java.util.Date());
-java.util.Date d = c.getTime();
-int day = d.getDay();
-String d1s = a0.toString().toUpperCase();
-int d1 = 0, d2 = 0;
-for(int i=0; i<days.length; i++) if (days[i].equals(d1s)) d1 = i;
-
-if (nargs == 1)
-return d1 == day ? Boolean.TRUE : Boolean.FALSE;
-
-String d2s = a1.toString().toUpperCase();
-for(int i=0; i<days.length; i++) if (days[i].equals(d2s)) d2 = i;
-
-return ((d1 <= d2 && day >= d1 && day <= d2) || (d1 > d2 && (day >= d1 || day <= d2))) ? T : F;
-
- } while(false); break SUCCESS; } break;  }; break; }  case 15: { switch(ccSwitch1.charAt(0)) { case 'd': if ("dnsDomainLevels".equals(ccSwitch1)) { if (true) do { 
-String s = a0.toString();
-int i = 0;
-while((i = s.indexOf('.', i)) != -1) i++;
-return new Integer(i);
- } while(false); break SUCCESS; } break;  case 'i': if ("isPlainHostName".equals(ccSwitch1)) { if (true) do { return (a0.toString().indexOf('.') == -1) ? Boolean.TRUE : Boolean.FALSE;
- } while(false); break SUCCESS; } break;  }; break; }  case 19: { switch(ccSwitch1.charAt(0)) { case 'l': if ("localHostOrDomainIs".equals(ccSwitch1)) { if (true) do { 
-return (a0.equals(a1) || (a0.toString().indexOf('.') == -1 && a1.toString().startsWith(a0.toString()))) ? T:F;
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-                return super.callMethod(method, a0, a1, a2, rest, nargs);
-            }       
-            private static boolean match(String[] arr, String s, int index) {
-                if (index >= arr.length) return true;
-                for(int i=0; i<s.length(); i++) {
-                    String s2 = s.substring(i);
-                    if (s2.startsWith(arr[index]) && match(arr, s2.substring(arr[index].length()), index + 1)) return true;
-                }
-                return false;
-            }
-            public static String[] days = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
-        }
-
-
-        /**
-         *  An implementation of Microsoft's proprietary NTLM authentication protocol.  This code was derived from Eric
-         *  Glass's work, and is copyright as follows:
-         *
-         *  Copyright (c) 2003 Eric Glass     (eglass1 at comcast.net). 
-         *
-         *  Permission to use, copy, modify, and distribute this document for any purpose and without any fee is hereby
-         *  granted, provided that the above copyright notice and this list of conditions appear in all copies.
-         *  The most current version of this document may be obtained from http://davenport.sourceforge.net/ntlm.html .
-         */ 
-        public static class NTLM {
-            
-            public static final byte[] type1 = new byte[] { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x01,
-                                                            0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00 };
-            
-            /**
-             * Calculates the NTLM Response for the given challenge, using the
-             * specified password.
-             *
-             * @param password The user's password.
-             * @param challenge The Type 2 challenge from the server.
-             *
-             * @return The NTLM Response.
-             */
-            public static byte[] getNTLMResponse(String password, byte[] challenge)
-                throws UnsupportedEncodingException {
-                byte[] ntlmHash = ntlmHash(password);
-                return lmResponse(ntlmHash, challenge);
-            }
-
-            /**
-             * Calculates the LM Response for the given challenge, using the specified
-             * password.
-             *
-             * @param password The user's password.
-             * @param challenge The Type 2 challenge from the server.
-             *
-             * @return The LM Response.
-             */
-            public static byte[] getLMResponse(String password, byte[] challenge)
-                {
-                byte[] lmHash = lmHash(password);
-                return lmResponse(lmHash, challenge);
-            }
-
-            /**
-             * Calculates the NTLMv2 Response for the given challenge, using the
-             * specified authentication target, username, password, target information
-             * block, and client challenge.
-             *
-             * @param target The authentication target (i.e., domain).
-             * @param user The username. 
-             * @param password The user's password.
-             * @param targetInformation The target information block from the Type 2
-             * message.
-             * @param challenge The Type 2 challenge from the server.
-             * @param clientChallenge The random 8-byte client challenge. 
-             *
-             * @return The NTLMv2 Response.
-             */
-            public static byte[] getNTLMv2Response(String target, String user,
-                                                   String password, byte[] targetInformation, byte[] challenge,
-                                                   byte[] clientChallenge) throws UnsupportedEncodingException {
-                byte[] ntlmv2Hash = ntlmv2Hash(target, user, password);
-                byte[] blob = createBlob(targetInformation, clientChallenge);
-                return lmv2Response(ntlmv2Hash, blob, challenge);
-            }
-
-            /**
-             * Calculates the LMv2 Response for the given challenge, using the
-             * specified authentication target, username, password, and client
-             * challenge.
-             *
-             * @param target The authentication target (i.e., domain).
-             * @param user The username.
-             * @param password The user's password.
-             * @param challenge The Type 2 challenge from the server.
-             * @param clientChallenge The random 8-byte client challenge.
-             *
-             * @return The LMv2 Response. 
-             */
-            public static byte[] getLMv2Response(String target, String user,
-                                                 String password, byte[] challenge, byte[] clientChallenge)
-                throws UnsupportedEncodingException {
-                byte[] ntlmv2Hash = ntlmv2Hash(target, user, password);
-                return lmv2Response(ntlmv2Hash, clientChallenge, challenge);
-            }
-
-            /**
-             * Calculates the NTLM2 Session Response for the given challenge, using the
-             * specified password and client challenge.
-             *
-             * @param password The user's password.
-             * @param challenge The Type 2 challenge from the server.
-             * @param clientChallenge The random 8-byte client challenge.
-             *
-             * @return The NTLM2 Session Response.  This is placed in the NTLM
-             * response field of the Type 3 message; the LM response field contains
-             * the client challenge, null-padded to 24 bytes.
-             */
-            public static byte[] getNTLM2SessionResponse(String password,
-                                                         byte[] challenge, byte[] clientChallenge) throws UnsupportedEncodingException {
-                byte[] ntlmHash = ntlmHash(password);
-                MD5 md5 = new MD5();
-                md5.update(challenge, 0, challenge.length);
-                md5.update(clientChallenge, 0, clientChallenge.length);
-                byte[] sessionHash = new byte[8];
-                byte[] md5_out = new byte[md5.getDigestSize()];
-                md5.doFinal(md5_out, 0);
-                System.arraycopy(md5_out, 0, sessionHash, 0, 8);
-                return lmResponse(ntlmHash, sessionHash);
-            }
-
-            /**
-             * Creates the LM Hash of the user's password.
-             *
-             * @param password The password.
-             *
-             * @return The LM Hash of the given password, used in the calculation
-             * of the LM Response.
-             */
-            private static byte[] lmHash(String password) {
-                /*
-                byte[] oemPassword = password.toUpperCase().getBytes("UTF8");
-                int length = java.lang.Math.min(oemPassword.length, 14);
-                byte[] keyBytes = new byte[14];
-                System.arraycopy(oemPassword, 0, keyBytes, 0, length);
-                Key lowKey = createDESKey(keyBytes, 0);
-                Key highKey = createDESKey(keyBytes, 7);
-                byte[] magicConstant = "KGS!@#$%".getBytes("UTF8");
-                Cipher des = Cipher.getInstance("DES/ECB/NoPadding");
-                des.init(Cipher.ENCRYPT_MODE, lowKey);
-                byte[] lowHash = des.doFinal(magicConstant);
-                des.init(Cipher.ENCRYPT_MODE, highKey);
-                byte[] highHash = des.doFinal(magicConstant);
-                byte[] lmHash = new byte[16];
-                System.arraycopy(lowHash, 0, lmHash, 0, 8);
-                System.arraycopy(highHash, 0, lmHash, 8, 8);
-                return lmHash;
-                */
-                return null;
-            }
-
-            /**
-             * Creates the NTLM Hash of the user's password.
-             *
-             * @param password The password.
-             *
-             * @return The NTLM Hash of the given password, used in the calculation
-             * of the NTLM Response and the NTLMv2 and LMv2 Hashes.
-             */
-            private static byte[] ntlmHash(String password) throws UnsupportedEncodingException {
-                // FIXME
-                /*
-                byte[] unicodePassword = password.getBytes("UnicodeLittleUnmarked");
-                MD4 md4 = new MD4();
-                md4.update(unicodePassword, 0, unicodePassword.length);
-                byte[] ret = new byte[md4.getDigestSize()];
-                return ret;
-                */
-                return null;
-            }
-
-            /**
-             * Creates the NTLMv2 Hash of the user's password.
-             *
-             * @param target The authentication target (i.e., domain).
-             * @param user The username.
-             * @param password The password.
-             *
-             * @return The NTLMv2 Hash, used in the calculation of the NTLMv2
-             * and LMv2 Responses. 
-             */
-            private static byte[] ntlmv2Hash(String target, String user,
-                                             String password) throws UnsupportedEncodingException {
-                byte[] ntlmHash = ntlmHash(password);
-                String identity = user.toUpperCase() + target.toUpperCase();
-                return hmacMD5(identity.getBytes("UnicodeLittleUnmarked"), ntlmHash);
-            }
-
-            /**
-             * Creates the LM Response from the given hash and Type 2 challenge.
-             *
-             * @param hash The LM or NTLM Hash.
-             * @param challenge The server challenge from the Type 2 message.
-             *
-             * @return The response (either LM or NTLM, depending on the provided
-             * hash).
-             */
-            private static byte[] lmResponse(byte[] hash, byte[] challenge)
-                {
-                /*
-                byte[] keyBytes = new byte[21];
-                System.arraycopy(hash, 0, keyBytes, 0, 16);
-                Key lowKey = createDESKey(keyBytes, 0);
-                Key middleKey = createDESKey(keyBytes, 7);
-                Key highKey = createDESKey(keyBytes, 14);
-                Cipher des = Cipher.getInstance("DES/ECB/NoPadding");
-                des.init(Cipher.ENCRYPT_MODE, lowKey);
-                byte[] lowResponse = des.doFinal(challenge);
-                des.init(Cipher.ENCRYPT_MODE, middleKey);
-                byte[] middleResponse = des.doFinal(challenge);
-                des.init(Cipher.ENCRYPT_MODE, highKey);
-                byte[] highResponse = des.doFinal(challenge);
-                byte[] lmResponse = new byte[24];
-                System.arraycopy(lowResponse, 0, lmResponse, 0, 8);
-                System.arraycopy(middleResponse, 0, lmResponse, 8, 8);
-                System.arraycopy(highResponse, 0, lmResponse, 16, 8);
-                return lmResponse;
-                */
-                return null;
-            }
-
-            /**
-             * Creates the LMv2 Response from the given hash, client data, and
-             * Type 2 challenge.
-             *
-             * @param hash The NTLMv2 Hash.
-             * @param clientData The client data (blob or client challenge).
-             * @param challenge The server challenge from the Type 2 message.
-             *
-             * @return The response (either NTLMv2 or LMv2, depending on the
-             * client data).
-             */
-            private static byte[] lmv2Response(byte[] hash, byte[] clientData,
-                                               byte[] challenge) {
-                byte[] data = new byte[challenge.length + clientData.length];
-                System.arraycopy(challenge, 0, data, 0, challenge.length);
-                System.arraycopy(clientData, 0, data, challenge.length,
-                                 clientData.length);
-                byte[] mac = hmacMD5(data, hash);
-                byte[] lmv2Response = new byte[mac.length + clientData.length];
-                System.arraycopy(mac, 0, lmv2Response, 0, mac.length);
-                System.arraycopy(clientData, 0, lmv2Response, mac.length,
-                                 clientData.length);
-                return lmv2Response;
-            }
-
-            /**
-             * Creates the NTLMv2 blob from the given target information block and
-             * client challenge.
-             *
-             * @param targetInformation The target information block from the Type 2
-             * message.
-             * @param clientChallenge The random 8-byte client challenge.
-             *
-             * @return The blob, used in the calculation of the NTLMv2 Response.
-             */
-            private static byte[] createBlob(byte[] targetInformation,
-                                             byte[] clientChallenge) {
-                byte[] blobSignature = new byte[] {
-                    (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x00
-                };
-                byte[] reserved = new byte[] {
-                    (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
-                };
-                byte[] unknown1 = new byte[] {
-                    (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
-                };
-                byte[] unknown2 = new byte[] {
-                    (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
-                };
-                long time = System.currentTimeMillis();
-                time += 11644473600000l; // milliseconds from January 1, 1601 -> epoch.
-                time *= 10000; // tenths of a microsecond.
-                // convert to little-endian byte array.
-                byte[] timestamp = new byte[8];
-                for (int i = 0; i < 8; i++) {
-                    timestamp[i] = (byte) time;
-                    time >>>= 8;
-                }
-                byte[] blob = new byte[blobSignature.length + reserved.length +
-                                       timestamp.length + clientChallenge.length +
-                                       unknown1.length + targetInformation.length +
-                                       unknown2.length];
-                int offset = 0;
-                System.arraycopy(blobSignature, 0, blob, offset, blobSignature.length);
-                offset += blobSignature.length;
-                System.arraycopy(reserved, 0, blob, offset, reserved.length);
-                offset += reserved.length;
-                System.arraycopy(timestamp, 0, blob, offset, timestamp.length);
-                offset += timestamp.length;
-                System.arraycopy(clientChallenge, 0, blob, offset,
-                                 clientChallenge.length);
-                offset += clientChallenge.length;
-                System.arraycopy(unknown1, 0, blob, offset, unknown1.length);
-                offset += unknown1.length;
-                System.arraycopy(targetInformation, 0, blob, offset,
-                                 targetInformation.length);
-                offset += targetInformation.length;
-                System.arraycopy(unknown2, 0, blob, offset, unknown2.length);
-                return blob;
-            }
-
-            /**
-             * Calculates the HMAC-MD5 hash of the given data using the specified
-             * hashing key.
-             *
-             * @param data The data for which the hash will be calculated. 
-             * @param key The hashing key.
-             *
-             * @return The HMAC-MD5 hash of the given data.
-             */
-            private static byte[] hmacMD5(byte[] data, byte[] key) {
-                byte[] ipad = new byte[64];
-                byte[] opad = new byte[64];
-                for (int i = 0; i < 64; i++) {
-                    ipad[i] = (byte) 0x36;
-                    opad[i] = (byte) 0x5c;
-                }
-                for (int i = key.length - 1; i >= 0; i--) {
-                    ipad[i] ^= key[i];
-                    opad[i] ^= key[i];
-                }
-                byte[] content = new byte[data.length + 64];
-                System.arraycopy(ipad, 0, content, 0, 64);
-                System.arraycopy(data, 0, content, 64, data.length);
-                MD5 md5 = new MD5();
-                md5.update(content, 0, content.length);
-                data = new byte[md5.getDigestSize()];
-                md5.doFinal(data, 0);
-                content = new byte[data.length + 64];
-                System.arraycopy(opad, 0, content, 0, 64);
-                System.arraycopy(data, 0, content, 64, data.length);
-                md5 = new MD5();
-                md5.update(content, 0, content.length);
-                byte[] ret = new byte[md5.getDigestSize()];
-                md5.doFinal(ret, 0);
-                return ret;
-            }
-
-            /**
-             * Creates a DES encryption key from the given key material.
-             *
-             * @param bytes A byte array containing the DES key material.
-             * @param offset The offset in the given byte array at which
-             * the 7-byte key material starts.
-             *
-             * @return A DES encryption key created from the key material
-             * starting at the specified offset in the given byte array.
-             */
-                /*
-            private static Key createDESKey(byte[] bytes, int offset) {
-                byte[] keyBytes = new byte[7];
-                System.arraycopy(bytes, offset, keyBytes, 0, 7);
-                byte[] material = new byte[8];
-                material[0] = keyBytes[0];
-                material[1] = (byte) (keyBytes[0] << 7 | (keyBytes[1] & 0xff) >>> 1);
-                material[2] = (byte) (keyBytes[1] << 6 | (keyBytes[2] & 0xff) >>> 2);
-                material[3] = (byte) (keyBytes[2] << 5 | (keyBytes[3] & 0xff) >>> 3);
-                material[4] = (byte) (keyBytes[3] << 4 | (keyBytes[4] & 0xff) >>> 4);
-                material[5] = (byte) (keyBytes[4] << 3 | (keyBytes[5] & 0xff) >>> 5);
-                material[6] = (byte) (keyBytes[5] << 2 | (keyBytes[6] & 0xff) >>> 6);
-                material[7] = (byte) (keyBytes[6] << 1);
-                oddParity(material);
-                return new SecretKeySpec(material, "DES");
-            }
-                */
-
-            /**
-             * Applies odd parity to the given byte array.
-             *
-             * @param bytes The data whose parity bits are to be adjusted for
-             * odd parity.
-             */
-            private static void oddParity(byte[] bytes) {
-                for (int i = 0; i < bytes.length; i++) {
-                    byte b = bytes[i];
-                    boolean needsParity = (((b >>> 7) ^ (b >>> 6) ^ (b >>> 5) ^
-                                            (b >>> 4) ^ (b >>> 3) ^ (b >>> 2) ^
-                                            (b >>> 1)) & 0x01) == 0;
-                    if (needsParity) {
-                        bytes[i] |= (byte) 0x01;
-                    } else {
-                        bytes[i] &= (byte) 0xfe;
-                    }
-                }
-            }
-
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/net/SOAP.java b/upstream/org.ibex.core/build/java/org/ibex/net/SOAP.java
deleted file mode 100644 (file)
index 85670a3..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.net;
-
-import java.io.*;
-import java.util.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.crypto.*;
-
-/**
- *  A partial RPC-style SOAP 1.1 client. Implemented from the SOAP 1.1
- *  Spec and Dave Winer's "SOAP for Busy Developers". This class
- *  extends XMLRPC in order to share some networking logic.
- *
- *  Currently unsupported features/hacks:
- *  <ul><li> Multi-ref data and circular references
- *      <li> 'Document Style'
- *      <li> WSDL support
- *  </ul>
- */
-public class SOAP extends XMLRPC {
-
-    /** the desired content of the SOAPAction header */
-    String action = null;
-
-    /** the namespace to use */
-    String nameSpace = null;
-
-    /** When you get a property from an SOAP, it just returns another SOAP with the property name tacked onto methodname. */
-    public Object get(Object name) {
-        return new SOAP(url, (method.equals("") ? "" : method + ".") + name.toString(), this, action, nameSpace); }
-
-
-    // Methods to Recieve and parse SOAP Responses ////////////////////////////////////////////////////
-
-    public void startElement(String name, String[] keys, Object[] vals, int line, int col) {
-
-        content.reset();
-        if (name.equals("SOAP-ENV:Envelope")) return;
-        if (name.equals("SOAP-ENV:Body")) return;
-        if (name.equals("SOAP-ENV:Fault")) fault = true;
-        // add a generic struct; we'll change this if our type is different
-        objects.addElement(new JS());
-
-        for(int i=0; i<keys.length; i++) {
-            String key = keys[i];
-            String value = vals[i].toString();
-            if (key.endsWith("ype")) {
-                if (value.endsWith("boolean")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(Boolean.FALSE);
-                } else if (value.endsWith("int")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new Integer(0));
-                } else if (value.endsWith("double")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new Double(0.0));
-                } else if (value.endsWith("string")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement("");
-                } else if (value.endsWith("base64")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new byte[] { });
-                } else if (value.endsWith("null")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(null);
-                } else if (value.endsWith("arrayType") || value.endsWith("JSArray") || key.endsWith("arrayType")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new JSArray());
-                }
-            }
-        }
-    }
-
-    public void endElement(String name, int line, int col) {
-
-        if (name.equals("SOAP-ENV:Envelope")) return;
-        if (name.equals("SOAP-ENV:Body")) return;
-
-        if (content.size() > 0 && content.toString().trim().length() > 0) {
-
-            // remove ourselves
-            Object me = objects.elementAt(objects.size() - 1);
-
-            if (fault || me instanceof String) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new String(content.getBuf(), 0, content.size()).intern());
-                content.reset();
-
-            } else if (me instanceof byte[]) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new Stream.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())), null));
-                content.reset();                
-
-            } else if (me instanceof Integer) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new Integer(new String(content.getBuf(), 0, content.size())));
-                content.reset();
-                
-            } else if (me instanceof Boolean) {
-                objects.removeElementAt(objects.size() - 1);
-                String s = new String(content.getBuf(), 0, content.size()).trim();
-                if (s.equals("1") || s.equals("true")) objects.addElement(Boolean.TRUE);
-                else objects.addElement(Boolean.FALSE);
-                content.reset();
-                
-            } else if (me instanceof Double) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new Double(new String(content.getBuf(), 0, content.size())));
-                content.reset();
-                
-            } else {
-                // okay, we got PCDATA for what is supposedly a
-                // struct... somebody's not adding their type info...
-                String s = new String(content.getBuf(), 0, content.size()).trim();
-                boolean hasdot = false;
-                for(int i=0; i<s.length(); i++) {
-                    if (s.charAt(i) == '.') hasdot = true;
-                    if (!Character.isDigit(s.charAt(i))) {
-                        objects.removeElementAt(objects.size() - 1);
-                        objects.addElement(s);
-                        return;
-                    }
-                }
-                if (hasdot) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new Double(s));
-                } else {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new Integer(s));
-                }
-                content.reset();
-            }
-
-        }
-        
-        // remove ourselves
-        Object me = objects.elementAt(objects.size() - 1);
-
-        // find our parent
-        Object parent = objects.size() > 1 ? objects.elementAt(objects.size() - 2) : null;
-
-        // we want to fold stuff back into the fault object
-        if (objects.size() < 2) return;
-
-        // our parent "should" be an aggregate type -- add ourselves to it.
-        if (parent != null && parent instanceof JSArray) {
-            objects.removeElementAt(objects.size() - 1);
-            ((JSArray)parent).addElement(me);
-
-        } else if (parent != null && parent instanceof JS) {
-            objects.removeElementAt(objects.size() - 1);
-            try {
-                ((JS)parent).put(name, me);
-            } catch (JSExn e) {
-                throw new Error("this should never happen");
-            }
-
-        }
-
-    }
-
-    /** Appends the SOAP representation of <code>o</code> to <code>sb</code> */
-    void appendObject(String name, Object o, StringBuffer sb) throws JSExn {
-        if (o instanceof Number) {
-            if ((double)((Number)o).intValue() == ((Number)o).doubleValue()) {
-                sb.append("                <" + name + " xsi:type=\"xsd:int\">");
-                sb.append(((Number)o).intValue());
-                sb.append("</" + name + ">\r\n");
-            } else {
-                sb.append("                <" + name + " xsi:type=\"xsd:double\">");
-                sb.append(o);
-                sb.append("</" + name + ">\r\n");
-            }
-
-        } else if (o instanceof Boolean) {
-            sb.append("                <" + name + " xsi:type=\"xsd:boolean\">");
-            sb.append(((Boolean)o).booleanValue() ? "true" : "false");
-            sb.append("</" + name + ">\r\n");
-
-        } else if (o instanceof Stream) {
-            try {
-                sb.append("                <" + name + " xsi:type=\"SOAP-ENC:base64\">\r\n");
-                InputStream is = ((Stream)o).getInputStream();
-                byte[] buf = new byte[54];
-                while(true) {
-                    int numread = is.read(buf, 0, 54);
-                    if (numread == -1) break;
-                    byte[] writebuf = buf;
-                    if (numread < buf.length) {
-                        writebuf = new byte[numread];
-                        System.arraycopy(buf, 0, writebuf, 0, numread);
-                    }
-                    sb.append("              ");
-                    sb.append(new String(Base64.encode(writebuf)));
-                    sb.append("\r\n");
-                }
-                sb.append(((Boolean)o).booleanValue() ? "1" : "0");
-                sb.append("</" + name + ">\r\n");
-            } catch (IOException e) {
-                if (Log.on) Log.info(this, "caught IOException while attempting to send a ByteStream via SOAP");
-                if (Log.on) Log.info(this, e);
-                throw new JSExn("caught IOException while attempting to send a ByteStream via SOAP");
-            }
-
-        } else if (o instanceof String) {
-            sb.append("                <" + name + " xsi:type=\"xsd:string\">");
-            String s = (String)o;
-            if (s.indexOf('<') == -1 && s.indexOf('&') == -1) {
-                sb.append(s);
-            } else {
-                char[] cbuf = s.toCharArray();
-                while(true) {
-                    int oldi = 0, i=0;
-                    while(i < cbuf.length && cbuf[i] != '<' && cbuf[i] != '&') i++;
-                    sb.append(cbuf, oldi, i);
-                    if (i == cbuf.length) break;
-                    if (cbuf[i] == '<') sb.append("&lt;");
-                    else if (cbuf[i] == '&') sb.append("&amp;");
-                    i = oldi = i + 1;
-                }
-            }
-            sb.append("</" + name + ">\r\n");
-
-        } else if (o instanceof JSArray) {
-            JSArray a = (JSArray)o;
-            sb.append("                <" + name + " SOAP-ENC:arrayType=\"xsd:ur-type[" + a.length() + "]\">");
-            for(int i=0; i<a.length(); i++) appendObject("item", a.elementAt(i), sb);
-            sb.append("</" + name + ">\r\n");
-
-        } else if (o instanceof JS) {
-            JS j = (JS)o;
-            sb.append("                <" + name + ">");
-            Enumeration e = j.keys();
-            while(e.hasMoreElements()) {
-                Object key = e.nextElement();
-                appendObject((String)key, j.get(key), sb);
-            }
-            sb.append("</" + name + ">\r\n");
-
-        }
-    }
-
-    protected String buildRequest(JSArray args) throws JSExn, IOException {
-        // build up the request
-        StringBuffer content = new StringBuffer();
-        content.append("SOAPAction: " + action + "\r\n\r\n");
-        content.append("<?xml version=\"1.0\"?>\r\n");
-        content.append("<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"\r\n");
-        content.append("                   xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"\r\n");
-        content.append("                   xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"\r\n");
-        content.append("                   xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\"\r\n");
-        content.append("                   xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\">\r\n");
-        content.append("<SOAP-ENV:Body>\r\n");
-        content.append("    <");
-        content.append(method);
-        content.append(nameSpace != null ? " xmlns=\"" + nameSpace + "\"" : "");
-        content.append(">\r\n");
-        if (args.length() > 0) {
-            Enumeration e = ((JS)args.elementAt(0)).keys();
-            while(e.hasMoreElements()) {
-                Object key = e.nextElement();
-                appendObject((String)key, ((JS)args.elementAt(0)).get(key), content);
-            }
-        }
-        content.append("    </" + method + "></SOAP-ENV:Body></SOAP-ENV:Envelope>\r\n");
-        return content.toString();
-    }
-
-    public SOAP(String url, String methodname, String action, String nameSpace) {
-        super(url, methodname);
-        this.action = action;
-        this.nameSpace = nameSpace;
-    }
-    public SOAP(String url, String methodname, SOAP httpSource, String action, String nameSpace) {
-        super(url, methodname, httpSource);
-        this.action = action;
-        this.nameSpace = nameSpace;
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/net/XMLRPC.java b/upstream/org.ibex.core/build/java/org/ibex/net/XMLRPC.java
deleted file mode 100644 (file)
index 115c4b5..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.net;
-
-import java.io.*;
-import java.util.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.crypto.*;
-
-/**
- *  An XML-RPC client implemented as a JavaScript Host Object. See the
- *  Ibex spec for information on its behavior.
- *
- *  NOTE: this client is EXTREMELY lenient in the responses it will
- *  accept; there are many, many invalid responses that it will
- *  successfully parse and return. Do NOT use this to determine the
- *  validity of your server.
- *
- *  This client conforms to <a href="http://www.xmlrpc.com/spec">The
- *  XML-RPC Spec</a>, subject to these limitations:
- *  <ol>
- *    <li> XMLRPC cannot invoke methods that require a <base64/> argument
- *    <li> if a return value contains a <base64/>, it will be returned as a string
- *    <li> The decision to pass a number as <i4/> or <double/> is based
- *         entirely on whether or not the argument is fractional. Thus, it
- *         is impossible to pass a non-fractional number to an xmlrpc
- *         method that insists on being called with a <double/> element. We
- *         hope that most xml-rpc servers will be able to automatically
- *         convert.
- *  </ol>
- */
-public class XMLRPC extends JS {
-
-    public XMLRPC(String url, String method) {
-        this.http = url.startsWith("stdio:") ? HTTP.stdio : new HTTP(url);
-        this.url = url;
-        this.method = method;
-    }
-    public XMLRPC(String url, String method, XMLRPC httpSource) {
-        this.http = httpSource.http; this.url = url; this.method = method; }
-    public Object get(Object name) {
-        return new XMLRPC(url, (method.equals("") ? "" : method + ".") + name.toString(), this); }
-
-
-    /** this holds character content as we read it in -- since there is only one per instance, we don't support mixed content */
-    protected AccessibleCharArrayWriter content = new AccessibleCharArrayWriter(100);
-    protected String url = null;         ///< the url to connect to
-    protected String method = null;      ///< the method name to invoke on the remove server
-    protected HTTP http = null;          ///< the HTTP connection to use
-    private Hash tracker;                ///< used to detect multi-ref data
-    protected boolean fault = false;     ///< True iff the return value is a fault (and should be thrown as an exception)
-
-
-    /** The object stack. As we process xml elements, pieces of the
-     *  return value are pushed onto and popped off of this stack.
-     *
-     *  The general protocol is that any time a &lt;value&gt; tag is
-     *  encountered, an empty String ("") is pushed onto the stack. If
-     *  the &lt;value/&gt; node has content (either an anonymous
-     *  string or some other XML node), that content replaces the
-     *  empty string.
-     *
-     *  If an &lt;array&gt; tag is encountered, a null is pushed onto the
-     *  stack. When a &lt;/data&gt; is encountered, we search back on the
-     *  stack to the last null, replace it with a NativeJSArray, and
-     *  insert into it all elements above it on the stack.
-     *
-     *  If a &lt;struct&gt; tag is encountered, a JSect is pushed
-     *  onto the stack. If a &lt;name&gt; tag is encountered, its CDATA is
-     *  pushed onto the stack. When a &lt;/member&gt; is encountered, the
-     *  name (second element on stack) and value (top of stack) are
-     *  popped off the stack and inserted into the struct (third
-     *  element on stack).
-     */
-    protected Vec objects = null;
-
-
-    // Recieve ////////////////////////////////////////////////////////////////
-
-    private class Helper extends XML {
-        public Helper() { super(BUFFER_SIZE); }
-
-        public void startElement(XML.Element c) {
-            content.reset();
-final String ccSwitch0 = (String)(c.getLocalName());  SUCCESS:do { switch(ccSwitch0.length()) {
-case 5: { switch(ccSwitch0.charAt(0)) { case 'a': if ("array".equals(ccSwitch0)) { if (true) do { objects.setElementAt(null, objects.size() - 1);
- } while(false); break SUCCESS; } break;  case 'f': if ("fault".equals(ccSwitch0)) { if (true) do { fault = true;
- } while(false); break SUCCESS; } break;  case 'v': if ("value".equals(ccSwitch0)) { if (true) do { objects.addElement("");
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch0.charAt(0)) { case 's': if ("struct".equals(ccSwitch0)) { if (true) do { objects.setElementAt(new JS(), objects.size() - 1);
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-        }
-        
-        public void endElement(XML.Element c) {
-final String ccSwitch1 = (String)(c.getLocalName());  SUCCESS:do { switch(ccSwitch1.length()) {
-case 2: { switch(ccSwitch1.charAt(0)) { case 'i': if ("i4".equals(ccSwitch1)) { if (true) do { objects.setElementAt(new Integer(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
- } while(false); break SUCCESS; } break;  }; break; }  case 3: { switch(ccSwitch1.charAt(0)) { case 'i': if ("int".equals(ccSwitch1)) { if (true) do { objects.setElementAt(new Integer(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
- } while(false); break SUCCESS; } break;  }; break; }  case 4: { switch(ccSwitch1.charAt(0)) { case 'd': if ("data".equals(ccSwitch1)) { if (true) do { 
-int i;
-for(i=objects.size() - 1; objects.elementAt(i) != null; i--);
-JSArray arr = new JSArray();
-try {
-for(int j = i + 1; j<objects.size(); j++) arr.put(new Integer(j - i - 1), objects.elementAt(j));
-} catch (JSExn e) {
-throw new Error("this should never happen");
-}
-objects.setElementAt(arr, i);
-objects.setSize(i + 1);
- } while(false); break SUCCESS; } break;  case 'n': if ("name".equals(ccSwitch1)) { if (true) do { objects.addElement(new String(content.getBuf(), 0, content.size()));
- } while(false); break SUCCESS; } break;  }; break; }  case 5: { switch(ccSwitch1.charAt(0)) { case 'v': if ("value".equals(ccSwitch1)) { if (true) do { if ("".equals(objects.lastElement()))
-objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
- } while(false); break SUCCESS; } break;  }; break; }  case 6: { switch(ccSwitch1.charAt(0)) { case 'b': if ("base64".equals(ccSwitch1)) { if (true) do { 
-objects.setElementAt(new Stream.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())),
-null), objects.size() - 1);
- } while(false); break SUCCESS; } break;  case 'd': if ("double".equals(ccSwitch1)) { if (true) do { objects.setElementAt(new Double(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
- } while(false); break SUCCESS; } break;  case 'm': if ("member".equals(ccSwitch1)) { if (true) do { 
-Object memberValue = objects.elementAt(objects.size() - 1);
-String memberName = (String)objects.elementAt(objects.size() - 2);
-JS struct = (JS)objects.elementAt(objects.size() - 3);
-try {
-struct.put(memberName, memberValue);
-} catch (JSExn e) {
-throw new Error("this should never happen");
-}
-objects.setSize(objects.size() - 2);
- } while(false); break SUCCESS; } break;  case 's': if ("string".equals(ccSwitch1)) { if (true) do { objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
- } while(false); break SUCCESS; } break;  }; break; }  case 7: { switch(ccSwitch1.charAt(0)) { case 'b': if ("boolean".equals(ccSwitch1)) { if (true) do { objects.setElementAt(content.getBuf()[0] == '1' ? Boolean.TRUE : Boolean.FALSE, objects.size() - 1);
- } while(false); break SUCCESS; } break;  }; break; }  case 16: { switch(ccSwitch1.charAt(0)) { case 'd': if ("dateTime.iso8601".equals(ccSwitch1)) { if (true) do { 
-String s = new String(content.getBuf(), 0, content.size());
-
-
-int i=0;
-while(Character.isWhitespace(s.charAt(i))) i++;
-if (i > 0) s = s.substring(i);
-
-try {
-JSDate nd = new JSDate();
-double date = JSDate.date_msecFromDate(Double.valueOf(s.substring(0, 4)).doubleValue(),
-Double.valueOf(s.substring(4, 6)).doubleValue() - 1,
-Double.valueOf(s.substring(6, 8)).doubleValue(),
-Double.valueOf(s.substring(9, 11)).doubleValue(),
-Double.valueOf(s.substring(12, 14)).doubleValue(),
-Double.valueOf(s.substring(15, 17)).doubleValue(),
-(double)0
-);
-nd.setTime(JSDate.internalUTC(date));
-objects.setElementAt(nd, objects.size() - 1);
-
-} catch (Exception e) {
-throw new RuntimeException("ibex.net.rpc.xml.recieve.malformedDateTag" +
-"the server sent a <dateTime.iso8601> tag which was malformed: " + s);
-}
- } while(false); break SUCCESS; } break;  }; break; }  } /* switch */  } while(false); /* OUTER */
-            content.reset();
-        }
-        
-        public void characters(char[] ch, int start, int length) {
-            try { content.write(ch, start, length); }
-            catch (Exception e) { 
-                if (Log.on) Log.info(this, "Exception in XMLRPC.content() -- this should never happen");
-                if (Log.on) Log.info(this, e);
-            }
-        }
-        
-        public void whitespace(char[] ch, int start, int length) {}
-    }
-
-    // Send ///////////////////////////////////////////////////////////////////////////
-
-    protected String buildRequest(JSArray args) throws JSExn, IOException {
-        StringBuffer content = new StringBuffer();
-        content.append("\r\n");
-        content.append("<?xml version=\"1.0\"?>\n");
-        content.append("    <methodCall>\n");
-        content.append("        <methodName>");
-        content.append(method);
-        content.append("</methodName>\n");
-        content.append("        <params>\n");
-        for(int i=0; i<args.length(); i++) {
-            content.append("            <param>\n");
-            appendObject(args.elementAt(i), content);
-            content.append("            </param>\n");
-        }
-        content.append("        </params>\n");
-        content.append("    </methodCall>");
-        return content.toString();
-    }
-
-    /** Appends the XML-RPC representation of <code>o</code> to <code>sb</code> */
-    void appendObject(Object o, StringBuffer sb) throws JSExn {
-
-        if (o == null) {
-            throw new JSExn("attempted to send a null value via XML-RPC");
-
-        } else if (o instanceof Number) {
-            if ((double)((Number)o).intValue() == ((Number)o).doubleValue()) {
-                sb.append("                <value><i4>");
-                sb.append(((Number)o).intValue());
-                sb.append("</i4></value>\n");
-            } else {
-                sb.append("                <value><double>");
-                sb.append(o);
-                sb.append("</double></value>\n");
-            }
-
-        } else if (o instanceof Boolean) {
-            sb.append("                <value><boolean>");
-            sb.append(((Boolean)o).booleanValue() ? "1" : "0");
-            sb.append("</boolean></value>\n");
-
-        } else if (o instanceof Stream) {
-            try {
-                sb.append("                <value><base64>\n");
-                InputStream is = ((Stream)o).getInputStream();
-                byte[] buf = new byte[54];
-                while(true) {
-                    int numread = is.read(buf, 0, 54);
-                    if (numread == -1) break;
-                    byte[] writebuf = buf;
-                    if (numread < buf.length) {
-                        writebuf = new byte[numread];
-                        System.arraycopy(buf, 0, writebuf, 0, numread);
-                    }
-                    sb.append("              ");
-                    sb.append(new String(Base64.encode(writebuf)));
-                    sb.append("\n");
-                }
-                sb.append("\n              </base64></value>\n");
-            } catch (IOException e) {
-                if (Log.on) Log.info(this, "caught IOException while attempting to send a ByteStream via XML-RPC");
-                if (Log.on) Log.info(this, e);
-                throw new JSExn("caught IOException while attempting to send a ByteStream via XML-RPC");
-            }
-
-        } else if (o instanceof String) {
-            sb.append("                <value><string>");
-            String s = (String)o;
-            if (s.indexOf('<') == -1 && s.indexOf('&') == -1) {
-                sb.append(s);
-            } else {
-                char[] cbuf = s.toCharArray();
-                int oldi = 0, i=0;
-                while(true) {
-                    while(i < cbuf.length && cbuf[i] != '<' && cbuf[i] != '&') i++;
-                    sb.append(cbuf, oldi, i - oldi);
-                    if (i >= cbuf.length) break;
-                    if (cbuf[i] == '<') sb.append("&lt;");
-                    else if (cbuf[i] == '&') sb.append("&amp;");
-                    i = oldi = i + 1;
-                    if (i >= cbuf.length) break;
-                }
-            }
-            sb.append("</string></value>\n");
-
-        } else if (o instanceof JSDate) {
-            sb.append("                <value><dateTime.iso8601>");
-            java.util.Date d = new java.util.Date(((JSDate)o).getRawTime());
-            sb.append(d.getYear() + 1900);
-            if (d.getMonth() + 1 < 10) sb.append('0');
-            sb.append(d.getMonth() + 1);
-            if (d.getDate() < 10) sb.append('0');
-            sb.append(d.getDate());
-            sb.append('T');
-            if (d.getHours() < 10) sb.append('0');
-            sb.append(d.getHours());
-            sb.append(':');
-            if (d.getMinutes() < 10) sb.append('0');
-            sb.append(d.getMinutes());
-            sb.append(':');
-            if (d.getSeconds() < 10) sb.append('0');
-            sb.append(d.getSeconds());
-            sb.append("</dateTime.iso8601></value>\n");
-
-        } else if (o instanceof JSArray) {
-            if (tracker.get(o) != null) throw new JSExn("attempted to send multi-ref data structure via XML-RPC");
-            tracker.put(o, Boolean.TRUE);
-            sb.append("                <value><array><data>\n");
-            JSArray a = (JSArray)o;
-            for(int i=0; i<a.length(); i++) appendObject(a.elementAt(i), sb);
-            sb.append("                </data></array></value>\n");
-
-        } else if (o instanceof JS) {
-            if (tracker.get(o) != null) throw new JSExn("attempted to send multi-ref data structure via XML-RPC");
-            tracker.put(o, Boolean.TRUE);
-            JS j = (JS)o;
-            sb.append("                <value><struct>\n");
-            Enumeration e = j.keys();
-            while(e.hasMoreElements()) {
-                Object key = e.nextElement();
-                sb.append("                <member><name>" + key + "</name>\n");
-                appendObject(j.get(key), sb);
-                sb.append("                </member>\n");
-            }
-            sb.append("                </struct></value>\n");
-
-        } else {
-            throw new JSExn("attempt to send object of type " + o.getClass().getName() + " via XML-RPC");
-
-        }
-    }
-
-
-    // Call Sequence //////////////////////////////////////////////////////////////////////////
-
-    public final Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        JSArray args = new JSArray();
-        for(int i=0; i<nargs; i++) args.addElement(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
-        return call(args);
-    }
-
-    public final Object call(final JSArray args) throws JSExn {
-        try {
-            final JS.UnpauseCallback callback = JS.pause();
-            new java.lang.Thread() { public void run() { call(callback, args); }  }.start();
-            return null; // doesn't matter since we paused
-        } catch (NotPauseableException npe) {
-            throw new JSExn("cannot invoke an XML-RPC call in the foreground thread");
-        }
-    }
-
-    final void call(final JS.UnpauseCallback callback, final JSArray args) {
-        try {
-            if (Log.rpc) Log.info(this, "call to " + url + " : " + method);
-            if (tracker == null) tracker = new Hash();
-            if (objects == null) objects = new Vec();
-            String request = buildRequest(args);
-            if (Log.rpc) Log.info(this, "send:\n" + request);
-            InputStream is = http.POST("text/xml", request);
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            try {
-                new Helper().parse(br);
-                final Object result = fault ? new JSExn(objects.elementAt(0)) : objects.size() == 0 ? null : objects.elementAt(0);
-                Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(result); }});
-            } finally {
-                tracker.clear();
-                objects.setSize(0);
-            }
-        } catch (final JSExn e) {
-            final Exception e2 = e;
-            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(e2); }});
-        } catch (final IOException e) {
-            final Exception e2 = e;
-            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2)); }});
-        } catch (final XML.Exn e) {
-            final Exception e2 = e;
-            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2)); }});
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/plat/AWT.java b/upstream/org.ibex.core/build/java/org/ibex/plat/AWT.java
deleted file mode 100644 (file)
index fc08b1d..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.plat;
-
-import org.ibex.util.*;
-import java.io.*;
-import org.ibex.js.*;
-import java.awt.*;
-import java.awt.datatransfer.*;
-import java.awt.image.*;
-import java.awt.event.*;
-import org.ibex.graphics.*;
-import org.ibex.core.*;
-import org.ibex.net.*;
-
-/** Platform subclass for all VM's providing AWT 1.1 functionality */
-public class AWT extends JVM {
-
-    protected String getDescriptiveName() { return "Generic JDK 1.1+ with AWT"; }
-    protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) { return new AWTPixelBuffer(w, h); }
-    protected Picture _createPicture(JS r) { return new AWTPicture(r); }
-    protected int _getScreenWidth() { return Toolkit.getDefaultToolkit().getScreenSize().width; }
-    protected int _getScreenHeight() { return Toolkit.getDefaultToolkit().getScreenSize().height; }
-    protected Surface _createSurface(Box b, boolean framed) { return new AWTSurface(b, framed); }
-
-    protected void postInit() {
-        if (Log.on) Log.diag(Platform.class, "               color depth = " +
-                            Toolkit.getDefaultToolkit().getColorModel().getPixelSize() + "bpp");
-    }
-
-    protected void _criticalAbort(String message) {
-        if (Log.on) Log.info(this, message);
-        final Dialog d = new Dialog(new Frame(), "Ibex Cannot Continue");
-        d.setLayout(new BorderLayout());
-        TextArea ta = new TextArea("Ibex cannot continue because:\n\n" + message, 10, 80);
-        ta.setEditable(false);
-        d.add(ta, "Center");
-        Button b = new Button("OK");
-        b.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    d.dispose();
-                }
-            });
-        d.add(b, "South");
-        d.setModal(true);
-        d.pack();
-        d.show();
-        new Semaphore().block();
-    }
-
-    protected String _getClipBoard() {
-        Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
-        if (cb == null) return null;
-        Transferable clipdata = cb.getContents(null);
-        try { return (String)clipdata.getTransferData(DataFlavor.stringFlavor); } catch (Exception ex) { return null; }
-    }
-
-    protected void _setClipBoard(String s) {
-        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-        if (clipboard == null) return;
-        StringSelection clipString = new StringSelection(s);
-        clipboard.setContents(clipString, clipString);
-    }
-
-    /** some platforms (cough, cough, NetscapeVM) have totally broken modifier masks; they will need to override this */
-    protected static int modifiersToButtonNumber(int modifiers) {
-        if ((modifiers & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) return 1;
-        if ((modifiers & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK) {
-            // ugh, MacOSX reports the right mouse button as BUTTON2_MASK...
-            if (System.getProperty("os.name", "").startsWith("Mac OS X")) return 2;
-            return 3;
-        }
-        if ((modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) {
-            // ugh, MacOSX reports the right mouse button as BUTTON2_MASK...
-            if (System.getProperty("os.name", "").startsWith("Mac OS X")) return 3;
-            return 2;
-        }
-        return 0;
-    }
-
-    static class FileDialogHelper extends FileDialog implements WindowListener, ComponentListener {
-        Semaphore s;
-        public FileDialogHelper(String suggestedFileName, Semaphore s, boolean write) {
-            super(new Frame(), write ? "Save" : "Open", write ? FileDialog.SAVE : FileDialog.LOAD);
-            this.s = s;
-            addWindowListener(this);
-            addComponentListener(this);
-            if (suggestedFileName.indexOf(File.separatorChar) == -1) {
-                setFile(suggestedFileName);
-            } else {
-                setDirectory(suggestedFileName.substring(0, suggestedFileName.lastIndexOf(File.separatorChar)));
-                setFile(suggestedFileName.substring(suggestedFileName.lastIndexOf(File.separatorChar) + 1));
-            }
-            show();
-        }
-        public void windowActivated(WindowEvent e) { }
-        public void windowClosed(WindowEvent e) { s.release(); }
-        public void windowClosing(WindowEvent e) { }
-        public void windowDeactivated(WindowEvent e) { }
-        public void windowDeiconified(WindowEvent e) { }
-        public void windowIconified(WindowEvent e) { }
-        public void windowOpened(WindowEvent e) { }
-        public void componentHidden(ComponentEvent e) { s.release(); }
-        public void componentMoved(ComponentEvent e) { }
-        public void componentResized(ComponentEvent e) { }
-        public void componentShown(ComponentEvent e) { }
-    };
-
-    protected String _fileDialog(String suggestedFileName, boolean write) {
-        final Semaphore s = new Semaphore();
-        FileDialogHelper fd = new FileDialogHelper(suggestedFileName, s, write);
-        s.block();
-        return fd.getDirectory() == null ? null : (fd.getDirectory() + File.separatorChar + fd.getFile());
-    }
-
-
-    // Inner Classes /////////////////////////////////////////////////////////////////////////////////////
-
-    protected org.ibex.graphics.Font.Glyph _createGlyph(org.ibex.graphics.Font f, char c) { return new AWTGlyph(f, c); }
-    protected static class AWTGlyph extends org.ibex.graphics.Font.Glyph {
-        private Image i = null;
-        private static ColorModel cmodel = new DirectColorModel(32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000);
-
-        // this doesn't work on Win32 because the JVM is broken
-        /*
-        static final ColorModel cmodel = new ColorModel(8) {
-            public int getRed(int p) { return 0; }
-            public int getGreen(int p) { return 0; }
-            public int getBlue(int p) { return 0; }
-            public int getAlpha(int p) { return p & 0xFF; }
-        };
-        */
-
-        public AWTGlyph(org.ibex.graphics.Font f, char c) { super(f, c); }
-        Image getImage() {
-            if (i == null && isLoaded) {
-
-                int[] data2 = new int[data.length];
-                for(int i=0; i<data2.length; i++) data2[i] = ((data[i]) & 0xff) << 24;
-
-                MemoryImageSource mis = new MemoryImageSource(width, height, cmodel, data2, 0, width);
-                mis.setAnimated(true);
-                i = Toolkit.getDefaultToolkit().createImage(mis);
-                MediaTracker mediatracker = new MediaTracker(new Canvas());
-                mediatracker.addImage(i, 1);
-                try { mediatracker.waitForAll(); } catch (InterruptedException e) { }
-                mediatracker.removeImage(i);
-                synchronized(AWTPixelBuffer.class) { 
-                    if (AWTPixelBuffer.component == null) {
-                        AWTPixelBuffer.component = new Frame();
-                        AWTPixelBuffer.component.setVisible(false);
-                        AWTPixelBuffer.component.addNotify();
-                    }
-                }
-                data = null;
-            }
-            return i;
-        }
-    }
-
-    protected static class AWTPicture extends Picture {
-        public Image i = null;
-        private static ColorModel cmodel = new DirectColorModel(32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000);
-        
-        boolean initialized = false;
-        public AWTPicture(JS r) { super(r); }
-        public void init() {
-            if (initialized) return;
-            initialized = true;
-            MemoryImageSource mis = new MemoryImageSource(width, height, cmodel, data, 0, width);
-            mis.setAnimated(true);
-            i = Toolkit.getDefaultToolkit().createImage(mis);
-            MediaTracker mediatracker = new MediaTracker(new Canvas());
-            mediatracker.addImage(i, 1);
-            try { mediatracker.waitForAll(); } catch (InterruptedException e) { }
-            mediatracker.removeImage(i);
-            synchronized(AWTPixelBuffer.class) { 
-                if (AWTPixelBuffer.component == null) {
-                    AWTPixelBuffer.component = new Frame();
-                    AWTPixelBuffer.component.setVisible(false);
-                    AWTPixelBuffer.component.addNotify();
-                }
-            }
-        }
-    }
-    
-    protected static class AWTPixelBuffer extends PixelBuffer {
-        
-        protected Image i = null;
-        protected Graphics g = null;
-        
-        /** JDK1.1 platforms require that a component be associated with each off-screen buffer */
-        static Component component = null;
-
-        protected AWTPixelBuffer() { }
-        public AWTPixelBuffer(int w, int h) {
-            synchronized(AWTPixelBuffer.class) {
-                if (component == null) {
-                    component = new Frame();
-                    component.setVisible(false);
-                    component.addNotify();
-                }
-            }
-            i = component.createImage(w, h);
-            g = i.getGraphics();
-        }
-        
-        public int getHeight() { return i == null ? 0 : i.getHeight(null); }
-        public int getWidth() { return i == null ? 0 : i.getWidth(null); }
-
-        public void drawPicture(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2) {
-            ((AWTPicture)source).init();
-            g.setClip(cx1, cy1, cx2 - cx1, cy2 - cy1);
-            g.drawImage(((AWTPicture)source).i, dx, dy, null);
-            g.setClip(0, 0, i.getWidth(null), i.getHeight(null));
-        }
-
-        /** implemented with java.awt 1.1's setXORMode() */
-        public void drawGlyph(org.ibex.graphics.Font.Glyph source, int dx, int dy, int cx1, int cy1, int cx2, int cy2, int rgb) {
-
-            // XOR the target region
-            g.setXORMode(new java.awt.Color((rgb & 0x00ff0000) >> 16, (rgb & 0x0000ff00) >> 8, rgb & 0x000000ff));
-            g.setColor(new java.awt.Color(0x0, 0x0, 0x0));
-            g.fillRect(cx1, cy1, cx2 - cx1, cy2 - cy1);
-
-            // blacken the area we want the glyph to cover
-            g.setPaintMode();
-            g.setClip(cx1, cy1, cx2 - cx1, cy2 - cy1);
-            g.drawImage(((AWTGlyph)source).getImage(), dx, dy, null);
-            g.setClip(0, 0, i.getWidth(null), i.getHeight(null));
-
-            // XOR back, turning black into the chosen rgb color
-            g.setXORMode(new java.awt.Color((rgb & 0x00ff0000) >> 16, (rgb & 0x0000ff00) >> 8, rgb & 0x000000ff));
-            g.setColor(new java.awt.Color(0x0, 0x0, 0x0));
-            g.fillRect(cx1, cy1, cx2 - cx1, cy2 - cy1);
-
-            // restore the graphics context
-            g.setPaintMode();
-        }
-
-        // FIXME: try to use os acceleration
-        public void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, int argb) {
-            g.setColor(new java.awt.Color((argb & 0x00FF0000) >> 16, (argb & 0x0000FF00) >> 8, (argb & 0x000000FF)));
-            if (x1 == x3 && x2 == x4) {
-                g.fillRect(x1, y1, x4 - x1, y2 - y1);
-            } else for(int y=y1; y<y2; y++) {
-                int _x1 = (int)Math.floor((y - y1) * (x3 - x1) / (y2 - y1) + x1);
-                int _y1 = (int)Math.floor(y);
-                int _x2 = (int)Math.ceil((y - y1) * (x4 - x2) / (y2 - y1) + x2);
-                int _y2 = (int)Math.floor(y) + 1;
-                if (_x1 > _x2) { int _x0 = _x1; _x1 = _x2; _x2 = _x0; }
-                g.fillRect(_x1, _y1, _x2 - _x1, _y2 - _y1);
-            }
-        }
-    }
-    
-    
-    protected static class AWTSurface extends Surface.DoubleBufferedSurface
-        implements MouseListener, MouseMotionListener, KeyListener, ComponentListener, WindowListener {
-
-        public void blit(PixelBuffer s, int sx, int sy, int dx, int dy, int dx2, int dy2) {
-            insets = (frame == null ? window : frame).getInsets();
-            window.getGraphics().drawImage(((AWTPixelBuffer)s).i,
-                                  dx + insets.left,
-                                  dy + insets.top,
-                                  dx2 + insets.left,
-                                  dy2 + insets.top,
-                                  sx, sy, sx + (dx2 - dx), sy + (dy2 - dy), null);
-        }
-        
-        /** if (component instanceof Frame) then frame == window else frame == null */
-        Frame frame = null;
-        Window window = null;
-        
-        /** our component's insets */
-        protected Insets insets = new Insets(0, 0, 0, 0);
-        
-        /** some JDKs let us recycle a single Dimension object when calling getSize() */
-        Dimension singleSize = new Dimension();
-        
-        public void toBack() { if (window != null) window.toBack(); }
-        public void toFront() { if (window != null) window.toFront(); }
-        public void setLocation() { window.setLocation(root.x, root.y); }
-        public void setTitleBarText(String s) { if (frame != null) frame.setTitle(s); }
-        public void setIcon(Picture i) { if (frame != null) frame.setIconImage(((AWTPicture)i).i); }
-        public void _setSize(int width, int height) { window.setSize(width + (insets.left + insets.right), height + (insets.top + insets.bottom)); }
-        public void setInvisible(boolean b) { window.setVisible(!b); }
-        protected void _setMinimized(boolean b) { if (Log.on) Log.info(this, "JDK 1.1 platforms cannot minimize or unminimize windows"); }
-        protected void _setMaximized(boolean b) {
-            if (!b) {
-                if (Log.on) Log.info(this, "JDK 1.1 platforms cannot unmaximize windows");
-                return;
-            }
-            window.setLocation(new Point(0, 0));
-            window.setSize(Toolkit.getDefaultToolkit().getScreenSize());
-        }
-
-        class InnerFrame extends Frame {
-            public InnerFrame() throws java.lang.UnsupportedOperationException { }
-            public Dimension getMinimumSize() {
-                return new Dimension(root == null ? 0 : root.minwidth, root == null ? 0 : root.minheight); }
-            public void update(Graphics gr) { paint(gr); }
-            public void paint(Graphics gr) {
-                Rectangle r = gr.getClipBounds();
-
-                // ugly hack for Java1.4 dynamicLayout on Win32 -- this catches expansions during smooth resize
-                int newwidth = Math.max(r.x - insets.left + r.width, root.width);
-                int newheight = Math.max(r.y - insets.top + r.height, root.height);
-                if (newwidth > root.width || newheight > root.height)
-                    componentResized(window.getWidth() - insets.left - insets.right,
-                                     window.getHeight() - insets.top - insets.bottom);
-
-                Dirty(r.x - insets.left, r.y - insets.top, r.width, r.height);
-            }
-        }
-
-        class InnerWindow extends Window {
-            public InnerWindow() throws java.lang.UnsupportedOperationException { super(new Frame()); }
-            public Dimension getMinimumSize() {
-                return new Dimension(root == null ? 0 : root.minwidth, root == null ? 0 : root.minheight); }
-            public void update(Graphics gr) { paint(gr); }
-            public void paint(Graphics gr) {
-                Rectangle r = gr.getClipBounds();
-                Dirty(r.x - insets.left, r.y - insets.top, r.width, r.height);
-            }
-        }
-
-        public void setMinimumSize(int minx, int miny, boolean resizable) { if (frame != null) frame.setResizable(resizable); }
-
-        private int oldfill = 0x0;
-        public void render() {
-            // useful optimizatin;
-            if (oldfill != root.fillcolor) {
-                oldfill = root.fillcolor;
-                window.setBackground((root.fillcolor & 0xFF000000) == 0 ?
-                                     java.awt.Color.white :
-                                     new java.awt.Color((root.fillcolor >> 16) & 0xff,
-                                               (root.fillcolor >> 8) & 0xff,
-                                               (root.fillcolor) & 0xff));
-            }
-            super.render();
-        }
-
-        AWTSurface(Box root, boolean framed) {
-            super(root);
-            try {
-                if (framed) window = frame = new InnerFrame();
-                else window = new InnerWindow();
-
-            // this is here to catch HeadlessException on jdk1.4
-            } catch (java.lang.UnsupportedOperationException e) {
-                if (Log.on) Log.info(this, "Exception thrown in AWTSurface$InnerFrame() -- this should never happen");
-                if (Log.on) Log.info(this, e);
-            }
-
-            insets = window.getInsets();
-            
-            window.addMouseListener(this);
-            window.addKeyListener(this);
-            window.addComponentListener(this);
-            window.addMouseMotionListener(this);
-            window.addWindowListener(this);
-
-            // IMPORTANT: this must be called before render() to ensure
-            // that our peer has been created
-            makeVisible();
-        }
-
-        protected void makeVisible() { window.setVisible(true); }
-        
-        public void _dispose() {
-            window.removeMouseListener(this);
-
-            // removed to work around a jdk1.3 bug
-            /* window.removeKeyListener(this); */
-
-            window.removeComponentListener(this);
-            window.removeMouseMotionListener(this);
-            window.removeWindowListener(this);
-            window.dispose();
-        }
-
-        public void syncCursor() {
-            if (cursor.equals("crosshair")) window.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
-            else if (cursor.equals("east")) window.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
-            else if (cursor.equals("move")) window.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-            else if (cursor.equals("north")) window.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
-            else if (cursor.equals("northeast")) window.setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
-            else if (cursor.equals("northwest")) window.setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
-            else if (cursor.equals("south")) window.setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
-            else if (cursor.equals("southeast")) window.setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
-            else if (cursor.equals("southwest")) window.setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
-            else if (cursor.equals("text")) window.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
-            else if (cursor.equals("west")) window.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
-            else if (cursor.equals("wait")) window.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-            else if (cursor.equals("hand")) window.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-            else window.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-        
-        // AWT Message translation ////////////////////////////////////////////////////////////////
-        
-        // these functions are all executed in the AWT thread, not the
-        // MessageQueue thread. As a result, they must be *extremely*
-        // careful about invoking methods on instances of Box. Currently,
-        // they should only enqueue messages, use Box.whoIs()
-        // (unsynchronized but thought to be safe), and modify members of
-        // Surface.
-        
-        public void componentHidden(ComponentEvent e) { }
-        public void componentShown(ComponentEvent e) { }
-        public void windowOpened(WindowEvent e) { }
-        public void windowClosed(WindowEvent e) { }
-        public void windowClosing(WindowEvent e) { Close(); }
-        public void windowIconified(WindowEvent e) { Minimized(true); }
-        public void windowDeiconified(WindowEvent e) { dirty(0, 0, root.width, root.height); Minimized(false); }
-        public void windowActivated(WindowEvent e) { Focused(true); }
-        public void windowDeactivated(WindowEvent e) { Focused(false); }
-        public void componentMoved(ComponentEvent e) { PosChange(window.getLocation().x + insets.left, window.getLocation().y + insets.top); }
-
-        public void componentResized(ComponentEvent e) {
-            // we have to periodically do this; I don't know why
-            insets = window.getInsets();
-            componentResized(window.getWidth() - insets.left - insets.right, window.getHeight() - insets.top - insets.bottom);
-        }
-
-        public void componentResized(int newwidth, int newheight) { SizeChange(newwidth, newheight); }
-
-        public void keyTyped(KeyEvent k) { }
-        public void keyPressed(KeyEvent k) { KeyPressed(translateKey(k)); }
-        public void keyReleased(KeyEvent k) { KeyReleased(translateKey(k)); }
-        public void mouseExited(MouseEvent m) { mouseMoved(m); }
-        public void mouseEntered(MouseEvent m) { mouseMoved(m); }
-        public void mouseDragged(MouseEvent m) { mouseMoved(m); }
-        public void mouseMoved(MouseEvent m) {
-
-            // ugly hack for Java1.4 dynamicLayout on Win32 -- this catches contractions during smooth resize
-            int newwidth = window.getWidth() - insets.left - insets.right;
-            int newheight = window.getHeight() - insets.top - insets.bottom;
-            if (newwidth != root.width || newheight != root.height) componentResized(newwidth, newheight);
-            
-            Move(m.getX() - insets.left, m.getY() - insets.top);
-        }
-        public void mousePressed(MouseEvent m) { Press(modifiersToButtonNumber(m.getModifiers())); }
-        public void mouseReleased(MouseEvent m) { Release(modifiersToButtonNumber(m.getModifiers())); }
-        public void mouseClicked(MouseEvent m) {
-            if (m.getClickCount() == 2) DoubleClick(modifiersToButtonNumber(m.getModifiers()));
-            else Click(modifiersToButtonNumber(m.getModifiers()));
-        }
-        
-        String translateKey(KeyEvent k) {
-            switch (k.getKeyCode()) {
-            case KeyEvent.VK_ALT: return "alt";
-            case KeyEvent.VK_BACK_SPACE: return "back_space";
-            case KeyEvent.VK_CONTROL: return "control";
-            case KeyEvent.VK_DELETE: return "delete";
-            case KeyEvent.VK_DOWN: return "down";
-            case KeyEvent.VK_END: return "end";
-            case KeyEvent.VK_ENTER: return "enter";
-            case KeyEvent.VK_ESCAPE: return "escape";
-            case KeyEvent.VK_F1: return "f1";
-            case KeyEvent.VK_F10: return "f10";
-            case KeyEvent.VK_F11: return "f11";
-            case KeyEvent.VK_F12: return "f12";
-            case KeyEvent.VK_F2: return "f2";
-            case KeyEvent.VK_F3: return "f3";
-            case KeyEvent.VK_F4: return "f4";
-            case KeyEvent.VK_F5: return "f5";
-            case KeyEvent.VK_F6: return "f6"; 
-            case KeyEvent.VK_F7: return "f7";
-            case KeyEvent.VK_F8: return "f8";
-            case KeyEvent.VK_F9: return "f9";
-            case KeyEvent.VK_HOME: return "home";
-            case KeyEvent.VK_INSERT: return "insert";
-            case KeyEvent.VK_LEFT: return "left";
-            case KeyEvent.VK_META: return "alt";
-            case KeyEvent.VK_PAGE_DOWN: return "page_down";
-            case KeyEvent.VK_PAGE_UP: return "page_up";
-            case KeyEvent.VK_PAUSE: return "pause";
-            case KeyEvent.VK_PRINTSCREEN: return "printscreen";
-            case KeyEvent.VK_RIGHT: return "right";
-            case KeyEvent.VK_SHIFT: return "shift";
-            case KeyEvent.VK_TAB: return "tab";
-            case KeyEvent.VK_UP: return "up";
-            default:
-                char c = k.getKeyChar();
-                if (c >= 1 && c <= 26) c = (char)('a' + c - 1);
-                return String.valueOf(c);
-            }
-        }
-    }
-
-    protected void _decodeJPEG(InputStream is, Picture p) {
-        try {
-            Image i = Toolkit.getDefaultToolkit().createImage(InputStreamToByteArray.convert(is));
-            MediaTracker mediatracker = new MediaTracker(new Canvas());
-            mediatracker.addImage(i, 1);
-            try { mediatracker.waitForAll(); } catch (InterruptedException e) { }
-            mediatracker.removeImage(i);
-            final int width = i.getWidth(null);
-            final int height = i.getHeight(null);
-            final int[] data = new int[width * height];
-            PixelGrabber pg = new PixelGrabber(i, 0, 0, width, height, data, 0, width);
-            pg.grabPixels();
-            if ((pg.getStatus() & ImageObserver.ABORT) != 0)
-                Log.info(this, "PixelGrabber reported an error while decoding JPEG image");
-            p.width = width;
-            p.height = height;
-            p.data = data;
-        } catch (Exception e) {
-            Log.info(this, "Exception caught while decoding JPEG image");
-            Log.info(this, e);
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/plat/JVM.java b/upstream/org.ibex.core/build/java/org/ibex/plat/JVM.java
deleted file mode 100644 (file)
index 4bc76c5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.plat;
-
-import org.ibex.graphics.*;
-import org.ibex.core.*;
-import org.ibex.net.*;
-
-/** common superclass for all platforms that run in a "real" JVM */
-public abstract class JVM extends Platform {
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/plat/Java2.java b/upstream/org.ibex.core/build/java/org/ibex/plat/Java2.java
deleted file mode 100644 (file)
index f575b32..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.plat;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
-import java.net.*;
-import java.util.*;
-import org.ibex.util.*;
-import java.lang.reflect.*;
-import org.ibex.graphics.*;
-import org.ibex.core.*;
-import org.ibex.net.*;
-
-/** Platform class for most reasonable Java1.2+ Java2s */
-public class Java2 extends AWT {
-
-    private boolean isJava14 = false;
-
-    public Java2() {
-        // disable the focus manager so we can intercept the tab key
-        String versionString = System.getProperty("java.version", "");
-        int secondDecimal = versionString.substring(versionString.indexOf('.') + 1).indexOf('.');
-        if (secondDecimal != -1) versionString = versionString.substring(0, versionString.indexOf('.') + 1 + secondDecimal);
-        double version = Double.parseDouble(versionString);
-        if (version >= 1.4) {
-            isJava14 = true;
-            try {
-                Toolkit t = java.awt.Toolkit.getDefaultToolkit();
-                Method m = java.awt.Toolkit.class.getMethod("setDynamicLayout", new Class[] { Boolean.TYPE });
-                m.invoke(t, new Object[] { Boolean.TRUE });
-            } catch (Exception e) {
-                Log.info(this, "Exception while trying to enable AWT Dynamic Layout");
-                Log.info(this, e);
-            }
-        }
-        javax.swing.FocusManager.setCurrentManager(new javax.swing.FocusManager() {
-                public void processKeyEvent(Component focusedComponent, KeyEvent anEvent) { }
-                public void focusPreviousComponent(Component aComponent) { }
-                public void focusNextComponent(Component aComponent) { }
-            });
-    }
-
-    /** this is done with reflection in case a new version of the plugin comes out that doesn't let us pull the sun.plugin.* trick */
-    protected synchronized org.ibex.net.HTTP.Proxy _detectProxy() {
-        return (org.ibex.net.HTTP.Proxy)java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
-                public Object run() {
-                    try {
-                        org.ibex.net.HTTP.Proxy pi = new org.ibex.net.HTTP.Proxy();
-                        
-                        Class PluginProxyHandler = Class.forName("sun.plugin.protocol.PluginProxyHandler");
-                        Method getDefaultProxyHandler = PluginProxyHandler.getMethod("getDefaultProxyHandler", new Class[] { });
-                        Object proxyHandler = getDefaultProxyHandler.invoke(null, new Object[] { });
-                        
-                        Class ProxyHandler = Class.forName("sun.plugin.protocol.ProxyHandler");
-                        Method getProxyInfo = ProxyHandler.getMethod("getProxyInfo", new Class[] { URL.class });
-                        Object proxyInfo = getProxyInfo.invoke(proxyHandler, new Object[] { new URL("http://www.ibex.org") });
-                        
-                        Class ProxyInfo = Class.forName("sun.plugin.protocol.ProxyInfo");
-                        
-                        if (((Boolean)ProxyInfo.getMethod("isSocksUsed", new Class[] { }).invoke(proxyInfo, new Object[] { })).booleanValue()) {
-                            pi.socksProxyHost =
-                                (String)ProxyInfo.getMethod("getSocksProxy", new Class[] { }).invoke(proxyInfo, new Object[] { });
-                            pi.socksProxyPort =
-                                ((Integer)ProxyInfo.getMethod("getSocksPort", new Class[] { }).invoke(proxyInfo, new Object[] { })).intValue();
-                        }
-                        
-                        if (((Boolean)ProxyInfo.getMethod("isProxyUsed", new Class[] { }).invoke(proxyInfo, new Object[] { })).booleanValue()) {
-                            pi.httpProxyHost =
-                                (String)ProxyInfo.getMethod("getProxy", new Class[] { }).invoke(proxyInfo, new Object[] { });
-                            pi.httpProxyPort =
-                                ((Integer)ProxyInfo.getMethod("getPort", new Class[] { }).invoke(proxyInfo, new Object[] { })).intValue();
-                        }
-                        
-                        if (pi.httpProxyHost != null || pi.socksProxyHost != null) return pi;
-                        else return null;
-
-                    } catch (Throwable e) {
-                        if (Log.on) Log.info(this, "No proxy information found in Java Plugin classes");
-                        return null;
-                    }
-                }});
-    }
-
-    protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) { return new Java2PixelBuffer(w, h); }
-    protected Surface _createSurface(final Box root, final boolean framed) {
-        return (Surface)java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
-                public Object run() {
-                    if (isJava14) {
-                        try {
-                             // weaken the binding here to avoid link errors on 1.3.x
-                             Class java14SurfaceClass = Class.forName(Java2.class.getName() + "$Java14Surface");
-                             Constructor ctor = java14SurfaceClass.getConstructor(new Class[] { Box.class, Boolean.TYPE });
-                               return (Surface)ctor.newInstance(new Object[] { root, Boolean.valueOf(framed) });
-                        } catch (Exception e) {
-                            Log.info(this, e);
-                            throw new LinkageError("error: " + e);
-                        }
-                    } else {
-                        return new Java2Surface(root, framed);
-                    }
-                }
-            });
-    }
-
-    // Inner Classes //////////////////////////////////////////////////////////////////
-
-    private static Cursor invisibleCursor =
-        Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(2, 2, BufferedImage.TYPE_INT_ARGB),
-                                                       new Point(1, 1), "invisible");
-
-    protected static class Java2Surface extends AWTSurface {
-
-        public Java2Surface(Box root, boolean framed) { super(root, framed); }
-
-        protected void _setMinimized(boolean b) {
-            if (frame == null) Log.info(this, "JDK 1.2 can only minimize frames, not windows");
-            else if (b) frame.setState(java.awt.Frame.ICONIFIED);
-            else frame.setState(java.awt.Frame.NORMAL);
-        }
-
-        public void syncCursor() {
-            if (cursor.equals("invisible")) window.setCursor(invisibleCursor);
-            else super.syncCursor();
-        }
-    }
-
-    protected static class Java14Surface extends Java2Surface implements WindowStateListener, MouseWheelListener {
-        public Java14Surface(Box root, boolean framed) {
-            super(root, true);
-            // JDK1.4 doesn't like java.lang.Window's...
-            if (!framed) ((Frame)window).setUndecorated(true);
-            window.addWindowStateListener(this);
-            window.addMouseWheelListener(this);
-            window.setVisible(true);
-        }
-
-        protected void makeVisible() { }
-        
-        protected void _setMaximized(boolean m) {
-            if (frame == null) {
-                if (Log.on) Log.info(this, "JDK 1.4 can only maximize frames, not windows");
-                return;
-            }
-            frame.setExtendedState(m ? Frame.MAXIMIZED_BOTH : (minimized ? Frame.ICONIFIED : Frame.NORMAL));
-        }
-        protected void _setMinimized(boolean m) {
-            if (frame == null) {
-                if (Log.on) Log.info(this, "JDK 1.4 can only minimize frames, not windows");
-                return;
-            }
-            frame.setExtendedState(m ? Frame.ICONIFIED : (maximized ? Frame.MAXIMIZED_BOTH : Frame.NORMAL));
-        }
-        public void windowStateChanged(WindowEvent e) {
-            if (e.getOldState() != e.getNewState()) {
-                if ((e.getNewState() & Frame.MAXIMIZED_BOTH) != 0) Maximized(true);
-                else if (((e.getOldState() & Frame.MAXIMIZED_BOTH) != 0) && (e.getNewState() & Frame.MAXIMIZED_BOTH) == 0)
-                    Maximized(false);
-            }
-        }
-
-        public void mouseWheelMoved(MouseWheelEvent m) {
-            if (m.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL)
-                VScroll(m.getUnitsToScroll());
-        }
-    }
-
-    protected static class Java2PixelBuffer extends AWTPixelBuffer {
-        private static ColorModel cm = Toolkit.getDefaultToolkit().getColorModel();
-        private static Hashtable emptyHashtable = new Hashtable();
-        private static short[] sbank = null;
-        private static int[] ibank = null;
-        private static byte[] bbank = null;
-        private static int bank_start = 0;
-        private WritableRaster raster = null;
-        private SampleModel sm = null;
-        private DataBuffer buf = null;
-
-        // this doens't seem to work on Windows
-        public void drawGlyph(org.ibex.graphics.Font.Glyph source, int dx, int dy, int cx1, int cy1, int cx2, int cy2, int rgb) {
-            Image i2 = ((AWTGlyph)source).getImage();
-            Graphics2D g2 = (Graphics2D)i.getGraphics();
-            g2.setComposite(AlphaComposite.DstOut);
-            g2.setClip(cx1, cy1, cx2 - cx1, cy2 - cy1);
-            g2.drawImage(i2, dx, dy, null);
-            g2.setComposite(AlphaComposite.DstOver);
-            g2.setColor(new java.awt.Color((rgb & 0x00FF0000) >> 16, (rgb & 0x0000FF00) >> 8, (rgb & 0x000000FF)));
-            g2.fillRect(dx, dy, cx2 - dx, cy2 - dy);
-            g2.drawImage(i2, 0, 0, null);
-            g2.setClip(0, 0, i.getWidth(null), i.getHeight(null));
-        }
-
-        public Java2PixelBuffer(int w, int h) {
-            sm = cm.createCompatibleSampleModel(w, h);
-            int numSamples = w * h * sm.getNumDataElements();
-            if (sm.getDataType() == DataBuffer.TYPE_USHORT) {
-                if (sbank == null || numSamples > 512 * 512 / 3) {
-                    buf = new DataBufferUShort(numSamples);
-                } else {
-                    if (numSamples > sbank.length - bank_start) {
-                        bank_start = 0;
-                        sbank = new short[512 * 512];
-                    }
-                    buf = new DataBufferUShort(sbank, numSamples, bank_start);
-                    bank_start += numSamples;
-                }
-            } else if (sm.getDataType() == DataBuffer.TYPE_BYTE) {
-                if (bbank == null || numSamples > 512 * 512 / 3) {
-                    buf = new DataBufferByte(numSamples);
-                } else {
-                    if (numSamples > bbank.length - bank_start) {
-                        bank_start = 0;
-                        bbank = new byte[512 * 512];
-                    }
-                    buf = new DataBufferByte(bbank, numSamples, bank_start);
-                    bank_start += numSamples;
-                }
-            } else if (sm.getDataType() == DataBuffer.TYPE_INT) {
-                if (ibank == null || numSamples > 512 * 512 / 3) {
-                    buf = new DataBufferInt(numSamples);
-                } else {
-                    if (numSamples > ibank.length - bank_start) {
-                        bank_start = 0;
-                        ibank = new int[512 * 512];
-                    }
-                    buf = new DataBufferInt(ibank, numSamples, bank_start);
-                    bank_start += numSamples;
-                }
-            }
-            raster = Raster.createWritableRaster(sm, buf, null);
-            i = new BufferedImage(cm, raster, false,  emptyHashtable);
-            g = i.getGraphics();
-        }
-    }
-
-    protected String getDescriptiveName() { return isJava14 ? "Java 1.4+ JVM" : "Java 1.2+ JVM"; }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/plat/Platform.java b/upstream/org.ibex.core/build/java/org/ibex/plat/Platform.java
deleted file mode 100644 (file)
index 5ad71c2..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.plat;
-
-import java.lang.reflect.*;
-import java.net.*;
-import java.io.*;
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.graphics.*;
-import org.ibex.core.*;
-import org.ibex.graphics.*;
-import org.ibex.core.*;
-import org.ibex.net.*;
-
-/** 
- *  Abstracts away the small irregularities in JVM implementations.
- *
- *  The default Platform class supports a vanilla JDK 1.1
- *  JVM. Subclasses are provided for other VMs. Methods whose names
- *  start with an underscore are meant to be overridden by
- *  subclasses. If you create a subclass of Platform, you should put
- *  it in the org.ibex.plat package, and add code to this file's static
- *  block to detect the new platform.
- */
-public abstract class Platform {
-
-    public Platform() { platform = this; }
-
-    // Static Data /////////////////////////////////////////////////////////////////////////////////////
-
-    public static boolean clipboardReadEnabled = false;       ///< true iff inside a C-v/A-v/Press3 trap handler
-    public static Platform platform = null;                   ///< The appropriate Platform object for this JVM
-    public static boolean alreadyDetectedProxy = false;       ///< true if proxy autodetection has already been run
-    public static org.ibex.net.HTTP.Proxy cachedProxyInfo = null;  ///< the result of proxy autodetection
-    public static String build = "unknown";            ///< the current build
-
-    // VM Detection Logic /////////////////////////////////////////////////////////////////////
-
-    // If you create a new subclass of Platform, you should add logic
-    // here to detect it. Do not reference your class directly -- use
-    // reflection.
-
-    public static void forceLoad() {
-        System.err.print("Detecting JVM...");
-        try {
-            String vendor = System.getProperty("java.vendor", "");
-            String version = System.getProperty("java.version", "");
-            String os_name = System.getProperty("os.name", "");
-            String os_version = System.getProperty("os.version", "");
-            String platform_class = null;
-            
-            if (vendor.startsWith("Free Software Foundation")) {
-                if (os_name.startsWith("Window")) platform_class = "Win32";
-                else if (os_name.startsWith("Linux")) platform_class = "Linux";
-                else if (os_name.startsWith("SunOS")) platform_class = "Solaris";
-                else if (os_name.startsWith("Solaris")) platform_class = "Solaris";
-                else if (os_name.startsWith("Darwin")) platform_class = "Darwin";
-                else platform_class = "X11";
-            }
-            else if (!version.startsWith("1.0") && !version.startsWith("1.1")) platform_class = "Java2";
-
-            if (platform_class == null) {
-                Log.error(Platform.class, "Unable to detect JVM");
-                criticalAbort("Unable to detect JVM");
-            }
-            
-            System.err.println(" " + os_name + " ==> org.ibex.plat." + platform_class);
-            try {
-                if (platform_class != null) Class.forName("org.ibex.plat." + platform_class).newInstance();
-            } catch (InstantiationException e) {
-                throw e.getCause();
-            }
-
-            String term = Platform.getEnv("TERM");
-            Log.color = term != null && term.length() != 0 && !term.equals("cygwin");
-            
-            try {
-                build = (String)Class.forName("org.ibex.Build").getField("build").get(null);
-                Log.diag(Platform.class, "Ibex build: " + build);
-            } catch (ClassNotFoundException cnfe) {
-                Log.warn(Platform.class, "Ibex build: unknown");
-            } catch (Exception e) {
-                Log.info(Platform.class, "exception while detecting build:");
-                Log.info(Platform.class, e);
-            }
-
-            Log.diag(Platform.class, "Ibex VM detection:  vendor = " + vendor);
-            Log.diag(Platform.class, "                   version = " + version);
-            Log.diag(Platform.class, "                        os = " + os_name + " [version " + os_version + "]");
-            Log.diag(Platform.class, "                  platform = " + platform.getDescriptiveName());
-            Log.diag(Platform.class, "                     class = " + platform.getClass().getName());
-            platform.postInit();
-
-        } catch (Throwable e) {
-            Log.error(Platform.class, "Exception while trying to detect JVM");
-            Log.error(Platform.class, e);
-            criticalAbort("Unable to detect JVM");
-        }
-
-    }
-
-
-    // Methods to be Overridden ///////////////////////////////////////////////////////////////////
-
-    protected Surface _createSurface(Box b, boolean framed) { return null; }
-    protected Picture _createPicture(JS r) { return null; }
-    protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) { return null; }
-    protected Font.Glyph _createGlyph(org.ibex.graphics.Font f, char c) { return new DefaultGlyph(f, c); }
-
-    public static PixelBuffer createPixelBuffer(int w, int h, Surface s) { return platform._createPixelBuffer(w, h, s); }
-    public static Picture createPicture(JS r) { return platform._createPicture(r); }
-    public static Font.Glyph createGlyph(org.ibex.graphics.Font f, char c) { return platform._createGlyph(f, c); }
-    public static Surface createSurface(Box b, boolean framed, boolean refreshable) {
-        Surface ret = platform._createSurface(b, framed);
-        ret.setInvisible(false);
-        if (refreshable) {
-            Surface.allSurfaces.addElement(ret);
-            ret.dirty(0, 0, b.width, b.height);
-            ret.Refresh();
-        }
-        try {
-            if (b.get("titlebar") != null) ret.setTitleBarText((String)b.get("titlebar"));
-        } catch (JSExn e) {
-            Log.warn(Platform.class, e);
-        }
-        return ret;
-    }
-
-    /** a string describing the VM */
-    protected String getDescriptiveName() { return "Generic Java 1.1 VM"; }
-
-    /** invoked after initialization messages have been printed; useful for additional platform detection log messages */
-    protected void postInit() { }
-
-    /** the human-readable name of the key mapped to Ibex's 'alt' key */
-    public static String altKeyName() { return platform._altKeyName(); }
-    protected String _altKeyName() { return "alt"; }
-
-    /** returns the contents of the clipboard */    
-    public static Object getClipBoard() { return clipboardReadEnabled ? platform._getClipBoard() : null; }
-    protected String _getClipBoard() { return null; }
-
-    /** sets the contents of the clipboard */
-    public static void setClipBoard(String s) { platform._setClipBoard(s); }
-    protected void _setClipBoard(String s) { }
-
-    /** returns the width of the screen, in pixels */
-    public static int getScreenWidth() { return platform._getScreenWidth(); }
-    protected int _getScreenWidth() { return 640; }
-
-    /** returns the height of the screen, in pixels */
-    public static int getScreenHeight() { return platform._getScreenHeight(); }
-    protected int _getScreenHeight() { return 480; }
-
-    /** used to notify the user of very serious failures; usually used when logging is not working or unavailable */
-    protected void _criticalAbort(String message) { System.exit(-1); }
-    public static void criticalAbort(String message) {
-        Log.info(Platform.class, "Critical Abort:");
-        Log.info(Platform.class, message);
-        platform._criticalAbort(message);
-    }
-
-    /** if true, org.ibex.Surface will generate a Click automatically after a press and a release */
-    public static boolean needsAutoClick() { return platform._needsAutoClick(); }
-    protected boolean _needsAutoClick() { return false; }
-
-    /** if true, org.ibex.Surface will generate a DoubleClick automatically after recieving two clicks in a short period of time */
-    public static boolean needsAutoDoubleClick() { return platform._needsAutoDoubleClick(); }
-    protected boolean _needsAutoDoubleClick() { return false; }
-
-    /** returns true iff the platform has a case-sensitive filesystem */
-    public static boolean isCaseSensitive() { return platform._isCaseSensitive(); }
-    protected boolean _isCaseSensitive() { return true; }
-
-    /** returns an InputStream to the builtin xwar */
-    public static InputStream getBuiltinInputStream() { return platform._getBuiltinInputStream(); }
-    protected InputStream _getBuiltinInputStream() {return getClass().getClassLoader().getResourceAsStream("org/ibex/builtin.jar");}
-
-    /** returns the value of the environment variable key, or null if no such key exists */
-    public static String getEnv(String key) { return platform._getEnv(key); }
-    protected String _getEnv(String key) {
-        try {
-            String os = System.getProperty("os.name").toLowerCase();
-            Process p;
-            if (os.indexOf("windows 9") != -1 || os.indexOf("windows me") != -1) {
-                // hack -- jdk1.2/1.3 on Win32 pop open an ugly DOS box; 1.4 does not
-                if (platform.getClass().getName().endsWith("Java12")) return null;
-                p = Runtime.getRuntime().exec("command.com /c set");
-            } else if (os.indexOf("windows") > -1) {
-                // hack -- jdk1.2/1.3 on Win32 pop open an ugly DOS box; 1.4 does not
-                if (platform.getClass().getName().endsWith("Java12")) return null;
-                p = Runtime.getRuntime().exec("cmd.exe /c set");
-            } else {  
-                p = Runtime.getRuntime().exec("env");
-            }
-            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
-            String s;
-            while ((s = br.readLine()) != null)
-                if (s.startsWith(key + "="))
-                    return s.substring(key.length() + 1);
-        } catch (Exception e) {
-            Log.info(this, "Exception while reading from environment:");
-            Log.info(this, e);
-        }
-        return null;
-    }
-
-    /** convert a JPEG into an Image */
-    public static synchronized void decodeJPEG(InputStream is, Picture p) { platform._decodeJPEG(is, p); }
-    protected abstract void _decodeJPEG(InputStream is, Picture p);
-
-    /** displays a platform-specific "open file" dialog and returns the chosen filename, or null if the user hit cancel */
-    protected String _fileDialog(String suggestedFileName, boolean write) { return null; }
-    public static String fileDialog(String suggestedFileName, boolean write) throws org.ibex.js.JSExn {
-        return platform._fileDialog(suggestedFileName, write);
-    }
-
-    /** default implementation is Eric Albert's BrowserLauncher.java */
-    protected void _newBrowserWindow(String url) {
-        try {
-            Class c = Class.forName("edu.stanford.ejalbert.BrowserLauncher");
-            Method m = c.getMethod("openURL", new Class[] { String.class });
-            m.invoke(null, new String[] { url });
-        } catch (Exception e) {
-            Log.warn(this, "exception trying to open a browser window");
-            Log.warn(this, e);
-        }
-    }
-
-    /** opens a new browser window */
-    public static void newBrowserWindow(String url) {
-        if (!(url.startsWith("https://") || url.startsWith("http://") || url.startsWith("ftp://") || url.startsWith("mailto:"))) {
-            Log.info(Platform.class, "ibex.newBrowserWindow() only supports http and https urls");
-            return;
-        }
-        // check the URL for well-formedness, as a defense against buffer overflow attacks
-        // FIXME check URL without using URL class
-        /*
-        try {
-            String u = url;
-            if (u.startsWith("https")) u = "http" + u.substring(5);
-            new URL(u);
-        } catch (MalformedURLException e) {
-            Log.info(Platform.class, "URL " + url + " is not well-formed");
-            Log.info(Platform.class, e);
-        }
-        */
-        Log.info(Platform.class, "newBrowserWindow, url = " + url);
-        platform._newBrowserWindow(url);
-    }
-
-    /** detects proxy settings */
-    protected synchronized org.ibex.net.HTTP.Proxy _detectProxy() { return null; }
-    public static synchronized org.ibex.net.HTTP.Proxy detectProxy() {
-
-        if (cachedProxyInfo != null) return cachedProxyInfo;
-        if (alreadyDetectedProxy) return null;
-        alreadyDetectedProxy = true;
-
-        Log.info(Platform.class, "attempting environment-variable DNS proxy detection");
-        cachedProxyInfo = org.ibex.net.HTTP.Proxy.detectProxyViaManual();
-        if (cachedProxyInfo != null) return cachedProxyInfo;
-
-        Log.info(Platform.class, "attempting " + platform.getClass().getName() + " proxy detection");
-        cachedProxyInfo = platform._detectProxy();
-        if (cachedProxyInfo != null) return cachedProxyInfo;
-
-        return cachedProxyInfo;
-   } 
-
-    /** returns a Scheduler instance; used to implement platform-specific schedulers */
-    protected Scheduler _getScheduler() { return new Scheduler(); }
-    public static Scheduler getScheduler() { return platform._getScheduler(); }
-
-    // FEATURE: be more efficient for many of the subclasses
-    public static class DefaultGlyph extends Font.Glyph {
-        private Picture p = null;
-        public DefaultGlyph(org.ibex.graphics.Font f, char c) { super(f, c); }
-        public Picture getPicture() {
-            if (p == null && isLoaded) {
-                Picture p = createPicture(null);
-                p.data = new int[data.length];
-                for(int i=0; i<data.length; i++) p.data[i] = (data[i] & 0xff) << 24;
-                this.data = null;
-                p.width = this.width;
-                p.height = this.height;
-                p.isLoaded = true;
-                this.p = p;
-            }
-            return p;
-        }
-    }
-}
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/AccessibleCharArrayWriter.java b/upstream/org.ibex.core/build/java/org/ibex/util/AccessibleCharArrayWriter.java
deleted file mode 100644 (file)
index 62e436a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.ibex.util;
-
-import java.io.*;
-
-public class AccessibleCharArrayWriter extends CharArrayWriter {
-    public char[] getBuf() { return buf; }
-    public AccessibleCharArrayWriter(int i) { super(i); }
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/BalancedTree.java b/upstream/org.ibex.core/build/java/org/ibex/util/BalancedTree.java
deleted file mode 100644 (file)
index 82226c2..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-// FEATURE: private void intersection() { }
-// FEATURE: private void union() { }
-// FEATURE: private void subset() { }
-// FEATURE: grow if we run out of slots
-
-/** a weight-balanced tree with fake leaves */
-public class BalancedTree {
-
-
-    // Instance Variables ///////////////////////////////////////////////////////////////////
-
-    private int root = 0;                         ///< the slot of the root element
-
-    private int cached_index = -1;
-    private int cached_slot = -1;
-
-    // Public API //////////////////////////////////////////////////////////////////////////
-
-    /** the number of elements in the tree */
-    public final int treeSize() {
-        synchronized(BalancedTree.class) {
-            return root == 0 ? 0 : size[root];
-        }
-    }
-
-    /** clamps index to [0..treeSize()] and inserts object o *before* the specified index */
-    public final void insertNode(int index, Object o) {
-        synchronized(BalancedTree.class) {
-        if(o == null) throw new Error("can't insert nulls in the balanced tree");
-        cached_slot = cached_index = -1;
-        if (index < 0) index = 0;
-        if (index > treeSize()) index = treeSize();
-        int arg = allocateSlot(o);
-        if (root != 0) {
-            insert(index, arg, root, 0, false, false);
-        } else {
-            root = arg;
-            left[arg] = right[arg] = parent[arg] = 0;
-            size[arg] = 1;
-        }
-        }
-    }
-
-    /** clamps index to [0..treeSize()-1] and replaces the object at that index with object o */
-    public final void replaceNode(int index, Object o) {
-        synchronized(BalancedTree.class) {
-        if(o == null) throw new Error("can't insert nulls in the balanced tree");
-        cached_slot = cached_index = -1;
-        if(root == 0) throw new Error("called replaceNode() on an empty tree");
-        if (index < 0) index = 0;
-        if (index >= treeSize()) index = treeSize() - 1;
-        int arg = allocateSlot(o);
-        insert(index, arg, root, 0, true, false);
-        }
-    }
-
-    /** returns the index of o; runs in O((log n)^2) time unless cache hit */
-    public final int indexNode(Object o) { 
-        synchronized(BalancedTree.class) {
-        if(o == null) return -1;
-        if (cached_slot != -1 && objects[cached_slot] == o) return cached_index;
-
-        int slot = getSlot(o);
-        if(slot == -1) return -1;
-        
-        int index = 0;
-        while(true) {
-            // everything to the left is before us so add that to the index
-            index += sizeof(left[slot]);
-            // we are before anything on the right
-            while(left[parent[slot]] == slot) slot = parent[slot];
-            // we end of the first node who isn't on the left, go to the node that has as its child
-            slot = parent[slot];
-            // if we just processed the root we're done
-            if(slot == 0) break;
-            // count the node we're currently on towards the index
-            index++;
-        }
-        return index;
-        }
-    }
-
-    /** returns the object at index; runs in O(log n) time unless cache hit */
-    public final Object getNode(int index) {
-        synchronized(BalancedTree.class) {
-        if (index == cached_index) return objects[cached_slot];
-
-        if (cached_index != -1) {
-            int distance = Math.abs(index - cached_index);
-            // if the in-order distance between the cached node and the
-            // target node is less than log(n), it's probably faster to
-            // search directly.
-            if ((distance < 16) && ((2 << distance) < treeSize())) {
-                while(cached_index > index) { cached_slot = prev(cached_slot); cached_index--; }
-                while(cached_index < index) { cached_slot = next(cached_slot); cached_index++; }
-                return objects[cached_slot];
-            }
-        }
-        /*
-        cached_index = index;
-        cached_slot = get(index, root);
-        return objects[cached_slot];
-        */
-        return objects[get(index, root)];
-        }
-    }
-
-    /** deletes the object at index, returning the deleted object */
-    public final Object deleteNode(int index) {
-        synchronized(BalancedTree.class) {
-        cached_slot = cached_index = -1;
-        // FIXME: left[], right[], size[], and parent[] aren't getting cleared properly somewhere in here where a node had two children
-        int del = delete(index, root, 0);
-        left[del] = right[del] = size[del] = parent[del] = 0;
-        Object ret = objects[del];
-        objects[del] = null;
-        return ret;
-        }
-    }
-    
-    public final void clear() {
-        synchronized(BalancedTree.class) {
-        if(root == 0) return;
-        int i = leftmost(root);
-        do {
-            int next = next(i);
-            objects[i] = null;
-            left[i] = right[i] = size[i] = parent[i] = 0;
-            i = next;
-        } while(i != 0);
-        root = 0;
-        }
-    }
-    
-    protected void finalize() { clear(); }
-
-
-    // Node Data /////////////////////////////////////////////////////////////////////////
-
-    private final static int NUM_SLOTS = 64 * 1024;
-    // FEATURE: GROW - private final static int MAX_SLOT_DISTANCE = 32;
-
-    /**
-     * Every object inserted into *any* tree gets a "slot" in this
-     * array.  The slot is determined by hashcode modulo the length of
-     * the array, with quadradic probing to resolve collisions.  NOTE
-     * that the "slot" of a node is NOT the same as its index.
-     * Furthermore, if an object is inserted into multiple trees, that
-     * object will have multiple slots.
-     */
-    private static Object[] objects = new Object[NUM_SLOTS];
-
-    /// These two arrays hold the left and right children of each
-    /// slot; in other words, left[x] is the *slot* of the left child
-    /// of the node in slot x.
-    ///
-    /// If x has no left child, then left[x] is -1 multiplied by the
-    /// slot of the node that precedes x; if x is the first node, then
-    /// left[x] is 0.  The right[] array works the same way.
-    ///
-    private static int[] left = new int[NUM_SLOTS];
-    private static int[] right = new int[NUM_SLOTS];
-    
-    /// The parent of this node (0 if it is the root node)
-    private static int[] parent = new int[NUM_SLOTS];
-
-    ///< the number of descendants of this node *including the node itself*
-    private static int[] size = new int[NUM_SLOTS];
-
-
-    // Slot Management //////////////////////////////////////////////////////////////////////
-    
-    /** if alloc == false returns the slot holding object o. if alloc is true returns a new slot for obejct o */
-    private int getSlot(Object o, boolean alloc) {
-        // we XOR with our own hashcode so that we don't get tons of
-        // collisions when a single Object is inserted into multiple
-        // trees
-        int dest = Math.abs(o.hashCode() ^ this.hashCode()) % objects.length;
-        Object search = alloc ? null : o;
-        int odest = dest;
-        boolean plus = true;
-        int tries = 1;
-        if(dest == 0) dest=1;
-        while (objects[dest] != search || !(alloc || root(dest) == root)) {
-            dest = Math.abs((odest + (plus ? 1 : -1) * tries * tries) % objects.length);
-            if (dest == 0) dest=1;
-            if (plus) tries++;
-            plus = !plus;
-            // FEATURE: GROW - if(tries > MAX_SLOT_DISTANCE) return -1;
-        }
-        return dest;
-    }
-
-    /** returns the slots holding object o */
-    private int getSlot(Object o) { return getSlot(o,false); }
-    
-    /** allocates a new slot holding object o*/
-    private int allocateSlot(Object o) {
-        int slot = getSlot(o, true);
-        // FEATURE: GROW - if(slot == -1) throw new Error("out of slots");
-        objects[slot] = o;
-        return slot;
-    }
-
-
-
-    // Helpers /////////////////////////////////////////////////////////////////////////
-
-    private final int leftmost(int slot) { return left[slot] <= 0 ? slot : leftmost(left[slot]); }
-    private final int rightmost(int slot) { return right[slot] <= 0 ? slot : rightmost(right[slot]); }
-    private final int next(int slot) { return right[slot] <= 0 ? -1 * right[slot] : leftmost(right[slot]); }
-    private final int prev(int slot) { return left[slot] <= 0 ? -1 * left[slot] : rightmost(left[slot]); }
-    private final int sizeof(int slot) { return slot <= 0 ? 0 : size[slot]; }
-    private final int root(int slot) { return parent[slot] == 0 ? slot : root(parent[slot]); }
-
-
-    // Rotation and Balancing /////////////////////////////////////////////////////////////
-
-    //      p                  p
-    //      |                  |
-    //      b                  d 
-    //     / \                / \
-    //    a   d    < == >    b   e
-    //       / \            / \
-    //      c   e          a   c
-    // FIXME might be doing too much work here
-    private void rotate(boolean toTheLeft, int b, int p) {
-        int[] left = toTheLeft ? BalancedTree.left : BalancedTree.right;
-        int[] right = toTheLeft ? BalancedTree.right : BalancedTree.left;
-        int d = right[b];
-        int c = left[d];
-        if (d <= 0) throw new Error("rotation error");
-        left[d] = b;
-        right[b] = c <= 0 ? -d : c;
-        
-        parent[b] = d;
-        parent[d] = p;
-        if(c > 0) parent[c] = b;
-        if (p == 0)              root = d;
-        else if (left[p] == b)   left[p] = d;
-        else if (right[p] == b)  right[p] = d;
-        else throw new Error("rotate called with invalid parent");
-        size[b] = 1 + sizeof(left[b]) + sizeof(right[b]);
-        size[d] = 1 + sizeof(left[d]) + sizeof(right[d]);
-    }
-
-    private void balance(int slot, int p) {
-        if (slot <= 0) return;
-        size[slot] = 1 + sizeof(left[slot]) + sizeof(right[slot]);
-        if (sizeof(left[slot]) - 1 > 2 * sizeof(right[slot])) rotate(false, slot, p);
-        else if (sizeof(left[slot]) * 2 < sizeof(right[slot]) - 1) rotate(true, slot, p);
-    }
-
-
-
-    // Insert /////////////////////////////////////////////////////////////////////////
-
-    private void insert(int index, int arg, int slot, int p, boolean replace, boolean wentLeft) {
-        int diff = slot <= 0 ? 0 : index - sizeof(left[slot]);
-        if (slot > 0 && diff != 0) {
-            if (diff < 0) insert(index, arg, left[slot], slot, replace, true);
-            else insert(index - sizeof(left[slot]) - 1, arg, right[slot], slot, replace, false);
-            balance(slot, p);
-            return;
-        }
-
-        if (size[arg] != 0) throw new Error("double insertion");
-
-        // we are replacing an existing node
-        if (replace) {
-            if (diff != 0) throw new Error("this should never happen"); // since we already clamped the index
-            if (p == 0)                 root = arg;
-            else if (left[p] == slot)   left[p] = arg;
-            else if (right[p] == slot)  right[p] = arg;
-            left[arg] = left[slot];
-            right[arg] = right[slot];
-            size[arg] = size[slot];
-            parent[arg] = parent[slot];
-            if(left[slot] > 0) parent[left[slot]] = arg;
-            if(right[slot] > 0) parent[right[slot]] = arg;
-            objects[slot] = null;
-            left[slot] = right[slot] = size[slot] = parent[slot] = 0;
-        
-        // we become the child of a former leaf
-        } else if (slot <= 0) {
-            int[] left = wentLeft ? BalancedTree.left : BalancedTree.right;
-            int[] right = wentLeft ? BalancedTree.right : BalancedTree.left;
-            left[arg] = slot;
-            left[p] = arg;
-            right[arg] = -1 * p;
-            parent[arg] = p;
-            balance(arg, p);
-
-        // we take the place of a preexisting node
-        } else {
-            left[arg] = left[slot];   // steal slot's left subtree
-            left[slot] = -1 * arg;
-            right[arg] = slot;        // make slot our right subtree
-            parent[arg] = parent[slot];
-            parent[slot] = arg;
-            if (slot == root) {
-                root = arg;
-                balance(slot, arg);
-                balance(arg, 0);
-            } else {
-                if (left[p] == slot)        left[p] = arg;
-                else if (right[p] == slot)  right[p] = arg;
-                else throw new Error("should never happen");
-                balance(slot, arg);
-                balance(arg, p);
-            }
-        }
-    }
-
-
-    // Retrieval //////////////////////////////////////////////////////////////////////
-
-    private int get(int index, int slot) {
-        int diff = index - sizeof(left[slot]);
-        if (diff > 0) return get(diff - 1, right[slot]);
-        else if (diff < 0) return get(index, left[slot]);
-        else return slot;
-    }
-
-
-    // Deletion //////////////////////////////////////////////////////////////////////
-
-    private int delete(int index, int slot, int p) {
-        int diff = index - sizeof(left[slot]);
-        if (diff < 0) {
-            int ret = delete(index, left[slot], slot);
-            balance(slot, p);
-            return ret;
-
-        } else if (diff > 0) {
-            int ret = delete(diff - 1, right[slot], slot);
-            balance(slot, p);
-            return ret;
-
-        // we found the node to delete
-        } else {
-
-            // fast path: it has no children
-            if (left[slot] <= 0 && right[slot] <= 0) {
-                if (p == 0) root = 0;
-                else {
-                    int[] side = left[p] == slot ? left : right;
-                    side[p] = side[slot];      // fix parent's pointer
-                }
-                
-            // fast path: it has no left child, so we replace it with its right child
-            } else if (left[slot] <= 0) {
-                if (p == 0) root = right[slot];
-                else (left[p] == slot ? left : right)[p] = right[slot];     // fix parent's pointer
-                parent[right[slot]] = p;
-                left[leftmost(right[slot])] = left[slot];                             // fix our successor-leaf's fake right ptr
-                balance(right[slot], p);
-
-            // fast path; it has no right child, so we replace it with its left child
-            } else if (right[slot] <= 0) {
-                if (p == 0) root = left[slot];
-                else (left[p] == slot ? left : right)[p] = left[slot];      // fix parent's pointer
-                parent[left[slot]] = p;
-                right[rightmost(left[slot])] = right[slot];                           // fix our successor-leaf's fake right ptr
-                balance(left[slot], p);
-
-            // node to be deleted has two children, so we replace it with its left child's rightmost descendant
-            } else {
-                int left_childs_rightmost = delete(sizeof(left[slot]) - 1, left[slot], slot);
-                left[left_childs_rightmost] = left[slot];
-                right[left_childs_rightmost] = right[slot];
-                if(left[slot] > 0) parent[left[slot]] = left_childs_rightmost;
-                if(right[slot] > 0) parent[right[slot]] = left_childs_rightmost;
-                parent[left_childs_rightmost] = parent[slot];
-                if (p == 0) root = left_childs_rightmost;
-                else (left[p] == slot ? left : right)[p] = left_childs_rightmost;     // fix parent's pointer
-                balance(left_childs_rightmost, p);
-            }
-
-            return slot;
-        }
-    }
-
-    // Debugging ///////////////////////////////////////////////////////////////////////////
-    
-    public void printTree() {
-        if(root == 0) System.err.println("Tree is empty");
-        else printTree(root,0,false);
-    }
-    private void printTree(int node,int indent,boolean l) {
-        for(int i=0;i<indent;i++) System.err.print("   ");
-        if(node < 0) System.err.println((l?"Prev: " : "Next: ") + -node);
-        else if(node == 0)  System.err.println(l ? "Start" : "End");
-        else {
-            System.err.print("" + node + ": " + objects[node]);
-            System.err.println(" Parent: " + parent[node]);
-            printTree(left[node],indent+1,true);
-            printTree(right[node],indent+1,false);
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/CAB.java b/upstream/org.ibex.core/build/java/org/ibex/util/CAB.java
deleted file mode 100644 (file)
index a8d7e0b..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-import java.io.*;
-import java.util.*;
-import java.util.zip.*;
-
-/** Reads a CAB file structure */
-public class CAB {
-
-    /** reads a CAB file, parses it, and returns an InputStream representing the named file */
-    public static InputStream getFileInputStream(InputStream is, String fileName) throws IOException, EOFException {
-      return getFileInputStream(is, 0, fileName);
-    }
-
-    public static InputStream getFileInputStream(InputStream is, int skipHeaders, String fileName) throws IOException, EOFException {
-        DataInputStream dis = new DataInputStream(is);
-        CFHEADER h = new CFHEADER();
-
-        while (skipHeaders > 0) { CFHEADER.seekMSCF(dis); skipHeaders--; }
-
-        try {
-         h.read(dis);
-        } catch (CFHEADER.BogusHeaderException bhe) {
-         throw new EOFException();
-        }
-
-        for(int i=0; i<h.folders.length; i++) {
-            CFFOLDER f = new CFFOLDER(h);
-            try {
-               f.read(dis);
-            } catch (CFFOLDER.UnsupportedCompressionTypeException ucte) {
-               throw ucte;
-            }
-        }
-
-        for(int i=0; i<h.files.length; i++) {
-            CFFILE f = new CFFILE(h);
-            f.read(dis);
-        }
-        
-        for(int i=0; i<h.folders.length; i++) {
-            InputStream is2 = new CFFOLDERInputStream(h.folders[i], dis);
-            for(int j=0; j<h.folders[i].files.size(); j++) {
-                CFFILE file = (CFFILE)h.folders[i].files.elementAt(j);
-                if (file.fileName.equals(fileName)) return new LimitStream(is2, file.fileSize);
-                byte[] b = new byte[file.fileSize];
-            }
-        }
-
-        return null;
-    }
-
-    private static class LimitStream extends FilterInputStream {
-        int limit;
-        public LimitStream(InputStream is, int limit) {
-            super(is);
-            this.limit = limit;
-        }
-        public int read() throws IOException {
-            if (limit == 0) return -1;
-            int ret = super.read();
-            if (ret != -1) limit--;
-            return ret;
-        }
-        public int read(byte[] b, int off, int len) throws IOException {
-            if (len > limit) len = limit;
-            if (limit == 0) return -1;
-            int ret = super.read(b, off, len);
-            limit -= ret;
-            return ret;
-        }
-    }
-    
-    /** Encapsulates a CFHEADER entry */
-    public static class CFHEADER {
-        byte[]   reserved1 = new byte[4];       // reserved
-        int      fileSize = 0;                  // size of this cabinet file in bytes
-        byte[]   reserved2 = new byte[4];       // reserved
-        int      offsetOfFirstCFFILEEntry;      // offset of the first CFFILE entry
-        byte[]   reserved3 = new byte[4];       // reserved
-        byte     versionMinor = 3;              // cabinet file format version, minor
-        byte     versionMajor = 1;              // cabinet file format version, major
-        boolean  prevCAB = false;               // true iff there is a cabinet before this one in a sequence
-        boolean  nextCAB = false;               // true iff there is a cabinet after this one in a sequence
-        boolean  hasReserved = false;           // true iff the cab has per-{cabinet, folder, block} reserved areas
-        int      setID = 0;                     // must be the same for all cabinets in a set
-        int      indexInCabinetSet = 0;         // number of this cabinet file in a set
-        byte     perCFFOLDERReservedSize = 0;   // (optional) size of per-folder reserved area
-        byte     perDatablockReservedSize = 0;  // (optional) size of per-datablock reserved area
-        byte[]   perCabinetReservedArea = null; // per-cabinet reserved area
-        String   previousCabinet = null;        // name of previous cabinet file in a set
-        String   previousDisk = null;           // name of previous disk in a set
-        String   nextCabinet = null;            // name of next cabinet in a set
-        String   nextDisk = null;               // name of next disk in a set
-
-        CFFOLDER[] folders = new CFFOLDER[0];
-        CFFILE[] files = new CFFILE[0];
-
-        int readCFFOLDERs = 0;                    // the number of folders read in so far
-        int readCFFILEs = 0;                      // the number of folders read in so far
-
-        public void print(PrintStream ps) {
-            ps.println("CAB CFFILE CFHEADER v" + ((int)versionMajor) + "." + ((int)versionMinor));
-            ps.println("    total file size               = " + fileSize);
-            ps.println("    offset of first file          = " + offsetOfFirstCFFILEEntry);
-            ps.println("    total folders                 = " + folders.length);
-            ps.println("    total files                   = " + files.length);
-            ps.println("    flags                         = 0x" +
-                       Integer.toString((prevCAB ? 0x1 : 0x0) |
-                                        (nextCAB ? 0x2 : 0x0) |
-                                        (hasReserved ? 0x4 : 0x0), 16) + " [ " +
-                       (prevCAB ? "prev " : "") + 
-                       (nextCAB ? "next " : "") + 
-                       (hasReserved ? "reserve_present " : "") + "]");
-            ps.println("    set id                        = " + setID);
-            ps.println("    index in set                  = " + indexInCabinetSet);
-            ps.println("    header reserved area #1       =" +
-                       " 0x" + Integer.toString(reserved1[0], 16) +
-                       " 0x" + Integer.toString(reserved1[1], 16) +
-                       " 0x" + Integer.toString(reserved1[2], 16) +
-                       " 0x" + Integer.toString(reserved1[3], 16));
-            ps.println("    header reserved area #2       =" +
-                       " 0x" + Integer.toString(reserved2[0], 16) +
-                       " 0x" + Integer.toString(reserved2[1], 16) +
-                       " 0x" + Integer.toString(reserved2[2], 16) +
-                       " 0x" + Integer.toString(reserved2[3], 16));
-            ps.println("    header reserved area #3       =" +
-                       " 0x" + Integer.toString(reserved3[0], 16) +
-                       " 0x" + Integer.toString(reserved3[1], 16) +
-                       " 0x" + Integer.toString(reserved3[2], 16) +
-                       " 0x" + Integer.toString(reserved3[3], 16));
-            if (hasReserved) {
-                if (perCabinetReservedArea != null) {
-                    ps.print("    per-cabinet reserved area     = ");
-                    for(int i=0; i<perCabinetReservedArea.length; i++)
-                        ps.print(((perCabinetReservedArea[i] & 0xff) < 16 ? "0" : "") +
-                                 Integer.toString(perCabinetReservedArea[i] & 0xff, 16) + " ");
-                    ps.println();
-                }
-                ps.println("    per folder  reserved area     = " + perCFFOLDERReservedSize + " bytes");
-                ps.println("    per block   reserved area     = " + perDatablockReservedSize + " bytes");
-            }
-        }
-
-        public String toString() {
-            return
-                "[ CAB CFFILE CFHEADER v" +
-                ((int)versionMajor) + "." + ((int)versionMinor) + ", " +
-                fileSize + " bytes, " +
-                folders.length + " folders, " +
-                files.length + " files] ";
-        }
-
-        /** fills in all fields in the header and positions the stream at the first folder */
-        public void read(DataInputStream dis) throws IOException, BogusHeaderException {
-            seekMSCF(dis);
-            dis.readFully(reserved1);
-
-            byte[] headerHashable = new byte[28];
-            dis.readFully(headerHashable);
-            DataInputStream hhis = new DataInputStream(new ByteArrayInputStream(headerHashable));
-
-            fileSize = readLittleInt(hhis);
-            hhis.readFully(reserved2);
-            offsetOfFirstCFFILEEntry = readLittleInt(hhis);
-            hhis.readFully(reserved3);
-            versionMinor = hhis.readByte();
-            versionMajor = hhis.readByte();
-            folders = new CFFOLDER[readLittleShort(hhis)];
-            files = new CFFILE[readLittleShort(hhis)];
-            int flags = readLittleShort(hhis);
-            prevCAB = (flags & 0x0001) != 0;
-            nextCAB = (flags & 0x0002) != 0;
-            hasReserved = (flags & 0x0004) != 0;
-            setID = readLittleShort(hhis);
-            indexInCabinetSet = readLittleShort(hhis);
-
-            if (offsetOfFirstCFFILEEntry < 0 || fileSize < 0) {
-               throw new BogusHeaderException();
-            }
-
-            if (hasReserved) {
-                perCabinetReservedArea = new byte[readLittleShort(dis)];
-                perCFFOLDERReservedSize = dis.readByte();
-                perDatablockReservedSize = dis.readByte();
-                if (perCabinetReservedArea.length > 0)
-                    dis.readFully(perCabinetReservedArea);
-            }
-
-            try {
-               if (prevCAB) {
-                   previousCabinet = readZeroTerminatedString(dis);
-                   previousDisk = readZeroTerminatedString(dis);
-               }
-               if (nextCAB) {
-                   nextCabinet = readZeroTerminatedString(dis);
-                   nextDisk = readZeroTerminatedString(dis);
-               }
-            } catch (ArrayIndexOutOfBoundsException e) {
-               throw new BogusHeaderException();
-            }
-        }
-
-        public static void seekMSCF(DataInputStream dis) throws EOFException, IOException
-        {
-           int state;
-           // skip up to and including the 'MSCF' signature
-           state = 0;
-           while (state != 4) {
-              // M
-              while (state == 0 && dis.readByte() != 0x4D) { }
-              state = 1;
-              // S
-              switch (dis.readByte()) {
-                 case 0x53 : state = 2; break;
-                 case 0x4D : state = 1; continue;
-                 default :   state = 0; continue;
-              }
-              // C
-              if (dis.readByte() == 0x43) { state = 3; }
-              else { state = 0; continue; }
-              // F
-              if (dis.readByte() == 0x46) { state = 4; }
-              else { state = 0; }
-           }
-        }
-
-        public static class BogusHeaderException extends IOException {}
-    }
-
-    /** Encapsulates a CFFOLDER entry */
-    public static class CFFOLDER {
-        public static final int COMPRESSION_NONE      = 0;
-        public static final int COMPRESSION_MSZIP     = 1;
-        public static final int COMPRESSION_QUANTUM   = 2;
-        public static final int COMPRESSION_LZX       = 3;
-
-        int      firstBlockOffset = 0;          // offset of first data block within this folder
-        int      numBlocks = 0;                 // number of data blocks
-        int      compressionType = 0;           // compression type for this folder
-        byte[]   reservedArea = null;           // per-folder reserved area
-        int      indexInCFHEADER = 0;           // our index in CFHEADER.folders
-        Vector   files = new Vector();
-
-        private CFHEADER header = null;
-
-        public CFFOLDER(CFHEADER header) { this.header = header; }
-
-        public String toString() {
-            return "[ CAB CFFOLDER, " + numBlocks + " data blocks, compression type " +
-                compressionName(compressionType) +
-                ", " + reservedArea.length + " bytes of reserved data ]";
-        }
-
-        public void read(DataInputStream dis) throws IOException, UnsupportedCompressionTypeException {
-            firstBlockOffset = readLittleInt(dis);
-            numBlocks = readLittleShort(dis);
-            compressionType = readLittleShort(dis) & 0x000F;
-            if (compressionType != COMPRESSION_MSZIP) {
-               throw new UnsupportedCompressionTypeException(compressionType);
-            }
-            reservedArea = new byte[header.perCFFOLDERReservedSize];
-            if (reservedArea.length > 0) dis.readFully(reservedArea);
-            indexInCFHEADER = header.readCFFOLDERs++;
-            header.folders[indexInCFHEADER] = this;
-        }
-
-        public static String compressionName(int type) {
-            switch (type) {
-               case COMPRESSION_NONE:
-                  return "NONE";
-               case COMPRESSION_MSZIP:
-                  return "MSZIP";
-               case COMPRESSION_QUANTUM:
-                  return "QUANTUM";
-               case COMPRESSION_LZX:
-                  return "LZX";
-               default:
-                  return "<Unknown type " + type + ">";
-            }
-        }
-
-        public static class UnsupportedCompressionTypeException extends IOException {
-            private int compressionType;
-
-            UnsupportedCompressionTypeException(int type) {
-               compressionType = type;
-            }
-            public String toString() {
-               return "UnsupportedCompressionTypeException: no support for compression type " + compressionName(compressionType);
-            }
-        }
-    }
-
-    /** Encapsulates a CFFILE entry */
-    public static class CFFILE {
-        int fileSize = 0;                       // size of this file
-        int uncompressedOffsetInCFFOLDER = 0;   // offset of this file within the folder, not accounting for compression
-        int folderIndex = 0;                    // index of the CFFOLDER we belong to
-        Date date = null;                       // modification date
-        int attrs = 0;                          // attrs
-        boolean readOnly = false;               // read-only flag
-        boolean hidden = false;                 // hidden flag
-        boolean system = false;                 // system flag
-        boolean arch = false;                   // archive flag
-        boolean runAfterExec = false;           // true if file should be run during extraction
-        boolean UTFfileName = false;            // true if filename is UTF-encoded
-        String fileName = null;                 // filename
-        int indexInCFHEADER = 0;                // our index in CFHEADER.files
-        CFFOLDER folder = null;                 // the folder we belong to
-        private CFHEADER header = null;
-        File myFile;
-
-        public CFFILE(CFHEADER header) { this.header = header; }
-
-        public CFFILE(File f, String pathName) throws IOException {
-            fileSize = (int)f.length();
-            folderIndex = 0;
-            date = new java.util.Date(f.lastModified());
-            fileName = pathName;
-            myFile = f;
-        }
-
-        public String toString() {
-            return "[ CAB CFFILE: " + fileName + ", " + fileSize + " bytes [ " +
-                (readOnly ? "readonly " : "") +
-                (system ? "system " : "") +
-                (hidden ? "hidden " : "") +
-                (arch ? "arch " : "") +
-                (runAfterExec ? "run_after_exec " : "") +
-                (UTFfileName ? "UTF_filename " : "") +
-                "]";
-        }
-
-        public void read(DataInputStream dis) throws IOException {
-            fileSize = readLittleInt(dis);
-            uncompressedOffsetInCFFOLDER = readLittleInt(dis);
-            folderIndex = readLittleShort(dis);
-            readLittleShort(dis);   // date
-            readLittleShort(dis);   // time
-            attrs = readLittleShort(dis);
-            readOnly = (attrs & 0x1) != 0;
-            hidden = (attrs & 0x2) != 0;
-            system = (attrs & 0x4) != 0;
-            arch = (attrs & 0x20) != 0;
-            runAfterExec = (attrs & 0x40) != 0;
-            UTFfileName = (attrs & 0x80) != 0;
-            fileName = readZeroTerminatedString(dis);
-
-            indexInCFHEADER = header.readCFFILEs++;
-            header.files[indexInCFHEADER] = this;
-            folder = header.folders[folderIndex];
-            folder.files.addElement(this);
-        }
-    }
-
-
-
-
-    // Compressing Input and Output Streams ///////////////////////////////////////////////
-
-    /** an InputStream that decodes CFDATA blocks belonging to a CFFOLDER */
-    private static class CFFOLDERInputStream extends InputStream {
-        CFFOLDER folder;
-        DataInputStream dis;
-        InputStream iis = null;
-
-        byte[] compressed = new byte[128 * 1024];
-        byte[] uncompressed = new byte[256 * 1024];
-
-        public CFFOLDERInputStream(CFFOLDER f, DataInputStream dis) {
-            this.folder = f;
-            this.dis = dis;
-        }
-
-        InputStream readBlock() throws IOException {
-            int compressedBytes = readLittleShort(dis);
-            int unCompressedBytes = readLittleShort(dis);
-            byte[] reserved = new byte[/*folder.header.perDatablockReservedSize*/0];
-            if (reserved.length > 0) dis.readFully(reserved);
-            if (dis.readByte() != 0x43) throw new CABException("malformed block header");
-            if (dis.readByte() != 0x4B) throw new CABException("malformed block header");
-
-            dis.readFully(compressed, 0, compressedBytes - 2);
-
-            Inflater i = new Inflater(true);
-            i.setInput(compressed, 0, compressedBytes - 2);
-            
-            if (unCompressedBytes > uncompressed.length) uncompressed = new byte[unCompressedBytes];
-            try { i.inflate(uncompressed, 0, uncompressed.length);
-            } catch (DataFormatException dfe) {
-                dfe.printStackTrace();
-                throw new CABException(dfe.toString());
-            }
-            return new ByteArrayInputStream(uncompressed, 0, unCompressedBytes);
-        }
-
-        public int available() throws IOException { return iis == null ? 0 : iis.available(); }
-        public void close() throws IOException { iis.close(); }
-        public void mark(int i) { }
-        public boolean markSupported() { return false; }
-        public void reset() { }
-
-        public long skip(long l) throws IOException {
-            if (iis == null) iis = readBlock();
-            int ret = 0;
-            while (l > ret) {
-                long numread = iis.skip(l - ret);
-                if (numread == 0 || numread == -1) iis = readBlock();
-                else ret += numread;
-            }
-            return ret;
-        }
-        
-        public int read(byte[] b, int off, int len) throws IOException {
-            if (iis == null) iis = readBlock();
-            int ret = 0;
-            while (len > ret) {
-                int numread = iis.read(b, off + ret, len - ret);
-                if (numread == 0 || numread == -1) iis = readBlock();
-                else ret += numread;
-            }
-            return ret;
-        }
-
-        public int read() throws IOException {
-            if (iis == null) iis = readBlock();
-            int ret = iis.read();
-            if (ret == -1) {
-                iis = readBlock();
-                ret = iis.read();
-            }
-            return ret;
-        }
-    }
-
-
-
-    // Misc Stuff //////////////////////////////////////////////////////////////
-
-    public static String readZeroTerminatedString(DataInputStream dis) throws IOException {
-        int numBytes = 0;
-        byte[] b = new byte[256];
-        while(true) {
-            byte next = dis.readByte();
-            if (next == 0x0) return new String(b, 0, numBytes);
-            b[numBytes++] = next;
-        }
-    }
-    
-    public static int readLittleInt(DataInputStream dis) throws IOException {
-        int lowest = (int)(dis.readByte() & 0xff);
-        int low = (int)(dis.readByte() & 0xff);
-        int high = (int)(dis.readByte() & 0xff);
-        int highest = (int)(dis.readByte() & 0xff);
-        return (highest << 24) | (high << 16) | (low << 8) | lowest;
-    }
-
-    public static int readLittleShort(DataInputStream dis) throws IOException {
-        int low = (int)(dis.readByte() & 0xff);
-        int high = (int)(dis.readByte() & 0xff);
-        return (high << 8) | low;
-    }
-
-    public static class CABException extends IOException {
-        public CABException(String s) { super(s); }
-    }
-
-
-    /** scratch space for isToByteArray() */
-    static byte[] workspace = new byte[16 * 1024];
-
-    /** Trivial method to completely read an InputStream */
-    public static synchronized byte[] isToByteArray(InputStream is) throws IOException {
-        int pos = 0;
-        while (true) {
-            int numread = is.read(workspace, pos, workspace.length - pos);
-            if (numread == -1) break;
-            else if (pos + numread < workspace.length) pos += numread;
-            else {
-                pos += numread;
-                byte[] temp = new byte[workspace.length * 2];
-                System.arraycopy(workspace, 0, temp, 0, workspace.length);
-                workspace = temp;
-            }
-        }
-        byte[] ret = new byte[pos];
-        System.arraycopy(workspace, 0, ret, 0, pos);
-        return ret;
-    }
-
-
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Cache.java b/upstream/org.ibex.core/build/java/org/ibex/util/Cache.java
deleted file mode 100644 (file)
index af88c88..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-/*
-
-Bug report from a user:
-
-I looked at your Cache.java and tried to make good use of it, but I was
-out of luck - it wouldn't run here. Digging deeper into the code, I came
-across something that might be considered a bug. But maybe it's just a
-feature :-)
-
-
-Starting with an empty cache, Cache.put() immediately followed by
-Cache.get() on same keys / same object will set Node lru back to null in
-Node.remove() which is called in get().
-
-Assuming this put()-get() sequence is fixed, it will fill the cache, but
-lru will remain null.
-
-When cache is filled 100%, we have, at the end of the get(), where
-size>maxSize is checked, a state that mru == lru == n (from
-if(lru==null) thus deleteting the newly inserted object. Oops.
-
-
-Hope I made this clear enough. Maybe it's not a problem in xwt due to a
-different usage scheme of the cache.
-
-
-
-*/
-
-package org.ibex.util;
-
-// FIXME needs to be a weak hash
-
-/**
- *  A Hash table with a fixed size; drops extraneous elements.  Uses
- *  LRU strategy.
- */
-public class Cache extends Hash {
-
-    /** head of list is the mru; tail is the lru */
-    Node mru = null;
-    Node lru = null;
-
-    private int maxSize;
-    private Cache() { }
-    public Cache(int maxSize) {
-        super(maxSize * 2, 3);
-        this.maxSize = maxSize;
-    }
-
-    /** A doubly-linked list */
-    private class Node {
-        final Object val;
-        final Object k1;
-        final Object k2;
-        public Node(Object k1, Object k2, Object val) { this.k1 = k1; this.k2 = k2; this.val = val; }
-        Node next = null;
-        Node prev = null;
-        void remove() {
-            if (this == lru) lru = prev;
-            if (this == mru) mru = next;
-            if (next != null) next.prev = prev;
-            if (prev != null) prev.next = next;
-            next = prev = null;
-        }
-        void placeAfter(Node n) {
-            remove();
-            if (n == null) return;
-            next = n.next;
-            if (n.next != null) n.next.prev = this;
-            n.next = this;
-            prev = n;
-        }
-        void placeBefore(Node n) {
-            remove();
-            if (n == null) return;
-            next = n;
-            prev = n.prev;
-            n.prev = this;
-            if (prev != null) prev.next = this;
-        }
-    }
-
-    public void clear() {
-        lru = null;
-        super.clear();
-    }
-
-    public void remove(Object k1, Object k2) {
-        Object o = super.get(k1, k2);
-        if (o != null) ((Node)o).remove();
-        super.remove(k1, k2);
-    }
-
-    public Object get(Object k1, Object k2) {
-        Node n = (Node)super.get(k1, k2);
-        if (n == null) return null;
-        n.remove();
-        n.placeBefore(mru);
-        mru = n;
-        return n.val;
-    }
-
-    public void put(Object k1, Object k2, Object v) {
-        Node n = new Node(k1, k2, v);
-        if (lru == null) {
-            lru = mru = n;
-        } else {
-            n.placeBefore(mru);
-            mru = n;
-        }
-        if (super.get(k1, k2) != null) remove(k1, k2);
-        super.put(k1, k2, n);
-        if (size > maxSize) remove(lru.k1, lru.k2);
-    }
-
-}
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/CachedInputStream.java b/upstream/org.ibex.core/build/java/org/ibex/util/CachedInputStream.java
deleted file mode 100644 (file)
index a712f84..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-import java.io.*;
-
-// FEATURE: don't use a byte[] if we have a diskCache file
-/**
- *  Wraps around an InputStream, caching the stream in a byte[] as it
- *  is read and permitting multiple simultaneous readers
- */
-public class CachedInputStream {
-
-    boolean filling = false;               ///< true iff some thread is blocked on us waiting for input
-    boolean eof = false;                   ///< true iff end of stream has been reached
-    byte[] cache = new byte[1024 * 128];
-    int size = 0;
-    final InputStream is;
-    File diskCache;
-
-    public CachedInputStream(InputStream is) { this(is, null); }
-    public CachedInputStream(InputStream is, File diskCache) {
-        this.is = is;
-        this.diskCache = diskCache;
-    }
-    public InputStream getInputStream() throws IOException {
-        if (diskCache != null && diskCache.exists()) return new FileInputStream(diskCache);
-        return new SubStream();
-    }
-
-    public void grow(int newLength) {
-        if (newLength < cache.length) return;
-        byte[] newCache = new byte[cache.length + 2 * (newLength - cache.length)];
-        System.arraycopy(cache, 0, newCache, 0, size);
-        cache = newCache;
-    }
-
-    synchronized void fillCache(int howMuch) throws IOException {
-        if (filling) { try { wait(); } catch (InterruptedException e) { }; return; }
-        filling = true;
-        grow(size + howMuch);
-        int ret = is.read(cache, size, howMuch);
-        if (ret == -1) {
-            eof = true;
-            // FIXME: probably a race here
-            if (diskCache != null && !diskCache.exists())
-                try {
-                    File cacheFile = new File(diskCache + ".incomplete");
-                    FileOutputStream cacheFileStream = new FileOutputStream(cacheFile);
-                    cacheFileStream.write(cache, 0, size);
-                    cacheFileStream.close();
-                    cacheFile.renameTo(diskCache);
-                } catch (IOException e) {
-                    Log.info(this, "exception thrown while writing disk cache");
-                    Log.info(this, e);
-                }
-        }
-        else size += ret;
-        filling = false;
-        notifyAll();
-    }
-
-    private class SubStream extends InputStream implements KnownLength {
-        int pos = 0;
-        public int available() { return Math.max(0, size - pos); }
-        public long skip(long n) throws IOException { pos += (int)n; return n; }     // FEATURE: don't skip past EOF
-        public int getLength() { return eof ? size : is instanceof KnownLength ? ((KnownLength)is).getLength() : 0; }
-        public int read() throws IOException {                                       // FEATURE: be smarter here
-            byte[] b = new byte[1];
-            int ret = read(b, 0, 1);
-            return ret == -1 ? -1 : b[0]&0xff;
-        }
-        public int read(byte[] b, int off, int len) throws IOException {
-            synchronized(CachedInputStream.this) {
-                while (pos >= size && !eof) fillCache(pos + len - size);
-                if (eof && pos == size) return -1;
-                int count = Math.min(size - pos, len);
-                System.arraycopy(cache, pos, b, off, count);
-                pos += count;
-                return count;
-            }
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Callback.java b/upstream/org.ibex.core/build/java/org/ibex/util/Callback.java
deleted file mode 100644 (file)
index 471df9b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-/** a simple interface for callbacks*/
-public interface Callback {
-
-    public abstract Object call(Object arg);
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/CounterEnumeration.java b/upstream/org.ibex.core/build/java/org/ibex/util/CounterEnumeration.java
deleted file mode 100644 (file)
index 5a01f3e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2004 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-package org.ibex.util;
-import java.util.*;
-
-public class CounterEnumeration implements Enumeration {
-    public final int max;
-    private int cur = 0;
-    public CounterEnumeration(int i) { max = i; }
-    public void reset() { cur = 0; }
-    public boolean hasMoreElements() { return cur < max; }
-    public Object nextElement() { return new Integer(cur++); }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/DirtyList.java b/upstream/org.ibex.core/build/java/org/ibex/util/DirtyList.java
deleted file mode 100644 (file)
index 0a77a94..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-/** 
- *  A general-purpose data structure for holding a list of rectangular
- *  regions that need to be repainted, with intelligent coalescing.
- *
- *  DirtyList will unify two regions A and B if the smallest rectangle
- *  enclosing both A and B occupies no more than epsilon + Area_A +
- *  Area_B. Failing this, if two corners of A fall within B, A will be
- *  shrunk to exclude the union of A and B.
- */
-public class DirtyList {
-
-    /** The dirty regions (each one is an int[4]). */
-    private int[][] dirties = new int[10][];
-
-    /** The number of dirty regions */
-    private int numdirties = 0;
-
-    /** See class comment */
-    private static final int epsilon = 50 * 50;
-
-    public int num() { return numdirties; }
-    
-    /** grows the array */
-    private void grow() {
-        int[][] newdirties = new int[dirties.length * 2][];
-        System.arraycopy(dirties, 0, newdirties, 0, numdirties);
-        dirties = newdirties;
-    }
-
-    /** Add a new rectangle to the dirty list; returns false if the
-     *  region fell completely within an existing rectangle or set of
-     *  rectangles (ie did not expand the dirty area)
-     */
-    public synchronized boolean dirty(int x, int y, int w, int h) {
-        if (numdirties == dirties.length) grow();
-
-        // we attempt the "lossless" combinations first
-        for(int i=0; i<numdirties; i++) {
-            int[] cur = dirties[i];
-
-            // new region falls completely within existing region
-            if (x >= cur[0] && y >= cur[1] && x + w <= cur[0] + cur[2] && y + h <= cur[1] + cur[3]) {
-                return false;
-
-            // existing region falls completely within new region
-            } else if (x <= cur[0] && y <= cur[1] && x + w >= cur[0] + cur[2] && y + h >= cur[1] + cur[3]) {
-                dirties[i][2] = 0;
-                dirties[i][3] = 0;
-
-            // left end of new region falls within existing region
-            } else if (x >= cur[0] && x < cur[0] + cur[2] && y >= cur[1] && y + h <= cur[1] + cur[3]) {
-                w = x + w - (cur[0] + cur[2]);
-                x = cur[0] + cur[2];
-                i = -1; continue;
-                
-            // right end of new region falls within existing region
-            } else if (x + w > cur[0] && x + w <= cur[0] + cur[2] && y >= cur[1] && y + h <= cur[1] + cur[3]) {
-                w = cur[0] - x;
-                i = -1; continue;
-                
-            // top end of new region falls within existing region
-            } else if (x >= cur[0] && x + w <= cur[0] + cur[2] && y >= cur[1] && y < cur[1] + cur[3]) {
-                h = y + h - (cur[1] + cur[3]);
-                y = cur[1] + cur[3];
-                i = -1; continue;
-                
-            // bottom end of new region falls within existing region
-            } else if (x >= cur[0] && x + w <= cur[0] + cur[2] && y + h > cur[1] && y + h <= cur[1] + cur[3]) {
-                h = cur[1] - y;
-                i = -1; continue;
-                
-            // left end of existing region falls within new region
-            } else if (dirties[i][0] >= x && dirties[i][0] < x + w && dirties[i][1] >= y && dirties[i][1] + dirties[i][3] <= y + h) {
-                dirties[i][2] = dirties[i][2] - (x + w - dirties[i][0]);
-                dirties[i][0] = x + w;
-                i = -1; continue;
-                
-            // right end of existing region falls within new region
-            } else if (dirties[i][0] + dirties[i][2] > x && dirties[i][0] + dirties[i][2] <= x + w &&
-                       dirties[i][1] >= y && dirties[i][1] + dirties[i][3] <= y + h) {
-                dirties[i][2] = x - dirties[i][0];
-                i = -1; continue;
-                
-            // top end of existing region falls within new region
-            } else if (dirties[i][0] >= x && dirties[i][0] + dirties[i][2] <= x + w && dirties[i][1] >= y && dirties[i][1] < y + h) {
-                dirties[i][3] = dirties[i][3] - (y + h - dirties[i][1]);
-                dirties[i][1] = y + h;
-                i = -1; continue;
-                
-            // bottom end of existing region falls within new region
-            } else if (dirties[i][0] >= x && dirties[i][0] + dirties[i][2] <= x + w &&
-                       dirties[i][1] + dirties[i][3] > y && dirties[i][1] + dirties[i][3] <= y + h) {
-                dirties[i][3] = y - dirties[i][1];
-                i = -1; continue;
-            }
-
-        }
-
-        // then we attempt the "lossy" combinations
-        for(int i=0; i<numdirties; i++) {
-            int[] cur = dirties[i];
-            if (w > 0 && h > 0 && cur[2] > 0 && cur[3] > 0 &&
-                ((max(x + w, cur[0] + cur[2]) - min(x, cur[0])) *
-                 (max(y + h, cur[1] + cur[3]) - min(y, cur[1])) <
-                 w * h + cur[2] * cur[3] + epsilon)) {
-                int a = min(cur[0], x);
-                int b = min(cur[1], y);
-                int c = max(x + w, cur[0] + cur[2]) - min(cur[0], x);
-                int d = max(y + h, cur[1] + cur[3]) - min(cur[1], y);
-                dirties[i][2] = 0;
-                dirties[i][3] = 0;
-                return dirty(a, b, c, d);
-            }
-        }
-
-        dirties[numdirties++] = new int[] { x, y, w, h };
-        return true;
-    }
-
-    /** Returns true if there are no regions that need repainting */
-    public boolean empty() { return (numdirties == 0); }
-    
-    /**
-     *  Atomically returns the list of dirty rectangles as an array of
-     *  four-int arrays and clears the internal dirty-rectangle
-     *  list. Note that some of the regions returned may be null, or
-     *  may have zero height or zero width, and do not need to be
-     *  repainted.
-     */
-    public synchronized int[][] flush() {
-        if (numdirties == 0) return null;
-        int[][] ret = dirties;
-        for(int i=numdirties; i<ret.length; i++) ret[i] = null;
-        dirties = new int[dirties.length][];
-        numdirties = 0;
-        return ret;
-    }
-
-    /** included here so that it can be inlined */
-    private static final int min(int a, int b) {
-        if (a<b) return a;
-        else return b;
-    }
-    
-    /** included here so that it can be inlined */
-    private static final int max(int a, int b) {
-        if (a>b) return a;
-        else return b;
-    }
-    
-    /** included here so that it can be inlined */
-    private static final int min(int a, int b, int c) {
-        if (a<=b && a<=c) return a;
-        else if (b<=c && b<=a) return b;
-        else return c;
-    }
-    
-    /** included here so that it can be inlined */
-    private static final int max(int a, int b, int c) {
-        if (a>=b && a>=c) return a;
-        else if (b>=c && b>=a) return b;
-        else return c;
-    }
-    
-    /** included here so that it can be inlined */
-    private static final int bound(int a, int b, int c) {
-        if (a > b) return a;
-        if (c < b) return c;
-        return b;
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/EjAlbertBrowserLauncher.java b/upstream/org.ibex.core/build/java/org/ibex/util/EjAlbertBrowserLauncher.java
deleted file mode 100644 (file)
index cf46138..0000000
+++ /dev/null
@@ -1,589 +0,0 @@
-package org.ibex.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * BrowserLauncher is a class that provides one static method, openURL, which opens the default
- * web browser for the current user of the system to the given URL.  It may support other
- * protocols depending on the system -- mailto, ftp, etc. -- but that has not been rigorously
- * tested and is not guaranteed to work.
- * <p>
- * Yes, this is platform-specific code, and yes, it may rely on classes on certain platforms
- * that are not part of the standard JDK.  What we're trying to do, though, is to take something
- * that's frequently desirable but inherently platform-specific -- opening a default browser --
- * and allow programmers (you, for example) to do so without worrying about dropping into native
- * code or doing anything else similarly evil.
- * <p>
- * Anyway, this code is completely in Java and will run on all JDK 1.1-compliant systems without
- * modification or a need for additional libraries.  All classes that are required on certain
- * platforms to allow this to run are dynamically loaded at runtime via reflection and, if not
- * found, will not cause this to do anything other than returning an error when opening the
- * browser.
- * <p>
- * There are certain system requirements for this class, as it's running through Runtime.exec(),
- * which is Java's way of making a native system call.  Currently, this requires that a Macintosh
- * have a Finder which supports the GURL event, which is true for Mac OS 8.0 and 8.1 systems that
- * have the Internet Scripting AppleScript dictionary installed in the Scripting Additions folder
- * in the Extensions folder (which is installed by default as far as I know under Mac OS 8.0 and
- * 8.1), and for all Mac OS 8.5 and later systems.  On Windows, it only runs under Win32 systems
- * (Windows 95, 98, and NT 4.0, as well as later versions of all).  On other systems, this drops
- * back from the inherently platform-sensitive concept of a default browser and simply attempts
- * to launch Netscape via a shell command.
- * <p>
- * This code is Copyright 1999-2001 by Eric Albert (ejalbert@cs.stanford.edu) and may be
- * redistributed or modified in any form without restrictions as long as the portion of this
- * comment from this paragraph through the end of the comment is not removed.  The author
- * requests that he be notified of any application, applet, or other binary that makes use of
- * this code, but that's more out of curiosity than anything and is not required.  This software
- * includes no warranty.  The author is not repsonsible for any loss of data or functionality
- * or any adverse or unexpected effects of using this software.
- * <p>
- * Credits:
- * <br>Steven Spencer, JavaWorld magazine (<a href="http://www.javaworld.com/javaworld/javatips/jw-javatip66.html">Java Tip 66</a>)
- * <br>Thanks also to Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore,
- * Larry Barowski, Trevor Bedzek, Frank Miedrich, and Ron Rabakukk
- *
- * @author Eric Albert (<a href="mailto:ejalbert@cs.stanford.edu">ejalbert@cs.stanford.edu</a>)
- * @version 1.4b1 (Released June 20, 2001)
- */
-public class EjAlbertBrowserLauncher {
-
-       /**
-        * The Java virtual machine that we are running on.  Actually, in most cases we only care
-        * about the operating system, but some operating systems require us to switch on the VM. */
-       private static int jvm;
-
-       /** The browser for the system */
-       private static Object browser;
-
-       /**
-        * Caches whether any classes, methods, and fields that are not part of the JDK and need to
-        * be dynamically loaded at runtime loaded successfully.
-        * <p>
-        * Note that if this is <code>false</code>, <code>openURL()</code> will always return an
-        * IOException.
-        */
-       private static boolean loadedWithoutErrors;
-
-       /** The com.apple.mrj.MRJFileUtils class */
-       private static Class mrjFileUtilsClass;
-
-       /** The com.apple.mrj.MRJOSType class */
-       private static Class mrjOSTypeClass;
-
-       /** The com.apple.MacOS.AEDesc class */
-       private static Class aeDescClass;
-       
-       /** The <init>(int) method of com.apple.MacOS.AETarget */
-       private static Constructor aeTargetConstructor;
-       
-       /** The <init>(int, int, int) method of com.apple.MacOS.AppleEvent */
-       private static Constructor appleEventConstructor;
-       
-       /** The <init>(String) method of com.apple.MacOS.AEDesc */
-       private static Constructor aeDescConstructor;
-       
-       /** The findFolder method of com.apple.mrj.MRJFileUtils */
-       private static Method findFolder;
-
-       /** The getFileCreator method of com.apple.mrj.MRJFileUtils */
-       private static Method getFileCreator;
-       
-       /** The getFileType method of com.apple.mrj.MRJFileUtils */
-       private static Method getFileType;
-       
-       /** The openURL method of com.apple.mrj.MRJFileUtils */
-       private static Method openURLm;
-       
-       /** The makeOSType method of com.apple.MacOS.OSUtils */
-       private static Method makeOSType;
-       
-       /** The putParameter method of com.apple.MacOS.AppleEvent */
-       private static Method putParameter;
-       
-       /** The sendNoReply method of com.apple.MacOS.AppleEvent */
-       private static Method sendNoReply;
-       
-       /** Actually an MRJOSType pointing to the System Folder on a Macintosh */
-       private static Object kSystemFolderType;
-
-       /** The keyDirectObject AppleEvent parameter type */
-       private static Integer keyDirectObject;
-
-       /** The kAutoGenerateReturnID AppleEvent code */
-       private static Integer kAutoGenerateReturnID;
-       
-       /** The kAnyTransactionID AppleEvent code */
-       private static Integer kAnyTransactionID;
-
-       /** The linkage object required for JDirect 3 on Mac OS X. */
-       private static Object linkage;
-       
-       /** The framework to reference on Mac OS X */
-       private static final String JDirect_MacOSX = "/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/HIToolbox";
-
-       /** JVM constant for MRJ 2.0 */
-       private static final int MRJ_2_0 = 0;
-       
-       /** JVM constant for MRJ 2.1 or later */
-       private static final int MRJ_2_1 = 1;
-
-       /** JVM constant for Java on Mac OS X 10.0 (MRJ 3.0) */
-       private static final int MRJ_3_0 = 3;
-       
-       /** JVM constant for MRJ 3.1 */
-       private static final int MRJ_3_1 = 4;
-
-       /** JVM constant for any Windows NT JVM */
-       private static final int WINDOWS_NT = 5;
-       
-       /** JVM constant for any Windows 9x JVM */
-       private static final int WINDOWS_9x = 6;
-
-       /** JVM constant for any other platform */
-       private static final int OTHER = -1;
-
-       /**
-        * The file type of the Finder on a Macintosh.  Hardcoding "Finder" would keep non-U.S. English
-        * systems from working properly.
-        */
-       private static final String FINDER_TYPE = "FNDR";
-
-       /**
-        * The creator code of the Finder on a Macintosh, which is needed to send AppleEvents to the
-        * application.
-        */
-       private static final String FINDER_CREATOR = "MACS";
-
-       /** The name for the AppleEvent type corresponding to a GetURL event. */
-       private static final String GURL_EVENT = "GURL";
-
-       /**
-        * The first parameter that needs to be passed into Runtime.exec() to open the default web
-        * browser on Windows.
-        */
-    private static final String FIRST_WINDOWS_PARAMETER = "/c";
-    
-    /** The second parameter for Runtime.exec() on Windows. */
-    private static final String SECOND_WINDOWS_PARAMETER = "start";
-    
-    /**
-     * The third parameter for Runtime.exec() on Windows.  This is a "title"
-     * parameter that the command line expects.  Setting this parameter allows
-     * URLs containing spaces to work.
-     */
-    private static final String THIRD_WINDOWS_PARAMETER = "\"\"";
-       
-       /**
-        * The shell parameters for Netscape that opens a given URL in an already-open copy of Netscape
-        * on many command-line systems.
-        */
-       private static final String NETSCAPE_REMOTE_PARAMETER = "-remote";
-       private static final String NETSCAPE_OPEN_PARAMETER_START = "'openURL(";
-       private static final String NETSCAPE_OPEN_PARAMETER_END = ")'";
-       
-       /**
-        * The message from any exception thrown throughout the initialization process.
-        */
-       private static String errorMessage;
-
-       /**
-        * An initialization block that determines the operating system and loads the necessary
-        * runtime data.
-        */
-       static {
-               loadedWithoutErrors = true;
-               String osName = System.getProperty("os.name");
-               if (osName.startsWith("Mac OS")) {
-                       String mrjVersion = System.getProperty("mrj.version");
-                       String majorMRJVersion = mrjVersion.substring(0, 3);
-                       try {
-                               double version = Double.valueOf(majorMRJVersion).doubleValue();
-                               if (version == 2) {
-                                       jvm = MRJ_2_0;
-                               } else if (version >= 2.1 && version < 3) {
-                                       // Assume that all 2.x versions of MRJ work the same.  MRJ 2.1 actually
-                                       // works via Runtime.exec() and 2.2 supports that but has an openURL() method
-                                       // as well that we currently ignore.
-                                       jvm = MRJ_2_1;
-                               } else if (version == 3.0) {
-                                       jvm = MRJ_3_0;
-                               } else if (version >= 3.1) {
-                                       // Assume that all 3.1 and later versions of MRJ work the same.
-                                       jvm = MRJ_3_1;
-                               } else {
-                                       loadedWithoutErrors = false;
-                                       errorMessage = "Unsupported MRJ version: " + version;
-                               }
-                       } catch (NumberFormatException nfe) {
-                               loadedWithoutErrors = false;
-                               errorMessage = "Invalid MRJ version: " + mrjVersion;
-                       }
-               } else if (osName.startsWith("Windows")) {
-                       if (osName.indexOf("9") != -1) {
-                               jvm = WINDOWS_9x;
-                       } else {
-                               jvm = WINDOWS_NT;
-                       }
-               } else {
-                       jvm = OTHER;
-               }
-               
-               if (loadedWithoutErrors) {      // if we haven't hit any errors yet
-                       loadedWithoutErrors = loadClasses();
-               }
-       }
-
-       /**
-        * This class should be never be instantiated; this just ensures so.
-        */
-       private EjAlbertBrowserLauncher() { }
-       
-       /**
-        * Called by a static initializer to load any classes, fields, and methods required at runtime
-        * to locate the user's web browser.
-        * @return <code>true</code> if all intialization succeeded
-        *                      <code>false</code> if any portion of the initialization failed
-        */
-       private static boolean loadClasses() {
-               switch (jvm) {
-                       case MRJ_2_0:
-                               try {
-                                       Class aeTargetClass = Class.forName("com.apple.MacOS.AETarget");
-                                       Class osUtilsClass = Class.forName("com.apple.MacOS.OSUtils");
-                                       Class appleEventClass = Class.forName("com.apple.MacOS.AppleEvent");
-                                       Class aeClass = Class.forName("com.apple.MacOS.ae");
-                                       aeDescClass = Class.forName("com.apple.MacOS.AEDesc");
-
-                                       aeTargetConstructor = aeTargetClass.getDeclaredConstructor(new Class [] { int.class });
-                                       appleEventConstructor = appleEventClass.getDeclaredConstructor(new Class[] { int.class, int.class, aeTargetClass, int.class, int.class });
-                                       aeDescConstructor = aeDescClass.getDeclaredConstructor(new Class[] { String.class });
-
-                                       makeOSType = osUtilsClass.getDeclaredMethod("makeOSType", new Class [] { String.class });
-                                       putParameter = appleEventClass.getDeclaredMethod("putParameter", new Class[] { int.class, aeDescClass });
-                                       sendNoReply = appleEventClass.getDeclaredMethod("sendNoReply", new Class[] { });
-
-                                       Field keyDirectObjectField = aeClass.getDeclaredField("keyDirectObject");
-                                       keyDirectObject = (Integer) keyDirectObjectField.get(null);
-                                       Field autoGenerateReturnIDField = appleEventClass.getDeclaredField("kAutoGenerateReturnID");
-                                       kAutoGenerateReturnID = (Integer) autoGenerateReturnIDField.get(null);
-                                       Field anyTransactionIDField = appleEventClass.getDeclaredField("kAnyTransactionID");
-                                       kAnyTransactionID = (Integer) anyTransactionIDField.get(null);
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               } catch (NoSuchFieldException nsfe) {
-                                       errorMessage = nsfe.getMessage();
-                                       return false;
-                               } catch (IllegalAccessException iae) {
-                                       errorMessage = iae.getMessage();
-                                       return false;
-                               }
-                               break;
-                       case MRJ_2_1:
-                               try {
-                                       mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");
-                                       mrjOSTypeClass = Class.forName("com.apple.mrj.MRJOSType");
-                                       Field systemFolderField = mrjFileUtilsClass.getDeclaredField("kSystemFolderType");
-                                       kSystemFolderType = systemFolderField.get(null);
-                                       findFolder = mrjFileUtilsClass.getDeclaredMethod("findFolder", new Class[] { mrjOSTypeClass });
-                                       getFileCreator = mrjFileUtilsClass.getDeclaredMethod("getFileCreator", new Class[] { File.class });
-                                       getFileType = mrjFileUtilsClass.getDeclaredMethod("getFileType", new Class[] { File.class });
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchFieldException nsfe) {
-                                       errorMessage = nsfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               } catch (SecurityException se) {
-                                       errorMessage = se.getMessage();
-                                       return false;
-                               } catch (IllegalAccessException iae) {
-                                       errorMessage = iae.getMessage();
-                                       return false;
-                               }
-                               break;
-                       case MRJ_3_0:
-                           try {
-                                       Class linker = Class.forName("com.apple.mrj.jdirect.Linker");
-                                       Constructor constructor = linker.getConstructor(new Class[]{ Class.class });
-                                       linkage = constructor.newInstance(new Object[] { EjAlbertBrowserLauncher.class });
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               } catch (InvocationTargetException ite) {
-                                       errorMessage = ite.getMessage();
-                                       return false;
-                               } catch (InstantiationException ie) {
-                                       errorMessage = ie.getMessage();
-                                       return false;
-                               } catch (IllegalAccessException iae) {
-                                       errorMessage = iae.getMessage();
-                                       return false;
-                               }
-                               break;
-                       case MRJ_3_1:
-                               try {
-                                       mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");
-                                       openURLm = mrjFileUtilsClass.getDeclaredMethod("openURL", new Class[] { String.class });
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               }
-                               break;
-                       default:
-                           break;
-               }
-               return true;
-       }
-
-       /**
-        * Attempts to locate the default web browser on the local system.  Caches results so it
-        * only locates the browser once for each use of this class per JVM instance.
-        * @return The browser for the system.  Note that this may not be what you would consider
-        *                      to be a standard web browser; instead, it's the application that gets called to
-        *                      open the default web browser.  In some cases, this will be a non-String object
-        *                      that provides the means of calling the default browser.
-        */
-       private static Object locateBrowser() {
-               if (browser != null) {
-                       return browser;
-               }
-               switch (jvm) {
-                       case MRJ_2_0:
-                               try {
-                                       Integer finderCreatorCode = (Integer) makeOSType.invoke(null, new Object[] { FINDER_CREATOR });
-                                       Object aeTarget = aeTargetConstructor.newInstance(new Object[] { finderCreatorCode });
-                                       Integer gurlType = (Integer) makeOSType.invoke(null, new Object[] { GURL_EVENT });
-                                       Object appleEvent = appleEventConstructor.newInstance(new Object[] { gurlType, gurlType, aeTarget, kAutoGenerateReturnID, kAnyTransactionID });
-                                       // Don't set browser = appleEvent because then the next time we call
-                                       // locateBrowser(), we'll get the same AppleEvent, to which we'll already have
-                                       // added the relevant parameter. Instead, regenerate the AppleEvent every time.
-                                       // There's probably a way to do this better; if any has any ideas, please let
-                                       // me know.
-                                       return appleEvent;
-                               } catch (IllegalAccessException iae) {
-                                       browser = null;
-                                       errorMessage = iae.getMessage();
-                                       return browser;
-                               } catch (InstantiationException ie) {
-                                       browser = null;
-                                       errorMessage = ie.getMessage();
-                                       return browser;
-                               } catch (InvocationTargetException ite) {
-                                       browser = null;
-                                       errorMessage = ite.getMessage();
-                                       return browser;
-                               }
-                       case MRJ_2_1:
-                               File systemFolder;
-                               try {
-                                       systemFolder = (File) findFolder.invoke(null, new Object[] { kSystemFolderType });
-                               } catch (IllegalArgumentException iare) {
-                                       browser = null;
-                                       errorMessage = iare.getMessage();
-                                       return browser;
-                               } catch (IllegalAccessException iae) {
-                                       browser = null;
-                                       errorMessage = iae.getMessage();
-                                       return browser;
-                               } catch (InvocationTargetException ite) {
-                                       browser = null;
-                                       errorMessage = ite.getTargetException().getClass() + ": " + ite.getTargetException().getMessage();
-                                       return browser;
-                               }
-                               String[] systemFolderFiles = systemFolder.list();
-                               // Avoid a FilenameFilter because that can't be stopped mid-list
-                               for(int i = 0; i < systemFolderFiles.length; i++) {
-                                       try {
-                                               File file = new File(systemFolder, systemFolderFiles[i]);
-                                               if (!file.isFile()) {
-                                                       continue;
-                                               }
-                                               // We're looking for a file with a creator code of 'MACS' and
-                                               // a type of 'FNDR'.  Only requiring the type results in non-Finder
-                                               // applications being picked up on certain Mac OS 9 systems,
-                                               // especially German ones, and sending a GURL event to those
-                                               // applications results in a logout under Multiple Users.
-                                               Object fileType = getFileType.invoke(null, new Object[] { file });
-                                               if (FINDER_TYPE.equals(fileType.toString())) {
-                                                       Object fileCreator = getFileCreator.invoke(null, new Object[] { file });
-                                                       if (FINDER_CREATOR.equals(fileCreator.toString())) {
-                                                               browser = file.toString();      // Actually the Finder, but that's OK
-                                                               return browser;
-                                                       }
-                                               }
-                                       } catch (IllegalArgumentException iare) {
-                                               browser = browser;
-                                               errorMessage = iare.getMessage();
-                                               return null;
-                                       } catch (IllegalAccessException iae) {
-                                               browser = null;
-                                               errorMessage = iae.getMessage();
-                                               return browser;
-                                       } catch (InvocationTargetException ite) {
-                                               browser = null;
-                                               errorMessage = ite.getTargetException().getClass() + ": " + ite.getTargetException().getMessage();
-                                               return browser;
-                                       }
-                               }
-                               browser = null;
-                               break;
-                       case MRJ_3_0:
-                       case MRJ_3_1:
-                               browser = "";   // Return something non-null
-                               break;
-                       case WINDOWS_NT:
-                               browser = "cmd.exe";
-                               break;
-                       case WINDOWS_9x:
-                               browser = "command.com";
-                               break;
-                       case OTHER:
-                       default:
-                               browser = "netscape";
-                               break;
-               }
-               return browser;
-       }
-
-       /**
-        * Attempts to open the default web browser to the given URL.
-        * @param url The URL to open
-        * @throws IOException If the web browser could not be located or does not run
-        */
-       public static void openURL(String url) throws IOException {
-               if (!loadedWithoutErrors) {
-                       throw new IOException("Exception in finding browser: " + errorMessage);
-               }
-               Object browser = locateBrowser();
-               if (browser == null) {
-                       throw new IOException("Unable to locate browser: " + errorMessage);
-               }
-               
-               switch (jvm) {
-                       case MRJ_2_0:
-                               Object aeDesc = null;
-                               try {
-                                       aeDesc = aeDescConstructor.newInstance(new Object[] { url });
-                                       putParameter.invoke(browser, new Object[] { keyDirectObject, aeDesc });
-                                       sendNoReply.invoke(browser, new Object[] { });
-                               } catch (InvocationTargetException ite) {
-                                       throw new IOException("InvocationTargetException while creating AEDesc: " + ite.getMessage());
-                               } catch (IllegalAccessException iae) {
-                                       throw new IOException("IllegalAccessException while building AppleEvent: " + iae.getMessage());
-                               } catch (InstantiationException ie) {
-                                       throw new IOException("InstantiationException while creating AEDesc: " + ie.getMessage());
-                               } finally {
-                                       aeDesc = null;  // Encourage it to get disposed if it was created
-                                       browser = null; // Ditto
-                               }
-                               break;
-                       case MRJ_2_1:
-                               Runtime.getRuntime().exec(new String[] { (String) browser, url } );
-                               break;
-                       case MRJ_3_0:
-                               int[] instance = new int[1];
-                               int result = ICStart(instance, 0);
-                               if (result == 0) {
-                                       int[] selectionStart = new int[] { 0 };
-                                       byte[] urlBytes = url.getBytes();
-                                       int[] selectionEnd = new int[] { urlBytes.length };
-                                       result = ICLaunchURL(instance[0], new byte[] { 0 }, urlBytes,
-                                                                                       urlBytes.length, selectionStart,
-                                                                                       selectionEnd);
-                                       if (result == 0) {
-                                               // Ignore the return value; the URL was launched successfully
-                                               // regardless of what happens here.
-                                               ICStop(instance);
-                                       } else {
-                                               throw new IOException("Unable to launch URL: " + result);
-                                       }
-                               } else {
-                                       throw new IOException("Unable to create an Internet Config instance: " + result);
-                               }
-                               break;
-                       case MRJ_3_1:
-                               try {
-                                       openURLm.invoke(null, new Object[] { url });
-                               } catch (InvocationTargetException ite) {
-                                       throw new IOException("InvocationTargetException while calling openURL: " + ite.getMessage());
-                               } catch (IllegalAccessException iae) {
-                                       throw new IOException("IllegalAccessException while calling openURL: " + iae.getMessage());
-                               }
-                               break;
-                   case WINDOWS_NT:
-                   case WINDOWS_9x:
-                       // Add quotes around the URL to allow ampersands and other special
-                       // characters to work.
-                               Process process = Runtime.getRuntime().exec(new String[] { (String) browser,
-                                                                                                                               FIRST_WINDOWS_PARAMETER,
-                                                                                                                               SECOND_WINDOWS_PARAMETER,
-                                                                                                                               THIRD_WINDOWS_PARAMETER,
-                                                                                                                               '"' + url + '"' });
-                               // This avoids a memory leak on some versions of Java on Windows.
-                               // That's hinted at in <http://developer.java.sun.com/developer/qow/archive/68/>.
-                               try {
-                                       process.waitFor();
-                                       process.exitValue();
-                               } catch (InterruptedException ie) {
-                                       throw new IOException("InterruptedException while launching browser: " + ie.getMessage());
-                               }
-                               break;
-                       case OTHER:
-                               // Assume that we're on Unix and that Netscape is installed
-                               
-                               // First, attempt to open the URL in a currently running session of Netscape
-                               process = Runtime.getRuntime().exec(new String[] { (String) browser,
-                                                                                                       NETSCAPE_REMOTE_PARAMETER,
-                                                                                                       NETSCAPE_OPEN_PARAMETER_START +
-                                                                                                       url +
-                                                                                                       NETSCAPE_OPEN_PARAMETER_END });
-                               try {
-                                       int exitCode = process.waitFor();
-                                       if (exitCode != 0) {    // if Netscape was not open
-                                               Runtime.getRuntime().exec(new String[] { (String) browser, url });
-                                       }
-                               } catch (InterruptedException ie) {
-                                       throw new IOException("InterruptedException while launching browser: " + ie.getMessage());
-                               }
-                               break;
-                       default:
-                               // This should never occur, but if it does, we'll try the simplest thing possible
-                               Runtime.getRuntime().exec(new String[] { (String) browser, url });
-                               break;
-               }
-       }
-
-       /**
-        * Methods required for Mac OS X.  The presence of native methods does not cause
-        * any problems on other platforms.
-        */
-    /*
-       private native static int ICStart(int[] instance, int signature);
-       private native static int ICStop(int[] instance);
-       private native static int ICLaunchURL(int instance, byte[] hint, byte[] data, int len,
-                                                                                       int[] selectionStart, int[] selectionEnd);
-    */
-    private static int ICStart(int[] instance, int signature) { return 0; }
-    private static int ICStop(int[] instance) { return 0; }
-    private static int ICLaunchURL(int instance, byte[] hint, byte[] data, int len,
-        int[] selectionStart, int[] selectionEnd) { return 0; }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Grammar.java b/upstream/org.ibex.core/build/java/org/ibex/util/Grammar.java
deleted file mode 100644 (file)
index 565de4d..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.ibex.util;
-
-import org.ibex.js.*;
-
-public abstract class Grammar extends JS {
-
-    public JS action = null;
-
-    // means we call()ed a Grammar that hasn't been bound to a scope yet
-    public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        throw new Error("this should never happen");
-    }
-
-    private static Object NULL = new Object();
-    
-    public abstract int match(String s, int start, Hash v, JSScope scope) throws JSExn;
-    public int matchAndWrite(final String s, final int start, Hash v, JSScope scope, String key) throws JSExn {
-        final Hash v2 = new Hash();
-        final int ret = match(s, start, v2, scope);
-        Object result = ret == -1 ? NULL : action == null ?
-            s.substring(start, ret) :
-            JS.cloneWithNewParentScope(action, new JSScope(scope) {
-                    public Object get(Object key) throws JSExn {
-                        Object val = v2.get(key);
-                        if (val == NULL) return null;
-                        if (val != null) return val;
-                        if (key.equals("whole")) return s.substring(start, ret);
-                        return super.get(key);
-                    }
-                }).call(null, null, null, null, 0);
-        if (key != null) {
-            Object old = v.get(key);
-            if (old == null || old == NULL) { }
-            else if (old instanceof JSArray) { if (result != NULL) { ((JSArray)old).addElement(result); result = old; } }
-            else if (result != NULL) { JSArray j = new JSArray(); j.addElement(old); j.addElement(result); result = j; }
-            v.put(key, result);
-        }
-        return ret;
-    }
-
-    public static class Alternative extends Grammar {
-        private Grammar r1, r2;
-        public Alternative(Grammar r1, Grammar r2) { this.r1 = r1; this.r2 = r2; }
-        public int match(String s, int start, Hash v, JSScope r) throws JSExn {
-            int s1 = r1.match(s, start, v, r);
-            if (s1 != -1) return s1;
-            int s2 = r2.match(s, start, v, r);
-            if (s2 != -1) return s2;
-            return -1;
-        }
-    }
-
-    public static class Juxtaposition extends Grammar {
-        private Grammar r1, r2;
-        public Juxtaposition(Grammar r1, Grammar r2) { this.r1 = r1; this.r2 = r2; }
-        public int match(String s, int start, Hash v, JSScope r) throws JSExn {
-            int s1 = r1.match(s, start, v, r);
-            if (s1 == -1) return -1;
-            int s2 = r2.match(s, s1, v, r);
-            if (s2 == -1) return -1;
-            return s2;
-        }
-    }
-
-    public static class Repetition extends Grammar {
-        private Grammar r1;
-        private int min, max;
-        public Repetition(Grammar r1, int min, int max) { this.r1 = r1; this.min = min; this.max = max; }
-        public int match(String s, int start, Hash v, JSScope r) throws JSExn {
-            int i;
-            for(i=0; i<max; i++) {
-                start = r1.match(s, start, v, r);
-                if (start == -1) return -1;
-            }
-            if (i < min) return -1;
-            return start;
-        }
-    }
-
-    public static class Literal extends Grammar {
-        String str;
-        public Literal(String str) { this.str = str; }
-        public int match(String s, int start, Hash v, JSScope r) {
-            if (!s.regionMatches(start, str, 0, str.length())) return -1;
-            return start + str.length();
-        }
-    }
-
-    public static class Range extends Grammar {
-        char min, max;
-        public Range(char min, char max) { this.min = min; this.max = max; }
-        public int match(String s, int start, Hash v, JSScope r) throws JSExn {
-            if (!(s.charAt(start) >= min && s.charAt(start) <= max)) return -1;
-            return start + 1;
-        }
-    }
-
-    public static class Reference extends Grammar {
-        String key;
-        public Reference(String key) { this.key = key; }
-        public int match(String s, int start, Hash v, JSScope scope) throws JSExn {
-            return ((Grammar)scope.get(key)).matchAndWrite(s, start, v, scope, key);
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Hash.java b/upstream/org.ibex.core/build/java/org/ibex/util/Hash.java
deleted file mode 100644 (file)
index 4b38870..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-import java.util.*;
-
-/** Implementation of an unsynchronized hash table, with one or two
- *  keys, using Radke's quadradic residue linear probing instead of
- *  buckets to minimize object count (less allocations, faster GC).
- *  See C. Radke, Communications of the ACM, 1970, 103-105
- *
- *  Not threadsafe.
- */
-public class Hash {
-    /** this object is inserted as key in a slot when the
-     *  corresponding value is removed -- this ensures that the
-     *  probing sequence for any given key remains the same even if
-     *  other keys are removed.
-     */
-    private static Object placeholder = new Object();
-
-    /** the number of entries with at least one non-null key */
-    private int usedslots = 0;
-
-    /** the number of entries with non-null values */
-    protected int size = 0;
-
-    /** when num_slots < loadFactor * size, rehash into a bigger table */
-    private final int loadFactor;
-
-    /** primary keys */
-    private Object[] keys1 = null;
-
-    /** secondary keys; null if no secondary key has ever been added */
-    private Object[] keys2 = null;
-
-    /** the values for the table */
-    private Object[] vals = null;
-    
-    /** the number of entries with a non-null value */
-    public int size() { return size; }
-
-    /** empties the table */
-    public void clear() {
-        size = 0;
-        usedslots = 0;
-        for(int i=0; i<vals.length; i++) {
-            vals[i] = null;
-            keys1[i] = null;
-            if (keys2 != null) keys2[i] = null;
-        }
-    }
-
-    /** returns all the primary keys in the table */
-    public Enumeration keys() { return new HashEnum(); }
-
-    public Hash() { this(25, 3); }
-    public Hash(int initialcapacity, int loadFactor) {
-        // using a pseudoprime in the form 4x+3 ensures full coverage
-        initialcapacity = initialcapacity / 4;
-        initialcapacity = 4 * initialcapacity + 3;
-        keys1 = new Object[initialcapacity];
-        vals = new Object[initialcapacity];
-        this.loadFactor = loadFactor;
-    }
-    
-    public void remove(Object k1) { remove(k1, null); }
-    public void remove(Object k1, Object k2) { put_(k1, k2, null); }
-
-    private void rehash() {
-        Object[] oldkeys1 = keys1;
-        Object[] oldkeys2 = keys2;
-        Object[] oldvals = vals;
-        keys1 = new Object[oldvals.length * 2];
-        keys2 = oldkeys2 == null ? null : new Object[oldvals.length * 2];
-        vals = new Object[oldvals.length * 2];
-        size = 0;
-        usedslots = 0;
-        for(int i=0; i<oldvals.length; i++)
-            if (((oldkeys1[i] != null && oldkeys1[i] != placeholder) || (oldkeys2 != null && oldkeys2[i] != null)) && oldvals[i] != null)
-                put_(oldkeys1[i], oldkeys2 == null ? null : oldkeys2[i], oldvals[i]);
-    }
-
-    public Object get(Object k1) { return get(k1, null); }
-    public Object get(Object k1, Object k2) {
-        if (k2 != null && keys2 == null) return null;
-        int hash = (k1 == null ? 0 : k1.hashCode()) ^ (k2 == null ? 0 : k2.hashCode());
-        int dest = Math.abs(hash) % vals.length;
-        int odest = dest;
-        int tries = 1;
-        boolean plus = true;
-        while (keys1[dest] != null || (keys2 != null && keys2[dest] != null)) {
-            Object hk1 = keys1[dest];
-            Object hk2 = keys2 == null ? null : keys2[dest];
-            if ((k1 == hk1 || (k1 != null && hk1 != null && k1.equals(hk1))) &&
-                (k2 == hk2 || (k2 != null && hk2 != null && k2.equals(hk2)))) {
-                return vals[dest];
-            }
-            dest = Math.abs((odest + (plus ? 1 : -1 ) * tries * tries) % vals.length);
-            if (plus) tries++;
-            plus = !plus;
-        }
-        return null;
-    }
-
-    public void put(Object k1, Object v) { put(k1, null, v); }
-    public void put(Object k1, Object k2, Object v) { put_(k1, k2, v); }
-    private void put_(Object k1, Object k2, Object v) {
-        if (usedslots * loadFactor > vals.length) rehash();
-        int hash = (k1 == null ? 0 : k1.hashCode()) ^ (k2 == null ? 0 : k2.hashCode());
-        int dest = Math.abs(hash) % vals.length;
-        int odest = dest;
-        boolean plus = true;
-        int tries = 1;
-        while (true) {
-            Object hk1 = keys1[dest];
-            Object hk2 = keys2 == null ? null : keys2[dest];
-            if (hk1 == null && hk2 == null) {                                         // empty slot
-                if (v == null) return;
-                size++;
-                usedslots++;
-                break;
-            }
-
-            if ((k1 == hk1 || (k1 != null && hk1 != null && k1.equals(hk1))) &&       // replacing former entry
-                (k2 == hk2 || (k2 != null && hk2 != null && k2.equals(hk2)))) {
-
-                // we don't actually remove things from the table; rather, we insert a placeholder
-                if (v == null) {
-                    k1 = placeholder;
-                    k2 = null;
-                    size--;
-                }
-                break;
-            }
-
-            dest = Math.abs((odest + (plus ? 1 : -1 ) * tries * tries) % vals.length);
-            if (plus) tries++;
-            plus = !plus;
-        }
-
-        keys1[dest] = k1;
-        if (k2 != null && keys2 == null) keys2 = new Object[keys1.length];
-        if (keys2 != null) keys2[dest] = k2;
-        vals[dest] = v;
-    }
-
-    private class HashEnum implements java.util.Enumeration {
-        private int iterator = 0;
-        private int found = 0;
-        
-        public boolean hasMoreElements() {
-            return found < usedslots;
-        }
-
-        public Object nextElement() {
-            if (!hasMoreElements()) throw new java.util.NoSuchElementException();
-
-            Object o = null;
-            while (o == null) o = keys1[iterator++];
-            if (o == null) throw new IllegalStateException("Didn't find an element, when I should have.");
-            found++;
-            
-            return o;
-        }
-    }
-}
-
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/InputStreamToByteArray.java b/upstream/org.ibex.core/build/java/org/ibex/util/InputStreamToByteArray.java
deleted file mode 100644 (file)
index 7e19644..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-import java.io.*;
-
-public class InputStreamToByteArray {
-
-    /** scratch space for isToByteArray() */
-    private static byte[] workspace = new byte[16 * 1024];
-
-    /** Trivial method to completely read an InputStream */
-    public static synchronized byte[] convert(InputStream is) throws IOException {
-        int pos = 0;
-        while (true) {
-            int numread = is.read(workspace, pos, workspace.length - pos);
-            if (numread == -1) break;
-            else if (pos + numread < workspace.length) pos += numread;
-            else {
-                pos += numread;
-                byte[] temp = new byte[workspace.length * 2];
-                System.arraycopy(workspace, 0, temp, 0, workspace.length);
-                workspace = temp;
-            }
-        }
-        byte[] ret = new byte[pos];
-        System.arraycopy(workspace, 0, ret, 0, pos);
-        return ret;
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/KnownLength.java b/upstream/org.ibex.core/build/java/org/ibex/util/KnownLength.java
deleted file mode 100644 (file)
index 06118bb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-import java.io.*;
-
-/** a generic interface for things that "know" their length */
-public interface KnownLength {
-
-    public abstract int getLength();
-
-    public static class KnownLengthInputStream extends FilterInputStream implements KnownLength {
-        int length;
-        public int getLength() { return length; }
-        public KnownLengthInputStream(java.io.InputStream parent, int length) {
-            super(parent);
-            this.length = length;
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/LineReader.java b/upstream/org.ibex.core/build/java/org/ibex/util/LineReader.java
deleted file mode 100644 (file)
index 972dfe5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.ibex.util;
-import java.io.*;
-
-public class LineReader {
-
-    private static int MAXBUF = 1024 * 16;
-    char[] buf = new char[MAXBUF];
-    int buflen = 0;
-    Reader r;
-    Vec pushback = new Vec();
-
-    public LineReader(Reader r) { this.r = r; }
-
-    public void pushback(String s) { pushback.push(s); }
-
-    public String readLine() throws IOException {
-        while(true) {
-            if (pushback.size() > 0) return (String)pushback.pop();
-            for(int i=0; i<buflen; i++) {
-                if (buf[i] == '\n') {
-                    String ret;
-                    if (buf[i-1] == '\r') ret = new String(buf, 0, i-1);
-                    else ret = new String(buf, 0, i);
-                    System.arraycopy(buf, i+1, buf, 0, buflen - (i+1));
-                    buflen -= i+1;
-                    return ret;
-                }
-            }
-            int numread = r.read(buf, buflen, MAXBUF - buflen);
-            if (numread == -1) {
-                if (buflen == 0) return null;
-                String ret = new String(buf, 0, buflen);
-                buflen = 0;
-                return ret;
-            } else {
-                buflen += numread;
-            }
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Log.java b/upstream/org.ibex.core/build/java/org/ibex/util/Log.java
deleted file mode 100644 (file)
index beb7f3e..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-import org.ibex.js.*;
-import java.io.*;
-import java.util.*;
-import java.net.*;
-
-/** easy to use logger */
-public class Log {
-
-    public static boolean on = true;
-    public static boolean rpc = false;
-    public static boolean color = false;
-    public static boolean verbose = false;
-    public static boolean logDates = false;
-    public static Date lastDate = null;
-
-    public static PrintStream logstream = System.err;
-
-    public static void email(String address) { throw new Error("FIXME not supported"); }
-    public static void file(String filename) throws IOException {
-        // FIXME security
-        logstream = new PrintStream(new FileOutputStream(filename));
-    }
-    public static void tcp(String host, int port) throws IOException {
-        // FIXME security
-        logstream = new PrintStream(new Socket(InetAddress.getByName(host), port).getOutputStream());
-    }
-
-    private static Hashtable threadAnnotations = new Hashtable();
-    public static void setThreadAnnotation(String s) { threadAnnotations.put(Thread.currentThread(), s); }
-
-    /** true iff nothing has yet been logged */
-    public static boolean firstMessage = true;
-
-    /** message can be a String or a Throwable */
-    public static synchronized void echo(Object o, Object message) { log(o, message, ECHO); }
-    public static synchronized void diag(Object o, Object message) { log(o, message, DIAGNOSTIC); }
-    public static synchronized void debug(Object o, Object message) { log(o, message, DEBUG); }
-    public static synchronized void info(Object o, Object message) { log(o, message, INFO); }
-    public static synchronized void warn(Object o, Object message) { log(o, message, WARN); }
-    public static synchronized void error(Object o, Object message) { log(o, message, ERROR); }
-
-    // these two logging levels serve ONLY to change the color; semantically they are the same as DEBUG
-    private static final int DIAGNOSTIC = -2;
-    private static final int ECHO = -1;
-
-    // the usual log4j levels, minus FAIL (we just throw an Error in that case)
-    public static final int DEBUG = 0;
-    public static final int INFO = 1;
-    public static final int WARN = 2;
-    public static final int ERROR = 3;
-    public static final int SILENT = Integer.MAX_VALUE;
-    public static int level = INFO;
-
-    private static final int BLUE = 34;
-    private static final int GREEN = 32;
-    private static final int CYAN = 36;
-    private static final int RED = 31;
-    private static final int PURPLE = 35;
-    private static final int BROWN = 33;
-    private static final int GRAY = 37;
-    
-    private static String colorize(int color, boolean bright, String s) {
-        if (!Log.color) return s;
-        return
-            "\033[40;" + (bright?"1;":"") + color + "m" +
-            s +
-            "\033[0m";
-    }
-
-    private static String lastClassName = null;
-    private static synchronized void log(Object o, Object message, int level) {
-        if (level < Log.level) return;
-        if (firstMessage && !logDates) {
-            firstMessage = false;
-            logstream.println(colorize(GREEN, false, "==========================================================================="));
-
-            // FIXME later: causes problems with method pruning
-            //diag(Log.class, "Logging enabled at " + new java.util.Date());
-
-            if (color) diag(Log.class, "logging messages in " +
-                colorize(BLUE, true, "c") +
-                colorize(RED, true, "o") +
-                colorize(CYAN, true, "l") +
-                colorize(GREEN, true, "o") +
-                colorize(PURPLE, true, "r"));
-        }
-
-        String classname;
-        if (o instanceof Class) {
-            classname = ((Class)o).getName();
-            if (classname.indexOf('.') != -1) classname = classname.substring(classname.lastIndexOf('.') + 1);
-        }
-        else if (o instanceof String) classname = (String)o;
-        else classname = o.getClass().getName();
-
-        if (classname.equals(lastClassName)) classname = "";
-        else lastClassName = classname;
-        
-        if (classname.length() > (logDates ? 14 : 20)) classname = classname.substring(0, (logDates ? 14 : 20));
-        while (classname.length() < (logDates ? 14 : 20)) classname = " " + classname;
-        classname = classname + (classname.trim().length() == 0 ? "  " : ": ");
-        classname = colorize(GRAY, true, classname);
-        classname = classname.replace('$', '.');
-
-        if (logDates) {
-            Date d = new Date();
-            if (lastDate == null || d.getYear() != lastDate.getYear() || d.getMonth() != lastDate.getMonth() || d.getDay() != lastDate.getDay()) {
-                String now = new java.text.SimpleDateFormat("EEE dd MMM yyyy").format(d);
-                logstream.println();
-                logstream.println(colorize(GRAY, false, "=== " + now + " =========================================================="));
-            }
-            java.text.DateFormat df = new java.text.SimpleDateFormat("[EEE HH:mm:ss] ");
-            classname = df.format(d) + classname;
-            lastDate = d;
-        }
-
-        String annot = (String)threadAnnotations.get(Thread.currentThread());
-        if (annot != null) classname += annot;
-
-        if (message instanceof Throwable) {
-            if (level < ERROR) level = WARN;
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            ((Throwable)message).printStackTrace(new PrintStream(baos));
-            byte[] b = baos.toByteArray();
-            BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(b)));
-            String s = null;
-            try {
-                String m = "";
-                while((s = br.readLine()) != null) m += s + "\n";
-                if (m.length() > 0) log(o, m.substring(0, m.length() - 1), level);
-            } catch (IOException e) {
-                logstream.println(colorize(RED, true, "Logger: exception thrown by ByteArrayInputStream -- this should not happen"));
-            }
-            lastClassName = "";
-            return;
-        }
-
-        String str = message.toString();
-        if (str.indexOf('\n') != -1) lastClassName = "";
-        while(str.indexOf('\t') != -1)
-            str = str.substring(0, str.indexOf('\t')) + "    " + str.substring(str.indexOf('\t') + 1);
-
-        classname = colorize(GRAY, false, classname);
-        int levelcolor = GRAY;
-        boolean bright = true;
-        switch (level) {
-            case DIAGNOSTIC:  levelcolor = GREEN; bright = false; break;
-            case ECHO:        levelcolor = BLUE;  bright = true;  break;
-            case DEBUG:       levelcolor = BROWN; bright = true;  break;
-            case INFO:        levelcolor = GRAY;  bright = false; break;
-            case WARN:        levelcolor = BROWN; bright = false; break;
-            case ERROR:       levelcolor = RED;   bright = true;  break;
-        }
-
-        while(str.indexOf('\n') != -1) {
-            logstream.println(classname + colorize(levelcolor, bright, str.substring(0, str.indexOf('\n'))));
-            classname = logDates ? "                " : "                      ";
-            classname = colorize(GRAY,false,classname);
-            str = str.substring(str.indexOf('\n') + 1);
-        }
-        logstream.println(classname + colorize(levelcolor, bright, str));
-    }
-
-    public static void recursiveLog(String indent, String name, Object o) throws JSExn {
-        if (!name.equals("")) name += " : ";
-
-        if (o == null) {
-            JS.log(indent + name + "<null>");
-
-        } else if (o instanceof JSArray) {
-            JS.log(indent + name + "<array>");
-            JSArray na = (JSArray)o;
-            for(int i=0; i<na.length(); i++)
-                recursiveLog(indent + "  ", i + "", na.elementAt(i));
-
-        } else if (o instanceof JS) {
-            JS.log(indent + name + "<object>");
-            JS s = (JS)o;
-            Enumeration e = s.keys();
-            while(e.hasMoreElements()) {
-                Object key = e.nextElement();
-                if (key != null)
-                    recursiveLog(indent + "  ", key.toString(),
-                                 (key instanceof Integer) ?
-                                 s.get(((Integer)key)) : s.get(key.toString()));
-            }
-        } else {
-            JS.log(indent + name + o);
-
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/MSPack.java b/upstream/org.ibex.core/build/java/org/ibex/util/MSPack.java
deleted file mode 100644 (file)
index 6236df6..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.ibex.util;
-
-import org.ibex.core.Main;
-import org.ibex.util.*;
-import java.io.*;
-import org.ibex.nestedvm.*;
-import org.ibex.nestedvm.Runtime;
-
-public class MSPack {
-    private static byte[] image;
-    
-    private String[] fileNames;
-    private int[] lengths;
-    private byte[][] data;
-        
-    public static class MSPackException extends IOException { public MSPackException(String s) { super(s); } }
-        
-    public MSPack(InputStream cabIS) throws IOException {
-        try {
-            Runtime vm = (Runtime)Class.forName("org.ibex.util.MIPSApps").newInstance();
-            byte[] cab = InputStreamToByteArray.convert(cabIS);
-            int cabAddr = vm.sbrk(cab.length);
-            if(cabAddr < 0) throw new MSPackException("sbrk failed");
-            
-            vm.copyout(cab,cabAddr,cab.length);
-        
-            vm.setUserInfo(0,cabAddr);
-            vm.setUserInfo(1,cab.length);
-        
-            int status = vm.run(new String[]{ "mspack"} );
-            if(status != 0) throw new MSPackException("mspack.mips failed (" + status + ")");
-            
-            /*static struct {
-                char *filename;
-                char *data;
-                int length;
-            } output_table[MAX_MEMBERS+1]; */
-
-            int filesTable = vm.getUserInfo(2);
-            int count=0;
-            while(vm.memRead(filesTable+count*12) != 0) count++;
-            
-            fileNames = new String[count];
-            data = new byte[count][];
-            lengths = new int[count];
-            
-            for(int i=0,addr=filesTable;i<count;i++,addr+=12) {
-                int length = vm.memRead(addr+8);
-                data[i] = new byte[length];
-                lengths[i] = length;
-                fileNames[i] = vm.cstring(vm.memRead(addr));
-                System.out.println("" + fileNames[i]);
-                vm.copyin(vm.memRead(addr+4),data[i],length);
-            }
-        } catch(Runtime.ExecutionException e) {
-            e.printStackTrace();
-            throw new MSPackException("mspack.mips crashed");
-        } catch(Exception e) {
-            throw new MSPackException(e.toString());
-        }
-    }
-    
-    public String[] getFileNames() { return fileNames; }
-    public int[] getLengths() { return lengths; }
-    public InputStream getInputStream(int index) {
-        return new KnownLength.KnownLengthInputStream(new ByteArrayInputStream(data[index]), data[index].length);
-    }
-    public InputStream getInputStream(String fileName) {
-        for(int i=0;i<fileNames.length;i++) {
-            if(fileName.equalsIgnoreCase(fileNames[i])) return getInputStream(i);
-        }
-        return null;
-    }
-    
-    public static void main(String[] args) throws IOException {
-        MSPack pack = new MSPack(new FileInputStream(args[0]));
-        String[] files = pack.getFileNames();
-        for(int i=0;i<files.length;i++)
-            System.out.println(i + ": " + files[i] + ": " + pack.getLengths()[i]);
-        System.out.println("Writing " + files[files.length-1]);
-        InputStream is = pack.getInputStream(files.length-1);
-        OutputStream os = new FileOutputStream(files[files.length-1]);
-        int n;
-        byte[] buf = new byte[4096];
-        while((n = is.read(buf)) != -1) os.write(buf,0,n);
-        os.close();
-        is.close();
-    }
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/PackBytesIntoString.java b/upstream/org.ibex.core/build/java/org/ibex/util/PackBytesIntoString.java
deleted file mode 100644 (file)
index 1e07e86..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-/** packs 8-bit bytes into a String of 7-bit chars (to avoid the UTF-8 non-ASCII penalty) */
-public class PackBytesIntoString {
-
-    public static String pack(byte[] b, int off, int len) throws IllegalArgumentException {
-        if (len % 7 != 0) throw new IllegalArgumentException("len must be a multiple of 7");
-        StringBuffer ret = new StringBuffer();
-        for(int i=off; i<off+len; i += 7) {
-            long l = 0;
-            for(int j=6; j>=0; j--) {
-                l <<= 8;
-                l |= (b[i + j] & 0xff);
-            }
-            for(int j=0; j<8; j++) {
-                ret.append((char)(l & 0x7f));
-                l >>= 7;
-            }
-        }
-        return ret.toString();
-    }
-
-    public static byte[] unpack(String s) throws IllegalArgumentException {
-        if (s.length() % 8 != 0) throw new IllegalArgumentException("string length must be a multiple of 8");
-        byte[] ret = new byte[(s.length() / 8) * 7];
-        for(int i=0; i<s.length(); i += 8) {
-            long l = 0;
-            for(int j=7; j>=0; j--) {
-                l <<= 7;
-                l |= (s.charAt(i + j) & 0x7fL);
-            }
-            for(int j=0; j<7; j++) {
-                ret[(i / 8) * 7 + j] = (byte)(l & 0xff);
-                l >>= 8;
-            }
-        }
-        return ret;
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Queue.java b/upstream/org.ibex.core/build/java/org/ibex/util/Queue.java
deleted file mode 100644 (file)
index 91b9b29..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-/** A simple synchronized queue, implemented as an array */
-public class Queue {
-
-    public Queue(int initiallength) { vec = new Object[initiallength]; }
-    
-    /** The store */
-    private Object[] vec;
-    
-    /** The index of the first node in the queue */
-    private int first = 0;
-    
-    /** The number of elements in the queue; INVARAINT: size <= vec.length */
-    private int size = 0;
-    
-    /** Grow the queue, if needed */
-    private void grow(int newlength) {
-        Object[] newvec = new Object[newlength];
-        if (first + size > vec.length) {
-            System.arraycopy(vec, first, newvec, 0, vec.length - first);
-            System.arraycopy(vec, 0, newvec, vec.length - first, size - (vec.length - first));
-        } else {
-            System.arraycopy(vec, first, newvec, 0, size);
-        }
-        first = 0;
-        vec = newvec;
-    }
-
-    /** The number of elements in the queue */    
-    public int size() { return size; }
-    
-    /** Empties the queue */
-    public synchronized void flush() {
-        first = 0;
-        size = 0;
-        for(int i=0; i<vec.length; i++) vec[i] = null;
-    }
-
-    /** Add an element to the front of the queue */
-    public synchronized void prepend(Object o) {
-        if (size == vec.length) grow(vec.length * 2);
-        first--;
-        if (first < 0) first += vec.length;
-        vec[first] = o;
-        size++;
-        if (size == 1) notify();
-    }
-    
-    /** Add an element to the back of the queue */
-    public synchronized void append(Object o) {
-        if (size == vec.length) grow(vec.length * 2);
-        if (first + size >= vec.length) vec[first + size - vec.length] = o;
-        else vec[first + size] = o;
-        size++;
-        if (size == 1) notify();
-    }
-    
-    /** Remove and return and element from the queue, blocking if empty. */
-    public Object remove() { return remove(true); }
-
-    /** Remove and return an element from the queue, blocking if
-        <tt>block</tt> is true and the queue is empty. */
-    public synchronized Object remove(boolean block) {
-
-        while (size == 0 && block) {
-            try { wait(); } catch (InterruptedException e) { }
-        }
-        
-        if (!block && size == 0) return null;
-        Object ret = vec[first];
-        first++;
-        size--;
-        if (first >= vec.length) first = 0;
-        return ret;
-    }
-
-    /** Returns the top element in the queue without removing it */
-    public synchronized Object peek() {
-        if (size == 0) return null;
-        return vec[first];
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Scheduler.java b/upstream/org.ibex.core/build/java/org/ibex/util/Scheduler.java
deleted file mode 100644 (file)
index e4c85fa..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.util;
-
-import java.io.IOException;
-
-import org.ibex.js.*;
-import org.ibex.util.*;
-import org.ibex.graphics.*;
-import org.ibex.plat.*;
-
-/** Implements cooperative multitasking */
-public class Scheduler {
-
-    // Public API Exposed to org.ibex /////////////////////////////////////////////////
-
-    private static Scheduler singleton;
-    public static void add(Task t) { Log.debug(Scheduler.class, "scheduling " + t); Scheduler.runnable.append(t); }
-    public static void init() { if (singleton == null) (singleton = Platform.getScheduler()).run(); }
-
-    private static Task current = null;
-
-    private static volatile boolean rendering = false;
-    private static volatile boolean again = false;
-
-    /** synchronizd so that we can safely call it from an event-delivery thread, in-context */
-    public static void renderAll() {
-        if (rendering) { again = true; return; }
-        synchronized(Scheduler.class) {
-            try {
-                rendering = true;
-                do {
-                    // FEATURE: this could be cleaner
-                    again = false;
-                    for(int i=0; i<Surface.allSurfaces.size(); i++) {
-                        Surface s = ((Surface)Surface.allSurfaces.elementAt(i));
-                        do { s.render(); } while(s.abort);
-                    }
-                } while(again);
-            } finally {
-                rendering = false;
-            }
-        }
-    }
-
-    
-
-    // API which must be supported by subclasses /////////////////////////////////////
-
-    /**
-     *  SCHEDULER INVARIANT: all scheduler implementations MUST invoke
-     *  Surface.renderAll() after performing a Task if no tasks remain
-     *  in the queue.  A scheduler may choose to invoke
-     *  Surface.renderAll() more often than that if it so chooses.
-     */
-    public void run() { defaultRun(); }
-    public Scheduler() { }
-
-
-    // Default Implementation //////////////////////////////////////////////////////
-
-    protected static Queue runnable = new Queue(50);
-    public void defaultRun() {
-        while(true) {
-            current = (Task)runnable.remove(true);
-            try {
-                // FIXME hideous
-                synchronized(this) {
-                    for(int i=0; i<Surface.allSurfaces.size(); i++) {
-                        Surface s = (Surface)Surface.allSurfaces.elementAt(i);
-                        if (current instanceof JS) {
-                            s._mousex = Integer.MAX_VALUE;
-                            s._mousey = Integer.MAX_VALUE;
-                        } else {
-                            s._mousex = s.mousex;
-                            s._mousey = s.mousey;
-                        }
-                    }
-                    Log.debug(Scheduler.class, "performing " + current);
-                    current.perform();
-                }
-                renderAll();
-            } catch (JSExn e) {
-                Log.info(Scheduler.class, "a JavaScript thread spawned with ibex.thread() threw an exception:");
-                Log.info(Scheduler.class,e);
-            } catch (Exception e) {
-                Log.info(Scheduler.class, "a Task threw an exception which was caught by the scheduler:");
-                Log.info(Scheduler.class, e);
-            } catch (Throwable t) {
-                t.printStackTrace();
-            }
-            // if an Error is thrown it will cause the engine to quit
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Semaphore.java b/upstream/org.ibex.core/build/java/org/ibex/util/Semaphore.java
deleted file mode 100644 (file)
index ad8376f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-/** Simple implementation of a blocking, counting semaphore. */
-public class Semaphore {
-    
-    private int val = 0;
-
-    /** Decrement the counter, blocking if zero. */
-    public synchronized void block() {
-        while(val == 0) {
-            try {
-                wait();
-            } catch (InterruptedException e) {
-            } catch (Throwable e) {
-                if (Log.on) Log.info(this, "Exception in Semaphore.block(); this should never happen");
-                if (Log.on) Log.info(this, e);
-            }
-        }
-        val--;
-    }
-    
-    /** Incremenet the counter. */
-    public synchronized void release() {
-        val++;
-        notify();
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Simplex.java b/upstream/org.ibex.core/build/java/org/ibex/util/Simplex.java
deleted file mode 100644 (file)
index 2ae314a..0000000
+++ /dev/null
@@ -1,1345 +0,0 @@
-package org.ibex.util;
-import java.io.* ;
-import java.util.* ;
-
-public class Simplex {
-
-    public final static short FAIL = -1;
-    
-    public final static short NULL = 0;
-    public final static short FALSE = 0;
-    public final static short TRUE = 1;
-    
-    public final static short DEFNUMINV = 50;
-    
-    /* solve status values */
-    public final static short OPTIMAL = 0;
-    public final static short MILP_FAIL = 1;
-    public final static short INFEASIBLE = 2;
-    public final static short UNBOUNDED = 3;
-    public final static short FAILURE = 4;
-    public final static short RUNNING = 5;
-    
-    /* lag_solve extra status values */
-    public final static short FEAS_FOUND = 6;
-    public final static short NO_FEAS_FOUND = 7;
-    public final static short BREAK_BB = 8;
-    
-    public final static short FIRST_NI =       0;
-    public final static short RAND_NI = 1;
-    
-    public final static short LE = 0;
-    public final static short EQ = 1;
-    public final static short GE = 2;
-    public final static short OF = 3;
-    
-    public final static short MAX_WARN_COUNT = 20;
-    
-    public final static float DEF_INFINITE = (float)1e24; /* limit for dynamic range */
-    public final static float DEF_EPSB = (float)5.01e-7; /* for rounding RHS values to 0 determine     
-                                               infeasibility basis */
-    public final static float DEF_EPSEL = (float)1e-8; /* for rounding other values (vectors) to 0 */
-    public final static float DEF_EPSD  = (float)1e-6; /* for rounding reduced costs to zero */
-    public final static float DEF_EPSILON = (float)1e-3; /* to determine if a float value is integer */
-    
-    public final static float PREJ = (float)1e-3;  /* pivot reject (try others first) */
-    
-    public final static int ETA_START_SIZE = 10000; /* start size of array Eta. Realloced if needed */
-
-    static class Ref {
-        float value;
-        public Ref(float v) { value = v; }
-    }
-
-    //public static class Simplex {
-        /* Globals used by solver */
-        short JustInverted;
-        short Status;
-        short Doiter;
-        short DoInvert;
-        short Break_bb;
-
-        public short active;           /*TRUE if the globals point to this structure*/
-        public short debug;           /* ## Print B&B information */
-        public short trace;           /* ## Print information on pivot selection */
-        public int         rows;               /* Nr of constraint rows in the problem */
-        int       rows_alloc;          /* The allocated memory for Rows sized data */
-        int       columns_alloc;  
-        int       sum;                /* The size of the variables + the slacks */
-        int       sum_alloc;
-        int       non_zeros;          /* The number of elements in the sparce matrix*/
-        int       mat_alloc;           /* The allocated size for matrix sized 
-                                           structures */
-        MatrixArray  mat;                /* mat_alloc :The sparse matrix */
-        MatrixArray  alternate_mat;                /* mat_alloc :The sparse matrix */
-        int[]     col_end;            /* columns_alloc+1 :Cend[i] is the index of the
-                                         first element after column i.
-                                         column[i] is stored in elements 
-                                         col_end[i-1] to col_end[i]-1 */
-        int[]     col_no;             /* mat_alloc :From Row 1 on, col_no contains the
-                                         column nr. of the
-                                         nonzero elements, row by row */
-        short     row_end_valid;       /* true if row_end & col_no are valid */
-        int[]     row_end;            /* rows_alloc+1 :row_end[i] is the index of the 
-                                         first element in Colno after row i */
-        float[]  orig_rh;            /* rows_alloc+1 :The RHS after scaling & sign 
-                                         changing, but before `Bound transformation' */
-        float[]  rh;                   /* rows_alloc+1 :As orig_rh, but after Bound 
-                                           transformation */
-        float[]  rhs;          /* rows_alloc+1 :The RHS of the curent simplex  
-                                  tableau */
-        float[]  orig_upbo;          /* sum_alloc+1 :Bound before transformations */
-        float[]  orig_lowbo;           /*  "       "                   */
-        float[]  upbo;               /*  "       "  :Upper bound after transformation 
-                                          & B&B work*/
-        float[]  lowbo;              /*  "       "  :Lower bound after transformation
-                                          & B&B work */
-
-        short     basis_valid;        /* TRUE is the basis is still valid */
-        int[]     bas;                /* rows_alloc+1 :The basis column list */
-        short[]   basis;              /* sum_alloc+1 : basis[i] is TRUE if the column
-                                         is in the basis */
-        short[]   lower;              /*  "       "  :TRUE is the variable is at its 
-                                          lower bound (or in the basis), it is FALSE
-                                          if the variable is at its upper bound */
-
-        short     eta_valid;          /* TRUE if current Eta structures are valid */
-        int       eta_alloc;          /* The allocated memory for Eta */
-        int       eta_size;           /* The number of Eta columns */
-        int       num_inv;            /* The number of float pivots */
-        int       max_num_inv;        /* ## The number of float pivots between 
-                                         reinvertions */
-        float[]  eta_value;          /* eta_alloc :The Structure containing the
-                                         values of Eta */
-        int[]     eta_row_nr;         /*  "     "  :The Structure containing the Row
-                                          indexes of Eta */
-        int[]     eta_col_end;        /* rows_alloc + MaxNumInv : eta_col_end[i] is
-                                         the start index of the next Eta column */
-
-        short      bb_rule;            /* what rule for selecting B&B variables */
-
-        short     break_at_int;       /* TRUE if stop at first integer better than
-                                         break_value */
-        float    break_value;        
-
-        float    obj_bound;          /* ## Objective function bound for speedup of 
-                                         B&B */
-        int       iter;               /* The number of iterations in the simplex
-                                         solver () */
-        int       total_iter;         /* The total number of iterations (B&B) (ILP)*/ 
-        int       max_level;          /* The Deepest B&B level of the last solution */
-        int        total_nodes;        /* total number of nodes processed in b&b */
-        public float[]  solution;           /* sum_alloc+1 :The Solution of the last LP, 
-                                         0 = The Optimal Value, 
-                                         1..rows The Slacks, 
-                                         rows+1..sum The Variables */
-        public float[]  best_solution;      /*  "       "  :The Best 'Integer' Solution */
-        float[]  duals;              /* rows_alloc+1 :The dual variables of the
-                                         last LP */
-  
-        short     maximise;           /* TRUE if the goal is to maximise the 
-                                         objective function */
-        short     floor_first;        /* TRUE if B&B does floor bound first */
-        short[]   ch_sign;            /* rows_alloc+1 :TRUE if the Row in the matrix
-                                         has changed sign 
-                                         (a`x > b, x>=0) is translated to 
-                                         s + -a`x = -b with x>=0, s>=0) */ 
-
-        int        nr_lagrange;        /* Nr. of Langrangian relaxation constraints */
-        float[][]lag_row;              /* NumLagrange, columns+1:Pointer to pointer of 
-                                           rows */
-        float[]  lag_rhs;              /* NumLagrange :Pointer to pointer of Rhs */
-        float[]  lambda;               /* NumLagrange :Lambda Values */
-        short[]   lag_con_type;       /* NumLagrange :TRUE if constraint type EQ */
-        float    lag_bound;            /* the lagrangian lower bound */
-
-        short     valid;               /* Has this lp pased the 'test' */
-        float    infinite;           /* ## numercal stuff */
-        float    epsilon;            /* ## */
-        float    epsb;               /* ## */
-        float    epsd;               /* ## */
-        float    epsel;              /* ## */
-
-        int     Rows;
-        int     columns;
-        int     Sum;
-        int     Non_zeros;
-        int     Level;
-        MatrixArray  Mat;
-        int[]     Col_no;
-        int[]     Col_end;
-        int[]     Row_end;
-        float[]    Orig_rh;
-        float[]    Rh;
-        float[]    Rhs;
-        float[]    Orig_upbo;
-        float[]    Orig_lowbo;
-        float[]    Upbo;
-        float[]    Lowbo;
-        int[]     Bas;
-        short[]   Basis;
-        short[]   Lower;
-        int     Eta_alloc; 
-        int     Eta_size;           
-        float[]    Eta_value;
-        int[]     Eta_row_nr;
-        int[]     Eta_col_end;
-        int     Num_inv;
-        float[]    Solution;
-        public float[]    Best_solution;
-        float    Infinite;
-        float    Epsilon;
-        float    Epsb;
-        float    Epsd;
-        float    Epsel;
-  
-        float  TREJ;
-        float  TINV;
-  
-        short   Maximise;
-        short   Floor_first;
-        float    Extrad;
-
-        int     Warn_count; /* used in CHECK version of rounding macro */
-
-        public Simplex (int nrows, int ncolumns, int matalloc) {
-            int nsum;  
-            nsum=nrows+ncolumns;
-            rows=nrows;
-            columns=ncolumns;
-            sum=nsum;
-            rows_alloc=rows;
-            columns_alloc=columns;
-            sum_alloc=sum;
-            mat_alloc=matalloc;
-            eta_alloc=10000;
-            max_num_inv=DEFNUMINV;
-            col_no = new int[mat_alloc];
-            col_end = new int[columns + 1];
-            row_end = new int[rows + 1];
-            orig_rh = new float[rows + 1];
-            rh = new float[rows + 1];
-            rhs = new float[rows + 1];
-            orig_upbo = new float[sum + 1];
-            upbo = new float[sum + 1];
-            orig_lowbo = new float[sum + 1];
-            lowbo = new float[sum + 1];
-            bas = new int[rows+1];
-            basis = new short[sum + 1];
-            lower = new short[sum + 1];
-            eta_value = new float[eta_alloc];
-            eta_row_nr = new int[eta_alloc];
-            eta_col_end = new int[rows_alloc + max_num_inv];
-            solution = new float[sum + 1];
-            best_solution = new float[sum + 1];
-            duals = new float[rows + 1];
-            ch_sign = new short[rows + 1];
-            mat = new MatrixArray(mat_alloc);
-            alternate_mat = new MatrixArray(mat_alloc);
-        }
-        
-        public void init(int ncolumns) {
-            int nsum;  
-            int nrows = 0;
-            nsum=nrows+ncolumns;
-            active=FALSE;
-            debug=FALSE;
-            trace=FALSE;
-            rows=nrows;
-            columns=ncolumns;
-            sum=nsum;
-            obj_bound=DEF_INFINITE;
-            infinite=DEF_INFINITE;
-            epsilon=DEF_EPSILON;
-            epsb=DEF_EPSB;
-            epsd=DEF_EPSD;
-            epsel=DEF_EPSEL;
-            non_zeros=0;
-
-            for(int i = 0; i < col_end.length; i++) col_end[i] = 0;
-            for(int i = 0; i < rows + 1; i++)    row_end[i] = 0;
-            for(int i = 0; i < rows + 1; i++)   orig_rh[i] = 0;
-            for(int i = 0; i < rows + 1; i++)   rh[i] = 0;
-            for(int i = 0; i < rows + 1; i++)   rhs[i] = 0;
-            for(int i = 0; i <= sum; i++)       orig_upbo[i]=infinite;
-            for(int i = 0; i < sum + 1; i++)    upbo[i] = 0;
-            for(int i = 0; i < sum + 1; i++)    orig_lowbo[i] = 0;
-            for(int i = 0; i < sum + 1; i++)    lowbo[i] = 0;
-            for(int i = 0; i <= rows; i++)      bas[i] = 0;
-            for(int i = 0; i <= sum; i++)       basis[i] = 0;
-            for(int i = 0; i <= rows; i++)     { bas[i]=i; basis[i]=TRUE; }
-            for(int i = rows + 1; i <= sum; i++) basis[i]=FALSE;
-            for(int i = 0 ; i <= sum; i++)       lower[i]=TRUE;
-            for(int i = 0; i <= sum; i++) solution[i] = 0;
-            for(int i = 0; i <= sum; i++) best_solution[i] = 0;
-            for(int i = 0; i <= rows; i++) duals[i] = 0;
-            for(int i = 0; i <= rows; i++) ch_sign[i] = FALSE;
-
-            row_end_valid=FALSE;
-            bb_rule=FIRST_NI;
-            break_at_int=FALSE;
-            break_value=0;
-            iter=0;
-            total_iter=0;
-            basis_valid=TRUE; 
-            eta_valid=TRUE;
-            eta_size=0;
-            nr_lagrange=0;
-            maximise = FALSE;
-            floor_first = TRUE;
-            valid = FALSE; 
-        }
-
-        public void setObjective(float[] row, boolean maximize) {
-            for(int i=row.length-1; i>0; i--) row[i] = row[i-1];
-            row[0] = (float)0.0;
-            for(int j = 1; j <= columns; j++) {
-                int Row = 0;
-                int column = j;
-                float Value = row[j];
-                int elmnr, lastelm;
-                
-                if(Row > rows || Row < 0) throw new Error("row out of range");
-                if(column > columns || column < 1) throw new Error("column out of range");
-                
-                if (basis[column] == TRUE && Row > 0) basis_valid = FALSE;
-                eta_valid = FALSE;
-                elmnr = col_end[column-1];
-                while((elmnr < col_end[column]) ? (get_row_nr(mat, elmnr) != Row) : false) elmnr++;
-                if((elmnr != col_end[column]) ? (get_row_nr(mat, elmnr) == Row) : false ) {
-                    if (ch_sign[Row] != FALSE) set_value(mat, elmnr, -Value);
-                    else set_value(mat, elmnr, Value);
-                } else {
-                    /* check if more space is needed for matrix */
-                    if (non_zeros + 1 > mat_alloc) throw new Error("not enough mat space; this should not happen");
-                    /* Shift the matrix */
-                    lastelm=non_zeros; 
-                    for(int i = lastelm; i > elmnr ; i--) {
-                        set_row_nr(mat,i,get_row_nr(mat,i-1));
-                        set_value(mat,i,get_value(mat,i-1));
-                    }
-                    for(int i = column; i <= columns; i++) col_end[i]++;
-                    /* Set new element */
-                    set_row_nr(mat,elmnr, Row);
-                    if (ch_sign[Row] != FALSE) set_value(mat, elmnr, -Value);
-                    else set_value(mat, elmnr, Value);
-                    row_end_valid=FALSE;
-                    non_zeros++;
-                    if (active != FALSE) Non_zeros=non_zeros;
-                }      
-            }
-            if (maximize) {
-                if (maximise == FALSE) {
-                    for(int i = 0; i < non_zeros; i++)
-                        if(get_row_nr(mat, i)==0)
-                            set_value(mat, i, get_value(mat,i)* (float)-1.0);
-                    eta_valid=FALSE;
-                }
-                maximise=TRUE;
-                ch_sign[0]=TRUE;
-                if (active != FALSE) Maximise=TRUE;
-            } else {
-                if (maximise==TRUE) {
-                    for(int i = 0; i < non_zeros; i++)
-                        if(get_row_nr(mat, i)==0)
-                            set_value(mat, i, get_value(mat,i) * (float)-1.0);
-                    eta_valid=FALSE;
-                } 
-                maximise=FALSE;
-                ch_sign[0]=FALSE;
-                if (active != FALSE) Maximise=FALSE;
-            }
-        }
-
-        public void add_constraint(float[] row, short constr_type, float rh) {
-            for(int i=row.length-1; i>0; i--) row[i] = row[i-1];
-            row[0] = (float)0.0;
-
-            MatrixArray newmat;
-            int  elmnr;
-            int  stcol;
-
-            newmat = alternate_mat;
-            for(int i = 0; i < non_zeros; i++) { set_row_nr(newmat,i, 0); set_value(newmat, i, 0); }
-            for(int i = 1; i <= columns; i++) if (row[i]!=0) non_zeros++;
-            if (non_zeros > mat_alloc) throw new Error("not enough mat space; this should not happen");
-            rows++;
-            sum++;
-            if(rows > rows_alloc) throw new Error("not enough rows; this should never happen");
-            if(constr_type==GE) ch_sign[rows] = TRUE;
-            else ch_sign[rows] = FALSE;
-
-            elmnr = 0;
-            stcol = 0;
-            for(int i = 1; i <= columns; i++) {
-                for(int j = stcol; j < col_end[i]; j++) {  
-                    set_row_nr(newmat,elmnr, get_row_nr(mat, j));
-                    set_value(newmat, elmnr, get_value(mat,j));
-                    elmnr++;
-                }
-                if(((i>=1 && i< columns && row[i]!=0)?TRUE:FALSE) != FALSE) {
-                    if(ch_sign[rows] != FALSE) set_value(newmat, elmnr, -row[i]);
-                    else set_value(newmat, elmnr, row[i]);
-                    set_row_nr(newmat,elmnr, rows);
-                    elmnr++;
-                }
-                stcol=col_end[i];
-                col_end[i]=elmnr;
-            }    
-            
-            alternate_mat = mat;
-            mat = newmat;
-
-            for(int i = sum ; i > rows; i--) {
-                orig_upbo[i]=orig_upbo[i-1];
-                orig_lowbo[i]=orig_lowbo[i-1];
-                basis[i]=basis[i-1];
-                lower[i]=lower[i-1];
-            }
-
-            for(int i =  1 ; i <= rows; i++) if(bas[i] >= rows) bas[i]++;
-
-            if(constr_type==LE || constr_type==GE) orig_upbo[rows]=infinite;
-            else if(constr_type==EQ) orig_upbo[rows]=0;
-            else throw new Error("Wrong constraint type\n");
-            orig_lowbo[rows]=0;
-
-            if(constr_type==GE && rh != 0) orig_rh[rows]=-rh;
-            else orig_rh[rows]=rh;  
-
-            row_end_valid=FALSE;
-            bas[rows]=rows;
-            basis[rows]=TRUE;
-            lower[rows]=TRUE;   
-            if (active != FALSE) set_globals();
-            eta_valid=FALSE;
-        }
-
-        public void bound_sum(int column1, int column2, float bound, short type, float[] scratch) {
-            for(int i=0; i<scratch.length; i++) scratch[i] = (float)0.0;
-            scratch[column1] = (float)1.0;
-            scratch[column2] = (float)1.0;
-            add_constraint(scratch, type, bound);
-            for(int i=0; i<scratch.length; i++) scratch[i] = (float)0.0;
-        }
-
-        public void bound_difference(int column1, int column2, float bound, short type, float[] scratch) {
-            for(int i=0; i<scratch.length; i++) scratch[i] = (float)0.0;
-            scratch[column1] = (float)1.0;
-            scratch[column2] = (float)-1.0;
-            add_constraint(scratch, type, bound);
-            for(int i=0; i<scratch.length; i++) scratch[i] = (float)0.0;
-        }
-
-        public void set_upbo(int column, float value) {
-            if(column > columns || column < 1) throw new Error("column out of range");
-            if(value < orig_lowbo[rows + column]) throw new Error("UpperBound must be >= lowerBound"); 
-            eta_valid = FALSE;
-            orig_upbo[rows+column] = value;
-        }
-
-        public void set_lowbo(int column, float value) {
-            if(column > columns || column < 1) throw new Error("column out of range");
-            if(value > orig_upbo[rows + column]) throw new Error("UpperBound must be >= lowerBound"); 
-            eta_valid = FALSE;
-            orig_lowbo[rows+column] = value;
-        }
-
-        public void set_rh(int row, float value) {
-            if(row > rows || row < 0) throw new Error("Row out of Range");
-            if(row == 0) throw new Error("Warning: attempt to set RHS of objective function, ignored");
-            if (ch_sign[row] != FALSE) orig_rh[row] = -value;
-            else orig_rh[row] = value;
-            eta_valid = FALSE;
-        } 
-
-        public void set_rh_vec(float[] rh) {
-            for(int i=1; i <= rows; i++)
-                if (ch_sign[i] != FALSE) orig_rh[i]=-rh[i];
-                else orig_rh[i]=rh[i];
-            eta_valid=FALSE;
-        }
-
-
-        public void set_constr_type(int row, short con_type) {
-            if (row > rows || row < 1) throw new Error("Row out of Range");
-            switch(con_type) {
-                case EQ:
-                    orig_upbo[row]=0;
-                    basis_valid=FALSE;
-                    if (ch_sign[row] != FALSE) {
-                        for(int i = 0; i < non_zeros; i++)
-                            if (get_row_nr(mat, i)==row) set_value(mat, i, get_value(mat,i) * (float)-1);
-                        eta_valid=FALSE;
-                        ch_sign[row]=FALSE;
-                        if (orig_rh[row]!=0) orig_rh[row]*=-1;
-                    }
-                    break;
-                case LE:
-                    orig_upbo[row]=infinite;
-                    basis_valid=FALSE;
-                    if (ch_sign[row] != FALSE) {
-                        for(int i = 0; i < non_zeros; i++)
-                            if (get_row_nr(mat, i)==row) set_value(mat, i, get_value(mat,i) * (float)-1);
-                        eta_valid=FALSE;
-                        ch_sign[row]=FALSE;
-                        if (orig_rh[row]!=0) orig_rh[row]*=-1;
-                    }
-                    break;
-                case GE:
-                    orig_upbo[row]=infinite;
-                    basis_valid=FALSE;
-                    if (ch_sign[row] == FALSE) {
-                        for(int i = 0; i < non_zeros; i++)
-                            if (get_row_nr(mat, i)==row) set_value(mat, i, get_value(mat,i) * (float)-1);
-                        eta_valid=FALSE;
-                        ch_sign[row]=TRUE;
-                        if (orig_rh[row]!=0) orig_rh[row]*=-1;
-                    }
-                    break;
-                default: throw new Error("Constraint type not (yet) implemented");
-            }
-        }
-
-        void set_globals() {
-            Rows = rows;
-            columns = columns;
-            Sum = Rows + columns;
-            Non_zeros = non_zeros;
-            Mat = mat;
-            Col_no = col_no;
-            Col_end = col_end;
-            Row_end = row_end;
-            Rh = rh;
-            Rhs = rhs;
-            Orig_rh = orig_rh;
-            Orig_upbo = orig_upbo;
-            Orig_lowbo = orig_lowbo;
-            Upbo = upbo;
-            Lowbo = lowbo;
-            Bas = bas;
-            Basis = basis;
-            Lower = lower;
-            Eta_alloc = eta_alloc;
-            Eta_size = eta_size;
-            Num_inv = num_inv;
-            Eta_value = eta_value;
-            Eta_row_nr = eta_row_nr;
-            Eta_col_end = eta_col_end;
-            Solution = solution;
-            Best_solution = best_solution;
-            Infinite = infinite;
-            Epsilon = epsilon;
-            Epsb = epsb;
-            Epsd = epsd;
-            Epsel = epsel;
-            TREJ = TREJ;
-            TINV = TINV;
-            Maximise = maximise;
-            Floor_first = floor_first;
-            active = TRUE;
-        }
-
-        private void ftran(int start, int end, float[] pcol) {
-            int k, r;
-            float theta;
-            for(int i = start; i <= end; i++) {
-                k = Eta_col_end[i] - 1;
-                r = Eta_row_nr[k];
-                theta = pcol[r];
-                if (theta != 0) for(int j = Eta_col_end[i - 1]; j < k; j++)
-                    pcol[Eta_row_nr[j]] += theta * Eta_value[j];
-                pcol[r] *= Eta_value[k];
-            }
-            for(int i = 0; i <= Rows; i++) round(pcol[i], Epsel);
-        }
-
-        private void btran(float[] row) {
-            int k;
-            float f;
-            for(int i = Eta_size; i >= 1; i--) {
-                f = 0;
-                k = Eta_col_end[i] - 1;
-                for(int j = Eta_col_end[i - 1]; j <= k; j++) f += row[Eta_row_nr[j]] * Eta_value[j];
-                f = round(f, Epsel);
-                row[Eta_row_nr[k]] = f;
-            }
-        }
-
-        static int[] num = new int[65535];
-        static int[] rownum = new int[65535];
-        static int[] colnum = new int[65535];
-
-        short Isvalid() {
-            int row_nr;
-            if (row_end_valid == FALSE) {
-                for(int i = 0; i <= rows; i++) { num[i] = 0; rownum[i] = 0; }
-                for(int i = 0; i < non_zeros; i++) rownum[get_row_nr(mat, i)]++;
-                row_end[0] = 0;
-                for(int i = 1; i <= rows; i++) row_end[i] = row_end[i - 1] + rownum[i];
-                for(int i = 1; i <= columns; i++)
-                    for(int j = col_end[i - 1]; j < col_end[i]; j++) {
-                        row_nr = get_row_nr(mat, j);
-                        if (row_nr != 0) {
-                            num[row_nr]++;
-                            col_no[row_end[row_nr - 1] + num[row_nr]] = i;
-                        }
-                    }
-                row_end_valid = TRUE;
-            }
-            if (valid != FALSE) return(TRUE);
-            for(int i = 0; i <= rows; i++) rownum[i] = 0;
-            for(int i = 0; i <= columns; i++) colnum[i] = 0;
-            for(int i = 1 ; i <= columns; i++)
-                for(int j = col_end[i - 1]; j < col_end[i]; j++) {
-                    colnum[i]++;
-                    rownum[get_row_nr(mat, j)]++;
-                }
-            for(int i = 1; i <= columns; i++)
-                if (colnum[i] == 0)
-                    throw new Error("Warning: Variable " + i + " not used in any constaints\n");
-            valid = TRUE;
-            return(TRUE);
-        } 
-
-        private void resize_eta() {
-            Eta_alloc *= 2;
-            throw new Error("eta undersized; this should never happen");
-            /*
-            float[] db_ptr = Eta_value;
-            Eta_value = new float[Eta_alloc];
-            System.arraycopy(db_ptr, 0, Eta_value, 0, db_ptr.length);
-            eta_value = Eta_value;
-
-            int[] int_ptr = Eta_row_nr;
-            Eta_row_nr = new int[Eta_alloc];
-            System.arraycopy(int_ptr, 0, Eta_row_nr, 0, int_ptr.length);
-            eta_row_nr = Eta_row_nr;
-            */
-        }
-
-        private void condensecol(int row_nr, float[] pcol) {
-            int elnr;
-            elnr = Eta_col_end[Eta_size];
-            if (elnr + Rows + 2 > Eta_alloc) resize_eta();
-            for(int i = 0; i <= Rows; i++)
-                if (i != row_nr && pcol[i] != 0) {
-                    Eta_row_nr[elnr] = i;
-                    Eta_value[elnr] = pcol[i];
-                    elnr++;
-                }
-            Eta_row_nr[elnr] = row_nr;
-            Eta_value[elnr] = pcol[row_nr];
-            elnr++;
-            Eta_col_end[Eta_size + 1] = elnr;
-        }
-
-        private void addetacol() {
-            int k;
-            float theta;
-            int j = Eta_col_end[Eta_size];
-            Eta_size++;
-            k = Eta_col_end[Eta_size];
-            theta = 1 / (float) Eta_value[k - 1];
-            Eta_value[k - 1] = theta;
-            for(int i = j; i < k - 1; i++) Eta_value[i] *= -theta;
-            JustInverted = FALSE;
-        }
-
-        private void setpivcol(short lower,  int varin, float[]   pcol) {
-            int colnr;
-            float f;
-            if (lower != FALSE) f = 1;
-            else f = -1;
-            for(int i = 0; i <= Rows; i++) pcol[i] = 0;
-            if (varin > Rows) {
-                colnr = varin - Rows;
-                for(int i = Col_end[colnr - 1]; i < Col_end[colnr]; i++) pcol[get_row_nr(Mat, i)] = get_value(Mat,i) * f;
-                pcol[0] -= Extrad * f;
-            } else {
-                if (lower != FALSE) pcol[varin] = 1;
-                else pcol[varin] = -1;
-            }
-            ftran(1, Eta_size, pcol);
-        }
-
-        private void minoriteration(int colnr, int row_nr) {
-            int k, wk, varin, varout, elnr;
-            float piv = 0, theta;
-            varin = colnr + Rows;
-            elnr = Eta_col_end[Eta_size];
-            wk = elnr;
-            Eta_size++;
-            if (Extrad != 0) {
-                Eta_row_nr[elnr] = 0;
-                Eta_value[elnr] = -Extrad;
-                elnr++;
-            }
-            for(int j = Col_end[colnr - 1] ; j < Col_end[colnr]; j++) {
-                k = get_row_nr(Mat, j);
-                if (k == 0 && Extrad != 0) Eta_value[Eta_col_end[Eta_size -1]] += get_value(Mat,j);
-                else if (k != row_nr) {
-                    Eta_row_nr[elnr] = k;
-                    Eta_value[elnr] = get_value(Mat,j);
-                    elnr++;
-                } else {
-                    piv = get_value(Mat,j);
-                }
-            }
-            Eta_row_nr[elnr] = row_nr;
-            Eta_value[elnr] = 1 / (float) piv;
-            elnr++;
-            theta = Rhs[row_nr] / (float) piv;
-            Rhs[row_nr] = theta;
-            for(int i = wk; i < elnr - 1; i++) Rhs[Eta_row_nr[i]] -= theta * Eta_value[i];
-            varout = Bas[row_nr];
-            Bas[row_nr] = varin;
-            Basis[varout] = FALSE;
-            Basis[varin] = TRUE;
-            for(int i = wk; i < elnr - 1; i++) Eta_value[i] /= - (float) piv;
-            Eta_col_end[Eta_size] = elnr;
-        }
-
-        private void rhsmincol(float theta, int row_nr, int varin) {
-            int varout;
-            float f;
-            if (row_nr > Rows + 1) {
-                System.err.println("Error: rhsmincol called with row_nr: " + row_nr + ", rows: " + Rows + "\n");
-                System.err.println("This indicates numerical instability\n");
-            }
-            int j = Eta_col_end[Eta_size];
-            int k = Eta_col_end[Eta_size + 1];
-            for(int i = j; i < k; i++) {
-                f = Rhs[Eta_row_nr[i]] - theta * Eta_value[i];
-                f = round(f, Epsb);
-                Rhs[Eta_row_nr[i]] = f;
-            }
-            Rhs[row_nr] = theta;
-            varout = Bas[row_nr];
-            Bas[row_nr] = varin;
-            Basis[varout] = FALSE;
-            Basis[varin] = TRUE;
-        }
-
-        private static int[] rownum_ = new int[65535];
-        private static int[] colnum_ = new int[65535];
-        private static int[] col = new int[65535];
-        private static int[] row = new int[65535];
-        private static float[] pcol = new float[65535];
-        private static short[] frow = new short[65535];
-        private static short[] fcol = new short[65535];
-
-        void invert() {
-            int    v, wk, numit, varnr, row_nr, colnr, varin;
-            float    theta;
-
-            for(int i = 0; i <= Rows; i++) rownum_[i] = 0;
-            for(int i = 0; i <= Rows; i++) col[i] = 0;
-            for(int i = 0; i <= Rows; i++) row[i] = 0;
-            for(int i = 0; i <= Rows; i++) pcol[i] = 0;
-            for(int i = 0; i <= Rows; i++) frow[i] = TRUE;
-            for(int i = 0; i < columns; i++) fcol[i] = FALSE;
-            for(int i = 0; i <= columns; i++) colnum_[i] = 0;
-
-            for(int i = 0; i <= Rows; i++)
-                if (Bas[i] > Rows) fcol[Bas[i] - Rows - 1] = TRUE;
-                else frow[Bas[i]] = FALSE;
-
-            for(int i = 1; i <= Rows; i++)
-                if (frow[i] != FALSE)
-                    for(int j = Row_end[i - 1] + 1; j <= Row_end[i]; j++) {
-                        wk = Col_no[j];
-                        if (fcol[wk - 1] != FALSE) {
-                            colnum_[wk]++;
-                            rownum_[i - 1]++;
-                        }
-                    }
-
-            for(int i = 1; i <= Rows; i++) Bas[i] = i;
-            for(int i = 1; i <= Rows; i++) Basis[i] = TRUE;
-            for(int i = 1; i <= columns; i++) Basis[i + Rows] = FALSE;
-            for(int i = 0; i <= Rows; i++) Rhs[i] = Rh[i];
-            for(int i = 1; i <= columns; i++) {
-                varnr = Rows + i;
-                if (Lower[varnr] == FALSE) {
-                    theta = Upbo[varnr];
-                    for(int j = Col_end[i - 1]; j < Col_end[i]; j++)
-                        Rhs[get_row_nr(Mat, j)] -= theta * get_value(Mat,j);
-                }
-            }
-            for(int i = 1; i <= Rows; i++) if (Lower[i] == FALSE) Rhs[i] -= Upbo[i];
-            Eta_size = 0;
-            v = 0;
-            row_nr = 0;
-            Num_inv = 0;
-            numit = 0;
-            while(v < Rows) {
-                int j;
-                row_nr++;
-                if (row_nr > Rows) row_nr = 1;
-                v++;
-                if (rownum_[row_nr - 1] == 1)
-                    if (frow[row_nr] != FALSE) {
-                        v = 0;
-                        j = Row_end[row_nr - 1] + 1;
-                        while(fcol[Col_no[j] - 1] == FALSE) j++;
-                        colnr = Col_no[j];
-                        fcol[colnr - 1] = FALSE;
-                        colnum_[colnr] = 0;
-                        for(j = Col_end[colnr - 1]; j < Col_end[colnr]; j++)
-                            if (frow[get_row_nr(Mat, j)] != FALSE)
-                                rownum_[get_row_nr(Mat, j) - 1]--;
-                        frow[row_nr] = FALSE;
-                        minoriteration(colnr, row_nr);
-                    }
-            }
-            v = 0;
-            colnr = 0;
-            while(v < columns) {
-                int j;
-                colnr++;
-                if (colnr > columns) colnr = 1;
-                v++;
-                if (colnum_[colnr] == 1)
-                    if (fcol[colnr - 1] != FALSE) {
-                        v = 0;
-                        j = Col_end[colnr - 1] + 1;
-                        while(frow[get_row_nr(Mat, j - 1)] == FALSE) j++;
-                        row_nr = get_row_nr(Mat, j - 1);
-                        frow[row_nr] = FALSE;
-                        rownum_[row_nr - 1] = 0;
-                        for(j = Row_end[row_nr - 1] + 1; j <= Row_end[row_nr]; j++)
-                            if (fcol[Col_no[j] - 1] != FALSE)
-                                colnum_[Col_no[j]]--;
-                        fcol[colnr - 1] = FALSE;
-                        numit++;
-                        col[numit - 1] = colnr;
-                        row[numit - 1] = row_nr;
-                    }
-            }
-            for(int j = 1; j <= columns; j++)
-                if (fcol[j - 1] != FALSE) {
-                    fcol[j - 1] = FALSE;
-                    setpivcol(Lower[Rows + j], j + Rows, pcol);
-                    row_nr = 1;
-                    while((frow[row_nr] == FALSE || pcol[row_nr] == FALSE) && row_nr <= Rows)
-                        row_nr++; /* this sometimes sets row_nr to Rows + 1 and makes
-                                     rhsmincol crash. Solved in 2.0? MB */
-                    if (row_nr == Rows + 1) throw new Error("Inverting failed");
-                    frow[row_nr] = FALSE;
-                    condensecol(row_nr, pcol);
-                    theta = Rhs[row_nr] / (float) pcol[row_nr];
-                    rhsmincol(theta, row_nr, Rows + j);
-                    addetacol();
-                }
-            for(int i = numit - 1; i >= 0; i--) {
-                colnr = col[i];
-                row_nr = row[i];
-                varin = colnr + Rows;
-                for(int j = 0; j <= Rows; j++) pcol[j] = 0;
-                for(int j = Col_end[colnr - 1]; j < Col_end[colnr]; j++) pcol[get_row_nr(Mat, j)] = get_value(Mat,j);
-                pcol[0] -= Extrad;
-                condensecol(row_nr, pcol);
-                theta = Rhs[row_nr] / (float) pcol[row_nr];
-                rhsmincol(theta, row_nr, varin);
-                addetacol();
-            }
-            for(int i = 1; i <= Rows; i++) Rhs[i] = round(Rhs[i], Epsb);
-            JustInverted = TRUE;
-            DoInvert = FALSE;
-        }
-
-        private short colprim(Ref colnr, short minit, float[]   drow) {
-            int  varnr;
-            float f, dpiv;
-              dpiv = -Epsd;
-            colnr.value = 0;
-            if (minit == FALSE) {
-                for(int i = 1; i <= Sum; i++) drow[i] = 0;
-                drow[0] = 1;
-                btran(drow);
-                for(int i = 1; i <= columns; i++) {
-                    varnr = Rows + i;
-                    if (Basis[varnr] == FALSE)
-                        if (Upbo[varnr] > 0) {
-                            f = 0;
-                            for(int j = Col_end[i - 1]; j < Col_end[i]; j++) f += drow[get_row_nr(Mat, j)] * get_value(Mat,j);
-                            drow[varnr] = f;
-                        }
-                }
-                for(int i = 1; i <= Sum; i++) drow[i] = round(drow[i], Epsd);
-            }
-            for(int i = 1; i <= Sum; i++)
-                if (Basis[i] == FALSE)
-                    if (Upbo[i] > 0) {
-                        if (Lower[i] != FALSE) f = drow[i];
-                        else f = -drow[i];
-                        if (f < dpiv) {
-                            dpiv = f;
-                            colnr.value = i;
-                        }
-                    }
-            if (colnr.value == 0) {
-                Doiter   = FALSE;
-                DoInvert = FALSE;
-                Status   = OPTIMAL;
-            }
-            return(colnr.value > 0 ? (short)1 : (short)0);
-        }
-
-        private short rowprim(int colnr, Ref row_nr, Ref theta, float[] pcol) {
-            float f = 0, quot; 
-            row_nr.value = 0;
-            theta.value = Infinite;
-            for(int i = 1; i <= Rows; i++) {
-                f = pcol[i];
-                if (Math.abs(f) < TREJ) f = 0;
-                if (f != 0) {
-                    quot = 2 * Infinite;
-                    if (f > 0) quot = Rhs[i] / (float) f;
-                    else if (Upbo[Bas[i]] < Infinite) quot = (Rhs[i] - Upbo[Bas[i]]) / (float) f;
-                    round(quot, Epsel);
-                    if (quot < theta.value) {
-                        theta.value = quot;
-                        row_nr.value = i;
-                    }
-                }
-            }
-            if (row_nr.value == 0)  
-                for(int i = 1; i <= Rows; i++) {
-                    f = pcol[i];
-                    if (f != 0) {
-                        quot = 2 * Infinite;
-                        if (f > 0) quot = Rhs[i] / (float) f;
-                        else if (Upbo[Bas[i]] < Infinite) quot = (Rhs[i] - Upbo[Bas[i]]) / (float) f;
-                        quot = round(quot, Epsel);
-                        if (quot < theta.value) {
-                            theta.value = quot;
-                            row_nr.value = i;
-                        }
-                    }
-                }
-
-            if (theta.value < 0) throw new Error("Warning: Numerical instability, qout = " + theta.value);
-            if (row_nr.value == 0) {
-                if (Upbo[colnr] == Infinite) {
-                    Doiter   = FALSE;
-                    DoInvert = FALSE;
-                    Status   = UNBOUNDED;
-                } else {
-                    int i = 1;
-                    while(pcol[i] >= 0 && i <= Rows) i++;
-                    if (i > Rows) {
-                        Lower[colnr] = FALSE;
-                        Rhs[0] += Upbo[colnr]*pcol[0];
-                        Doiter = FALSE;
-                        DoInvert = FALSE;
-                    } else if (pcol[i]<0) {
-                        row_nr.value = i;
-                    }
-                }
-            }
-            if (row_nr.value > 0) Doiter = TRUE;
-            return((row_nr.value > 0) ? (short)1 : (short)0);
-        }
-
-        private short rowdual(Ref row_nr) {
-            int   i;
-            float  f, g, minrhs;
-            short artifs;
-            row_nr.value = 0;
-            minrhs = -Epsb;
-            i = 0;
-            artifs = FALSE;
-            while(i < Rows && artifs == FALSE) {
-                i++;
-                f = Upbo[Bas[i]];
-                if (f == 0 && (Rhs[i] != 0)) {
-                    artifs = TRUE;
-                    row_nr.value = i;
-                } else {
-                    if (Rhs[i] < f - Rhs[i]) g = Rhs[i];
-                    else g = f - Rhs[i];
-                    if (g < minrhs) {
-                        minrhs = g;
-                        row_nr.value = i;
-                    }
-                }
-            }
-            return(row_nr.value > 0 ? (short)1 : (short)0);
-        }
-
-        private short coldual(int row_nr, Ref colnr, short minit, float[] prow, float[] drow) {
-            int r, varnr;
-            float theta, quot, pivot, d, f, g;
-            Doiter = FALSE;
-            if (minit == FALSE) {
-                for(int i = 0; i <= Rows; i++) {
-                    prow[i] = 0;
-                    drow[i] = 0;
-                }
-                drow[0] = 1;
-                prow[row_nr] = 1;
-                for(int i = Eta_size; i >= 1; i--) {
-                    d = 0;
-                    f = 0;
-                    r = Eta_row_nr[Eta_col_end[i] - 1];
-                    for(int j = Eta_col_end[i - 1]; j < Eta_col_end[i]; j++) {
-                        /* this is where the program consumes most cpu time */
-                        f += prow[Eta_row_nr[j]] * Eta_value[j];
-                        d += drow[Eta_row_nr[j]] * Eta_value[j];
-                    }
-                    f = round(f, Epsel);
-                    prow[r] = f;
-                    d = round(d, Epsel);
-                    drow[r] = d;
-                }
-                for(int i = 1; i <= columns; i++) {
-                    varnr = Rows + i;
-                    if (Basis[varnr] == FALSE) {
-                        d = - Extrad * drow[0];
-                        f = 0;
-                        for(int j = Col_end[i - 1]; j < Col_end[i]; j++) {
-                            d = d + drow[get_row_nr(Mat, j)] * get_value(Mat,j);
-                            f = f + prow[get_row_nr(Mat, j)] * get_value(Mat,j);
-                        }
-                        drow[varnr] = d;
-                        prow[varnr] = f;
-                    }
-                }
-                for(int i = 0; i <= Sum; i++) {
-                    prow[i] = round(prow[i], Epsel);
-                    drow[i] = round(drow[i], Epsd);
-                }
-            }
-            if (Rhs[row_nr] > Upbo[Bas[row_nr]]) g = -1;
-            else g = 1;
-            pivot = 0;
-            colnr.value = 0;
-            theta = Infinite;
-            for(int i = 1; i <= Sum; i++) {
-                if (Lower[i] != FALSE) d = prow[i] * g;
-                else d = -prow[i] * g;
-                if ((d < 0) && (Basis[i] == FALSE) && (Upbo[i] > 0)) {
-                    if (Lower[i] == FALSE) quot = -drow[i] / (float) d;
-                    else quot = drow[i] / (float) d;
-                    if (quot < theta) {
-                        theta = quot;
-                        pivot = d;
-                        colnr.value = i;
-                    } else if ((quot == theta) && (Math.abs(d) > Math.abs(pivot))) {
-                        pivot = d;
-                        colnr.value = i;
-                    }
-                }
-            }
-            if (colnr.value > 0) Doiter = TRUE;
-            return(colnr.value > 0 ? (short)1 : (short)0);
-        }
-
-        private void iteration(int row_nr, int varin, Ref theta, float up, Ref minit, Ref low, short primal,float[] pcol) {
-            int k, varout;
-            float f;
-            float pivot;
-            iter++;
-            minit.value = theta.value > (up + Epsb) ? 1 : 0;
-            if (minit.value != 0) {
-                theta.value = up;
-                low.value = low.value == 0 ? 1 : 0;
-            }
-            k = Eta_col_end[Eta_size + 1];
-            pivot = Eta_value[k - 1];
-            for(int i = Eta_col_end[Eta_size]; i < k; i++) {
-                f = Rhs[Eta_row_nr[i]] - theta.value * Eta_value[i];
-                f = round(f, Epsb);
-                Rhs[Eta_row_nr[i]] = f;
-            }
-            if (minit.value == 0) {
-                Rhs[row_nr] = theta.value;
-                varout = Bas[row_nr];
-                Bas[row_nr] = varin;
-                Basis[varout] = FALSE;
-                Basis[varin] = TRUE;
-                if (primal != FALSE && pivot < 0) Lower[varout] = FALSE;
-                if (low.value == 0 && up < Infinite) {
-                    low.value = TRUE;
-                    Rhs[row_nr] = up - Rhs[row_nr];
-                    for(int i = Eta_col_end[Eta_size]; i < k; i++) Eta_value[i] = -Eta_value[i];
-                }
-                addetacol();
-                Num_inv++;
-            }
-        }
-
-        static float[] drow = new float[65535];
-        static float[] prow = new float[65535];
-        static float[] Pcol = new float[65535];
-
-        private int solvelp() {
-            int    varnr;
-            float   f = 0, theta = 0;
-            short  primal;
-            short  minit;
-            int    colnr, row_nr;
-            colnr = 0;
-            row_nr = 0;
-            short flag; 
-            Ref ref1, ref2, ref3;
-            ref1 = new Ref(0);
-            ref2 = new Ref(0);
-            ref3 = new Ref(0);
-
-            for(int i = 0; i <= Sum; i++) { drow[i] = 0; prow[i] = 0; }
-            for(int i = 0; i <= Rows; i++) Pcol[i] = 0;
-            iter = 0;
-            minit = FALSE;
-            Status = RUNNING;
-            DoInvert = FALSE;
-            Doiter = FALSE;
-            primal = TRUE;
-            for(int i = 0; i != Rows && primal != FALSE;) {
-                i++;
-                primal = (Rhs[i] >= 0 && Rhs[i] <= Upbo[Bas[i]]) ? (short)1: (short)0;
-            }
-            if (primal == FALSE) {
-                drow[0] = 1;
-                for(int i = 1; i <= Rows; i++) drow[i] = 0;
-                Extrad = 0;
-                for(int i = 1; i <= columns; i++) {
-                    varnr = Rows + i;
-                    drow[varnr] = 0;
-                    for(int j = Col_end[i - 1]; j < Col_end[i]; j++)
-                        if (drow[get_row_nr(Mat, j)] != 0)
-                            drow[varnr] += drow[get_row_nr(Mat, j)] * get_value(Mat,j);
-                    if (drow[varnr] < Extrad) Extrad = drow[varnr];
-                }
-            } else {
-                Extrad = 0;
-            }
-            minit = FALSE;
-            while(Status == RUNNING) {
-                Doiter = FALSE;
-                DoInvert = FALSE;
-                construct_solution(Solution);
-                if (primal != FALSE) {
-                    ref1.value = colnr;
-                    flag = colprim(ref1, minit, drow);
-                    colnr = (int)ref1.value;
-                    if (flag != FALSE) {
-                        setpivcol(Lower[colnr], colnr, Pcol);
-                        ref1.value = row_nr;
-                        ref2.value = theta;
-                        flag = rowprim(colnr, ref1, ref2, Pcol);
-                        row_nr = (int)ref1.value;
-                        theta = ref2.value;
-                        if (flag != FALSE) condensecol(row_nr, Pcol);
-                    }
-                } else {
-                    if (minit == FALSE) {
-                        ref1.value = row_nr;
-                        flag = rowdual(ref1);
-                        row_nr = (int)ref1.value;
-                    }
-                    if (row_nr > 0) {
-                        ref1.value = colnr;
-                        flag = coldual(row_nr, ref1, minit, prow, drow);
-                        colnr = (int)ref1.value;
-                        if (flag != FALSE) {
-                            setpivcol(Lower[colnr], colnr, Pcol);
-                            /* getting div by zero here ... MB */
-                            if (Pcol[row_nr] == 0) {
-                                throw new Error("An attempt was made to divide by zero (Pcol[" + row_nr + "])");
-                            } else {
-                                condensecol(row_nr, Pcol);
-                                f = Rhs[row_nr] - Upbo[Bas[row_nr]];
-                                if (f > 0) {
-                                    theta = f / (float) Pcol[row_nr];
-                                    if (theta <= Upbo[colnr])
-                                        Lower[Bas[row_nr]] = (Lower[Bas[row_nr]] == FALSE)? (short)1:(short)0;
-                                } else theta = Rhs[row_nr] / (float) Pcol[row_nr];
-                            }
-                        } else Status = INFEASIBLE;
-                    } else {
-                        primal   = TRUE;
-                        Doiter   = FALSE;
-                        Extrad   = 0;
-                        DoInvert = TRUE;
-                    }    
-                }
-                if (Doiter != FALSE) {
-                    ref1.value = theta;
-                    ref2.value = minit;
-                    ref3.value = Lower[colnr];
-                    iteration(row_nr, colnr, ref1, Upbo[colnr], ref2, ref3, primal, Pcol);
-                    theta = ref1.value;
-                    minit = (short)ref2.value;
-                    Lower[colnr] = (short)ref3.value;
-                }
-                if (Num_inv >= max_num_inv) DoInvert = TRUE;
-                if (DoInvert != FALSE) invert();
-            } 
-            total_iter += iter;
-            return(Status);
-        }
-
-        private void construct_solution(float[]   sol) {
-            float   f;
-            int basi;
-            for(int i = 0; i <= Rows; i++) sol[i] = 0;
-            for(int i = Rows + 1; i <= Sum; i++) sol[i] = Lowbo[i];
-            for(int i = 1; i <= Rows; i++) {
-                basi = Bas[i];
-                if (basi > Rows) sol[basi] += Rhs[i];
-            }
-            for(int i = Rows + 1; i <= Sum; i++)
-                if (Basis[i] == FALSE && Lower[i] == FALSE)
-                    sol[i] += Upbo[i];
-            for(int j = 1; j <= columns; j++) {
-                f = sol[Rows + j];
-                if (f != 0)
-                    for(int i = Col_end[j - 1]; i < Col_end[j]; i++)
-                        sol[get_row_nr(Mat, i)] += f * get_value(Mat,i);
-            }
-            for(int i = 0; i <= Rows; i++) {
-                if (Math.abs(sol[i]) < Epsb) sol[i] = 0;
-                else if (ch_sign[i] != FALSE) sol[i] = -sol[i];
-            }
-        }
-
-        private void calculate_duals() {
-            for(int i = 1; i <= Rows; i++) duals[i] = 0;
-            duals[0] = 1;
-            btran(duals);
-            for(int i = 1; i <= Rows; i++) {
-                if (basis[i] != FALSE) duals[i] = 0;
-                else if ( ch_sign[0] == ch_sign[i]) duals[i] = -duals[i];
-            }
-        }
-
-        private static Random rdm = new Random();
-
-        private int milpsolve(float[]   upbo, float[]   lowbo, short[]  sbasis, short[]  slower, int[]    sbas) {
-            int failure, notint, is_worse;
-            float theta, tmpfloat;
-            notint = 0;
-
-            if (Break_bb != FALSE) return(BREAK_BB);
-            Level++;
-            total_nodes++;
-            if (Level > max_level) max_level = Level;
-            System.arraycopy(upbo, 0, Upbo, 0, Sum + 1);
-            System.arraycopy(lowbo, 0, Lowbo, 0, Sum + 1);
-            System.arraycopy(sbasis, 0, Basis, 0, Sum + 1);
-            System.arraycopy(slower, 0, Lower, 0, Sum + 1);
-            System.arraycopy(sbas, 0, Bas, 0, Rows + 1);
-            System.arraycopy(Orig_rh, 0, Rh, 0, Rows + 1);
-            if (eta_valid == FALSE) {
-                for(int i = 1; i <= columns; i++)
-                    if (Lowbo[Rows + i] != 0) {
-                        theta = Lowbo[ Rows + i];
-                        if (Upbo[Rows + i]<Infinite) Upbo[Rows + i] -= theta;
-                        for(int j = Col_end[i - 1]; j < Col_end[i]; j++) Rh[get_row_nr(Mat, j)] -= theta * get_value(Mat,j);
-                    }
-                invert();
-                eta_valid = TRUE;
-            }
-            failure = solvelp();
-            if (failure == OPTIMAL) {
-                construct_solution(Solution);
-                /* if this solution is worse than the best sofar, this branch must die */
-                if (Maximise != FALSE) is_worse = (Solution[0] <= Best_solution[0]) ? 1:0;
-                else is_worse = (Solution[0] >= Best_solution[0]) ? 1:0;
-                if (is_worse != FALSE) {
-                    Level--;
-                    return(MILP_FAIL);
-                }
-                /* check if solution contains enough ints */
-                if (bb_rule == FIRST_NI) {
-                    notint = 0;
-                    int i = Rows + 1;
-                    while(i <= Sum && notint == 0) i++;
-                }
-                if (bb_rule == RAND_NI) {
-                    int nr_not_int, select_not_int;
-                    nr_not_int = 0;
-                    for(int i = Rows + 1; i <= Sum; i++)
-                        if (nr_not_int == 0) notint = 0;
-                        else {
-                            select_not_int=(rdm.nextInt() % nr_not_int) + 1;
-                            i = Rows + 1;
-                            while(select_not_int > 0) i++;
-                            notint = i - 1;
-                        }
-                }
-                if (notint != FALSE) throw new Error("integer linear programming not supported");
-                if (Maximise != FALSE) is_worse = (Solution[0] < Best_solution[0]) ? 1:0;
-                else is_worse = (Solution[0] > Best_solution[0]) ? 1:0;
-                if (is_worse == FALSE) {
-                    System.arraycopy(Solution, 0, Best_solution, 0, Sum + 1);
-                    calculate_duals();
-                    if (break_at_int != FALSE) {
-                        if (Maximise != FALSE &&  (Best_solution[0] > break_value)) Break_bb = TRUE;
-                        if (Maximise == FALSE &&  (Best_solution[0] < break_value)) Break_bb = TRUE;
-                    }
-                }
-            }
-            Level--;
-            return(failure);
-        }
-
-        public int solve() {
-            int result = FAILURE;
-            if (active == FALSE) set_globals();
-            total_iter  = 0;
-            max_level   = 1;
-            total_nodes = 0;
-            if (Isvalid() != FALSE) {
-                if (Maximise != FALSE && obj_bound == Infinite) Best_solution[0]=-Infinite;
-                else if (Maximise == FALSE && obj_bound==-Infinite) Best_solution[0] = Infinite;
-                else Best_solution[0] = obj_bound;
-                Level = 0;
-                if (basis_valid == FALSE) {
-                    for(int i = 0; i <= rows; i++) {
-                        basis[i] = TRUE;
-                        bas[i] = i;
-                    }
-                    for(int i = rows+1; i <= sum; i++) basis[i] = FALSE;
-                    for(int i = 0; i <= sum; i++) lower[i] = TRUE;
-                    basis_valid = TRUE;
-                }
-                eta_valid = FALSE;
-                Break_bb      = FALSE;
-                result        = milpsolve(Orig_upbo, Orig_lowbo, Basis, Lower, Bas); 
-                eta_size  = Eta_size;
-                eta_alloc = Eta_alloc;
-                num_inv   = Num_inv;
-            }
-            for(int i = 0; i < maxmat; i++) { set_row_nr(mat,i, 0); set_value(mat, i, 0); }
-            for(int i = 0; i < maxmat; i++)   col_no[i] = 0;
-
-            // FIXME: not sure about this
-            for(int i = 0; i < Eta_size; i++) eta_value[i] = 0;
-            for(int i = 0; i < Eta_size; i++) eta_row_nr[i] = 0;
-            for(int i = 0; i < Eta_size; i++) eta_col_end[i] = 0;
-
-            maxmat = 0;
-            return(result);
-        }
-
-    private int maxmat = 0;
-    private final static float round( float val, float eps) { return (Math.abs(val) < eps) ? 0 : val; }
-    int get_row_nr(MatrixArray m, int i) { return m.row_nr[i]; }
-    void set_row_nr(MatrixArray m, int i, int val) { m.row_nr[i] = val; maxmat = Math.max(i, maxmat); }
-    float get_value(MatrixArray m, int i) { return m.value[i]; }
-    void set_value(MatrixArray m, int i, float val) { m.value[i] = val; maxmat = Math.max(i, maxmat); }
-    public static class MatrixArray {
-        public int[] row_nr;
-        public float[] value;
-        public final int length;
-        public MatrixArray(int length) { row_nr = new int[length]; value = new float[length]; this.length = length; }
-    }
-
-}
-
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Task.java b/upstream/org.ibex.core/build/java/org/ibex/util/Task.java
deleted file mode 100644 (file)
index e710724..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.ibex.util;
-import java.io.IOException;
-import org.ibex.js.*;
-
-public interface Task {
-    public abstract void perform() throws IOException, JSExn;
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/Vec.java b/upstream/org.ibex.core/build/java/org/ibex/util/Vec.java
deleted file mode 100644 (file)
index 43ff43d..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-import java.io.*;
-
-/** 
- *  An unsynchronized Vector implementation; same semantics as
- *  java.util.Vector. Useful for JDK1.1 platforms that don't have
- *  java.util.ArrayList.
- *
- *  May contain nulls.
- *
- *  @see java.util.Vector
- */
-public final class Vec implements Serializable {
-    
-    private Object[] store;
-    private int size = 0;
-    
-    public Vec() { this(10); }
-    public Vec(int i) { store = new Object[i]; }
-    public Vec(int i, Object[] store) { size = i; this.store = store; }
-    
-    private void grow() { grow(store.length * 2); }
-    private void grow(int newsize) {
-        Object[] newstore = new Object[newsize];
-        System.arraycopy(store, 0, newstore, 0, size);
-        store = newstore;
-    }
-
-    public void removeAllElements() {
-        for(int i=0; i<size; i++) store[i] = null;
-        size = 0;
-    }
-
-    public void toArray(Object[] o) {
-        for(int i=0; i<size; i++)
-            o[i] = store[i];
-    }
-    
-    public int indexOf(Object o) {
-        for(int i=0; i<size; i++)
-            if (o == null ? store[i] == null : store[i].equals(o)) return i;
-        
-        return -1;
-    }
-    
-    public void addElement(Object o) {
-        if (size >= store.length - 1) grow();
-        store[size++] = o;
-    }
-
-    public Object peek() {
-        return lastElement();
-    }
-
-    public Object elementAt(int i) {
-        return store[i];
-    }
-    
-    public Object lastElement() {
-        if (size == 0) return null;
-        return store[size - 1];
-    }
-
-    public void push(Object o) { addElement(o); }
-    public Object pop() {
-        Object ret = lastElement();
-        if (size > 0) store[size--] = null;
-        return ret;
-    }
-
-    public int size() { return size; }
-
-    public void setSize(int newSize) {
-        if (newSize < 0) throw new RuntimeException("tried to set size to negative value");
-        if (newSize > store.length) grow(newSize * 2);
-        if (newSize < size)
-            for(int i=newSize; i<size; i++)
-                store[i] = null;
-        size = newSize;
-    }
-
-    public void copyInto(Object[] out) {
-        for(int i=0; i<size; i++)
-            out[i] = store[i];
-    }
-
-    public void fromArray(Object[] in) {
-        setSize(in.length);
-        for(int i=0; i<size; i++)
-            store[i] = in[i];
-    }
-
-    public void removeElementAt(int i) {
-        if (i >= size || i < 0) throw new RuntimeException("tried to remove an element outside the vector's limits");
-        for(int j=i; j<size - 1; j++)
-            store[j] = store[j + 1];
-        setSize(size - 1);
-    }
-
-    public void setElementAt(Object o, int i) {
-        if (i >= size) setSize(i);
-        store[i] = o;
-    }
-
-    public void removeElement(Object o) {
-        int idx = indexOf(o);
-        if (idx != -1) removeElementAt(idx);
-    }
-
-    public void insertElementAt(Object o, int at) {
-        if (size == store.length) grow();
-        for(int i=size; i>at; i--)
-            store[i] = store[i-1];
-        store[at] = o;
-        size++;
-    }
-
-    public interface CompareFunc {
-        public int compare(Object a, Object b);
-    }
-
-    public void sort(CompareFunc c) {
-        sort(this, null, c, 0, size-1);
-    }
-
-    public static void sort(Vec a, Vec b, CompareFunc c) {
-        if (b != null && a.size != b.size) throw new IllegalArgumentException("Vec a and b must be of equal size");
-        sort(a, b, c, 0, a.size-1);
-    }
-
-    private static final void sort(Vec a, Vec b, CompareFunc c, int start, int end) {
-        Object tmpa, tmpb = null;
-        if(start >= end) return;
-        if(end-start <= 6) {
-            for(int i=start+1;i<=end;i++) {
-                tmpa = a.store[i];
-                if (b != null) tmpb = b.store[i];
-                int j;
-                for(j=i-1;j>=start;j--) {
-                    if(c.compare(a.store[j],tmpa) <= 0) break;
-                    a.store[j+1] = a.store[j];
-                    if (b != null) b.store[j+1] = b.store[j];
-                }
-                a.store[j+1] = tmpa;
-                if (b != null) b.store[j+1] = tmpb;
-            }
-            return;
-        }
-
-        Object pivot = a.store[end];
-        int lo = start - 1;
-        int hi = end;
-
-        do {
-            while(c.compare(a.store[++lo],pivot) < 0) { }
-            while((hi > lo) && c.compare(a.store[--hi],pivot) > 0) { }
-            swap(a, lo,hi);
-            if (b != null) swap(b, lo,hi);
-        } while(lo < hi);
-
-        swap(a, lo,end);
-        if (b != null) swap(b, lo,end);
-
-        sort(a, b, c, start, lo-1);
-        sort(a, b, c, lo+1, end);
-    }
-
-    private static final void swap(Vec vec, int a, int b) {
-        if(a != b) {
-            Object tmp = vec.store[a];
-            vec.store[a] = vec.store[b];
-            vec.store[b] = tmp;
-        }
-    }
-
-    public static final void sortInts(int[] a, int start, int end) {
-        int tmpa;
-        if(start >= end) return;
-        if(end-start <= 6) {
-            for(int i=start+1;i<=end;i++) {
-                tmpa = a[i];
-                int j;
-                for(j=i-1;j>=start;j--) {
-                    if(a[j] <= tmpa) break;
-                    a[j+1] = a[j];
-                }
-                a[j+1] = tmpa;
-            }
-            return;
-        }
-
-        int pivot = a[end];
-        int lo = start - 1;
-        int hi = end;
-
-        do {
-            while(a[++lo] < pivot) { }
-            while((hi > lo) && a[--hi] > pivot) { }
-            swapInts(a, lo, hi);
-        } while(lo < hi);
-        swapInts(a, lo, end);
-        sortInts(a, start, lo-1);
-        sortInts(a, lo+1, end);
-    }
-
-    private static final void swapInts(int[] vec, int a, int b) {
-        if(a != b) {
-            int tmp = vec[a];
-            vec[a] = vec[b];
-            vec[b] = tmp;
-        }
-    }
-
-
-
-    // just a cut-and-paste copy of Vec with int storage
-    public static class Int {
-        private int[] store;
-        private int size = 0;
-    
-        public Int() { this(10); }
-        public Int(int i) { store = new int[i]; }
-        public Int(int i, int[] store) { size = i; this.store = store; }
-    
-        private void grow() { grow(store.length * 2); }
-        private void grow(int newsize) {
-            int[] newstore = new int[newsize];
-            System.arraycopy(store, 0, newstore, 0, size);
-            store = newstore;
-        }
-
-        public void removeAllElements() {
-            for(int i=0; i<size; i++) store[i] = 0;
-            size = 0;
-        }
-
-        public void toArray(int[] o) {
-            for(int i=0; i<size; i++)
-                o[i] = store[i];
-        }
-    
-        public int[] dump() { int[] o = new int[size]; toArray(o); return o; }
-    
-        public int indexOf(int o) {
-            for(int i=0; i<size; i++)
-                if (o == store[i]) return i;
-        
-            return -1;
-        }
-    
-        public void addElement(int o) {
-            if (size >= store.length - 1) grow();
-            store[size++] = o;
-        }
-
-        public int peek() {
-            return lastElement();
-        }
-
-        public int elementAt(int i) {
-            return store[i];
-        }
-    
-        public int lastElement() {
-            if (size == 0) return 0;
-            return store[size - 1];
-        }
-
-        public void push(int o) { addElement(o); }
-        public int pop() {
-            int ret = lastElement();
-            if (size > 0) store[size--] = 0;
-            return ret;
-        }
-
-        public int size() { return size; }
-
-        public void setSize(int newSize) {
-            if (newSize < 0) throw new RuntimeException("tried to set size to negative value");
-            if (newSize > store.length) grow(newSize * 2);
-            if (newSize < size)
-                for(int i=newSize; i<size; i++)
-                    store[i] = 0;
-            size = newSize;
-        }
-
-        public void copyInto(int[] out) {
-            for(int i=0; i<size; i++)
-                out[i] = store[i];
-        }
-
-        public void fromArray(int[] in) {
-            setSize(in.length);
-            for(int i=0; i<size; i++)
-                store[i] = in[i];
-        }
-
-        public void removeElementAt(int i) {
-            if (i >= size || i < 0) throw new RuntimeException("tried to remove an element outside the vector's limits");
-            for(int j=i; j<size - 1; j++)
-                store[j] = store[j + 1];
-            setSize(size - 1);
-        }
-
-        public void setElementAt(int o, int i) {
-            if (i >= size) setSize(i);
-            store[i] = o;
-        }
-
-        public void removeElement(int o) {
-            int idx = indexOf(o);
-            if (idx != -1) removeElementAt(idx);
-        }
-
-        public void insertElementAt(int o, int at) {
-            if (size == store.length) grow();
-            for(int i=size; i>at; i--)
-                store[i] = store[i-1];
-            store[at] = o;
-            size++;
-        }
-
-        public void sort() { sort(this, null, 0, size-1); }
-
-        public static void sort(Vec.Int a, Vec.Int b) {
-            if (b != null && a.size != b.size) throw new IllegalArgumentException("Vec.Int a and b must be of equal size");
-            sort(a, b, 0, a.size-1);
-        }
-
-        private static final void sort(Vec.Int a, Vec.Int b, int start, int end) {
-            int tmpa, tmpb = 0;
-            if(start >= end) return;
-            if(end-start <= 6) {
-                for(int i=start+1;i<=end;i++) {
-                    tmpa = a.store[i];
-                    if (b != null) tmpb = b.store[i];
-                    int j;
-                    for(j=i-1;j>=start;j--) {
-                        if((a.store[j]-tmpa) <= 0) break;
-                        a.store[j+1] = a.store[j];
-                        if (b != null) b.store[j+1] = b.store[j];
-                    }
-                    a.store[j+1] = tmpa;
-                    if (b != null) b.store[j+1] = tmpb;
-                }
-                return;
-            }
-
-            int pivot = a.store[end];
-            int lo = start - 1;
-            int hi = end;
-
-            do {
-                while((a.store[++lo]-pivot) < 0) { }
-                while((hi > lo) && (a.store[--hi]-pivot) > 0) { }
-                swap(a, lo,hi);
-                if (b != null) swap(b, lo,hi);
-            } while(lo < hi);
-
-            swap(a, lo,end);
-            if (b != null) swap(b, lo,end);
-
-            sort(a, b, start, lo-1);
-            sort(a, b, lo+1, end);
-        }
-
-        private static final void swap(Vec.Int vec, int a, int b) {
-            if(a != b) {
-                int tmp = vec.store[a];
-                vec.store[a] = vec.store[b];
-                vec.store[b] = tmp;
-            }
-        }
-
-        public static final void sortInts(int[] a, int start, int end) {
-            int tmpa;
-            if(start >= end) return;
-            if(end-start <= 6) {
-                for(int i=start+1;i<=end;i++) {
-                    tmpa = a[i];
-                    int j;
-                    for(j=i-1;j>=start;j--) {
-                        if(a[j] <= tmpa) break;
-                        a[j+1] = a[j];
-                    }
-                    a[j+1] = tmpa;
-                }
-                return;
-            }
-
-            int pivot = a[end];
-            int lo = start - 1;
-            int hi = end;
-
-            do {
-                while(a[++lo] < pivot) { }
-                while((hi > lo) && a[--hi] > pivot) { }
-                swapInts(a, lo, hi);
-            } while(lo < hi);
-            swapInts(a, lo, end);
-            sortInts(a, start, lo-1);
-            sortInts(a, lo+1, end);
-        }
-
-        private static final void swapInts(int[] vec, int a, int b) {
-            if(a != b) {
-                int tmp = vec[a];
-                vec[a] = vec[b];
-                vec[b] = tmp;
-            }
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.core/build/java/org/ibex/util/XML.java b/upstream/org.ibex.core/build/java/org/ibex/util/XML.java
deleted file mode 100644 (file)
index d0775c7..0000000
+++ /dev/null
@@ -1,1174 +0,0 @@
-// Copyright (C) 2003 Adam Megacz <adam@ibex.org> all rights reserved.
-//
-// You may modify, copy, and redistribute this code under the terms of
-// the GNU Library Public License version 2.1, with the exception of
-// the portion of clause 6a after the semicolon (aka the "obnoxious
-// relink clause")
-
-package org.ibex.util;
-
-import java.io.Reader;
-import java.io.IOException;
-import java.io.EOFException;
-
-/**
- * An Event-Driving, Non-Validating XML Parser with Namespace support.
- *
- * A subclass can implement the abstract functions for receiving details
- * about an xml file as it is parsed. To initate a parse, use the parse()
- * function. 
- *
- * <h3>Implementation Notes</h3>
- * <p>As the parser traverses into an element, it adds it to the linked list
- * called <tt>elements</tt>. However, <tt>elements</tt> has been pre-filled
- * with instances of the Element inner class. So in the vast majority of
- * cases, the pointer current is moved along one, and the values for the
- * new element are filled into the current object.</p>
- *
- * <p>This parser supports all the unicode ranges required by the XML
- * Specification. However, it is optimised for well-formed ASCII documents.
- * Documents containing unicode Names and Attributes will take much longer
- * to process, and invalid documents (badly formed Names or invalid attributes)
- * will be run through a test on every single unicode character range before 
- * being declared invalid.</p> 
- *
- * <ul>
- *  <li>Each time the buffer offset <tt>off</tt> is moved, the length
- *   <tt>len</tt> must be decreased.</li>
- *  <li>Each time the buffer length is decreased, it must be checked to make
- *   sure it is &gt;0.</li>
- *  <li><i>error</i> is defined as a Validity Constraint Violation and
- *   is recoverable</li>
- *  <li><i>fatal error</i> is defined as a Well-formedness Constraint
- *   Violation and is not recoverable</li>
- * </ul> 
- *
- * @author David Crawshaw 
- * @see <a href="http://w3.org/TR/REC-xml">XML Specification</a> 
- * @see <a href="http://w3.org/TR/REC-xml-names">XML Namespaces</a>
- */
-public abstract class XML
-{
-    /////////////////////////////////////////////////////////////////////////////////////////////
-    // XML Parser
-    /////////////////////////////////////////////////////////////////////////////////////////////
-
-    public static final int BUFFER_SIZE = 255;
-
-    /** static pool of XML.Element instances shared by all XML Parsers. */
-    private static final Queue elements = new Queue(30);
-
-    private static final char[] single_amp  = new char[] { '&'  };
-    private static final char[] single_apos = new char[] { '\'' };
-    private static final char[] single_gt   = new char[] { '>'  };
-    private static final char[] single_lt   = new char[] { '<'  };
-    private static final char[] single_quot = new char[] { '"'  };
-
-    private int line;
-    private int col;
-
-    private Reader in;
-    private char[] buf;
-    private int    off;
-    private int    base;  // base+off == distance into the stream
-    private int    len;
-
-    private Element current;
-
-    // used in readEntity() to process a single character without creating a new array
-    private char[] singlechar = new char[1];
-
-
-    public XML() { this(BUFFER_SIZE); }
-
-    public XML(int bSize) {
-        buf = new char[bSize];
-
-        current = (Element)elements.remove(false);
-        if (current == null) current = new Element();
-    }
-
-    /** Returns the line number at the beginning of the last process call. */
-    public int getLine() { return line; }
-
-    /** Returns the column number at the beginning of the last process call. */
-    public int getCol()  { return col; }
-
-    /** Returns the global file offset at the beginning of the last process call. */
-    public int getGlobalOffset() { return base + off; }
-
-    /**
-     * Parse given input and call the abstract event functions.
-     *
-     * Careful with threading, as this function is not synchronized.
-     */ 
-    public final void parse(Reader reader) throws IOException, Exn {
-        in  = reader;
-        off = len = 0;
-        line = col = 1;
-
-        clear(); // clean up possible mid-way linked-list element
-
-        try {
-            // process the stream
-            while (true) {
-                if (!buffer(1)) {
-                    if (current.qName == null) break;
-                    throw new Exn("reached eof without closing <"+current.qName+"> element", Exn.WFC, getLine(), getCol());
-                }
-
-                if (buf[off] == '<') readTag();
-                readChars(current.qName != null);
-            }
-        } finally { clear(); } // clean up elements
-    }
-
-    /** remove any leftover elements from the linked list and queue them */
-    private final void clear() {
-        for (Element last = current; current.parent != null; ) {
-            current = current.parent;
-            last.clear();
-            elements.append(last);
-        }
-        current.clear();
-    }
-
-    /** reads in a tag. expects <tt>buf[off] == '&#60;'</tt> */
-    private final void readTag() throws IOException, Exn {
-        // Start Tag    '<' Name (S Attribute)* S? '>'
-        boolean starttag  = true;
-
-        // End Tag     '</' Name S? '>'
-        boolean endtag    = false;
-
-        // if (starttag & endtag) then: EmptyElemTag '<' Name (S Attribute)* S? '/>'
-
-        // Position in the name of the ':' namespace prefix
-        int prefix = -1;
-
-        int namelen   = 0;
-
-        col++; off++; len--;
-        if (!buffer(1)) throw new EOFException("Unexpected EOF processing element tag");
-
-        // work out what we can from the beginning of the tag
-        char s = buf[off]; 
-        if (s == '!') {
-            // definitions here don't necessarily conform to xml spec (as DTDs not yet implemented)
-            col++; off++; len--; 
-            if (!buffer(4)) throw new EOFException("Unexpected EOF processing <! element");
-
-            boolean bad = false;
-            switch (buf[off]) {
-                case '-':
-                    if (buf[off+1] != '-') { bad = true; break; }
-                    col += 2; off += 2; len -= 2;
-
-                    // Comment        '<!--'      ((Char - '-') | ('-' (Char - '-')))* '-->'
-                    readChars(false, "-->", false); 
-                    col += 3; off += 3; len -= 3;
-                    break;
-
-                // we don't care about the following definitions
-
-                case 'A':
-                    if (!buffer(7)
-                            || buf[off+1] != 'T' || buf[off+2] != 'T' || buf[off+3] != 'L'
-                            || buf[off+4] != 'I' || buf[off+5] != 'S' || buf[off+6] != 'T') {
-                        bad = true; break;
-                    } 
-                    col += 7; off += 7; len -= 7; 
-
-                    // ATTLIST        '<!ATTLIST'   (Char* - '>') '>'
-                    readChars(false, ">", true); 
-                    col++; off++; len--;
-                    break;
-                case 'D':
-                    if (!buffer(7)
-                            || buf[off+1] != 'O' || buf[off+2] != 'C' || buf[off+3] != 'T'
-                            || buf[off+4] != 'Y' || buf[off+5] != 'P' || buf[off+6] != 'E') {
-                        bad = true; break;
-                    }
-                    col += 7; off += 7; len -= 7;
-
-                    // DTD            '<!DOCTYPE'   (Char* - '>') '>'
-                    readChars(false, ">", true); 
-                    col++; off++; len--;
-                    break; 
-                case 'E':
-                    if (!buffer(7)) {
-                        bad = true;
-                    } else if (buf[off+1] == 'L' && buf[off+2] == 'E' && buf[off+3] == 'M'
-                            && buf[off+4] == 'E' && buf[off+5] == 'N' && buf[off+6] == 'T') {
-                        // ELEMENT        '<!ELEMENT'   (Char* - '>') '>'
-                        readChars(false, ">", true); 
-                        col++; off++; len--;
-
-                    } else if (buf[off+1] == 'N' && buf[off+2] == 'T' && buf[off+3] == 'I'
-                            && buf[off+4] == 'T' && buf[off+5] == 'Y') {
-                        // ENTITY         '<!ENTITY'    (Char* - '>') '>'
-                        readChars(false, ">", true); 
-                        col++; off++; len--;
-
-                    } else {
-                        bad = true;
-                    }
-                    break;
-
-                case 'N':
-                    if (!buffer(8)
-                            || buf[off+1] != 'O' || buf[off+2] != 'T' || buf[off+3] != 'A' || buf[off+4] != 'T'
-                            || buf[off+5] != 'I' || buf[off+6] != 'O' || buf[off+7] != 'N') {
-                        bad = true; break;
-                    }
-                    col += 8; off += 8; len -= 8;
-                    // NOTATION       '<!NOTATION'  (Char* - '>') '>'
-                    readChars(false, ">", true); 
-                    col++; off++; len--;
-
-                    break;
-                default: bad = true;
-            }
-
-            if (bad) throw new Exn("element tag start character is invalid", Exn.MARKUP, getLine(), getCol());
-
-        } else if (s == '?') {
-            // PI (Ignored)   '<?'  (Char* - (Char* '?>' Char*))  '?>'
-            col++; off++; len--;
-            readChars(false, "?>", true);
-            if (!buffer(2)) throw new EOFException("Unexpected EOF at end of Processing Instruction");
-            col += 2; off += 2; len -= 2;
-
-        } else if (s == '[') {
-            if (!buffer(7)
-                    || buf[off+1] != 'C' || buf[off+2] != 'D' || buf[off+3] != 'A'
-                    || buf[off+4] != 'T' || buf[off+5] != 'A' || buf[off+6] != '[') {
-                col++; off--; len++; 
-                // Conditional    '<![' (Char* - (Char* ']]>' Char*)) ']]>'
-                readChars(false, "]]>", false); 
-            } else {
-                col += 7; off += 7; len -=7;
-                // CDATA          '<![CDATA[' (Char* - (Char* ']]>' Char*))        ']]>'
-                readChars(true, "]]>", false);
-            } 
-            col += 3; off += 3; len -= 3;
-        } else {
-            if (s == '/') {
-                // End Tag        '</' Name S? '>'
-                starttag = false; 
-                endtag = true;
-
-                col++; off++; len--;
-                if (!buffer(1)) throw new EOFException("Unexpected EOF processing end tag");
-                s = buf[off];
-            }
-
-            if (!Name(s)) throw new Exn("invalid starting character in element name", Exn.MARKUP, getLine(), getCol()); 
-
-            // find the element name (defined in XML Spec: section 2.3)
-            for (namelen = 0; ; namelen++) {
-                if (!buffer(namelen+1)) throw new EOFException("Unexpected EOF in element tag name");
-
-                s = buf[off+namelen];
-
-                if (S(s) || s == '>') {
-                    break;
-                } else if (s == '/') {
-                    endtag = true;
-                    break;
-                } else if (s == ':' && namelen > 0 && prefix < 1) {
-                    // we have a definition of the prefix range available
-                    prefix = namelen; 
-                } else if (!NameChar(s)) {
-                    throw new Exn("element name contains invalid character", Exn.MARKUP, getLine(), getCol());
-                }
-            }
-
-            // process name (based on calculated region)
-            if (namelen < 1) throw new Exn("element name is null", Exn.MARKUP, getLine(), getCol()); 
-
-            // we have marked out the name region, so turn it into a string and move on
-            String qName = new String(buf, off, namelen);
-
-            col += namelen; off += namelen; len -= namelen;
-
-            if (starttag) {
-                // create the in-memory element representation of this beast
-                // if current.qName == null then this is the root element we're dealing with
-                if (current.qName != null) {
-                    Element next = (Element)elements.remove(false);
-                    if (next == null) next = new Element();
-                    //next.clear(); // TODO: remove as elements now checked as they're added to the queue
-                    next.parent = current;
-                    current = next;
-                }
-
-                current.qName = qName;
-
-                if (prefix > 0) {
-                    current.prefix = current.qName.substring(0, prefix);
-                    current.localName = current.qName.substring(prefix+1);
-                } else {
-                    current.prefix = null;
-                    current.localName = current.qName;
-                }
-
-                // process attributes
-                readWhitespace(); 
-                if (!buffer(1)) throw new EOFException("Unexpected EOF - processing attributes part 1");
-                while (buf[off] != '/' && buf[off] != '>') {
-                    readAttribute();
-                    if (!buffer(1)) throw new EOFException("Unexpected EOF - processing attributes part 2");
-                    readWhitespace();
-                }
-
-                // work out the uri of this element
-                current.uri = current.getUri(current.getPrefix()); 
-                if (current.getUri().equals("") && current.getPrefix() != null)
-                    current.addError(new Exn("undefined prefix '"+current.getPrefix()+"'", Exn.NC, getLine(), getCol()));
-
-            } else {
-                // this is an end-of-element tag
-                if (!qName.equals(current.getQName())) throw new Exn(
-                    "end tag </"+qName+"> does not line up with start tag <"+current.getQName()+">", Exn.WFC, getLine(), getCol()
-                );
-            }
-
-            // deal with whitespace
-            readWhitespace(); 
-
-            // process tag close
-            if (!buffer(1)) throw new EOFException("Unexpected EOF before end of tag"); 
-            if (buf[off] == '/') {
-                endtag = true;
-                off++; len--; col++;
-            }
-            if (!buffer(1)) throw new EOFException("Unexpected EOF before end of endtag"); 
-            if (buf[off] == '>') {
-                off++; len--; col++;
-            } else {
-                throw new Exn("missing '>' character from element '"+qName+"'", Exn.MARKUP, getLine(), getCol());
-            }
-
-            // send element signals
-            if (starttag) startElement(current);
-            if (endtag) {
-                endElement(current);
-
-                // we just closed an element, so remove it from the element 'stack'
-                if (current.getParent() == null) {
-                    // we just finished the root element
-                    current.clear(); 
-                } else {
-                    Element last = current;
-                    current = current.parent;
-                    last.clear();
-                    elements.append(last);
-                }
-            }
-        }
-    }
-
-    /** reads in an attribute of an element. expects Name(buf[off]) */
-    private final void readAttribute() throws IOException, Exn {
-        int ref = 0;
-        int prefix = 0;
-        String n, v, p, u; // attribute name, value, prefix and uri respectively
-        n = v = p = u = null;
-        char s;
-
-        // find the element name (defined in XML Spec: section 2.3)
-        for (ref= 0; ; ref++) {
-            if (!buffer(ref+1)) throw new EOFException("Unexpected EOF in read attribute loop part 1");
-
-            s = buf[off+ref];
-
-            if (s == '=' || S(s)) {
-                break;
-            } else if (s == ':' && ref > 0 && prefix < 1) {
-                // we have a definition of the prefix range available
-                prefix = ref+1;
-            } else if (!NameChar(s)) {
-                throw new Exn("attribute name contains invalid characters", Exn.MARKUP, getLine(), getCol());
-            }
-        }
-
-        // determine prefix and key name
-        if (prefix > 0) {
-            p = new String(buf, off, prefix-1);
-            col += prefix; off += prefix; len -= prefix; ref -= prefix;
-        }
-        n = new String(buf, off, ref);
-        col += ref; off += ref; len -= ref;
-
-        // find name/value divider ('=')
-        readWhitespace();
-        if (!buffer(1)) throw new EOFException("Unexpected EOF before attribute '=' divider");
-        if (buf[off] != '=') throw new Exn("attribute name not followed by '=' sign", Exn.MARKUP, getLine(), getCol());
-
-        col++; off++; len--;
-        readWhitespace();
-
-        if (!buffer(1)) throw new EOFException("Unexpected EOF after attribute '=' divider");
-
-        char wrap;
-        if (buf[off] == '\'' || buf[off] == '"') {
-            wrap = buf[off];
-        } else {
-            throw new Exn("attribute '"+n+"' must have attribute wrapped in ' or \"", Exn.MARKUP, getLine(), getCol());
-        }
-        col++; off++; len--;
-
-        // find the attribute value
-        attval: for (ref = 0; ; ref++) {
-            if (!buffer(ref+1)) throw new EOFException("Unexpected EOF in attribute value");
-
-            if (buf[off+ref] == wrap) {
-                break attval;
-            } else if (buf[off+ref] == '<') {
-                throw new Exn("attribute value for '"+n+"' must not contain '<'", Exn.WFC, getLine(), getCol());
-            } 
-        }
-
-        v = new String(buf, off, ref);
-        col += ref; off += ref; len -= ref;
-
-        // remove end wrapper character
-        col++; off++; len--;
-
-        // process attribute
-        if (p != null && p.equals("xmlns")) {
-            current.addUri(n, v);
-        } else if (n.equals("xmlns")) {
-            if (current.getUri().equals("")) {
-                current.addUri("", v);
-            } else {
-                current.addError(new Exn("default namespace definition repeated", Exn.NC, getLine(), getCol()));
-            }
-        } else {
-            // find attribute uri
-            u = current.getUri(p); 
-            if (p != null && u.equals("")) current.addError(new Exn("undefined attribute prefix '"+p+"'", Exn.NC, getLine(), getCol()));
-
-            // check to see if attribute is a repeat
-            for (int i=0; current.len > i; i++) if (n.equals(current.getAttrKey(i)) && u.equals(current.getAttrUri(i))) throw new Exn(
-                "attribute name '"+n+"' may not appear more than once in the same element tag", Exn.WFC, getLine(), getCol()
-            );
-
-            current.addAttr(n, v, u); 
-        }
-    }
-
-    /** reads an entity and processes out its value. expects buf[off] == '&amp;' */
-    private final void readEntity() throws IOException, Exn {
-        off++; len--;
-        if (!buffer(2)) throw new EOFException("Unexpected EOF reading entity");
-
-        boolean unknown = false;
-        switch (buf[off]) {
-            case '#':
-                off++; len--;
-
-                int radix;
-                if (buf[off] == 'x') { off++; len--; radix = 16; } else { radix = 10; }
-                int c = 0;
-
-                // read in each char, then shift total value to the left and add the extra
-                // style of loop is slightly different from all the others, as this should run a limited number of times 
-                findchar: while (true) {
-                    if (!buffer(1)) throw new EOFException("Unexpected EOF reading entity");
-                    int d = Character.digit(buf[off], radix);
-                    if (d == -1) {
-                        if (buf[off] != ';') throw new Exn("illegal characters in entity reference", Exn.WFC, getLine(), getCol());
-                        off++; len--; col++;
-                        break findchar;
-                    }
-                    c = (c * radix) + d;
-
-                    off++; len--;
-                }
-
-                singlechar[0] = Character.forDigit(c, radix);
-                characters(singlechar, 0, 1);
-                break;
-
-            case 'a':
-                if (buffer(4) && buf[off+1] == 'm' && buf[off+2] == 'p' && buf[off+3] == ';') {
-                    characters(single_amp, 0, 1); // &amp;
-                    off += 4; len -= 4; col++;
-                } else if (buffer(5) && buf[off+1] == 'p' && buf[off+2] == 'o' && buf[off+3] == 's' && buf[off+4] == ';') {
-                    characters(single_apos, 0, 1); // &apos;
-                    off += 5; len -= 5; col++;
-                } else {
-                    unknown = true;
-                }
-                break;
-
-            case 'g':
-                if (buffer(3) && buf[off+1] == 't' && buf[off+2] == ';') {
-                    characters(single_gt, 0, 1); // &gt;
-                    off += 3; len -= 3; col++;
-                } else {
-                    unknown = true;
-                }
-                break;
-
-            case 'l':
-                if (buffer(3) && buf[off+1] == 't' && buf[off+2] == ';') {
-                    characters(single_lt, 0, 1); // &lt;
-                    off += 3; len -= 3; col++;
-                } else {
-                    unknown = true;
-                }
-                break;
-
-            case 'q':
-                if (buffer(5) && buf[off+1] == 'u' && buf[off+2] == 'o' && buf[off+3] == 't' && buf[off+4] == ';') {
-                    characters(single_quot, 0, 1); // &quot;
-                    off += 5; len -= 5; col++;
-                } else {
-                    unknown = true;
-                }
-                break;
-
-            // TODO: check a parser-level Hash of defined entities
-        }
-
-        if (unknown) throw new Exn("unknown entity (<!ENTITY> not supported)", Exn.WFC, getLine(), getCol());
-    }
-
-    /** reads until the passed string is encountered. */
-    private final void readChars(boolean p, String match, boolean entities) throws IOException, Exn {
-        int ref;
-        char[] end = match.toCharArray();
-
-        for (boolean more = true; more;) {
-            if (!buffer(1)) return;
-
-            buf: for (ref = 0; ref < len; ref++) {
-                switch (buf[off+ref]) {
-                    case '\r': // windows or macos9 newline
-                        // normalise and process
-                        buf[off+ref] = '\n'; ref++;
-                        if (p) characters(buf, off, ref);
-                        off += ref; len -= ref; ref = -1;
-                        line++; col = 1;
-
-                        // windows double-char newline; skip the next char
-                        if (!buffer(1)) return;
-                        if (buf[off] == '\n') { off++; len--; }
-                        break;
-
-                    case '\n': // unix newline
-                        ref++;
-                        if (p) characters(buf, off, ref);
-                        off += ref; len -= ref; ref = -1;
-                        line++; col = 1;
-                        break;
-
-                    case '&':  // entity
-                        if (entities) {
-                            if (p) {
-                                if (ref > 0) characters(buf, off, ref);
-                                off += ref; len -= ref; ref = -1;
-                                readEntity();
-                            }
-                            break;
-                        }
-
-                    default:
-                        if (!buffer(ref+end.length)) continue buf;
-                        for (int i=0; end.length > i; i++) if (end[i] != buf[off+ref+i]) continue buf;
-                        more = false;
-                        break buf;
-                }
-            }
-
-            if (p && ref > 0) characters(buf, off, ref);
-            off += ref; len -= ref; col += ref;
-        }
-    }
-
-    /**
-     * reads until a <tt>&#60;</tt> symbol is encountered
-     * @param p If true call the characters(char[],int,int) funciton for the processed characters 
-     */
-    private final void readChars(boolean p) throws IOException, Exn {
-        int ref;
-
-        for (boolean more = true; more;) {
-            if (!buffer(1)) return;
-
-            buf: for (ref = 0; ref < len; ref++) {
-                switch (buf[off+ref]) {
-                    case '\r': // windows or macos9 newline
-                        // normalise and process
-                        buf[off+ref] = '\n'; ref++;
-                        if (p) characters(buf, off, ref);
-                        off += ref; len -= ref; ref = -1;
-                        line++; col = 1;
-
-                        // windows double-char newline; skip the next char
-                        if (!buffer(1)) return;
-                        if (buf[off] == '\n') { off++; len--; }
-                        break;
-
-                    case '\n': // unix newline
-                        ref++;
-                        if (p) characters(buf, off, ref);
-                        off += ref; len -= ref; ref = -1;
-                        line++; col = 1;
-                        break;
-
-                    case '&':  // entity
-                        if (p) {
-                            if (ref > 0) characters(buf, off, ref);
-                            off += ref; len -= ref; ref = -1;
-                            readEntity();
-                        }
-                        break;
-
-                    case '<':  // end of chars section
-                        more = false;
-                        break buf;
-                }
-            }
-
-            if (p && ref > 0) characters(buf, off, ref);
-            off += ref; len -= ref; col += ref;
-        }
-    }
-
-    /** reads until a non-whitespace symbol is encountered */
-    private final void readWhitespace() throws IOException, Exn {
-        int ref;
-
-        for (boolean more = true; more;) {
-            if (!buffer(1)) return;
-
-            buf: for (ref = 0; ref < len; ref++) {
-                switch (buf[off+ref]) {
-                    case '\r': // windows or macos9 newline
-                        // normalise and process
-                        buf[off+ref] = '\n';
-                        whitespace(buf, off, ++ref);
-                        off += ref; len -= ref; ref = -1;
-                        line++; col = 1;
-
-                        // windows double-char newline; skip the next char
-                        if (!buffer(1)) return;
-                        if (buf[off] == '\n') { off++; len--; }
-                        break;
-
-                    case '\n': // unix newline
-                        whitespace(buf, off, ++ref);
-                        off += ref; len -= ref; ref = -1;
-                        line++; col = 1;
-                        break;
-
-                    case ' ':  // space
-                    case '\t': // tab
-                        break;
-
-                    default:   // end of whitespace
-                        more = false;
-                        break buf;
-                }
-            }
-
-            off += ref; len -= ref; col += ref;
-        }
-    }
-
-    /**
-     * attempt to fill the buffer.
-     *
-     * @param min Minimum number of characters to read (even if we have to block to do it).
-     * @return return false if min can't be reached.
-     */
-    private final boolean buffer(int min) throws IOException {
-        if (len > min) return true;
-
-        if (buf.length - (off+len) >= min) {
-            // plenty of space left on the end of the buffer
-        } else if (off >= min) {
-            // moving offset data to start will leave enough free space on the end
-            System.arraycopy(buf, off, buf, 0, len); 
-            base += off;
-            off = 0;
-        } else {
-            // buffer size will have to be increased
-            char[] newbuf = new char[buf.length * 2];
-            System.arraycopy(buf, off, newbuf, 0, len);
-            buf = newbuf;
-            base += off;
-            off = 0;
-        }
-
-        while (min > len) {
-            int newlen = in.read(buf, off+len, buf.length-(off+len));
-            if (newlen < 0) return false; 
-            len += newlen;
-        }
-
-        return true;
-    }
-
-
-    /////////////////////////////////////////////////////////////////////////////////////////////
-    // Abstract SAX-Like Interface
-    /////////////////////////////////////////////////////////////////////////////////////////////
-
-    /**
-     * Called when the start of an element is processed.
-     *
-     * <p><b>DO NOT</b> store a reference to the Element object, as
-     * they are reused by XML Parser.</p>
-     */ 
-    public abstract void startElement(Element e) throws Exn;
-
-    /**
-     * Represents up to a line of character data. 
-     *
-     * <p>Newlines are all normalised to the Unix \n as per the XML Spec,
-     * and a newline will only appear as the last character in the passed
-     * array segment.</p>
-     *
-     * <p>XML.getLine() and XML.getCol() report the position at the
-     * beginning of this character segment, which can be processed in a
-     * line-by-line fashion due to the above newline restriction.</p>
-     */
-    public abstract void characters(char[] ch, int start, int length) throws Exn, IOException;
-
-    /** Represents up to a line of ignorable whitespace. */
-    public abstract void whitespace(char[] ch, int start, int length) throws Exn, IOException;
-
-    /** Represents the end of an Element. */
-    public abstract void endElement(Element e) throws Exn, IOException;
-
-
-    /////////////////////////////////////////////////////////////////////////////////////////////
-    // Inner Classes for Parser Support
-    /////////////////////////////////////////////////////////////////////////////////////////////
-
-    /**
-     * Represents an element in an XML document. Stores a reference to its
-     * parent, forming a one-way linked list.
-     *
-     * Element objects are reused, so client code making use of them must
-     * drop their references after the specific element process function
-     * has returned.
-     */
-    public static final class Element {
-
-        private static final int DEFAULT_ATTR_SIZE = 10;
-
-        protected Element parent = null;
-
-        protected String uri = null;
-        protected String localName = null;
-        protected String qName = null;
-        protected String prefix = null;
-
-        protected Hash urimap = new Hash(3,3);
-
-        protected String[] keys = new String[DEFAULT_ATTR_SIZE];
-        protected String[] vals = new String[DEFAULT_ATTR_SIZE];
-        protected String[] uris = new String[DEFAULT_ATTR_SIZE];
-        protected int len = 0;
-
-        protected Exn[] errors = new Exn[] {};
-
-        /** Parent of current element. */
-        public Element getParent() { return parent; }
-
-        /** Qualified Name of current element.  XML Namespace Spec 14-Jan-1999 [6] */
-        public String getQName() { return qName; }
-
-        /** LocalPart of current element. XML Namespace Spec 14-Jan-1999 [8] */
-        public String getLocalName() { return localName; }
-
-        /** Prefix of current element. Substring of qName. XML Namespace Spec 14-Jan-1999 [7] */
-        public String getPrefix() { return prefix; }
-
-        // HACK
-        public Hash getUriMap() {
-            Hash map = new Hash();
-            for (Element e = this; e != null; e = e.getParent()) {
-                java.util.Enumeration en = e.urimap.keys();
-                while(en.hasMoreElements()) {
-                    String key = (String)en.nextElement();
-                    String val = getUri(key);
-                    map.put(key, val);
-                }
-            }
-            return map;
-        }
-
-        /** URI of current tag. XML Namespace Spec 14-Jan-1999 section 1 */
-        public String getUri() { return getUri(prefix); }
-
-        /** URI of a given prefix. Never returns null, instead gives "". */
-        public String getUri(String p) {
-            String ret = null;
-            for (Element e = this; e != null && ret == null; e = e.getParent()) {
-                ret = (String)e.urimap.get(p == null ? "" : p);
-            }
-            return ret == null ? "" : ret;
-        }
-
-        /** An array of attribute names. */
-        public String getAttrKey(int pos) { return len > pos ? keys[pos] : null; }
-
-        /** An array of attribute values. */
-        public String getAttrVal(int pos) { return len > pos ? vals[pos] : null; }
-
-        /** An array of attribute uris. */
-        public String getAttrUri(int pos) { return len > pos ? uris[pos] : null; }
-
-        /** Current number of attributes in the element. */
-        public int getAttrLen() { return len; }
-
-        /** Poor performance, but easier to use when speed is not a concern */
-        public Hash getAttrHash() {
-            Hash ret = new Hash(getAttrLen() * 2, 3);
-            for(int i=0; i<len; i++)
-                ret.put(getAttrKey(i), getAttrVal(i));
-            return ret;
-        }
-
-        /** Poor performance, but easier to use */
-        public String getAttrVal(String key) {
-            for(int i=0; i<len; i++) if (keys[i].equals(key)) return vals[i];
-            return null;
-        }
-
-        /** An array of non-fatal errors related to this element. */
-        public Exn[] getErrors() { return errors; }
-
-        protected Element() { }
-
-        /** Add (replace if exists in current element) a Namespace prefix/uri map. */
-        public void addUri(String name, String value) {
-            urimap.put(name, value);
-        }
-
-        /** Add an attribute. */
-        protected void addAttr(String key, String val, String uri) {
-            if (len == keys.length) {
-                // increase the size of the attributes arrays
-                String[] newkeys = new String[keys.length*2];
-                String[] newvals = new String[vals.length*2];
-                String[] newuris = new String[uris.length*2];
-                System.arraycopy(keys, 0, newkeys, 0, keys.length);
-                System.arraycopy(vals, 0, newvals, 0, vals.length);
-                System.arraycopy(uris, 0, newuris, 0, uris.length);
-                keys = newkeys; vals = newvals; uris = newuris;
-            }
-
-            keys[len] = key;
-            vals[len] = val;
-            uris[len] = uri;
-            len++;
-        }
-
-        /** Add an error. */
-        protected void addError(Exn e) {
-            // it doesn't really matter about continually expanding the array, as this case is quite rare
-            Exn[] newe = new Exn[errors.length+1];
-            System.arraycopy(errors, 0, newe, 0, errors.length);
-            newe[errors.length] = e;
-            errors = newe;
-        }
-
-        /** Empty out all the data from the Element. */
-        protected void clear() {
-            parent = null;
-            uri = localName = qName = prefix = null;
-            urimap.clear();
-
-            if (keys.length != vals.length || vals.length != uris.length) {
-                keys = new String[DEFAULT_ATTR_SIZE];
-                vals = new String[DEFAULT_ATTR_SIZE];
-                uris = new String[DEFAULT_ATTR_SIZE];
-            } else {
-                for (int i=0; keys.length > i; i++) { keys[i] = null; vals[i] = null; uris[i] = null; };
-            }
-            len = 0;
-
-            errors = new Exn[] {};
-        }
-    }
-
-    /** Parse or Structural Error */
-    public static class Exn extends Exception {
-        /** Violation of Markup restrictions in XML Specification - Fatal Error */
-        public static final int MARKUP = 1;
-
-        /** Well-Formedness Constraint Violation - Fatal Error */
-        public static final int WFC = 2;
-
-        /** Namespace Constraint Violation - Recoverable Error */
-        public static final int NC = 3;
-
-        /** Schema Violation - Fatal Error */
-        public static final int SCHEMA = 4;
-
-        private String error;
-        private int type;
-        private int line;
-        private int col;
-
-        public Exn(String e) { this(e, MARKUP, -1, -1); }
-
-        public Exn(String e, int type, int line, int col) {
-            this.error = e;
-            this.type  = type;
-            this.line  = line;
-            this.col   = col;
-        }
-
-        public int getType() { return this.type; }
-        public int getLine() { return this.line; }
-        public int getCol()  { return this.col;  }
-        public String getMessage() { return this.error + (line >= 0 && col >= 0 ? " at " + line + ":" + col: ""); }
-    }
-
-
-    /////////////////////////////////////////////////////////////////////////////////////////////
-    // Static Support Functions for the XML Specification 
-    /////////////////////////////////////////////////////////////////////////////////////////////
-    // attempt to avoid these functions unless you *expect* the input to fall in the given range.
-
-    /** First Character of Name - XML Specification 1.0 [5] */
-    private static final boolean Name(char c) {
-        return BaseCharAscii(c) || c == '_' || c == ':' || Letter(c);
-    } 
-
-    /** NameChar - XML Specification 1.0 [4] */
-    private static final boolean NameChar(char c) {
-        return BaseCharAscii(c) || c == '.' || c == '-' || c == '_' || c == ':'
-            || Digit(c) || Letter(c) || Extender(c); // TODO: || CombiningChar(c);
-    } 
-
-    /** BaseChar - XMl Specification 1.0 [84] */
-    private static final boolean Letter(char c) {
-        return BaseChar(c) || Ideographic(c);
-    }
-
-    /** Elements of BaseChar that exist in ASCII. */
-    private static final boolean BaseCharAscii(char c) {
-        return (c >= '\u0041' && c <= '\u005A') || (c >= '\u0061' && c <= '\u007A');
-    }
-
-    /** Char - XML Specification 1.0 [2] */
-    private static final boolean Char(char c) {
-        // u000A == r and u000D == n, but the javac compiler can't handle the \ u form
-        return c == '\u0009' || c == '\r' || c == '\n'
-            || (c >= '\u0020' && c <= '\uD7FF')
-            || (c >= '\uE000' && c <= '\uFFFD');
-    }
-
-    /** BaseChar - XML Specification 1.0 [85] */
-    private static final boolean BaseChar(char c) {
-        return  BaseCharAscii(c) || (c >= '\u00C0' && c <= '\u00D6')
-            || (c >= '\u00D8' && c <= '\u00F6') || (c >= '\u00F8' && c <= '\u00FF') || (c >= '\u0100' && c <= '\u0131')
-            || (c >= '\u0134' && c <= '\u013E') || (c >= '\u0141' && c <= '\u0148') || (c >= '\u014A' && c <= '\u017E')
-            || (c >= '\u0180' && c <= '\u01C3') || (c >= '\u01CD' && c <= '\u01F0') || (c >= '\u01F4' && c <= '\u01F5')
-            || (c >= '\u01FA' && c <= '\u0217') || (c >= '\u0250' && c <= '\u02A8') || (c >= '\u02BB' && c <= '\u02C1')
-            || (c == '\u0386')                  || (c >= '\u0388' && c <= '\u038A') || (c == '\u038C')
-            || (c >= '\u038E' && c <= '\u03A1') || (c >= '\u03A3' && c <= '\u03CE') || (c >= '\u03D0' && c <= '\u03D6')
-            || (c == '\u03DA')                  || (c == '\u03DC')                  || (c == '\u03DE')
-            || (c == '\u03E0')
-            || (c >= '\u03E2' && c <= '\u03F3') || (c >= '\u0401' && c <= '\u040C') || (c >= '\u040E' && c <= '\u044F')
-            || (c >= '\u0451' && c <= '\u045C') || (c >= '\u045E' && c <= '\u0481') || (c >= '\u0490' && c <= '\u04C4')
-            || (c >= '\u04C7' && c <= '\u04C8') || (c >= '\u04CB' && c <= '\u04CC') || (c >= '\u04D0' && c <= '\u04EB')
-            || (c >= '\u04EE' && c <= '\u04F5') || (c >= '\u04F8' && c <= '\u04F9') || (c >= '\u0531' && c <= '\u0556')
-            || (c == '\u0559')
-            || (c >= '\u0561' && c <= '\u0586') || (c >= '\u05D0' && c <= '\u05EA') || (c >= '\u05F0' && c <= '\u05F2')
-            || (c >= '\u0621' && c <= '\u063A') || (c >= '\u0641' && c <= '\u064A') || (c >= '\u0671' && c <= '\u06B7')
-            || (c >= '\u06BA' && c <= '\u06BE') || (c >= '\u06C0' && c <= '\u06CE') || (c >= '\u06D0' && c <= '\u06D3')
-            || (c == '\u06D5')
-            || (c >= '\u06E5' && c <= '\u06E6') || (c >= '\u0905' && c <= '\u0939')
-            || (c == '\u093D')
-            || (c >= '\u0958' && c <= '\u0961') || (c >= '\u0985' && c <= '\u098C') || (c >= '\u098F' && c <= '\u0990')
-            || (c >= '\u0993' && c <= '\u09A8') || (c >= '\u09AA' && c <= '\u09B0')
-            || (c == '\u09B2')
-            || (c >= '\u09B6' && c <= '\u09B9') || (c >= '\u09DF' && c <= '\u09E1') || (c >= '\u09F0' && c <= '\u09F1')
-            || (c >= '\u0A05' && c <= '\u0A0A') || (c >= '\u0A0F' && c <= '\u0A10') || (c >= '\u0A13' && c <= '\u0A28')
-            || (c >= '\u0A2A' && c <= '\u0A30') || (c >= '\u0A32' && c <= '\u0A33') || (c >= '\u0A35' && c <= '\u0A36')
-            || (c >= '\u0A38' && c <= '\u0A39') || (c >= '\u0A59' && c <= '\u0A5C')
-            || (c == '\u0A5E')
-            || (c >= '\u0A72' && c <= '\u0A74') || (c >= '\u0A85' && c <= '\u0A8B')
-            || (c == '\u0A8D')
-            || (c >= '\u0A8F' && c <= '\u0A91') || (c >= '\u0A93' && c <= '\u0AA8') || (c >= '\u0AAA' && c <= '\u0AB0') 
-            || (c >= '\u0AB2' && c <= '\u0AB3') || (c >= '\u0AB5' && c <= '\u0AB9') 
-            || (c == '\u0ABD') 
-            || (c == '\u0AE0') 
-            || (c >= '\u0B05' && c <= '\u0B0C') || (c >= '\u0B0F' && c <= '\u0B10') || (c >= '\u0B13' && c <= '\u0B28') 
-            || (c >= '\u0B2A' && c <= '\u0B30') || (c >= '\u0B32' && c <= '\u0B33') || (c >= '\u0B36' && c <= '\u0B39') 
-            || (c == '\u0B3D') 
-            || (c >= '\u0B5C' && c <= '\u0B5D') || (c >= '\u0B5F' && c <= '\u0B61') || (c >= '\u0B85' && c <= '\u0B8A') 
-            || (c >= '\u0B8E' && c <= '\u0B90') || (c >= '\u0B92' && c <= '\u0B95') || (c >= '\u0B99' && c <= '\u0B9A') 
-            || (c == '\u0B9C') 
-            || (c >= '\u0B9E' && c <= '\u0B9F') || (c >= '\u0BA3' && c <= '\u0BA4') || (c >= '\u0BA8' && c <= '\u0BAA') 
-            || (c >= '\u0BAE' && c <= '\u0BB5') || (c >= '\u0BB7' && c <= '\u0BB9') || (c >= '\u0C05' && c <= '\u0C0C') 
-            || (c >= '\u0C0E' && c <= '\u0C10') || (c >= '\u0C12' && c <= '\u0C28') || (c >= '\u0C2A' && c <= '\u0C33') 
-            || (c >= '\u0C35' && c <= '\u0C39') || (c >= '\u0C60' && c <= '\u0C61') || (c >= '\u0C85' && c <= '\u0C8C') 
-            || (c >= '\u0C8E' && c <= '\u0C90') || (c >= '\u0C92' && c <= '\u0CA8') || (c >= '\u0CAA' && c <= '\u0CB3') 
-            || (c >= '\u0CB5' && c <= '\u0CB9') 
-            || (c == '\u0CDE') 
-            || (c >= '\u0CE0' && c <= '\u0CE1') || (c >= '\u0D05' && c <= '\u0D0C') || (c >= '\u0D0E' && c <= '\u0D10') 
-            || (c >= '\u0D12' && c <= '\u0D28') || (c >= '\u0D2A' && c <= '\u0D39') || (c >= '\u0D60' && c <= '\u0D61') 
-            || (c >= '\u0E01' && c <= '\u0E2E') 
-            || (c == '\u0E30') 
-            || (c >= '\u0E32' && c <= '\u0E33') || (c >= '\u0E40' && c <= '\u0E45') || (c >= '\u0E81' && c <= '\u0E82') 
-            || (c == '\u0E84') 
-            || (c >= '\u0E87' && c <= '\u0E88') 
-            || (c == '\u0E8A') 
-            || (c == '\u0E8D') 
-            || (c >= '\u0E94' && c <= '\u0E97') || (c >= '\u0E99' && c <= '\u0E9F') || (c >= '\u0EA1' && c <= '\u0EA3') 
-            || (c == '\u0EA5') 
-            || (c == '\u0EA7') 
-            || (c >= '\u0EAA' && c <= '\u0EAB') || (c >= '\u0EAD' && c <= '\u0EAE') 
-            || (c == '\u0EB0') 
-            || (c >= '\u0EB2' && c <= '\u0EB3') 
-            || (c == '\u0EBD') 
-            || (c >= '\u0EC0' && c <= '\u0EC4') || (c >= '\u0F40' && c <= '\u0F47') || (c >= '\u0F49' && c <= '\u0F69') 
-            || (c >= '\u10A0' && c <= '\u10C5') || (c >= '\u10D0' && c <= '\u10F6') 
-            || (c == '\u1100') 
-            || (c >= '\u1102' && c <= '\u1103') || (c >= '\u1105' && c <= '\u1107') 
-            || (c == '\u1109') 
-            || (c >= '\u110B' && c <= '\u110C') || (c >= '\u110E' && c <= '\u1112') 
-            || (c == '\u113C') 
-            || (c == '\u113E') 
-            || (c == '\u1140') 
-            || (c == '\u114C') 
-            || (c == '\u114E') 
-            || (c == '\u1150') 
-            || (c >= '\u1154' && c <= '\u1155') 
-            || (c == '\u1159') 
-            || (c >= '\u115F' && c <= '\u1161') 
-            || (c == '\u1163') 
-            || (c == '\u1165') 
-            || (c == '\u1167') 
-            || (c == '\u1169') 
-            || (c >= '\u116D' && c <= '\u116E') || (c >= '\u1172' && c <= '\u1173') 
-            || (c == '\u1175') 
-            || (c == '\u119E') 
-            || (c == '\u11A8') 
-            || (c == '\u11AB') 
-            || (c >= '\u11AE' && c <= '\u11AF') || (c >= '\u11B7' && c <= '\u11B8') 
-            || (c == '\u11BA') 
-            || (c >= '\u11BC' && c <= '\u11C2') 
-            || (c == '\u11EB') 
-            || (c == '\u11F0') 
-            || (c == '\u11F9') 
-            || (c >= '\u1E00' && c <= '\u1E9B') || (c >= '\u1EA0' && c <= '\u1EF9') || (c >= '\u1F00' && c <= '\u1F15') 
-            || (c >= '\u1F18' && c <= '\u1F1D') || (c >= '\u1F20' && c <= '\u1F45') || (c >= '\u1F48' && c <= '\u1F4D') 
-            || (c >= '\u1F50' && c <= '\u1F57') 
-            || (c == '\u1F59') 
-            || (c == '\u1F5B') 
-            || (c == '\u1F5D') 
-            || (c >= '\u1F5F' && c <= '\u1F7D') || (c >= '\u1F80' && c <= '\u1FB4') || (c >= '\u1FB6' && c <= '\u1FBC') 
-            || (c == '\u1FBE') 
-            || (c >= '\u1FC2' && c <= '\u1FC4') || (c >= '\u1FC6' && c <= '\u1FCC') || (c >= '\u1FD0' && c <= '\u1FD3') 
-            || (c >= '\u1FD6' && c <= '\u1FDB') || (c >= '\u1FE0' && c <= '\u1FEC') || (c >= '\u1FF2' && c <= '\u1FF4') 
-            || (c >= '\u1FF6' && c <= '\u1FFC') 
-            || (c == '\u2126') 
-            || (c >= '\u212A' && c <= '\u212B') 
-            || (c == '\u212E') 
-            || (c >= '\u2180' && c <= '\u2182') || (c >= '\u3041' && c <= '\u3094') || (c >= '\u30A1' && c <= '\u30FA') 
-            || (c >= '\u3105' && c <= '\u312C') || (c >= '\uAC00' && c <= '\uD7A3');
-    }
-
-    /** BaseChar - XMl Specification 1.0 [86] */
-    private static final boolean Ideographic(char c) {
-        return (c >= '\u4E00' && c <= '\u9FA5') || c == '\u3007' || (c >= '\u3021' && c <= '\u3029');
-    }
-    /** CombiningChar - XMl Specification 1.0 [87] */
-    /*private static final boolean CombiningChar(char c) {
-        return (c >= '\u0300' && c <= '\u0345')
-            || (c >= '\u0360' && c <= '\u0361') || (c >= '\u0483' && c <= '\u0486') || (c >= '\u0591' && c <= '\u05A1') 
-            || (c >= '\u05A3' && c <= '\u05B9') || (c >= '\u05BB' && c <= '\u05BD') 
-            || (c == '\u05BF') 
-            || (c >= '\u05C1' && c <= '\u05C2') 
-            || (c == '\u05C4') 
-            || (c >= '\u064B' && c <= '\u0652') 
-            || (c == '\u0670') 
-            || (c >= '\u06D6' && c <= '\u06DC') || (c >= '\u06DD' && c <= '\u06DF') || (c >= '\u06E0' && c <= '\u06E4') 
-            || (c >= '\u06E7' && c <= '\u06E8') || (c >= '\u06EA' && c <= '\u06ED') || (c >= '\u0901' && c <= '\u0903') 
-            || (c == '\u093C') 
-            || (c >= '\u093E' && c <= '\u094C') 
-            || (c == '\u094D') 
-            || (c >= '\u0951' && c <= '\u0954') || (c >= '\u0962' && c <= '\u0963') || (c >= '\u0981' && c <= '\u0983') 
-            || (c == '\u09BC') 
-            || (c == '\u09BE') 
-            || (c == '\u09BF') 
-            || (c >= '\u09C0' && c <= '\u09C4') || (c >= '\u09C7' && c <= '\u09C8') || (c >= '\u09CB' && c <= '\u09CD') 
-            || (c == '\u09D7') 
-            || (c >= '\u09E2' && c <= '\u09E3') 
-            || (c == '\u0A02') 
-            || (c == '\u0A3C') 
-            || (c == '\u0A3E') 
-            || (c == '\u0A3F') 
-            || (c >= '\u0A40' && c <= '\u0A42') || (c >= '\u0A47' && c <= '\u0A48') || (c >= '\u0A4B' && c <= '\u0A4D') 
-            || (c >= '\u0A70' && c <= '\u0A71') || (c >= '\u0A81' && c <= '\u0A83') 
-            || (c == '\u0ABC') 
-            || (c >= '\u0ABE' && c <= '\u0AC5') || (c >= '\u0AC7' && c <= '\u0AC9') || (c >= '\u0ACB' && c <= '\u0ACD') 
-            || (c >= '\u0B01' && c <= '\u0B03') 
-            || (c == '\u0B3C') 
-            || (c >= '\u0B3E' && c <= '\u0B43') || (c >= '\u0B47' && c <= '\u0B48') || (c >= '\u0B4B' && c <= '\u0B4D') 
-            || (c >= '\u0B56' && c <= '\u0B57') || (c >= '\u0B82' && c <= '\u0B83') || (c >= '\u0BBE' && c <= '\u0BC2') 
-            || (c >= '\u0BC6' && c <= '\u0BC8') || (c >= '\u0BCA' && c <= '\u0BCD') 
-            || (c == '\u0BD7') 
-            || (c >= '\u0C01' && c <= '\u0C03') || (c >= '\u0C3E' && c <= '\u0C44') || (c >= '\u0C46' && c <= '\u0C48') 
-            || (c >= '\u0C4A' && c <= '\u0C4D') || (c >= '\u0C55' && c <= '\u0C56') || (c >= '\u0C82' && c <= '\u0C83') 
-            || (c >= '\u0CBE' && c <= '\u0CC4') || (c >= '\u0CC6' && c <= '\u0CC8') || (c >= '\u0CCA' && c <= '\u0CCD') 
-            || (c >= '\u0CD5' && c <= '\u0CD6') || (c >= '\u0D02' && c <= '\u0D03') || (c >= '\u0D3E' && c <= '\u0D43') 
-            || (c >= '\u0D46' && c <= '\u0D48') || (c >= '\u0D4A' && c <= '\u0D4D') 
-            || (c == '\u0D57') 
-            || (c == '\u0E31') 
-            || (c >= '\u0E34' && c <= '\u0E3A') || (c >= '\u0E47' && c <= '\u0E4E') 
-            || (c == '\u0EB1') 
-            || (c >= '\u0EB4' && c <= '\u0EB9') || (c >= '\u0EBB' && c <= '\u0EBC') || (c >= '\u0EC8' && c <= '\u0ECD') 
-            || (c >= '\u0F18' && c <= '\u0F19') 
-            || (c == '\u0F35') 
-            || (c == '\u0F37') 
-            || (c == '\u0F39') 
-            || (c == '\u0F3E') 
-            || (c == '\u0F3F') 
-            || (c >= '\u0F71' && c <= '\u0F84') || (c >= '\u0F86' && c <= '\u0F8B') || (c >= '\u0F90' && c <= '\u0F95') 
-            || (c == '\u0F97') 
-            || (c >= '\u0F99' && c <= '\u0FAD') || (c >= '\u0FB1' && c <= '\u0FB7') 
-            || (c == '\u0FB9') 
-            || (c >= '\u20D0' && c <= '\u20DC') 
-            || (c == '\u20E1') 
-            || (c >= '\u302A' && c <= '\u302F') 
-            || (c == '\u3099') 
-            || (c == '\u309A');
-    }*/
-
-    /** Digit - XMl Specification 1.0 [88] */
-    private static final boolean Digit(char c) {
-        return (c >= '\u0030' && c <= '\u0039') || (c >= '\u0660' && c <= '\u0669') || (c >= '\u06F0' && c <= '\u06F9')
-            || (c >= '\u0966' && c <= '\u096F') || (c >= '\u09E6' && c <= '\u09EF') || (c >= '\u0A66' && c <= '\u0A6F')
-            || (c >= '\u0AE6' && c <= '\u0AEF') || (c >= '\u0B66' && c <= '\u0B6F') || (c >= '\u0BE7' && c <= '\u0BEF')
-            || (c >= '\u0C66' && c <= '\u0C6F') || (c >= '\u0CE6' && c <= '\u0CEF') || (c >= '\u0D66' && c <= '\u0D6F')
-            || (c >= '\u0E50' && c <= '\u0E59') || (c >= '\u0ED0' && c <= '\u0ED9') || (c >= '\u0F20' && c <= '\u0F29');
-    }
-
-    /** Extender - XMl Specification 1.0 [89] */
-    private static final boolean Extender(char c) {
-        return c == '\u00B7' || c == '\u02D0' || c == '\u02D1' || c == '\u0387'
-            || c == '\u0640' || c == '\u0E46' || c == '\u0EC6' || c == '\u3005'
-            || (c >= '\u3031' && c <= '\u3035') || (c >= '\u309D' && c <= '\u309E') || (c >= '\u30FC' && c <= '\u30FE');
-    }
-
-    /** Whitespace - XML Specification 1.0 [3] */
-    private static final boolean S(char c) {
-        return c == '\u0020' || c == '\u0009' || c == '\r' || c == '\n';
-    }
-}
diff --git a/upstream/org.ibex.core/next.build b/upstream/org.ibex.core/next.build
deleted file mode 100644 (file)
index 12d92eb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-07F4
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/COPYING b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/COPYING
deleted file mode 100644 (file)
index eeb586b..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/COPYING.LIB b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/COPYING.LIB
deleted file mode 100644 (file)
index b1e3f5a..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/README b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/README
deleted file mode 100644 (file)
index 8dbba6f..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-gnu.regexp README
------------------
-
-This is open source software distributed under the terms of the GNU
-Lesser General Public License.  See the COPYING.LIB file for details.
-Some included utilities are distributed under the terms of the GNU
-General Public License, a copy of which is included in the file COPYING.
-
-INSTALLING
-
-Copy the gnu.regexp jar file (located in the 'lib' directory)
-to your usual installation directory for Java archives.
-
-To use gnu.regexp, you will need to include it in your classpath
-setting.  Typically this is done by adding an entry to your CLASSPATH
-variable setting with the full path to the JAR file, e.g.
-  csh:  % setenv CLASSPATH ${CLASSPATH}:/usr/java/lib/gnu-regexp-1.1.x.jar
- bash:  % export CLASSPATH=${CLASSPATH}:/usr/java/lib/gnu-regexp-1.1.x.jar
-  DOS:  > set CLASSPATH %CLASSPATH%;C:\Java\lib\gnu-regexp-1.1.x.jar
-Various shells and operating systems may have slightly different methods.
-Consult your Java virtual machine documentation for details.  You may also
-specify the -classpath option to the java executable, e.g.
-compile: % javac -classpath /usr/java/lib/gnu-regexp-1.1.x.jar MyClass.java
-execute: % java -classpath /usr/java/lib/gnu-regexp-1.1.x.jar MyClass
-
-DOCUMENTATION
-
-HTML documentation is provided in the 'docs' directory.  This is basically
-a snapshot of the official gnu.regexp web site (see below for URL).  The
-documentation files are:
- docs/index.html -- general package information
- docs/changes.html -- change history
- docs/credits.html -- credits and contributors
- docs/faq.html -- frequently asked questions
- docs/syntax.html -- supported/unsupported syntax and usage notes
- docs/reapplet.html -- demo applet HTML wrapper
- docs/api/*.html -- javadoc generated info
-
-For additional help, you can try emailing <help-java-regexp@gnu.org>.
-
-UTILITIES
-
-gnu.regexp comes with a number of simple utility programs intended to test
-and demonstrate its features.  These are not compiled into the Java archive
-file, but can be found in the 'src/gnu/regexp/util' directory.  To run the
-Grep and Egrep programs, you'll need to install the gnu.getopt package,
-available at http://www.urbanophile.com/~arenn/hacking/download.html, and put
-those class files in your classpath as well.  
-
-HACKING
-
-You are free to fold, spindle, mutilate and modify this library,
-provided you follow the terms outlined in COPYING.LIB.  The gnu.regexp
-project team gratefully accepts any bug fixes or enhancements you may
-come up with (see the TODO file if you're in need of some ideas). A
-few parameters at the top of the Makefile in the 'src' directory
-need to be edited to match your local system setup.
-
-BUG REPORTS
-
-Send bug reports to <bug-java-regexp@gnu.org>, or join the gnu.regexp
-mailing list by sending a "subscribe" message to
-<regexp-request@cacas.org>.  It helps if you can send a code sample
-showing the regular expression you were using and how you were using
-it.
-
-LATEST VERSION
-
-You can always obtain info about the latest version of gnu.regexp at
-http://www.cacas.org/java/gnu/regexp/.  New versions are also announced on
-the regexp mailing list (see above).
-
-Thanks!
-
-Wes Biggs <wes@cacas.org>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/TODO b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/TODO
deleted file mode 100644 (file)
index 863801a..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-gnu.regexp TODO
----------------
-These are items that have yet to be implemented or are part of the
-general wish list for gnu.regexp.  You can contribute to this program
-and get your name permanently embedded in the distribution if you care 
-to take on any of these tasks.  See the contact info in the README.
-
-Bugs / Problems with the engine:
-
- Using a ')' in a character class which is within a () grouping
-triggers an REException while parsing.  Workaround is to put a backslash
-in front of the literal ')'.
- The leftmost longest rule is not strictly adhered to.  For example,
-the expression ".*?z?", given input "xyz", should match the whole string,
-not the empty string.
-
-Missing operators:
-
- [.symbol.]  -- collating symbol (POSIX)
- [=class=]  -- equivalence class (POSIX)
-
-I18n support:
-
- Some POSIX char classes ([:alpha:]) are locale sensitive, others need work
- Ranges (e.g. [a-z]) should be locale sensitive
- Should use collation elements, not chars, for things like Spanish "ll"
- REG_ICASE is not very friendly with Cyrillic and other locales.
- Messages used for exceptions should be localizable.
-
-Performance:
-
- Engine speed needs some major work.
-
-Miscellaneous/Requests for Enhancements:
-
- "Free software needs free manuals" -- you heard the man...
-
- Some features have been added to Perl between 5.0 and 5.6.  Should the
-PERL5 syntax support these, or should a new syntax be added?  Which should
-be the default?
-
- There could be a flag to enforce strict POSIX leftmost-longest matching.
-
- gnu.regexp.util.Tests should be fleshed out, or perhaps changed to use JUnit.
-
- It might make sense for getMatchEnumeration() to optionally return matches
-in reverse order, so that the indices were valid all the way through,
-even if you were doing text replacement on the way.
-
- Support J2ME CLDC limited APIs as optional target:
-Should be straightforward, but need to avoid use of
-REFilter(InputStream|Reader) classes, as well as all references to
-java.io.Serializable.  RESyntax needs to replace java.util.BitSet with
-a home-grown version.  Other than that, it should work.  May want to
-package separately (e.g. gnu.regexp-1.0.8-j2me-cldc.jar).
-
- Add support for named subgroups: "(?P<name>...)" (match) and "(?P=name)"
-(recall, like \n).  Add the ability to get at an enumeration of names.
-
- Support associative-array style interface that allows users to define
-their own substitution behavior on matches.  Perhaps a Substitutor interface
-with String substitute(REMatch match), and then RE.substituteAll(input,
-Substitutor) variations.
-
- Support excluded subrange syntax as in Unicode recommendations, e.g. 
-"[a-z-[m-p]]" being a through z except for m through p.
-
- Add a split() method.
-
- Provide a build.xml file for Ant.
\ No newline at end of file
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/allclasses-frame.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/allclasses-frame.html
deleted file mode 100644 (file)
index 5bbc3ac..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-All Classes
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="gnu/regexp/CharIndexed.html" TARGET="classFrame"><I>CharIndexed</I></A>
-<BR>
-<A HREF="gnu/regexp/util/Egrep.html" TARGET="classFrame">Egrep</A>
-<BR>
-<A HREF="gnu/regexp/util/Grep.html" TARGET="classFrame">Grep</A>
-<BR>
-<A HREF="gnu/regexp/RE.html" TARGET="classFrame">RE</A>
-<BR>
-<A HREF="gnu/regexp/util/REApplet.html" TARGET="classFrame">REApplet</A>
-<BR>
-<A HREF="gnu/regexp/REException.html" TARGET="classFrame">REException</A>
-<BR>
-<A HREF="gnu/regexp/REFilterInputStream.html" TARGET="classFrame">REFilterInputStream</A>
-<BR>
-<A HREF="gnu/regexp/REFilterReader.html" TARGET="classFrame">REFilterReader</A>
-<BR>
-<A HREF="gnu/regexp/REMatch.html" TARGET="classFrame">REMatch</A>
-<BR>
-<A HREF="gnu/regexp/REMatchEnumeration.html" TARGET="classFrame">REMatchEnumeration</A>
-<BR>
-<A HREF="gnu/regexp/RESyntax.html" TARGET="classFrame">RESyntax</A>
-<BR>
-<A HREF="gnu/regexp/util/RETest.html" TARGET="classFrame">RETest</A>
-<BR>
-<A HREF="gnu/regexp/util/Tests.html" TARGET="classFrame">Tests</A>
-<BR>
-<A HREF="gnu/regexp/UncheckedRE.html" TARGET="classFrame">UncheckedRE</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/deprecated-list.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/deprecated-list.html
deleted file mode 100644 (file)
index 4d32694..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Deprecated List
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="deprecated-list.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Deprecated API</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Deprecated Classes</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="gnu/regexp/REFilterInputStream.html">gnu.regexp.REFilterInputStream</A>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This class cannot properly handle all character
-             encodings.  For proper handling, use the REFilterReader
-             class instead.</I>&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Deprecated Methods</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="gnu/regexp/REMatch.html#getSubEndIndex(int)">gnu.regexp.REMatch.getSubEndIndex(int)</A>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Use getEndIndex(int) instead</I>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="gnu/regexp/REMatch.html#getSubStartIndex(int)">gnu.regexp.REMatch.getSubStartIndex(int)</A>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Use getStartIndex(int) instead.</I>&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="deprecated-list.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/CharIndexed.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/CharIndexed.html
deleted file mode 100644 (file)
index f51d5c7..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Interface  CharIndexed
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharIndexed.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Interface  CharIndexed</H2>
-<HR>
-<DL>
-<DT>public interface <B>CharIndexed</B></DL>
-
-<P>
-Defines the interface used internally so that different types of source
- text can be accessed in the same way.  Built-in concrete classes provide
- support for String, StringBuffer, InputStream and char[] types.
- A class that is CharIndexed supports the notion of a cursor within a
- block of text.  The cursor must be able to be advanced via the move()
- method.  The charAt() method returns the character at the cursor position
- plus a given offset.
-<P>
-<DL>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/CharIndexed.html#OUT_OF_BOUNDS">OUT_OF_BOUNDS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Defines a constant (0xFFFF was somewhat arbitrarily chosen)
- that can be returned by the charAt() function indicating that
- the specified index is out of range.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/CharIndexed.html#charAt(int)">charAt</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the character at the given offset past the current cursor
- position in the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/CharIndexed.html#isValid()">isValid</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the most recent move() operation placed the cursor
- position at a valid position in the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/CharIndexed.html#move(int)">move</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shifts the input buffer by a given number of positions.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="OUT_OF_BOUNDS"><!-- --></A><H3>
-OUT_OF_BOUNDS</H3>
-<PRE>
-public static final char <B>OUT_OF_BOUNDS</B></PRE>
-<DL>
-<DD>Defines a constant (0xFFFF was somewhat arbitrarily chosen)
- that can be returned by the charAt() function indicating that
- the specified index is out of range.</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="charAt(int)"><!-- --></A><H3>
-charAt</H3>
-<PRE>
-public char <B>charAt</B>(int&nbsp;index)</PRE>
-<DL>
-<DD>Returns the character at the given offset past the current cursor
- position in the input.  The index of the current position is zero.
- It is possible for this method to be called with a negative index.
- This happens when using the '^' operator in multiline matching mode
- or the '\b' or '\<' word boundary operators.  In any case, the lower
- bound is currently fixed at -2 (for '^' with a two-character newline).<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - the offset position in the character field to examine<DT><B>Returns:</B><DD>the character at the specified index, or the OUT_OF_BOUNDS
-   character defined by this interface.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="move(int)"><!-- --></A><H3>
-move</H3>
-<PRE>
-public boolean <B>move</B>(int&nbsp;index)</PRE>
-<DL>
-<DD>Shifts the input buffer by a given number of positions.  Returns
- true if the new cursor position is valid.</DL>
-<HR>
-
-<A NAME="isValid()"><!-- --></A><H3>
-isValid</H3>
-<PRE>
-public boolean <B>isValid</B>()</PRE>
-<DL>
-<DD>Returns true if the most recent move() operation placed the cursor
- position at a valid position in the input.</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharIndexed.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/RE.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/RE.html
deleted file mode 100644 (file)
index cf8aac6..0000000
+++ /dev/null
@@ -1,1038 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class  RE
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REFilterInputStream.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="RE.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  RE</H2>
-<PRE>
-java.lang.Object
-  |
-  +--gnu.regexp.REToken
-        |
-        +--<B>gnu.regexp.RE</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../gnu/regexp/UncheckedRE.html">UncheckedRE</A></DD>
-</DL>
-<HR>
-<DL>
-<DT>public class <B>RE</B><DT>extends gnu.regexp.REToken</DL>
-
-<P>
-RE provides the user interface for compiling and matching regular
- expressions.
- <P>
- A regular expression object (class RE) is compiled by constructing it
- from a String, StringBuffer or character array, with optional 
- compilation flags (below)
- and an optional syntax specification (see RESyntax; if not specified,
- <code>RESyntax.RE_SYNTAX_PERL5</code> is used).
- <P>
- Various methods attempt to match input text against a compiled
- regular expression.  These methods are:
- <LI><code>isMatch</code>: returns true if the input text in its entirety
- matches the regular expression pattern.
- <LI><code>getMatch</code>: returns the first match found in the input text,
- or null if no match is found.
- <LI><code>getAllMatches</code>: returns an array of all non-overlapping 
- matches found in the input text.  If no matches are found, the array is
- zero-length.
- <LI><code>substitute</code>: substitute the first occurence of the pattern
- in the input text with a replacement string (which may include
- metacharacters $0-$9, see REMatch.substituteInto).
- <LI><code>substituteAll</code>: same as above, but repeat for each match
- before returning.
- <LI><code>getMatchEnumeration</code>: returns an REMatchEnumeration object
- that allows iteration over the matches (see REMatchEnumeration for some
- reasons why you may want to do this instead of using <code>getAllMatches</code>.
- <P>
-
- These methods all have similar argument lists.  The input can be a
- String, a character array, a StringBuffer, a Reader or an
- InputStream of some sort.  Note that when using a Reader or
- InputStream, the stream read position cannot be guaranteed after
- attempting a match (this is not a bug, but a consequence of the way
- regular expressions work).  Using an REMatchEnumeration can
- eliminate most positioning problems.
-
- <P>
-
- The optional index argument specifies the offset from the beginning
- of the text at which the search should start (see the descriptions
- of some of the execution flags for how this can affect positional
- pattern operators).  For a Reader or InputStream, this means an
- offset from the current read position, so subsequent calls with the
- same index argument on a Reader or an InputStream will not
- necessarily access the same position on the stream, whereas
- repeated searches at a given index in a fixed string will return
- consistent results.
-
- <P>
- You can optionally affect the execution environment by using a
- combination of execution flags (constants listed below).
- <P>
- All operations on a regular expression are performed in a
- thread-safe manner.
-<P>
-<DL>
-<DT><B>Version: </B><DD>1.1.4-dev, to be released</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../serialized-form.html#gnu.regexp.RE">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_ANCHORINDEX">REG_ANCHORINDEX</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Execution flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_DOT_NEWLINE">REG_DOT_NEWLINE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compilation flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_ICASE">REG_ICASE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compilation flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_MULTILINE">REG_MULTILINE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compilation flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_NO_INTERPOLATE">REG_NO_INTERPOLATE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Execution flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_NOTBOL">REG_NOTBOL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Execution flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#REG_NOTEOL">REG_NOTEOL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Execution flag.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#RE(java.lang.Object)">RE</A></B>(java.lang.Object&nbsp;pattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a regular expression pattern buffer without any compilation
- flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#RE(java.lang.Object, int)">RE</A></B>(java.lang.Object&nbsp;pattern,
-   int&nbsp;cflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a regular expression pattern buffer using the specified
- compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#RE(java.lang.Object, int, gnu.regexp.RESyntax)">RE</A></B>(java.lang.Object&nbsp;pattern,
-   int&nbsp;cflags,
-   <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;syntax)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a regular expression pattern buffer using the specified
- compilation flags and regular expression syntax.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getAllMatches(java.lang.Object)">getAllMatches</A></B>(java.lang.Object&nbsp;input)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of all matches found in the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getAllMatches(java.lang.Object, int)">getAllMatches</A></B>(java.lang.Object&nbsp;input,
-              int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of all matches found in the input,
- beginning at the specified index position.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getAllMatches(java.lang.Object, int, int)">getAllMatches</A></B>(java.lang.Object&nbsp;input,
-              int&nbsp;index,
-              int&nbsp;eflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of all matches found in the input string,
- beginning at the specified index position and using the specified
- execution flags.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object)">getMatch</A></B>(java.lang.Object&nbsp;input)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first match found in the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object, int)">getMatch</A></B>(java.lang.Object&nbsp;input,
-         int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first match found in the input, beginning
- the search at the specified index.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object, int, int)">getMatch</A></B>(java.lang.Object&nbsp;input,
-         int&nbsp;index,
-         int&nbsp;eflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first match found in the input, beginning
- the search at the specified index, and using the specified
- execution flags.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object, int, int, java.lang.StringBuffer)">getMatch</A></B>(java.lang.Object&nbsp;input,
-         int&nbsp;index,
-         int&nbsp;eflags,
-         java.lang.StringBuffer&nbsp;buffer)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first match found in the input, beginning the search
- at the specified index, and using the specified execution flags.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object)">getMatchEnumeration</A></B>(java.lang.Object&nbsp;input)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object, int)">getMatchEnumeration</A></B>(java.lang.Object&nbsp;input,
-                    int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object, int, int)">getMatchEnumeration</A></B>(java.lang.Object&nbsp;input,
-                    int&nbsp;index,
-                    int&nbsp;eflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getMinimumLength()">getMinimumLength</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the minimum number of characters that could possibly
- constitute a match of this regular expression.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#getNumSubs()">getNumSubs</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the maximum number of subexpressions in this regular expression.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#isMatch(java.lang.Object)">isMatch</A></B>(java.lang.Object&nbsp;input)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the regular expression matches the input in its entirety.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#isMatch(java.lang.Object, int)">isMatch</A></B>(java.lang.Object&nbsp;input,
-        int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the input string, starting from index, is an exact match of
- this regular expression.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#isMatch(java.lang.Object, int, int)">isMatch</A></B>(java.lang.Object&nbsp;input,
-        int&nbsp;index,
-        int&nbsp;eflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the input, starting from index and using the specified
- execution flags, is an exact match of this regular expression.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String)">substitute</A></B>(java.lang.Object&nbsp;input,
-           java.lang.String&nbsp;replace)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitutes the replacement text for the first match found in the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String, int)">substitute</A></B>(java.lang.Object&nbsp;input,
-           java.lang.String&nbsp;replace,
-           int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitutes the replacement text for the first match found in the input
- beginning at the specified index position.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String, int, int)">substitute</A></B>(java.lang.Object&nbsp;input,
-           java.lang.String&nbsp;replace,
-           int&nbsp;index,
-           int&nbsp;eflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitutes the replacement text for the first match found in the input
- string, beginning at the specified index position and using the
- specified execution flags.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String)">substituteAll</A></B>(java.lang.Object&nbsp;input,
-              java.lang.String&nbsp;replace)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitutes the replacement text for each non-overlapping match found 
- in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String, int)">substituteAll</A></B>(java.lang.Object&nbsp;input,
-              java.lang.String&nbsp;replace,
-              int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitutes the replacement text for each non-overlapping match found 
- in the input text, starting at the specified index.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String, int, int)">substituteAll</A></B>(java.lang.Object&nbsp;input,
-              java.lang.String&nbsp;replace,
-              int&nbsp;index,
-              int&nbsp;eflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitutes the replacement text for each non-overlapping match found 
- in the input text, starting at the specified index and using the
- specified execution flags.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a human readable form of the compiled regular expression,
- useful for debugging.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RE.html#version()">version</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representing the version of the gnu.regexp package.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="REG_ICASE"><!-- --></A><H3>
-REG_ICASE</H3>
-<PRE>
-public static final int <B>REG_ICASE</B></PRE>
-<DL>
-<DD>Compilation flag. Do  not  differentiate  case.   Subsequent
- searches  using  this  RE will be case insensitive.</DL>
-<HR>
-
-<A NAME="REG_DOT_NEWLINE"><!-- --></A><H3>
-REG_DOT_NEWLINE</H3>
-<PRE>
-public static final int <B>REG_DOT_NEWLINE</B></PRE>
-<DL>
-<DD>Compilation flag. The match-any-character operator (dot)
- will match a newline character.  When set this overrides the syntax
- bit RE_DOT_NEWLINE (see RESyntax for details).  This is equivalent to
- the "/s" operator in Perl.</DL>
-<HR>
-
-<A NAME="REG_MULTILINE"><!-- --></A><H3>
-REG_MULTILINE</H3>
-<PRE>
-public static final int <B>REG_MULTILINE</B></PRE>
-<DL>
-<DD>Compilation flag. Use multiline mode.  In this mode, the ^ and $
- anchors will match based on newlines within the input. This is
- equivalent to the "/m" operator in Perl.</DL>
-<HR>
-
-<A NAME="REG_NOTBOL"><!-- --></A><H3>
-REG_NOTBOL</H3>
-<PRE>
-public static final int <B>REG_NOTBOL</B></PRE>
-<DL>
-<DD>Execution flag.
- The match-beginning operator (^) will not match at the beginning
- of the input string. Useful for matching on a substring when you
- know the context of the input is such that position zero of the
- input to the match test is not actually position zero of the text.
- <P>
- This example demonstrates the results of various ways of matching on
- a substring.
- <P>
- <CODE>
- String s = "food bar fool";<BR>
- RE exp = new RE("^foo.");<BR>
- REMatch m0 = exp.getMatch(s);<BR>
- REMatch m1 = exp.getMatch(s.substring(8));<BR>
- REMatch m2 = exp.getMatch(s.substring(8),0,RE.REG_NOTBOL); <BR>
- REMatch m3 = exp.getMatch(s,8);                            <BR>
- REMatch m4 = exp.getMatch(s,8,RE.REG_ANCHORINDEX);         <BR>
- <P>
- // Results:<BR>
- //  m0 = "food"<BR>
- //  m1 = "fool"<BR>
- //  m2 = null<BR>
- //  m3 = null<BR>
- //  m4 = "fool"<BR>
- </CODE></DL>
-<HR>
-
-<A NAME="REG_NOTEOL"><!-- --></A><H3>
-REG_NOTEOL</H3>
-<PRE>
-public static final int <B>REG_NOTEOL</B></PRE>
-<DL>
-<DD>Execution flag.
- The match-end operator ($) does not match at the end
- of the input string. Useful for matching on substrings.</DL>
-<HR>
-
-<A NAME="REG_ANCHORINDEX"><!-- --></A><H3>
-REG_ANCHORINDEX</H3>
-<PRE>
-public static final int <B>REG_ANCHORINDEX</B></PRE>
-<DL>
-<DD>Execution flag.
- When a match method is invoked that starts matching at a non-zero
- index into the input, treat the input as if it begins at the index
- given.  The effect of this flag is that the engine does not "see"
- any text in the input before the given index.  This is useful so
- that the match-beginning operator (^) matches not at position 0
- in the input string, but at the position the search started at
- (based on the index input given to the getMatch function).  See
- the example under REG_NOTBOL.  It also affects the use of the \&lt;
- and \b operators.</DL>
-<HR>
-
-<A NAME="REG_NO_INTERPOLATE"><!-- --></A><H3>
-REG_NO_INTERPOLATE</H3>
-<PRE>
-public static final int <B>REG_NO_INTERPOLATE</B></PRE>
-<DL>
-<DD>Execution flag.
- The substitute and substituteAll methods will not attempt to
- interpolate occurrences of $1-$9 in the replacement text with
- the corresponding subexpressions.  For example, you may want to
- replace all matches of "one dollar" with "$1".</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="RE(java.lang.Object)"><!-- --></A><H3>
-RE</H3>
-<PRE>
-public <B>RE</B>(java.lang.Object&nbsp;pattern)
-   throws <A HREF="../../gnu/regexp/REException.html">REException</A></PRE>
-<DL>
-<DD>Constructs a regular expression pattern buffer without any compilation
- flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - A regular expression pattern, in the form of a String,
-   StringBuffer or char[].  Other input types will be converted to
-   strings using the toString() method.<DT><B>Throws:</B><DD><CODE><A HREF="../../gnu/regexp/REException.html">REException</A></CODE> - The input pattern could not be parsed.<DD><CODE>NullPointerException</CODE> - The pattern was null.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="RE(java.lang.Object, int)"><!-- --></A><H3>
-RE</H3>
-<PRE>
-public <B>RE</B>(java.lang.Object&nbsp;pattern,
-          int&nbsp;cflags)
-   throws <A HREF="../../gnu/regexp/REException.html">REException</A></PRE>
-<DL>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - A regular expression pattern, in the form of a String,
-   StringBuffer, or char[].  Other input types will be converted to
-   strings using the toString() method.<DD><CODE>cflags</CODE> - The logical OR of any combination of the compilation flags listed above.<DT><B>Throws:</B><DD><CODE><A HREF="../../gnu/regexp/REException.html">REException</A></CODE> - The input pattern could not be parsed.<DD><CODE>NullPointerException</CODE> - The pattern was null.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="RE(java.lang.Object, int, gnu.regexp.RESyntax)"><!-- --></A><H3>
-RE</H3>
-<PRE>
-public <B>RE</B>(java.lang.Object&nbsp;pattern,
-          int&nbsp;cflags,
-          <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;syntax)
-   throws <A HREF="../../gnu/regexp/REException.html">REException</A></PRE>
-<DL>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and regular expression syntax.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - A regular expression pattern, in the form of a String,
-   StringBuffer, or char[].  Other input types will be converted to
-   strings using the toString() method.<DD><CODE>cflags</CODE> - The logical OR of any combination of the compilation flags listed above.<DD><CODE>syntax</CODE> - The type of regular expression syntax to use.<DT><B>Throws:</B><DD><CODE><A HREF="../../gnu/regexp/REException.html">REException</A></CODE> - The input pattern could not be parsed.<DD><CODE>NullPointerException</CODE> - The pattern was null.</DL>
-</DD>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="version()"><!-- --></A><H3>
-version</H3>
-<PRE>
-public static final java.lang.String <B>version</B>()</PRE>
-<DL>
-<DD>Returns a string representing the version of the gnu.regexp package.</DL>
-<HR>
-
-<A NAME="isMatch(java.lang.Object)"><!-- --></A><H3>
-isMatch</H3>
-<PRE>
-public boolean <B>isMatch</B>(java.lang.Object&nbsp;input)</PRE>
-<DL>
-<DD>Checks if the regular expression matches the input in its entirety.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isMatch(java.lang.Object, int)"><!-- --></A><H3>
-isMatch</H3>
-<PRE>
-public boolean <B>isMatch</B>(java.lang.Object&nbsp;input,
-                       int&nbsp;index)</PRE>
-<DL>
-<DD>Checks if the input string, starting from index, is an exact match of
- this regular expression.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isMatch(java.lang.Object, int, int)"><!-- --></A><H3>
-isMatch</H3>
-<PRE>
-public boolean <B>isMatch</B>(java.lang.Object&nbsp;input,
-                       int&nbsp;index,
-                       int&nbsp;eflags)</PRE>
-<DL>
-<DD>Checks if the input, starting from index and using the specified
- execution flags, is an exact match of this regular expression.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getNumSubs()"><!-- --></A><H3>
-getNumSubs</H3>
-<PRE>
-public int <B>getNumSubs</B>()</PRE>
-<DL>
-<DD>Returns the maximum number of subexpressions in this regular expression.
- If the expression contains branches, the value returned will be the
- maximum subexpressions in any of the branches.</DL>
-<HR>
-
-<A NAME="getMinimumLength()"><!-- --></A><H3>
-getMinimumLength</H3>
-<PRE>
-public int <B>getMinimumLength</B>()</PRE>
-<DL>
-<DD>Returns the minimum number of characters that could possibly
- constitute a match of this regular expression.</DL>
-<HR>
-
-<A NAME="getAllMatches(java.lang.Object)"><!-- --></A><H3>
-getAllMatches</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A>[] <B>getAllMatches</B>(java.lang.Object&nbsp;input)</PRE>
-<DL>
-<DD>Returns an array of all matches found in the input.
-
- If the regular expression allows the empty string to match, it will
- substitute matches at all positions except the end of the input.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DT><B>Returns:</B><DD>a non-null (but possibly zero-length) array of matches</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getAllMatches(java.lang.Object, int)"><!-- --></A><H3>
-getAllMatches</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A>[] <B>getAllMatches</B>(java.lang.Object&nbsp;input,
-                               int&nbsp;index)</PRE>
-<DL>
-<DD>Returns an array of all matches found in the input,
- beginning at the specified index position.
-
- If the regular expression allows the empty string to match, it will
- substitute matches at all positions except the end of the input.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DT><B>Returns:</B><DD>a non-null (but possibly zero-length) array of matches</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getAllMatches(java.lang.Object, int, int)"><!-- --></A><H3>
-getAllMatches</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A>[] <B>getAllMatches</B>(java.lang.Object&nbsp;input,
-                               int&nbsp;index,
-                               int&nbsp;eflags)</PRE>
-<DL>
-<DD>Returns an array of all matches found in the input string,
- beginning at the specified index position and using the specified
- execution flags.
-
- If the regular expression allows the empty string to match, it will
- substitute matches at all positions except the end of the input.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.<DT><B>Returns:</B><DD>a non-null (but possibly zero-length) array of matches</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatch(java.lang.Object)"><!-- --></A><H3>
-getMatch</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A> <B>getMatch</B>(java.lang.Object&nbsp;input)</PRE>
-<DL>
-<DD>Returns the first match found in the input.  If no match is found,
- null is returned.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DT><B>Returns:</B><DD>An REMatch instance referencing the match, or null if none.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatch(java.lang.Object, int)"><!-- --></A><H3>
-getMatch</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A> <B>getMatch</B>(java.lang.Object&nbsp;input,
-                        int&nbsp;index)</PRE>
-<DL>
-<DD>Returns the first match found in the input, beginning
- the search at the specified index.  If no match is found,
- returns null.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset within the text to begin looking for a match.<DT><B>Returns:</B><DD>An REMatch instance referencing the match, or null if none.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatch(java.lang.Object, int, int)"><!-- --></A><H3>
-getMatch</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A> <B>getMatch</B>(java.lang.Object&nbsp;input,
-                        int&nbsp;index,
-                        int&nbsp;eflags)</PRE>
-<DL>
-<DD>Returns the first match found in the input, beginning
- the search at the specified index, and using the specified
- execution flags.  If no match is found, returns null.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.<DT><B>Returns:</B><DD>An REMatch instance referencing the match, or null if none.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatch(java.lang.Object, int, int, java.lang.StringBuffer)"><!-- --></A><H3>
-getMatch</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A> <B>getMatch</B>(java.lang.Object&nbsp;input,
-                        int&nbsp;index,
-                        int&nbsp;eflags,
-                        java.lang.StringBuffer&nbsp;buffer)</PRE>
-<DL>
-<DD>Returns the first match found in the input, beginning the search
- at the specified index, and using the specified execution flags.
- If no match is found, returns null.  If a StringBuffer is
- provided and is non-null, the contents of the input text from the
- index to the beginning of the match (or to the end of the input,
- if there is no match) are appended to the StringBuffer.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.<DD><CODE>buffer</CODE> - The StringBuffer to save pre-match text in.<DT><B>Returns:</B><DD>An REMatch instance referencing the match, or null if none.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatchEnumeration(java.lang.Object)"><!-- --></A><H3>
-getMatchEnumeration</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A> <B>getMatchEnumeration</B>(java.lang.Object&nbsp;input)</PRE>
-<DL>
-<DD>Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DT><B>Returns:</B><DD>A non-null REMatchEnumeration instance.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatchEnumeration(java.lang.Object, int)"><!-- --></A><H3>
-getMatchEnumeration</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A> <B>getMatchEnumeration</B>(java.lang.Object&nbsp;input,
-                                              int&nbsp;index)</PRE>
-<DL>
-<DD>Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DT><B>Returns:</B><DD>A non-null REMatchEnumeration instance, with its input cursor
-  set to the index position specified.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getMatchEnumeration(java.lang.Object, int, int)"><!-- --></A><H3>
-getMatchEnumeration</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A> <B>getMatchEnumeration</B>(java.lang.Object&nbsp;input,
-                                              int&nbsp;index,
-                                              int&nbsp;eflags)</PRE>
-<DL>
-<DD>Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.<DT><B>Returns:</B><DD>A non-null REMatchEnumeration instance, with its input cursor
-  set to the index position specified.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substitute(java.lang.Object, java.lang.String)"><!-- --></A><H3>
-substitute</H3>
-<PRE>
-public java.lang.String <B>substitute</B>(java.lang.Object&nbsp;input,
-                                   java.lang.String&nbsp;replace)</PRE>
-<DL>
-<DD>Substitutes the replacement text for the first match found in the input.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>replace</CODE> - The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).<DT><B>Returns:</B><DD>A String interpolating the substituted text.<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><CODE>REMatch.substituteInto(java.lang.String)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substitute(java.lang.Object, java.lang.String, int)"><!-- --></A><H3>
-substitute</H3>
-<PRE>
-public java.lang.String <B>substitute</B>(java.lang.Object&nbsp;input,
-                                   java.lang.String&nbsp;replace,
-                                   int&nbsp;index)</PRE>
-<DL>
-<DD>Substitutes the replacement text for the first match found in the input
- beginning at the specified index position.  Specifying an index
- effectively causes the regular expression engine to throw away the
- specified number of characters.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>replace</CODE> - The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DT><B>Returns:</B><DD>A String containing the substring of the input, starting
-   at the index position, and interpolating the substituted text.<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><CODE>REMatch.substituteInto(java.lang.String)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substitute(java.lang.Object, java.lang.String, int, int)"><!-- --></A><H3>
-substitute</H3>
-<PRE>
-public java.lang.String <B>substitute</B>(java.lang.Object&nbsp;input,
-                                   java.lang.String&nbsp;replace,
-                                   int&nbsp;index,
-                                   int&nbsp;eflags)</PRE>
-<DL>
-<DD>Substitutes the replacement text for the first match found in the input
- string, beginning at the specified index position and using the
- specified execution flags.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>replace</CODE> - The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.<DT><B>Returns:</B><DD>A String containing the substring of the input, starting
-   at the index position, and interpolating the substituted text.<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><CODE>REMatch.substituteInto(java.lang.String)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substituteAll(java.lang.Object, java.lang.String)"><!-- --></A><H3>
-substituteAll</H3>
-<PRE>
-public java.lang.String <B>substituteAll</B>(java.lang.Object&nbsp;input,
-                                      java.lang.String&nbsp;replace)</PRE>
-<DL>
-<DD>Substitutes the replacement text for each non-overlapping match found 
- in the input text.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>replace</CODE> - The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).<DT><B>Returns:</B><DD>A String interpolating the substituted text.<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><CODE>REMatch.substituteInto(java.lang.String)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substituteAll(java.lang.Object, java.lang.String, int)"><!-- --></A><H3>
-substituteAll</H3>
-<PRE>
-public java.lang.String <B>substituteAll</B>(java.lang.Object&nbsp;input,
-                                      java.lang.String&nbsp;replace,
-                                      int&nbsp;index)</PRE>
-<DL>
-<DD>Substitutes the replacement text for each non-overlapping match found 
- in the input text, starting at the specified index.
-
- If the regular expression allows the empty string to match, it will
- substitute matches at all positions except the end of the input.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>replace</CODE> - The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DT><B>Returns:</B><DD>A String containing the substring of the input, starting
-   at the index position, and interpolating the substituted text.<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><CODE>REMatch.substituteInto(java.lang.String)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substituteAll(java.lang.Object, java.lang.String, int, int)"><!-- --></A><H3>
-substituteAll</H3>
-<PRE>
-public java.lang.String <B>substituteAll</B>(java.lang.Object&nbsp;input,
-                                      java.lang.String&nbsp;replace,
-                                      int&nbsp;index,
-                                      int&nbsp;eflags)</PRE>
-<DL>
-<DD>Substitutes the replacement text for each non-overlapping match found 
- in the input text, starting at the specified index and using the
- specified execution flags.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The input text.<DD><CODE>replace</CODE> - The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).<DD><CODE>index</CODE> - The offset index at which the search should be begin.<DD><CODE>eflags</CODE> - The logical OR of any execution flags above.<DT><B>Returns:</B><DD>A String containing the substring of the input, starting
-   at the index position, and interpolating the substituted text.<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><CODE>REMatch.substituteInto(java.lang.String)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>()</PRE>
-<DL>
-<DD>Return a human readable form of the compiled regular expression,
- useful for debugging.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REFilterInputStream.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="RE.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REException.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REException.html
deleted file mode 100644 (file)
index 39866fc..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  REException
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REException.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  REException</H2>
-<PRE>
-java.lang.Object
-  |
-  +--java.lang.Throwable
-        |
-        +--java.lang.Exception
-              |
-              +--<B>gnu.regexp.REException</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT>public class <B>REException</B><DT>extends java.lang.Exception</DL>
-
-<P>
-This is the regular expression exception class.  An exception of this type
- defines the three attributes:
- <OL>
- <LI> A descriptive message of the error.
- <LI> An integral type code equivalent to one of the statically
-      defined symbols listed below.
- <LI> The approximate position in the input string where the error
-      occurred.
- </OL>
-<P>
-<DL>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../serialized-form.html#gnu.regexp.REException">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_BADBR">REG_BADBR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_BADPAT">REG_BADPAT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_BADRPT">REG_BADRPT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_EBRACE">REG_EBRACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_EBRACK">REG_EBRACK</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_ECTYPE">REG_ECTYPE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_EEND">REG_EEND</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_EPAREN">REG_EPAREN</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_ERANGE">REG_ERANGE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_ESCAPE">REG_ESCAPE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_ESIZE">REG_ESIZE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_ESPACE">REG_ESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#REG_ESUBREG">REG_ESUBREG</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error flag.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#getMessage()">getMessage</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reports the descriptive message associated with this exception
- as well as its index position in the string or character array
- being compiled.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#getPosition()">getPosition</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the position, relative to the string or character array being
- compiled, where the error occurred.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REException.html#getType()">getType</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the type of the exception, one of the constants listed above.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Throwable</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>fillInStackTrace, getLocalizedMessage, printStackTrace, printStackTrace, printStackTrace, toString</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="REG_BADRPT"><!-- --></A><H3>
-REG_BADRPT</H3>
-<PRE>
-public static final int <B>REG_BADRPT</B></PRE>
-<DL>
-<DD>Error flag.
- Invalid use of repetition operators such  as  using
- `*' as the first character.</DL>
-<HR>
-
-<A NAME="REG_BADBR"><!-- --></A><H3>
-REG_BADBR</H3>
-<PRE>
-public static final int <B>REG_BADBR</B></PRE>
-<DL>
-<DD>Error flag.
- Invalid use of back reference operator.</DL>
-<HR>
-
-<A NAME="REG_EBRACE"><!-- --></A><H3>
-REG_EBRACE</H3>
-<PRE>
-public static final int <B>REG_EBRACE</B></PRE>
-<DL>
-<DD>Error flag.
- Un-matched brace interval operators.</DL>
-<HR>
-
-<A NAME="REG_EBRACK"><!-- --></A><H3>
-REG_EBRACK</H3>
-<PRE>
-public static final int <B>REG_EBRACK</B></PRE>
-<DL>
-<DD>Error flag.
- Un-matched bracket list operators.</DL>
-<HR>
-
-<A NAME="REG_ERANGE"><!-- --></A><H3>
-REG_ERANGE</H3>
-<PRE>
-public static final int <B>REG_ERANGE</B></PRE>
-<DL>
-<DD>Error flag.
- Invalid  use  of the range operator, eg. the ending
- point of the range occurs  prior  to  the  starting
- point.</DL>
-<HR>
-
-<A NAME="REG_ECTYPE"><!-- --></A><H3>
-REG_ECTYPE</H3>
-<PRE>
-public static final int <B>REG_ECTYPE</B></PRE>
-<DL>
-<DD>Error flag.
- Unknown character class name. <B>Not implemented</B>.</DL>
-<HR>
-
-<A NAME="REG_EPAREN"><!-- --></A><H3>
-REG_EPAREN</H3>
-<PRE>
-public static final int <B>REG_EPAREN</B></PRE>
-<DL>
-<DD>Error flag.
- Un-matched parenthesis group operators.</DL>
-<HR>
-
-<A NAME="REG_ESUBREG"><!-- --></A><H3>
-REG_ESUBREG</H3>
-<PRE>
-public static final int <B>REG_ESUBREG</B></PRE>
-<DL>
-<DD>Error flag.
- Invalid back reference to a subexpression.</DL>
-<HR>
-
-<A NAME="REG_EEND"><!-- --></A><H3>
-REG_EEND</H3>
-<PRE>
-public static final int <B>REG_EEND</B></PRE>
-<DL>
-<DD>Error flag.
- Non specific error. <B>Not implemented</B>.</DL>
-<HR>
-
-<A NAME="REG_ESCAPE"><!-- --></A><H3>
-REG_ESCAPE</H3>
-<PRE>
-public static final int <B>REG_ESCAPE</B></PRE>
-<DL>
-<DD>Error flag.
- Invalid escape sequence. <B>Not implemented</B>.</DL>
-<HR>
-
-<A NAME="REG_BADPAT"><!-- --></A><H3>
-REG_BADPAT</H3>
-<PRE>
-public static final int <B>REG_BADPAT</B></PRE>
-<DL>
-<DD>Error flag.
- Invalid  use  of pattern operators such as group or list.</DL>
-<HR>
-
-<A NAME="REG_ESIZE"><!-- --></A><H3>
-REG_ESIZE</H3>
-<PRE>
-public static final int <B>REG_ESIZE</B></PRE>
-<DL>
-<DD>Error flag.
- Compiled  regular  expression  requires  a  pattern
- buffer larger than 64Kb. <B>Not implemented</B>.</DL>
-<HR>
-
-<A NAME="REG_ESPACE"><!-- --></A><H3>
-REG_ESPACE</H3>
-<PRE>
-public static final int <B>REG_ESPACE</B></PRE>
-<DL>
-<DD>Error flag.
- The regex routines ran out of memory. <B>Not implemented</B>.</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="getType()"><!-- --></A><H3>
-getType</H3>
-<PRE>
-public int <B>getType</B>()</PRE>
-<DL>
-<DD>Returns the type of the exception, one of the constants listed above.</DL>
-<HR>
-
-<A NAME="getPosition()"><!-- --></A><H3>
-getPosition</H3>
-<PRE>
-public int <B>getPosition</B>()</PRE>
-<DL>
-<DD>Returns the position, relative to the string or character array being
- compiled, where the error occurred.  This position is generally the point
- where the error was detected, not necessarily the starting index of
- a bad subexpression.</DL>
-<HR>
-
-<A NAME="getMessage()"><!-- --></A><H3>
-getMessage</H3>
-<PRE>
-public java.lang.String <B>getMessage</B>()</PRE>
-<DL>
-<DD>Reports the descriptive message associated with this exception
- as well as its index position in the string or character array
- being compiled.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>getMessage</CODE> in class <CODE>java.lang.Throwable</CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REException.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REFilterInputStream.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REFilterInputStream.html
deleted file mode 100644 (file)
index 31a7062..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class  REFilterInputStream
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/RE.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REFilterReader.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REFilterInputStream.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  REFilterInputStream</H2>
-<PRE>
-java.lang.Object
-  |
-  +--java.io.InputStream
-        |
-        +--java.io.FilterInputStream
-              |
-              +--<B>gnu.regexp.REFilterInputStream</B>
-</PRE>
-<HR>
-<B>Deprecated.</B>&nbsp;<I>This class cannot properly handle all character
-             encodings.  For proper handling, use the REFilterReader
-             class instead.</I>
-<P>
-<DL>
-<DT>public class <B>REFilterInputStream</B><DT>extends java.io.FilterInputStream</DL>
-
-<P>
-Replaces instances of a given RE found within an InputStream
- with replacement text.   The replacements are interpolated into the
- stream when a match is found.
-<P>
-<DL>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterInputStream.html#REFilterInputStream(java.io.InputStream, gnu.regexp.RE, java.lang.String)">REFilterInputStream</A></B>(java.io.InputStream&nbsp;stream,
-                    <A HREF="../../gnu/regexp/RE.html">RE</A>&nbsp;expr,
-                    java.lang.String&nbsp;replace)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;Creates an REFilterInputStream.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterInputStream.html#markSupported()">markSupported</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;Returns false.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterInputStream.html#read()">read</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;Reads the next byte from the stream per the general contract of
- InputStream.read().</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterInputStream.html#read(byte[])">read</A></B>(byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;Reads from the stream into the provided array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterInputStream.html#read(byte[], int, int)">read</A></B>(byte[]&nbsp;b,
-     int&nbsp;off,
-     int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;Reads from the stream into the provided array.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.io.FilterInputStream"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.io.FilterInputStream</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>available, close, mark, reset, skip</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="REFilterInputStream(java.io.InputStream, gnu.regexp.RE, java.lang.String)"><!-- --></A><H3>
-REFilterInputStream</H3>
-<PRE>
-public <B>REFilterInputStream</B>(java.io.InputStream&nbsp;stream,
-                           <A HREF="../../gnu/regexp/RE.html">RE</A>&nbsp;expr,
-                           java.lang.String&nbsp;replace)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<DD>Creates an REFilterInputStream.  When reading from this stream,
- occurrences of patterns matching the supplied regular expression
- will be replaced with the supplied replacement text (the
- metacharacters $0 through $9 may be used to refer to the full
- match or subexpression matches).<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>stream</CODE> - The InputStream to be filtered.<DD><CODE>expr</CODE> - The regular expression to search for.<DD><CODE>replace</CODE> - The text pattern to replace matches with.</DL>
-</DD>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="read()"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>()</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<DD>Reads the next byte from the stream per the general contract of
- InputStream.read().  Returns -1 on error or end of stream.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>read</CODE> in class <CODE>java.io.FilterInputStream</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="markSupported()"><!-- --></A><H3>
-markSupported</H3>
-<PRE>
-public boolean <B>markSupported</B>()</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<DD>Returns false.  REFilterInputStream does not support mark() and
- reset() methods.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>markSupported</CODE> in class <CODE>java.io.FilterInputStream</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(byte[], int, int)"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>(byte[]&nbsp;b,
-                int&nbsp;off,
-                int&nbsp;len)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<DD>Reads from the stream into the provided array.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>read</CODE> in class <CODE>java.io.FilterInputStream</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(byte[])"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>(byte[]&nbsp;b)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<DD>Reads from the stream into the provided array.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>read</CODE> in class <CODE>java.io.FilterInputStream</CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/RE.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REFilterReader.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REFilterInputStream.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REFilterReader.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REFilterReader.html
deleted file mode 100644 (file)
index c014718..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class  REFilterReader
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REFilterInputStream.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REMatch.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REFilterReader.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  REFilterReader</H2>
-<PRE>
-java.lang.Object
-  |
-  +--java.io.Reader
-        |
-        +--java.io.FilterReader
-              |
-              +--<B>gnu.regexp.REFilterReader</B>
-</PRE>
-<HR>
-<DL>
-<DT>public class <B>REFilterReader</B><DT>extends java.io.FilterReader</DL>
-
-<P>
-Replaces instances of a given RE with replacement text.
-<P>
-<DL>
-<DT><B>Since: </B><DD>gnu.regexp 1.1.0</DD>
-<DT><B>Author: </B><DD><A HREF="http://www.csis.hku.hk/~sdlee/">Lee Sau Dan</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterReader.html#REFilterReader(java.io.Reader, gnu.regexp.RE, java.lang.String)">REFilterReader</A></B>(java.io.Reader&nbsp;stream,
-               <A HREF="../../gnu/regexp/RE.html">RE</A>&nbsp;expr,
-               java.lang.String&nbsp;replace)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an REFilterReader.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterReader.html#markSupported()">markSupported</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns false.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterReader.html#read()">read</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the next character from the stream per the general contract of
- Reader.read().</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterReader.html#read(char[])">read</A></B>(char[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads from the stream into the provided array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REFilterReader.html#read(char[], int, int)">read</A></B>(char[]&nbsp;b,
-     int&nbsp;off,
-     int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads from the stream into the provided array.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.io.FilterReader"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.io.FilterReader</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>close, mark, ready, reset, skip</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="REFilterReader(java.io.Reader, gnu.regexp.RE, java.lang.String)"><!-- --></A><H3>
-REFilterReader</H3>
-<PRE>
-public <B>REFilterReader</B>(java.io.Reader&nbsp;stream,
-                      <A HREF="../../gnu/regexp/RE.html">RE</A>&nbsp;expr,
-                      java.lang.String&nbsp;replace)</PRE>
-<DL>
-<DD>Creates an REFilterReader.  When reading from this stream,
- occurrences of patterns matching the supplied regular expression
- will be replaced with the supplied replacement text (the
- metacharacters $0 through $9 may be used to refer to the full
- match or subexpression matches.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>stream</CODE> - The Reader to be filtered.<DD><CODE>expr</CODE> - The regular expression to search for.<DD><CODE>replace</CODE> - The text pattern to replace matches with.</DL>
-</DD>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="read()"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>()</PRE>
-<DL>
-<DD>Reads the next character from the stream per the general contract of
- Reader.read().  Returns -1 on error or end of stream.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>read</CODE> in class <CODE>java.io.FilterReader</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="markSupported()"><!-- --></A><H3>
-markSupported</H3>
-<PRE>
-public boolean <B>markSupported</B>()</PRE>
-<DL>
-<DD>Returns false.  REFilterReader does not support mark() and
- reset() methods.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>markSupported</CODE> in class <CODE>java.io.FilterReader</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(char[], int, int)"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>(char[]&nbsp;b,
-                int&nbsp;off,
-                int&nbsp;len)</PRE>
-<DL>
-<DD>Reads from the stream into the provided array.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>read</CODE> in class <CODE>java.io.FilterReader</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(char[])"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>(char[]&nbsp;b)</PRE>
-<DL>
-<DD>Reads from the stream into the provided array.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>read</CODE> in class <CODE>java.io.Reader</CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REFilterInputStream.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REMatch.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REFilterReader.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REMatch.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REMatch.html
deleted file mode 100644 (file)
index 8e9f39f..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class  REMatch
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REFilterReader.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REMatch.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  REMatch</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.REMatch</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Cloneable, java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT>public final class <B>REMatch</B><DT>extends java.lang.Object<DT>implements java.io.Serializable, java.lang.Cloneable</DL>
-
-<P>
-An instance of this class represents a match
- completed by a gnu.regexp matching function. It can be used
- to obtain relevant information about the location of a match
- or submatch.
-<P>
-<DL>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../serialized-form.html#gnu.regexp.REMatch">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.Object</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#clone()">clone</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#getEndIndex()">getEndIndex</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within the input string where the match in
- its entirety ends.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#getEndIndex(int)">getEndIndex</A></B>(int&nbsp;sub)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> ends, or <code>-1</code> if
- the subexpression does not exist.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#getStartIndex()">getStartIndex</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within the input text where the match in its entirety
- began.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#getStartIndex(int)">getStartIndex</A></B>(int&nbsp;sub)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> begins, or <code>-1</code> if
- the subexpression does not exist.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#getSubEndIndex(int)">getSubEndIndex</A></B>(int&nbsp;sub)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use getEndIndex(int) instead</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#getSubStartIndex(int)">getSubStartIndex</A></B>(int&nbsp;sub)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use getStartIndex(int) instead.</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#substituteInto(java.lang.String)">substituteInto</A></B>(java.lang.String&nbsp;input)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Substitute the results of this match to create a new string.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string matching the pattern.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatch.html#toString(int)">toString</A></B>(int&nbsp;sub)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string matching the given subexpression.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="clone()"><!-- --></A><H3>
-clone</H3>
-<PRE>
-public java.lang.Object <B>clone</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>()</PRE>
-<DL>
-<DD>Returns the string matching the pattern.  This makes it convenient
- to write code like the following:
- <P>
- <code> 
- REMatch myMatch = myExpression.getMatch(myString);<br>
- if (myMatch != null) System.out.println("Regexp found: "+myMatch);
- </code><DD><DL>
-<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getStartIndex()"><!-- --></A><H3>
-getStartIndex</H3>
-<PRE>
-public int <B>getStartIndex</B>()</PRE>
-<DL>
-<DD>Returns the index within the input text where the match in its entirety
- began.<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getEndIndex()"><!-- --></A><H3>
-getEndIndex</H3>
-<PRE>
-public int <B>getEndIndex</B>()</PRE>
-<DL>
-<DD>Returns the index within the input string where the match in
- its entirety ends.  The return value is the next position after
- the end of the string; therefore, a match created by the
- following call:
-
- <P>
- <code>REMatch myMatch = myExpression.getMatch(myString);</code>
- <P>
- can be viewed (given that myMatch is not null) by creating
- <P>
- <code>String theMatch = myString.substring(myMatch.getStartIndex(),
- myMatch.getEndIndex());</code>
- <P>
- But you can save yourself that work, since the <code>toString()</code>
- method (above) does exactly that for you.<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(int)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>(int&nbsp;sub)</PRE>
-<DL>
-<DD>Returns the string matching the given subexpression.  The subexpressions
- are indexed starting with one, not zero.  That is, the subexpression
- identified by the first set of parentheses in a regular expression
- could be retrieved from an REMatch by calling match.toString(1).<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sub</CODE> - Index of the subexpression.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getSubStartIndex(int)"><!-- --></A><H3>
-getSubStartIndex</H3>
-<PRE>
-public int <B>getSubStartIndex</B>(int&nbsp;sub)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<I>Use getStartIndex(int) instead.</I>
-<P>
-<DD>Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> begins, or <code>-1</code> if
- the subexpression does not exist.  The initial position is zero.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sub</CODE> - Subexpression index</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getStartIndex(int)"><!-- --></A><H3>
-getStartIndex</H3>
-<PRE>
-public int <B>getStartIndex</B>(int&nbsp;sub)</PRE>
-<DL>
-<DD>Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> begins, or <code>-1</code> if
- the subexpression does not exist.  The initial position is zero.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sub</CODE> - Subexpression index<DT><B>Since: </B><DD>gnu.regexp 1.1.0</DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getSubEndIndex(int)"><!-- --></A><H3>
-getSubEndIndex</H3>
-<PRE>
-public int <B>getSubEndIndex</B>(int&nbsp;sub)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<I>Use getEndIndex(int) instead</I>
-<P>
-<DD>Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> ends, or <code>-1</code> if
- the subexpression does not exist.  The initial position is zero.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sub</CODE> - Subexpression index</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getEndIndex(int)"><!-- --></A><H3>
-getEndIndex</H3>
-<PRE>
-public int <B>getEndIndex</B>(int&nbsp;sub)</PRE>
-<DL>
-<DD>Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> ends, or <code>-1</code> if
- the subexpression does not exist.  The initial position is zero.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sub</CODE> - Subexpression index</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="substituteInto(java.lang.String)"><!-- --></A><H3>
-substituteInto</H3>
-<PRE>
-public java.lang.String <B>substituteInto</B>(java.lang.String&nbsp;input)</PRE>
-<DL>
-<DD>Substitute the results of this match to create a new string.
- This is patterned after PERL, so the tokens to watch out for are
- <code>$0</code> through <code>$9</code>.  <code>$0</code> matches
- the full substring matched; <code>$<i>n</i></code> matches
- subexpression number <i>n</i>.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - A string consisting of literals and <code>$<i>n</i></code> tokens.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REFilterReader.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REMatch.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REMatchEnumeration.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/REMatchEnumeration.html
deleted file mode 100644 (file)
index 6e46b67..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class  REMatchEnumeration
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REMatch.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/RESyntax.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REMatchEnumeration.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  REMatchEnumeration</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.REMatchEnumeration</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.util.Enumeration, java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT>public class <B>REMatchEnumeration</B><DT>extends java.lang.Object<DT>implements java.util.Enumeration, java.io.Serializable</DL>
-
-<P>
-An REMatchEnumeration enumerates regular expression matches over a
- given input text.  You obtain a reference to an enumeration using
- the <code>getMatchEnumeration()</code> methods on an instance of
- RE. 
-
- <P>
-
- REMatchEnumeration does lazy computation; that is, it will not
- search for a match until it needs to.  If you'd rather just get all
- the matches at once in a big array, use the
- <code>getAllMatches()</code> methods on RE.  However, using an
- enumeration can help speed performance when the entire text does
- not need to be searched immediately.
-
- <P>
- The enumerated type is especially useful when searching on a Reader
- or InputStream, because the InputStream read position cannot be
- guaranteed after calling <code>getMatch()</code> (see the
- description of that method for an explanation of why).  Enumeration
- also saves a lot of overhead required when calling
- <code>getMatch()</code> multiple times.
-<P>
-<DL>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../serialized-form.html#gnu.regexp.REMatchEnumeration">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatchEnumeration.html#hasMoreElements()">hasMoreElements</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if there are more matches in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatchEnumeration.html#hasMoreMatches()">hasMoreMatches</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if there are more matches in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatchEnumeration.html#hasMoreMatches(java.lang.StringBuffer)">hasMoreMatches</A></B>(java.lang.StringBuffer&nbsp;buffer)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if there are more matches in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.Object</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatchEnumeration.html#nextElement()">nextElement</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next match in the input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/REMatch.html">REMatch</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/REMatchEnumeration.html#nextMatch()">nextMatch</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next match in the input text.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="hasMoreElements()"><!-- --></A><H3>
-hasMoreElements</H3>
-<PRE>
-public boolean <B>hasMoreElements</B>()</PRE>
-<DL>
-<DD>Returns true if there are more matches in the input text.<DD><DL>
-<DT><B>Specified by: </B><DD><CODE>hasMoreElements</CODE> in interface <CODE>java.util.Enumeration</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hasMoreMatches()"><!-- --></A><H3>
-hasMoreMatches</H3>
-<PRE>
-public boolean <B>hasMoreMatches</B>()</PRE>
-<DL>
-<DD>Returns true if there are more matches in the input text.<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hasMoreMatches(java.lang.StringBuffer)"><!-- --></A><H3>
-hasMoreMatches</H3>
-<PRE>
-public boolean <B>hasMoreMatches</B>(java.lang.StringBuffer&nbsp;buffer)</PRE>
-<DL>
-<DD>Returns true if there are more matches in the input text.
- Saves the text leading up to the match (or to the end of the input)
- in the specified buffer.<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="nextElement()"><!-- --></A><H3>
-nextElement</H3>
-<PRE>
-public java.lang.Object <B>nextElement</B>()
-                             throws java.util.NoSuchElementException</PRE>
-<DL>
-<DD>Returns the next match in the input text.<DD><DL>
-<DT><B>Specified by: </B><DD><CODE>nextElement</CODE> in interface <CODE>java.util.Enumeration</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="nextMatch()"><!-- --></A><H3>
-nextMatch</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/REMatch.html">REMatch</A> <B>nextMatch</B>()
-                  throws java.util.NoSuchElementException</PRE>
-<DL>
-<DD>Returns the next match in the input text. This method is provided
- for convenience to avoid having to explicitly cast the return value
- to class REMatch.<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REMatch.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/RESyntax.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REMatchEnumeration.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/RESyntax.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/RESyntax.html
deleted file mode 100644 (file)
index 60c4ae7..0000000
+++ /dev/null
@@ -1,1058 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class  RESyntax
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/UncheckedRE.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="RESyntax.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  RESyntax</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.RESyntax</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT>public final class <B>RESyntax</B><DT>extends java.lang.Object<DT>implements java.io.Serializable</DL>
-
-<P>
-An RESyntax specifies the way a regular expression will be compiled.
- This class provides a number of predefined useful constants for
- emulating popular regular expression syntaxes.  Additionally the
- user may construct his or her own syntax, using any combination of the
- syntax bit constants.  The syntax is an optional argument to any of the
- matching methods on class RE.
-<P>
-<DL>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../serialized-form.html#gnu.regexp.RESyntax">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_BACKSLASH_ESCAPE_IN_LISTS">RE_BACKSLASH_ESCAPE_IN_LISTS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_BK_PLUS_QM">RE_BK_PLUS_QM</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_CHAR_CLASS_ESC_IN_LISTS">RE_CHAR_CLASS_ESC_IN_LISTS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_CHAR_CLASS_ESCAPES">RE_CHAR_CLASS_ESCAPES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_CHAR_CLASSES">RE_CHAR_CLASSES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_COMMENTS">RE_COMMENTS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_CONTEXT_INDEP_ANCHORS">RE_CONTEXT_INDEP_ANCHORS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_CONTEXT_INDEP_OPS">RE_CONTEXT_INDEP_OPS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_CONTEXT_INVALID_OPS">RE_CONTEXT_INVALID_OPS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_DOT_NEWLINE">RE_DOT_NEWLINE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_DOT_NOT_NULL">RE_DOT_NOT_NULL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_HAT_LISTS_NOT_NEWLINE">RE_HAT_LISTS_NOT_NEWLINE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_INTERVALS">RE_INTERVALS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_LIMITED_OPS">RE_LIMITED_OPS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_LOOKAHEAD">RE_LOOKAHEAD</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_NEWLINE_ALT">RE_NEWLINE_ALT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_NO_BK_BRACES">RE_NO_BK_BRACES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_NO_BK_PARENS">RE_NO_BK_PARENS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_NO_BK_REFS">RE_NO_BK_REFS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_NO_BK_VBAR">RE_NO_BK_VBAR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_NO_EMPTY_RANGES">RE_NO_EMPTY_RANGES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_PURE_GROUPING">RE_PURE_GROUPING</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_STINGY_OPS">RE_STINGY_OPS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_STRING_ANCHORS">RE_STRING_ANCHORS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_AWK">RE_SYNTAX_AWK</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_ED">RE_SYNTAX_ED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_EGREP">RE_SYNTAX_EGREP</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_EMACS">RE_SYNTAX_EMACS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_GREP">RE_SYNTAX_GREP</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_PERL4">RE_SYNTAX_PERL4</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_PERL4_S">RE_SYNTAX_PERL4_S</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_PERL5">RE_SYNTAX_PERL5</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_PERL5_S">RE_SYNTAX_PERL5_S</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_AWK">RE_SYNTAX_POSIX_AWK</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_BASIC">RE_SYNTAX_POSIX_BASIC</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_EGREP">RE_SYNTAX_POSIX_EGREP</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_EXTENDED">RE_SYNTAX_POSIX_EXTENDED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_MINIMAL_BASIC">RE_SYNTAX_POSIX_MINIMAL_BASIC</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_MINIMAL_EXTENDED">RE_SYNTAX_POSIX_MINIMAL_EXTENDED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_SYNTAX_SED">RE_SYNTAX_SED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predefined syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RE_UNMATCHED_RIGHT_PAREN_ORD">RE_UNMATCHED_RIGHT_PAREN_ORD</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Syntax bit.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RESyntax()">RESyntax</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new syntax object with all bits turned off.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#RESyntax(gnu.regexp.RESyntax)">RESyntax</A></B>(<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new syntax object with all bits set the same 
- as the other syntax.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#clear(int)">clear</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clear a given bit in this syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#get(int)">get</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Check if a given bit is set in this syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#getLineSeparator()">getLineSeparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the currently active line separator string.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#makeFinal()">makeFinal</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called internally when constructing predefined syntaxes
- so their interpretation cannot vary.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#set(int)">set</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set a given bit in this syntax.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../gnu/regexp/RESyntax.html#setLineSeparator(java.lang.String)">setLineSeparator</A></B>(java.lang.String&nbsp;aSeparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the line separator string for regular expressions
- created using this RESyntax.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="RE_BACKSLASH_ESCAPE_IN_LISTS"><!-- --></A><H3>
-RE_BACKSLASH_ESCAPE_IN_LISTS</H3>
-<PRE>
-public static final int <B>RE_BACKSLASH_ESCAPE_IN_LISTS</B></PRE>
-<DL>
-<DD>Syntax bit. Backslash is an escape character in lists.</DL>
-<HR>
-
-<A NAME="RE_BK_PLUS_QM"><!-- --></A><H3>
-RE_BK_PLUS_QM</H3>
-<PRE>
-public static final int <B>RE_BK_PLUS_QM</B></PRE>
-<DL>
-<DD>Syntax bit. Use \? instead of ? and \+ instead of +.</DL>
-<HR>
-
-<A NAME="RE_CHAR_CLASSES"><!-- --></A><H3>
-RE_CHAR_CLASSES</H3>
-<PRE>
-public static final int <B>RE_CHAR_CLASSES</B></PRE>
-<DL>
-<DD>Syntax bit. POSIX character classes ([:...:]) in lists are allowed.</DL>
-<HR>
-
-<A NAME="RE_CONTEXT_INDEP_ANCHORS"><!-- --></A><H3>
-RE_CONTEXT_INDEP_ANCHORS</H3>
-<PRE>
-public static final int <B>RE_CONTEXT_INDEP_ANCHORS</B></PRE>
-<DL>
-<DD>Syntax bit. ^ and $ are special everywhere.
- <B>Not implemented.</B></DL>
-<HR>
-
-<A NAME="RE_CONTEXT_INDEP_OPS"><!-- --></A><H3>
-RE_CONTEXT_INDEP_OPS</H3>
-<PRE>
-public static final int <B>RE_CONTEXT_INDEP_OPS</B></PRE>
-<DL>
-<DD>Syntax bit. Repetition operators are only special in valid positions.
- <B>Not implemented.</B></DL>
-<HR>
-
-<A NAME="RE_CONTEXT_INVALID_OPS"><!-- --></A><H3>
-RE_CONTEXT_INVALID_OPS</H3>
-<PRE>
-public static final int <B>RE_CONTEXT_INVALID_OPS</B></PRE>
-<DL>
-<DD>Syntax bit. Repetition and alternation operators are invalid
- at start and end of pattern and other places. 
- <B>Not implemented</B>.</DL>
-<HR>
-
-<A NAME="RE_DOT_NEWLINE"><!-- --></A><H3>
-RE_DOT_NEWLINE</H3>
-<PRE>
-public static final int <B>RE_DOT_NEWLINE</B></PRE>
-<DL>
-<DD>Syntax bit. Match-any-character operator (.) matches a newline.</DL>
-<HR>
-
-<A NAME="RE_DOT_NOT_NULL"><!-- --></A><H3>
-RE_DOT_NOT_NULL</H3>
-<PRE>
-public static final int <B>RE_DOT_NOT_NULL</B></PRE>
-<DL>
-<DD>Syntax bit. Match-any-character operator (.) does not match a null.</DL>
-<HR>
-
-<A NAME="RE_INTERVALS"><!-- --></A><H3>
-RE_INTERVALS</H3>
-<PRE>
-public static final int <B>RE_INTERVALS</B></PRE>
-<DL>
-<DD>Syntax bit. Intervals ({x}, {x,}, {x,y}) are allowed.</DL>
-<HR>
-
-<A NAME="RE_LIMITED_OPS"><!-- --></A><H3>
-RE_LIMITED_OPS</H3>
-<PRE>
-public static final int <B>RE_LIMITED_OPS</B></PRE>
-<DL>
-<DD>Syntax bit. No alternation (|), match one-or-more (+), or 
- match zero-or-one (?) operators.</DL>
-<HR>
-
-<A NAME="RE_NEWLINE_ALT"><!-- --></A><H3>
-RE_NEWLINE_ALT</H3>
-<PRE>
-public static final int <B>RE_NEWLINE_ALT</B></PRE>
-<DL>
-<DD>Syntax bit. Newline is an alternation operator.</DL>
-<HR>
-
-<A NAME="RE_NO_BK_BRACES"><!-- --></A><H3>
-RE_NO_BK_BRACES</H3>
-<PRE>
-public static final int <B>RE_NO_BK_BRACES</B></PRE>
-<DL>
-<DD>Syntax bit. Intervals use { } instead of \{ \}</DL>
-<HR>
-
-<A NAME="RE_NO_BK_PARENS"><!-- --></A><H3>
-RE_NO_BK_PARENS</H3>
-<PRE>
-public static final int <B>RE_NO_BK_PARENS</B></PRE>
-<DL>
-<DD>Syntax bit. Grouping uses ( ) instead of \( \).</DL>
-<HR>
-
-<A NAME="RE_NO_BK_REFS"><!-- --></A><H3>
-RE_NO_BK_REFS</H3>
-<PRE>
-public static final int <B>RE_NO_BK_REFS</B></PRE>
-<DL>
-<DD>Syntax bit. Backreferences not allowed.</DL>
-<HR>
-
-<A NAME="RE_NO_BK_VBAR"><!-- --></A><H3>
-RE_NO_BK_VBAR</H3>
-<PRE>
-public static final int <B>RE_NO_BK_VBAR</B></PRE>
-<DL>
-<DD>Syntax bit. Alternation uses | instead of \|</DL>
-<HR>
-
-<A NAME="RE_NO_EMPTY_RANGES"><!-- --></A><H3>
-RE_NO_EMPTY_RANGES</H3>
-<PRE>
-public static final int <B>RE_NO_EMPTY_RANGES</B></PRE>
-<DL>
-<DD>Syntax bit. <B>Not implemented</B>.</DL>
-<HR>
-
-<A NAME="RE_UNMATCHED_RIGHT_PAREN_ORD"><!-- --></A><H3>
-RE_UNMATCHED_RIGHT_PAREN_ORD</H3>
-<PRE>
-public static final int <B>RE_UNMATCHED_RIGHT_PAREN_ORD</B></PRE>
-<DL>
-<DD>Syntax bit. An unmatched right parenthesis (')' or '\)', depending
- on RE_NO_BK_PARENS) will throw an exception when compiling.</DL>
-<HR>
-
-<A NAME="RE_HAT_LISTS_NOT_NEWLINE"><!-- --></A><H3>
-RE_HAT_LISTS_NOT_NEWLINE</H3>
-<PRE>
-public static final int <B>RE_HAT_LISTS_NOT_NEWLINE</B></PRE>
-<DL>
-<DD>Syntax bit. <B>Not implemented.</B></DL>
-<HR>
-
-<A NAME="RE_STINGY_OPS"><!-- --></A><H3>
-RE_STINGY_OPS</H3>
-<PRE>
-public static final int <B>RE_STINGY_OPS</B></PRE>
-<DL>
-<DD>Syntax bit.  Stingy matching is allowed (+?, *?, ??, {x,y}?).</DL>
-<HR>
-
-<A NAME="RE_CHAR_CLASS_ESCAPES"><!-- --></A><H3>
-RE_CHAR_CLASS_ESCAPES</H3>
-<PRE>
-public static final int <B>RE_CHAR_CLASS_ESCAPES</B></PRE>
-<DL>
-<DD>Syntax bit. Allow character class escapes (\d, \D, \s, \S, \w, \W).</DL>
-<HR>
-
-<A NAME="RE_PURE_GROUPING"><!-- --></A><H3>
-RE_PURE_GROUPING</H3>
-<PRE>
-public static final int <B>RE_PURE_GROUPING</B></PRE>
-<DL>
-<DD>Syntax bit. Allow use of (?:xxx) grouping (subexpression is not saved).</DL>
-<HR>
-
-<A NAME="RE_LOOKAHEAD"><!-- --></A><H3>
-RE_LOOKAHEAD</H3>
-<PRE>
-public static final int <B>RE_LOOKAHEAD</B></PRE>
-<DL>
-<DD>Syntax bit. Allow use of (?=xxx) and (?!xxx) apply the subexpression
- to the text following the current position without consuming that text.</DL>
-<HR>
-
-<A NAME="RE_STRING_ANCHORS"><!-- --></A><H3>
-RE_STRING_ANCHORS</H3>
-<PRE>
-public static final int <B>RE_STRING_ANCHORS</B></PRE>
-<DL>
-<DD>Syntax bit. Allow beginning- and end-of-string anchors (\A, \Z).</DL>
-<HR>
-
-<A NAME="RE_COMMENTS"><!-- --></A><H3>
-RE_COMMENTS</H3>
-<PRE>
-public static final int <B>RE_COMMENTS</B></PRE>
-<DL>
-<DD>Syntax bit. Allow embedded comments, (?#comment), as in Perl5.</DL>
-<HR>
-
-<A NAME="RE_CHAR_CLASS_ESC_IN_LISTS"><!-- --></A><H3>
-RE_CHAR_CLASS_ESC_IN_LISTS</H3>
-<PRE>
-public static final int <B>RE_CHAR_CLASS_ESC_IN_LISTS</B></PRE>
-<DL>
-<DD>Syntax bit. Allow character class escapes within lists, as in Perl5.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_AWK"><!-- --></A><H3>
-RE_SYNTAX_AWK</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_AWK</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the awk utility.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_ED"><!-- --></A><H3>
-RE_SYNTAX_ED</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_ED</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the ed utility.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_EGREP"><!-- --></A><H3>
-RE_SYNTAX_EGREP</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_EGREP</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the egrep utility.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_EMACS"><!-- --></A><H3>
-RE_SYNTAX_EMACS</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_EMACS</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the GNU Emacs editor.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_GREP"><!-- --></A><H3>
-RE_SYNTAX_GREP</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_GREP</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the grep utility.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_POSIX_AWK"><!-- --></A><H3>
-RE_SYNTAX_POSIX_AWK</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_POSIX_AWK</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the POSIX awk specification.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_POSIX_BASIC"><!-- --></A><H3>
-RE_SYNTAX_POSIX_BASIC</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_POSIX_BASIC</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates POSIX basic regular expression support.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_POSIX_EGREP"><!-- --></A><H3>
-RE_SYNTAX_POSIX_EGREP</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_POSIX_EGREP</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the POSIX egrep specification.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_POSIX_EXTENDED"><!-- --></A><H3>
-RE_SYNTAX_POSIX_EXTENDED</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_POSIX_EXTENDED</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates POSIX extended regular expression support.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_POSIX_MINIMAL_BASIC"><!-- --></A><H3>
-RE_SYNTAX_POSIX_MINIMAL_BASIC</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_POSIX_MINIMAL_BASIC</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates POSIX basic minimal regular expressions.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_POSIX_MINIMAL_EXTENDED"><!-- --></A><H3>
-RE_SYNTAX_POSIX_MINIMAL_EXTENDED</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_POSIX_MINIMAL_EXTENDED</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates POSIX extended minimal regular expressions.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_SED"><!-- --></A><H3>
-RE_SYNTAX_SED</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_SED</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in the sed utility.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_PERL4"><!-- --></A><H3>
-RE_SYNTAX_PERL4</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_PERL4</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in Larry Wall's perl, version 4,</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_PERL4_S"><!-- --></A><H3>
-RE_SYNTAX_PERL4_S</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_PERL4_S</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in Larry Wall's perl, version 4,
- using single line mode (/s modifier).</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_PERL5"><!-- --></A><H3>
-RE_SYNTAX_PERL5</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_PERL5</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in Larry Wall's perl, version 5.</DL>
-<HR>
-
-<A NAME="RE_SYNTAX_PERL5_S"><!-- --></A><H3>
-RE_SYNTAX_PERL5_S</H3>
-<PRE>
-public static final <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>RE_SYNTAX_PERL5_S</B></PRE>
-<DL>
-<DD>Predefined syntax.
- Emulates regular expression support in Larry Wall's perl, version 5,
- using single line mode (/s modifier).</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="RESyntax()"><!-- --></A><H3>
-RESyntax</H3>
-<PRE>
-public <B>RESyntax</B>()</PRE>
-<DL>
-<DD>Construct a new syntax object with all bits turned off.
- This is equivalent to RE_SYNTAX_EMACS.</DL>
-<HR>
-
-<A NAME="RESyntax(gnu.regexp.RESyntax)"><!-- --></A><H3>
-RESyntax</H3>
-<PRE>
-public <B>RESyntax</B>(<A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;other)</PRE>
-<DL>
-<DD>Construct a new syntax object with all bits set the same 
- as the other syntax.</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="makeFinal()"><!-- --></A><H3>
-makeFinal</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>makeFinal</B>()</PRE>
-<DL>
-<DD>Called internally when constructing predefined syntaxes
- so their interpretation cannot vary.  Conceivably useful
- for your syntaxes as well.  Causes IllegalAccessError to
- be thrown if any attempt to modify the syntax is made.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Returns:</B><DD>this object for convenient chaining</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(int)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public boolean <B>get</B>(int&nbsp;index)</PRE>
-<DL>
-<DD>Check if a given bit is set in this syntax.<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="set(int)"><!-- --></A><H3>
-set</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>set</B>(int&nbsp;index)</PRE>
-<DL>
-<DD>Set a given bit in this syntax.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - the constant (RESyntax.RE_xxx) bit to set.<DT><B>Returns:</B><DD>a reference to this object for easy chaining.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear(int)"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>clear</B>(int&nbsp;index)</PRE>
-<DL>
-<DD>Clear a given bit in this syntax.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - the constant (RESyntax.RE_xxx) bit to clear.<DT><B>Returns:</B><DD>a reference to this object for easy chaining.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setLineSeparator(java.lang.String)"><!-- --></A><H3>
-setLineSeparator</H3>
-<PRE>
-public <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A> <B>setLineSeparator</B>(java.lang.String&nbsp;aSeparator)</PRE>
-<DL>
-<DD>Changes the line separator string for regular expressions
- created using this RESyntax.  The default separator is the
- value returned by the system property "line.separator", which
- should be correct when reading platform-specific files from a
- filesystem.  However, many programs may collect input from
- sources where the line separator is differently specified (for
- example, in the applet environment, the text box widget
- interprets line breaks as single-character newlines,
- regardless of the host platform.
-
- Note that setting the line separator to a character or
- characters that have specific meaning within the current syntax
- can cause unexpected chronosynclastic infundibula.<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Returns:</B><DD>this object for convenient chaining</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getLineSeparator()"><!-- --></A><H3>
-getLineSeparator</H3>
-<PRE>
-public java.lang.String <B>getLineSeparator</B>()</PRE>
-<DL>
-<DD>Returns the currently active line separator string.  The default
- is the platform-dependent system property "line.separator".<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/REMatchEnumeration.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/UncheckedRE.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="RESyntax.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/UncheckedRE.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/UncheckedRE.html
deleted file mode 100644 (file)
index c620aba..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  UncheckedRE
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/RESyntax.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UncheckedRE.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_gnu.regexp.RE">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_gnu.regexp.RE">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp</FONT>
-<BR>
-Class  UncheckedRE</H2>
-<PRE>
-java.lang.Object
-  |
-  +--gnu.regexp.REToken
-        |
-        +--<A HREF="../../gnu/regexp/RE.html">gnu.regexp.RE</A>
-              |
-              +--<B>gnu.regexp.UncheckedRE</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT>public final class <B>UncheckedRE</B><DT>extends <A HREF="../../gnu/regexp/RE.html">RE</A></DL>
-
-<P>
-UncheckedRE is a subclass of RE that allows programmers an easier means
- of programmatically precompiling regular expressions.  It is constructed
- and used in exactly the same manner as an instance of the RE class; the
- only difference is that its constructors do not throw REException.
- Instead, if a syntax error is encountered during construction, a
- RuntimeException will be thrown.
- <P>
- Note that this makes UncheckedRE dangerous if constructed with
- dynamic data.  Do not use UncheckedRE unless you are completely sure
- that all input being passed to it contains valid, well-formed 
- regular expressions for the syntax specified.
-<P>
-<DL>
-<DT><B>Since: </B><DD>gnu.regexp 1.1.4</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../gnu/regexp/RE.html"><CODE>RE</CODE></A>, <A HREF="../../serialized-form.html#gnu.regexp.UncheckedRE">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="fields_inherited_from_class_gnu.regexp.RE"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Fields inherited from class gnu.regexp.<A HREF="../../gnu/regexp/RE.html">RE</A></B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../gnu/regexp/RE.html#REG_ANCHORINDEX">REG_ANCHORINDEX</A>, <A HREF="../../gnu/regexp/RE.html#REG_DOT_NEWLINE">REG_DOT_NEWLINE</A>, <A HREF="../../gnu/regexp/RE.html#REG_ICASE">REG_ICASE</A>, <A HREF="../../gnu/regexp/RE.html#REG_MULTILINE">REG_MULTILINE</A>, <A HREF="../../gnu/regexp/RE.html#REG_NO_INTERPOLATE">REG_NO_INTERPOLATE</A>, <A HREF="../../gnu/regexp/RE.html#REG_NOTBOL">REG_NOTBOL</A>, <A HREF="../../gnu/regexp/RE.html#REG_NOTEOL">REG_NOTEOL</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/UncheckedRE.html#UncheckedRE(java.lang.Object)">UncheckedRE</A></B>(java.lang.Object&nbsp;pattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a regular expression pattern buffer without any compilation
- flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/UncheckedRE.html#UncheckedRE(java.lang.Object, int)">UncheckedRE</A></B>(java.lang.Object&nbsp;pattern,
-            int&nbsp;cflags)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a regular expression pattern buffer using the specified
- compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../gnu/regexp/UncheckedRE.html#UncheckedRE(java.lang.Object, int, gnu.regexp.RESyntax)">UncheckedRE</A></B>(java.lang.Object&nbsp;pattern,
-            int&nbsp;cflags,
-            <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;syntax)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a regular expression pattern buffer using the specified
- compilation flags and regular expression syntax.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="methods_inherited_from_class_gnu.regexp.RE"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class gnu.regexp.<A HREF="../../gnu/regexp/RE.html">RE</A></B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../gnu/regexp/RE.html#getAllMatches(java.lang.Object)">getAllMatches</A>, <A HREF="../../gnu/regexp/RE.html#getAllMatches(java.lang.Object, int)">getAllMatches</A>, <A HREF="../../gnu/regexp/RE.html#getAllMatches(java.lang.Object, int, int)">getAllMatches</A>, <A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object)">getMatch</A>, <A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object, int)">getMatch</A>, <A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object, int, int)">getMatch</A>, <A HREF="../../gnu/regexp/RE.html#getMatch(java.lang.Object, int, int, java.lang.StringBuffer)">getMatch</A>, <A HREF="../../gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object)">getMatchEnumeration</A>, <A HREF="../../gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object, int)">getMatchEnumeration</A>, <A HREF="../../gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object, int, int)">getMatchEnumeration</A>, <A HREF="../../gnu/regexp/RE.html#getMinimumLength()">getMinimumLength</A>, <A HREF="../../gnu/regexp/RE.html#getNumSubs()">getNumSubs</A>, <A HREF="../../gnu/regexp/RE.html#isMatch(java.lang.Object)">isMatch</A>, <A HREF="../../gnu/regexp/RE.html#isMatch(java.lang.Object, int)">isMatch</A>, <A HREF="../../gnu/regexp/RE.html#isMatch(java.lang.Object, int, int)">isMatch</A>, <A HREF="../../gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String)">substitute</A>, <A HREF="../../gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String, int)">substitute</A>, <A HREF="../../gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String, int, int)">substitute</A>, <A HREF="../../gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String)">substituteAll</A>, <A HREF="../../gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String, int)">substituteAll</A>, <A HREF="../../gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String, int, int)">substituteAll</A>, <A HREF="../../gnu/regexp/RE.html#toString()">toString</A>, <A HREF="../../gnu/regexp/RE.html#version()">version</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="UncheckedRE(java.lang.Object)"><!-- --></A><H3>
-UncheckedRE</H3>
-<PRE>
-public <B>UncheckedRE</B>(java.lang.Object&nbsp;pattern)</PRE>
-<DL>
-<DD>Constructs a regular expression pattern buffer without any compilation
- flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - A regular expression pattern, in the form of a String,
-   StringBuffer or char[].  Other input types will be converted to
-   strings using the toString() method.<DT><B>Throws:</B><DD><CODE>java.lang.RuntimeException</CODE> - The input pattern could not be parsed.<DD><CODE>NullPointerException</CODE> - The pattern was null.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="UncheckedRE(java.lang.Object, int)"><!-- --></A><H3>
-UncheckedRE</H3>
-<PRE>
-public <B>UncheckedRE</B>(java.lang.Object&nbsp;pattern,
-                   int&nbsp;cflags)</PRE>
-<DL>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - A regular expression pattern, in the form of a String,
-   StringBuffer, or char[].  Other input types will be converted to
-   strings using the toString() method.<DD><CODE>cflags</CODE> - The logical OR of any combination of the compilation flags in the RE class.<DT><B>Throws:</B><DD><CODE>java.lang.RuntimeException</CODE> - The input pattern could not be parsed.<DD><CODE>NullPointerException</CODE> - The pattern was null.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="UncheckedRE(java.lang.Object, int, gnu.regexp.RESyntax)"><!-- --></A><H3>
-UncheckedRE</H3>
-<PRE>
-public <B>UncheckedRE</B>(java.lang.Object&nbsp;pattern,
-                   int&nbsp;cflags,
-                   <A HREF="../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;syntax)</PRE>
-<DL>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and regular expression syntax.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - A regular expression pattern, in the form of a String,
-   StringBuffer, or char[].  Other input types will be converted to
-   strings using the toString() method.<DD><CODE>cflags</CODE> - The logical OR of any combination of the compilation flags in the RE class.<DD><CODE>syntax</CODE> - The type of regular expression syntax to use.<DT><B>Throws:</B><DD><CODE>java.lang.RuntimeException</CODE> - The input pattern could not be parsed.<DD><CODE>NullPointerException</CODE> - The pattern was null.</DL>
-</DD>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../gnu/regexp/RESyntax.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UncheckedRE.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_gnu.regexp.RE">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_gnu.regexp.RE">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-frame.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-frame.html
deleted file mode 100644 (file)
index 7094a43..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Package gnu.regexp
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../gnu/regexp/package-summary.html" TARGET="classFrame">gnu.regexp</A></FONT>
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Interfaces</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="CharIndexed.html" TARGET="classFrame"><I>CharIndexed</I></A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="RE.html" TARGET="classFrame">RE</A>
-<BR>
-<A HREF="REFilterInputStream.html" TARGET="classFrame">REFilterInputStream</A>
-<BR>
-<A HREF="REFilterReader.html" TARGET="classFrame">REFilterReader</A>
-<BR>
-<A HREF="REMatch.html" TARGET="classFrame">REMatch</A>
-<BR>
-<A HREF="REMatchEnumeration.html" TARGET="classFrame">REMatchEnumeration</A>
-<BR>
-<A HREF="RESyntax.html" TARGET="classFrame">RESyntax</A>
-<BR>
-<A HREF="UncheckedRE.html" TARGET="classFrame">UncheckedRE</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Exceptions</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="REException.html" TARGET="classFrame">REException</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-summary.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-summary.html
deleted file mode 100644 (file)
index a8c3b35..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Package gnu.regexp
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/util/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<H2>
-Package gnu.regexp
-</H2>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="CharIndexed.html"><I>CharIndexed</I></A></B></TD>
-<TD>Defines the interface used internally so that different types of source
- text can be accessed in the same way.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="RE.html">RE</A></B></TD>
-<TD>RE provides the user interface for compiling and matching regular
- expressions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="REFilterInputStream.html">REFilterInputStream</A></B></TD>
-<TD><B>Deprecated.</B>&nbsp;<I>This class cannot properly handle all character
-             encodings.</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="REFilterReader.html">REFilterReader</A></B></TD>
-<TD>Replaces instances of a given RE with replacement text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="REMatch.html">REMatch</A></B></TD>
-<TD>An instance of this class represents a match
- completed by a gnu.regexp matching function.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="REMatchEnumeration.html">REMatchEnumeration</A></B></TD>
-<TD>An REMatchEnumeration enumerates regular expression matches over a
- given input text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="RESyntax.html">RESyntax</A></B></TD>
-<TD>An RESyntax specifies the way a regular expression will be compiled.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="UncheckedRE.html">UncheckedRE</A></B></TD>
-<TD>UncheckedRE is a subclass of RE that allows programmers an easier means
- of programmatically precompiling regular expressions.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Exception Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="REException.html">REException</A></B></TD>
-<TD>This is the regular expression exception class.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/util/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-tree.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/package-tree.html
deleted file mode 100644 (file)
index f73cf65..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: gnu.regexp Class Hierarchy
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/util/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package gnu.regexp
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies: </B><DD><A HREF="../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">class java.lang.Object<UL>
-<LI TYPE="circle">class java.io.InputStream<UL>
-<LI TYPE="circle">class java.io.FilterInputStream<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/REFilterInputStream.html"><B>REFilterInputStream</B></A></UL>
-</UL>
-<LI TYPE="circle">class java.io.Reader<UL>
-<LI TYPE="circle">class java.io.FilterReader<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/REFilterReader.html"><B>REFilterReader</B></A></UL>
-</UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/REMatch.html"><B>REMatch</B></A> (implements java.lang.Cloneable, java.io.Serializable)
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/REMatchEnumeration.html"><B>REMatchEnumeration</B></A> (implements java.util.Enumeration, java.io.Serializable)
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/RESyntax.html"><B>RESyntax</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">class gnu.regexp.REToken (implements java.io.Serializable)
-<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/RE.html"><B>RE</B></A><UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/UncheckedRE.html"><B>UncheckedRE</B></A></UL>
-</UL>
-<LI TYPE="circle">class java.lang.Throwable (implements java.io.Serializable)
-<UL>
-<LI TYPE="circle">class java.lang.Exception<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="../../gnu/regexp/REException.html"><B>REException</B></A></UL>
-</UL>
-</UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">interface gnu.regexp.<A HREF="../../gnu/regexp/CharIndexed.html"><B>CharIndexed</B></A></UL>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;<A HREF="../../gnu/regexp/util/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Egrep.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Egrep.html
deleted file mode 100644 (file)
index fa7951e..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  Egrep
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/Grep.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Egrep.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp.util</FONT>
-<BR>
-Class  Egrep</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.util.Egrep</B>
-</PRE>
-<HR>
-<DL>
-<DT>public class <B>Egrep</B><DT>extends java.lang.Object</DL>
-
-<P>
-This is a front end to the gnu.regexp.util.Grep class which sets the
- syntax used to RE_SYNTAX_EGREP, which aims to emulate the standard UNIX
- egrep command.
-<P>
-<DL>
-<DT><B>Version: </B><DD>1.01</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/Egrep.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;argv)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes Grep.grep() using the RE_SYNTAX_EGREP syntax and the
- command line arguments specified.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="main(java.lang.String[])"><!-- --></A><H3>
-main</H3>
-<PRE>
-public static void <B>main</B>(java.lang.String[]&nbsp;argv)</PRE>
-<DL>
-<DD>Invokes Grep.grep() using the RE_SYNTAX_EGREP syntax and the
- command line arguments specified.  Output is sent to System.out.
- For a list of options, use the argument "--help".</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/Grep.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Egrep.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Grep.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Grep.html
deleted file mode 100644 (file)
index d67d999..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  Grep
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/Egrep.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/REApplet.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Grep.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp.util</FONT>
-<BR>
-Class  Grep</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.util.Grep</B>
-</PRE>
-<HR>
-<DL>
-<DT>public class <B>Grep</B><DT>extends java.lang.Object</DL>
-
-<P>
-Grep is a pure-Java clone of the GNU grep utility.  As such, it is much
- slower and not as full-featured, but it has the advantage of being
- available on any system with a Java virtual machine.
-<P>
-<DL>
-<DT><B>Version: </B><DD>1.03</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A>
-         <A HREF="http://www.csis.hku.hk/~sdlee/">Lee Sau Dan</A>
-         <A HREF="http://www.capital.net/~dittmer/">Ulf Dittmer</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/Grep.html#grep(java.lang.String[], gnu.regexp.RESyntax, java.io.PrintStream)">grep</A></B>(java.lang.String[]&nbsp;argv,
-     <A HREF="../../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;syntax,
-     java.io.PrintStream&nbsp;out)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runs Grep with the specified arguments.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/Grep.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;argv)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes the grep() function below with the command line arguments
- and using the RESyntax.RE_SYNTAX_GREP syntax, which attempts to
- emulate the traditional UNIX grep syntax.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="main(java.lang.String[])"><!-- --></A><H3>
-main</H3>
-<PRE>
-public static void <B>main</B>(java.lang.String[]&nbsp;argv)</PRE>
-<DL>
-<DD>Invokes the grep() function below with the command line arguments
- and using the RESyntax.RE_SYNTAX_GREP syntax, which attempts to
- emulate the traditional UNIX grep syntax.</DL>
-<HR>
-
-<A NAME="grep(java.lang.String[], gnu.regexp.RESyntax, java.io.PrintStream)"><!-- --></A><H3>
-grep</H3>
-<PRE>
-public static int <B>grep</B>(java.lang.String[]&nbsp;argv,
-                       <A HREF="../../../gnu/regexp/RESyntax.html">RESyntax</A>&nbsp;syntax,
-                       java.io.PrintStream&nbsp;out)</PRE>
-<DL>
-<DD>Runs Grep with the specified arguments.  For a list of 
- supported options, specify "--help".
-
- This is the meat of the grep routine, but unlike main(), you can
- specify your own syntax and PrintStream to use for output.</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/Egrep.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/REApplet.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Grep.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/REApplet.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/REApplet.html
deleted file mode 100644 (file)
index d82ccb0..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  REApplet
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/Grep.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/RETest.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REApplet.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp.util</FONT>
-<BR>
-Class  REApplet</H2>
-<PRE>
-java.lang.Object
-  |
-  +--java.awt.Component
-        |
-        +--java.awt.Container
-              |
-              +--java.awt.Panel
-                    |
-                    +--java.applet.Applet
-                          |
-                          +--<B>gnu.regexp.util.REApplet</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>javax.accessibility.Accessible, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT>public class <B>REApplet</B><DT>extends java.applet.Applet</DL>
-
-<P>
-This is a simple applet to demonstrate the capabilities of gnu.regexp.
- To run it, use appletviewer on the reapplet.html file included in the
- documentation directory.
-<P>
-<DL>
-<DT><B>Version: </B><DD>1.02</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-<DT><B>See Also: </B><DD><A HREF="../../../serialized-form.html#gnu.regexp.util.REApplet">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="fields_inherited_from_class_java.awt.Component"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Fields inherited from class java.awt.Component</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="fields_inherited_from_class_java.awt.image.ImageObserver"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Fields inherited from interface java.awt.image.ImageObserver</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/REApplet.html#REApplet()">REApplet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an REApplet.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/REApplet.html#action(java.awt.Event, java.lang.Object)">action</A></B>(java.awt.Event&nbsp;e,
-       java.lang.Object&nbsp;arg)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Handles events in the applet.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/REApplet.html#init()">init</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializes the applet and constructs GUI elements.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.applet.Applet"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.applet.Applet</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>destroy, getAccessibleContext, getAppletContext, getAppletInfo, getAudioClip, getAudioClip, getCodeBase, getDocumentBase, getImage, getImage, getLocale, getParameter, getParameterInfo, isActive, newAudioClip, play, play, resize, resize, setStub, showStatus, start, stop</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.awt.Panel"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.awt.Panel</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>addNotify</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.awt.Container"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.awt.Container</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>add, add, add, add, add, addContainerListener, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getListeners, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, remove, remove, removeAll, removeContainerListener, removeNotify, setFont, setLayout, update, validate</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.awt.Component"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.awt.Component</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage, checkImage, contains, contains, createImage, createImage, disable, dispatchEvent, enable, enable, enableInputMethods, getBackground, getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getInputContext, getInputMethodRequests, getLocation, getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isDisplayable, isDoubleBuffered, isEnabled, isFocusTraversable, isLightweight, isOpaque, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, show, size, toString, transferFocus</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="REApplet()"><!-- --></A><H3>
-REApplet</H3>
-<PRE>
-public <B>REApplet</B>()</PRE>
-<DL>
-<DD>Creates an REApplet.</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="init()"><!-- --></A><H3>
-init</H3>
-<PRE>
-public void <B>init</B>()</PRE>
-<DL>
-<DD>Initializes the applet and constructs GUI elements.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>init</CODE> in class <CODE>java.applet.Applet</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="action(java.awt.Event, java.lang.Object)"><!-- --></A><H3>
-action</H3>
-<PRE>
-public boolean <B>action</B>(java.awt.Event&nbsp;e,
-                      java.lang.Object&nbsp;arg)</PRE>
-<DL>
-<DD>Handles events in the applet.  Returns true if the indicated event
- was handled, false for all other events.<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>action</CODE> in class <CODE>java.awt.Component</CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/Grep.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/RETest.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="REApplet.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.awt.Component">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/RETest.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/RETest.html
deleted file mode 100644 (file)
index dd5d0e7..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  RETest
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/REApplet.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/Tests.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="RETest.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp.util</FONT>
-<BR>
-Class  RETest</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.util.RETest</B>
-</PRE>
-<HR>
-<DL>
-<DT>public class <B>RETest</B><DT>extends java.lang.Object</DL>
-
-<P>
-RETest provides a simple way to test regular expressions.
-  It runs from the command line using the Java interpreter.
-  To use it, enter the following from a command prompt (provided
-  that the Java system knows where to find the RETest bytecodes):
-  <BR><CODE>java gnu.regexp.util.RETest [regExp] [inputString]</CODE><BR>
-  where <i>regExp</i> is a regular expression (you'll probably have
-  to escape shell meta-characters) and <i>inputString</i> is the string
-  to match against (again, put it in quotes or escape any shell meta-
-  characters).
-  <P>
-  The test function will report the package version number, whether
-  the expression matches the input string, what the match it found was,
-  and the contents of any subexpressions, if applicable.
-  <P>
-  You may optionally add a third integer argument which is the number of
-  times to repeat the test.  When this option is used, RETest will report
-  average compile and match times.
-<P>
-<DL>
-<DT><B>Version: </B><DD>1.01</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/RETest.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;argv)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes the test function with the command line arguments specified.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="main(java.lang.String[])"><!-- --></A><H3>
-main</H3>
-<PRE>
-public static void <B>main</B>(java.lang.String[]&nbsp;argv)
-                 throws <A HREF="../../../gnu/regexp/REException.html">REException</A></PRE>
-<DL>
-<DD>Invokes the test function with the command line arguments specified.
- See class description for usage notes.<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>argv</CODE> - The command line arguments.<DT><B>Throws:</B><DD><CODE><A HREF="../../../gnu/regexp/REException.html">REException</A></CODE> - There was an error compiling or executing the regular expression.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/REApplet.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../gnu/regexp/util/Tests.html"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="RETest.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Tests.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/Tests.html
deleted file mode 100644 (file)
index e277e07..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: Class  Tests
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/RETest.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Tests.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-gnu.regexp.util</FONT>
-<BR>
-Class  Tests</H2>
-<PRE>
-java.lang.Object
-  |
-  +--<B>gnu.regexp.util.Tests</B>
-</PRE>
-<HR>
-<DL>
-<DT>public class <B>Tests</B><DT>extends java.lang.Object</DL>
-
-<P>
-This is a very basic testsuite application for gnu.regexp.
-<P>
-<DL>
-<DT><B>Version: </B><DD>1.1.1</DD>
-<DT><B>Author: </B><DD><A HREF="mailto:wes@cacas.org">Wes Biggs</A></DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../gnu/regexp/util/Tests.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;argv)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runs the testsuite.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class java.lang.Object</B></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="main(java.lang.String[])"><!-- --></A><H3>
-main</H3>
-<PRE>
-public static void <B>main</B>(java.lang.String[]&nbsp;argv)
-                 throws <A HREF="../../../gnu/regexp/REException.html">REException</A></PRE>
-<DL>
-<DD>Runs the testsuite.  No command line arguments are necessary.<DD><DL>
-<DT><B>Throws:</B><DD><CODE><A HREF="../../../gnu/regexp/REException.html">REException</A></CODE> - An error occurred compiling a regular expression.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/util/RETest.html"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Tests.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-frame.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-frame.html
deleted file mode 100644 (file)
index df70c44..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Package gnu.regexp.util
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../gnu/regexp/util/package-summary.html" TARGET="classFrame">gnu.regexp.util</A></FONT>
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="Egrep.html" TARGET="classFrame">Egrep</A>
-<BR>
-<A HREF="Grep.html" TARGET="classFrame">Grep</A>
-<BR>
-<A HREF="REApplet.html" TARGET="classFrame">REApplet</A>
-<BR>
-<A HREF="RETest.html" TARGET="classFrame">RETest</A>
-<BR>
-<A HREF="Tests.html" TARGET="classFrame">Tests</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-summary.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-summary.html
deleted file mode 100644 (file)
index bf8b0a0..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Package gnu.regexp.util
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<H2>
-Package gnu.regexp.util
-</H2>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="Egrep.html">Egrep</A></B></TD>
-<TD>This is a front end to the gnu.regexp.util.Grep class which sets the
- syntax used to RE_SYNTAX_EGREP, which aims to emulate the standard UNIX
- egrep command.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="Grep.html">Grep</A></B></TD>
-<TD>Grep is a pure-Java clone of the GNU grep utility.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="REApplet.html">REApplet</A></B></TD>
-<TD>This is a simple applet to demonstrate the capabilities of gnu.regexp.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="RETest.html">RETest</A></B></TD>
-<TD>RETest provides a simple way to test regular expressions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="Tests.html">Tests</A></B></TD>
-<TD>This is a very basic testsuite application for gnu.regexp.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-tree.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/gnu/regexp/util/package-tree.html
deleted file mode 100644 (file)
index c3f07c7..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: gnu.regexp.util Class Hierarchy
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package gnu.regexp.util
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies: </B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">class java.lang.Object<UL>
-<LI TYPE="circle">class java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable)
-<UL>
-<LI TYPE="circle">class java.awt.Container<UL>
-<LI TYPE="circle">class java.awt.Panel (implements javax.accessibility.Accessible)
-<UL>
-<LI TYPE="circle">class java.applet.Applet<UL>
-<LI TYPE="circle">class gnu.regexp.util.<A HREF="../../../gnu/regexp/util/REApplet.html"><B>REApplet</B></A></UL>
-</UL>
-</UL>
-</UL>
-<LI TYPE="circle">class gnu.regexp.util.<A HREF="../../../gnu/regexp/util/Egrep.html"><B>Egrep</B></A><LI TYPE="circle">class gnu.regexp.util.<A HREF="../../../gnu/regexp/util/Grep.html"><B>Grep</B></A><LI TYPE="circle">class gnu.regexp.util.<A HREF="../../../gnu/regexp/util/RETest.html"><B>RETest</B></A><LI TYPE="circle">class gnu.regexp.util.<A HREF="../../../gnu/regexp/util/Tests.html"><B>Tests</B></A></UL>
-</UL>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../gnu/regexp/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/help-doc.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/help-doc.html
deleted file mode 100644 (file)
index 0856e93..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-: API Help
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<CENTER>
-<H1>
-How This API Document Is Organized</H1>
-</CENTER>
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
-Overview</H3>
-<BLOCKQUOTE>
-
-<P>
-The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
-<H3>
-Package</H3>
-<BLOCKQUOTE>
-
-<P>
-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
-<LI>Interfaces (italic)<LI>Classes<LI>Exceptions<LI>Errors</UL>
-</BLOCKQUOTE>
-<H3>
-Class/Interface</H3>
-<BLOCKQUOTE>
-
-<P>
-Each class, interface, inner class and inner interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
-<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
-<P>
-<LI>Inner Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
-<P>
-<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
-<H3>
-Tree (Class Hierarchy)</H3>
-<BLOCKQUOTE>
-There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
-<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
-</BLOCKQUOTE>
-<H3>
-Deprecated API</H3>
-<BLOCKQUOTE>
-The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
-<H3>
-Index</H3>
-<BLOCKQUOTE>
-The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
-<H3>
-Prev/Next</H3>
-These links take you to the next or previous class, interface, package, or related page.<H3>
-Frames/No Frames</H3>
-These links show and hide the HTML frames.  All pages are available with or without frames.
-<P>
-<H3>
-Serialized Form</H3>
-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
-<P>
-<FONT SIZE="-1">
-<EM>
-This help file applies to API documentation generated using the standard doclet. </EM>
-</FONT>
-<BR>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/index-all.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/index-all.html
deleted file mode 100644 (file)
index 5fbad4f..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Index
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<A HREF="#_A_">A</A> <A HREF="#_C_">C</A> <A HREF="#_E_">E</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <HR>
-<A NAME="_A_"><!-- --></A><H2>
-<B>A</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/util/REApplet.html#action(java.awt.Event, java.lang.Object)"><B>action(Event, Object)</B></A> - 
-Method in class gnu.regexp.util.<A HREF="gnu/regexp/util/REApplet.html">REApplet</A>
-<DD>Handles events in the applet.
-</DL>
-<HR>
-<A NAME="_C_"><!-- --></A><H2>
-<B>C</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/CharIndexed.html#charAt(int)"><B>charAt(int)</B></A> - 
-Method in interface gnu.regexp.<A HREF="gnu/regexp/CharIndexed.html">CharIndexed</A>
-<DD>Returns the character at the given offset past the current cursor
- position in the input.
-<DT><A HREF="gnu/regexp/CharIndexed.html"><B>CharIndexed</B></A> - interface gnu.regexp.<A HREF="gnu/regexp/CharIndexed.html">CharIndexed</A>.<DD>Defines the interface used internally so that different types of source
- text can be accessed in the same way.<DT><A HREF="gnu/regexp/RESyntax.html#clear(int)"><B>clear(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Clear a given bit in this syntax.
-<DT><A HREF="gnu/regexp/REMatch.html#clone()"><B>clone()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_E_"><!-- --></A><H2>
-<B>E</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/util/Egrep.html"><B>Egrep</B></A> - class gnu.regexp.util.<A HREF="gnu/regexp/util/Egrep.html">Egrep</A>.<DD>This is a front end to the gnu.regexp.util.Grep class which sets the
- syntax used to RE_SYNTAX_EGREP, which aims to emulate the standard UNIX
- egrep command.</DL>
-<HR>
-<A NAME="_G_"><!-- --></A><H2>
-<B>G</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/RESyntax.html#get(int)"><B>get(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Check if a given bit is set in this syntax.
-<DT><A HREF="gnu/regexp/RE.html#getAllMatches(java.lang.Object)"><B>getAllMatches(Object)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns an array of all matches found in the input.
-<DT><A HREF="gnu/regexp/RE.html#getAllMatches(java.lang.Object, int)"><B>getAllMatches(Object, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns an array of all matches found in the input,
- beginning at the specified index position.
-<DT><A HREF="gnu/regexp/RE.html#getAllMatches(java.lang.Object, int, int)"><B>getAllMatches(Object, int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns an array of all matches found in the input string,
- beginning at the specified index position and using the specified
- execution flags.
-<DT><A HREF="gnu/regexp/REMatch.html#getEndIndex()"><B>getEndIndex()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Returns the index within the input string where the match in
- its entirety ends.
-<DT><A HREF="gnu/regexp/REMatch.html#getEndIndex(int)"><B>getEndIndex(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> ends, or <code>-1</code> if
- the subexpression does not exist.
-<DT><A HREF="gnu/regexp/RESyntax.html#getLineSeparator()"><B>getLineSeparator()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Returns the currently active line separator string.
-<DT><A HREF="gnu/regexp/RE.html#getMatch(java.lang.Object)"><B>getMatch(Object)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns the first match found in the input.
-<DT><A HREF="gnu/regexp/RE.html#getMatch(java.lang.Object, int)"><B>getMatch(Object, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns the first match found in the input, beginning
- the search at the specified index.
-<DT><A HREF="gnu/regexp/RE.html#getMatch(java.lang.Object, int, int)"><B>getMatch(Object, int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns the first match found in the input, beginning
- the search at the specified index, and using the specified
- execution flags.
-<DT><A HREF="gnu/regexp/RE.html#getMatch(java.lang.Object, int, int, java.lang.StringBuffer)"><B>getMatch(Object, int, int, StringBuffer)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns the first match found in the input, beginning the search
- at the specified index, and using the specified execution flags.
-<DT><A HREF="gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object)"><B>getMatchEnumeration(Object)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.
-<DT><A HREF="gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object, int)"><B>getMatchEnumeration(Object, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.
-<DT><A HREF="gnu/regexp/RE.html#getMatchEnumeration(java.lang.Object, int, int)"><B>getMatchEnumeration(Object, int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns an REMatchEnumeration that can be used to iterate over the
- matches found in the input text.
-<DT><A HREF="gnu/regexp/REException.html#getMessage()"><B>getMessage()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Reports the descriptive message associated with this exception
- as well as its index position in the string or character array
- being compiled.
-<DT><A HREF="gnu/regexp/RE.html#getMinimumLength()"><B>getMinimumLength()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns the minimum number of characters that could possibly
- constitute a match of this regular expression.
-<DT><A HREF="gnu/regexp/RE.html#getNumSubs()"><B>getNumSubs()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns the maximum number of subexpressions in this regular expression.
-<DT><A HREF="gnu/regexp/REException.html#getPosition()"><B>getPosition()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Returns the position, relative to the string or character array being
- compiled, where the error occurred.
-<DT><A HREF="gnu/regexp/REMatch.html#getStartIndex()"><B>getStartIndex()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Returns the index within the input text where the match in its entirety
- began.
-<DT><A HREF="gnu/regexp/REMatch.html#getStartIndex(int)"><B>getStartIndex(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Returns the index within the input string used to generate this match
- where subexpression number <i>sub</i> begins, or <code>-1</code> if
- the subexpression does not exist.
-<DT><A HREF="gnu/regexp/REMatch.html#getSubEndIndex(int)"><B>getSubEndIndex(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD><B>Deprecated.</B>&nbsp;<I>Use getEndIndex(int) instead</I>
-<DT><A HREF="gnu/regexp/REMatch.html#getSubStartIndex(int)"><B>getSubStartIndex(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD><B>Deprecated.</B>&nbsp;<I>Use getStartIndex(int) instead.</I>
-<DT><A HREF="gnu/regexp/REException.html#getType()"><B>getType()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Returns the type of the exception, one of the constants listed above.
-<DT><A HREF="gnu/regexp/package-summary.html"><B>gnu.regexp</B></A> - package gnu.regexp<DD>&nbsp;<DT><A HREF="gnu/regexp/util/package-summary.html"><B>gnu.regexp.util</B></A> - package gnu.regexp.util<DD>&nbsp;<DT><A HREF="gnu/regexp/util/Grep.html"><B>Grep</B></A> - class gnu.regexp.util.<A HREF="gnu/regexp/util/Grep.html">Grep</A>.<DD>Grep is a pure-Java clone of the GNU grep utility.<DT><A HREF="gnu/regexp/util/Grep.html#grep(java.lang.String[], gnu.regexp.RESyntax, java.io.PrintStream)"><B>grep(String[], RESyntax, PrintStream)</B></A> - 
-Static method in class gnu.regexp.util.<A HREF="gnu/regexp/util/Grep.html">Grep</A>
-<DD>Runs Grep with the specified arguments.
-</DL>
-<HR>
-<A NAME="_H_"><!-- --></A><H2>
-<B>H</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/REMatchEnumeration.html#hasMoreElements()"><B>hasMoreElements()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A>
-<DD>Returns true if there are more matches in the input text.
-<DT><A HREF="gnu/regexp/REMatchEnumeration.html#hasMoreMatches()"><B>hasMoreMatches()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A>
-<DD>Returns true if there are more matches in the input text.
-<DT><A HREF="gnu/regexp/REMatchEnumeration.html#hasMoreMatches(java.lang.StringBuffer)"><B>hasMoreMatches(StringBuffer)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A>
-<DD>Returns true if there are more matches in the input text.
-</DL>
-<HR>
-<A NAME="_I_"><!-- --></A><H2>
-<B>I</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/util/REApplet.html#init()"><B>init()</B></A> - 
-Method in class gnu.regexp.util.<A HREF="gnu/regexp/util/REApplet.html">REApplet</A>
-<DD>Initializes the applet and constructs GUI elements.
-<DT><A HREF="gnu/regexp/RE.html#isMatch(java.lang.Object)"><B>isMatch(Object)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Checks if the regular expression matches the input in its entirety.
-<DT><A HREF="gnu/regexp/RE.html#isMatch(java.lang.Object, int)"><B>isMatch(Object, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Checks if the input string, starting from index, is an exact match of
- this regular expression.
-<DT><A HREF="gnu/regexp/RE.html#isMatch(java.lang.Object, int, int)"><B>isMatch(Object, int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Checks if the input, starting from index and using the specified
- execution flags, is an exact match of this regular expression.
-<DT><A HREF="gnu/regexp/CharIndexed.html#isValid()"><B>isValid()</B></A> - 
-Method in interface gnu.regexp.<A HREF="gnu/regexp/CharIndexed.html">CharIndexed</A>
-<DD>Returns true if the most recent move() operation placed the cursor
- position at a valid position in the input.
-</DL>
-<HR>
-<A NAME="_M_"><!-- --></A><H2>
-<B>M</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/util/RETest.html#main(java.lang.String[])"><B>main(String[])</B></A> - 
-Static method in class gnu.regexp.util.<A HREF="gnu/regexp/util/RETest.html">RETest</A>
-<DD>Invokes the test function with the command line arguments specified.
-<DT><A HREF="gnu/regexp/util/Tests.html#main(java.lang.String[])"><B>main(String[])</B></A> - 
-Static method in class gnu.regexp.util.<A HREF="gnu/regexp/util/Tests.html">Tests</A>
-<DD>Runs the testsuite.
-<DT><A HREF="gnu/regexp/util/Grep.html#main(java.lang.String[])"><B>main(String[])</B></A> - 
-Static method in class gnu.regexp.util.<A HREF="gnu/regexp/util/Grep.html">Grep</A>
-<DD>Invokes the grep() function below with the command line arguments
- and using the RESyntax.RE_SYNTAX_GREP syntax, which attempts to
- emulate the traditional UNIX grep syntax.
-<DT><A HREF="gnu/regexp/util/Egrep.html#main(java.lang.String[])"><B>main(String[])</B></A> - 
-Static method in class gnu.regexp.util.<A HREF="gnu/regexp/util/Egrep.html">Egrep</A>
-<DD>Invokes Grep.grep() using the RE_SYNTAX_EGREP syntax and the
- command line arguments specified.
-<DT><A HREF="gnu/regexp/RESyntax.html#makeFinal()"><B>makeFinal()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Called internally when constructing predefined syntaxes
- so their interpretation cannot vary.
-<DT><A HREF="gnu/regexp/REFilterInputStream.html#markSupported()"><B>markSupported()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html">REFilterInputStream</A>
-<DD><B>Deprecated.</B>&nbsp;Returns false.
-<DT><A HREF="gnu/regexp/REFilterReader.html#markSupported()"><B>markSupported()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html">REFilterReader</A>
-<DD>Returns false.
-<DT><A HREF="gnu/regexp/CharIndexed.html#move(int)"><B>move(int)</B></A> - 
-Method in interface gnu.regexp.<A HREF="gnu/regexp/CharIndexed.html">CharIndexed</A>
-<DD>Shifts the input buffer by a given number of positions.
-</DL>
-<HR>
-<A NAME="_N_"><!-- --></A><H2>
-<B>N</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/REMatchEnumeration.html#nextElement()"><B>nextElement()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A>
-<DD>Returns the next match in the input text.
-<DT><A HREF="gnu/regexp/REMatchEnumeration.html#nextMatch()"><B>nextMatch()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A>
-<DD>Returns the next match in the input text.
-</DL>
-<HR>
-<A NAME="_O_"><!-- --></A><H2>
-<B>O</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/CharIndexed.html#OUT_OF_BOUNDS"><B>OUT_OF_BOUNDS</B></A> - 
-Static variable in interface gnu.regexp.<A HREF="gnu/regexp/CharIndexed.html">CharIndexed</A>
-<DD>Defines a constant (0xFFFF was somewhat arbitrarily chosen)
- that can be returned by the charAt() function indicating that
- the specified index is out of range.
-</DL>
-<HR>
-<A NAME="_R_"><!-- --></A><H2>
-<B>R</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/RE.html"><B>RE</B></A> - class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>.<DD>RE provides the user interface for compiling and matching regular
- expressions.<DT><A HREF="gnu/regexp/RESyntax.html#RE_BACKSLASH_ESCAPE_IN_LISTS"><B>RE_BACKSLASH_ESCAPE_IN_LISTS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_BK_PLUS_QM"><B>RE_BK_PLUS_QM</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_CHAR_CLASS_ESC_IN_LISTS"><B>RE_CHAR_CLASS_ESC_IN_LISTS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_CHAR_CLASS_ESCAPES"><B>RE_CHAR_CLASS_ESCAPES</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_CHAR_CLASSES"><B>RE_CHAR_CLASSES</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_COMMENTS"><B>RE_COMMENTS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_CONTEXT_INDEP_ANCHORS"><B>RE_CONTEXT_INDEP_ANCHORS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_CONTEXT_INDEP_OPS"><B>RE_CONTEXT_INDEP_OPS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_CONTEXT_INVALID_OPS"><B>RE_CONTEXT_INVALID_OPS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_DOT_NEWLINE"><B>RE_DOT_NEWLINE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_DOT_NOT_NULL"><B>RE_DOT_NOT_NULL</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_HAT_LISTS_NOT_NEWLINE"><B>RE_HAT_LISTS_NOT_NEWLINE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_INTERVALS"><B>RE_INTERVALS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_LIMITED_OPS"><B>RE_LIMITED_OPS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_LOOKAHEAD"><B>RE_LOOKAHEAD</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_NEWLINE_ALT"><B>RE_NEWLINE_ALT</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_NO_BK_BRACES"><B>RE_NO_BK_BRACES</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_NO_BK_PARENS"><B>RE_NO_BK_PARENS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_NO_BK_REFS"><B>RE_NO_BK_REFS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_NO_BK_VBAR"><B>RE_NO_BK_VBAR</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_NO_EMPTY_RANGES"><B>RE_NO_EMPTY_RANGES</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_PURE_GROUPING"><B>RE_PURE_GROUPING</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_STINGY_OPS"><B>RE_STINGY_OPS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_STRING_ANCHORS"><B>RE_STRING_ANCHORS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_AWK"><B>RE_SYNTAX_AWK</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_ED"><B>RE_SYNTAX_ED</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_EGREP"><B>RE_SYNTAX_EGREP</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_EMACS"><B>RE_SYNTAX_EMACS</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_GREP"><B>RE_SYNTAX_GREP</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_PERL4"><B>RE_SYNTAX_PERL4</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_PERL4_S"><B>RE_SYNTAX_PERL4_S</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_PERL5"><B>RE_SYNTAX_PERL5</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_PERL5_S"><B>RE_SYNTAX_PERL5_S</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_AWK"><B>RE_SYNTAX_POSIX_AWK</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_BASIC"><B>RE_SYNTAX_POSIX_BASIC</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_EGREP"><B>RE_SYNTAX_POSIX_EGREP</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_EXTENDED"><B>RE_SYNTAX_POSIX_EXTENDED</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_MINIMAL_BASIC"><B>RE_SYNTAX_POSIX_MINIMAL_BASIC</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_POSIX_MINIMAL_EXTENDED"><B>RE_SYNTAX_POSIX_MINIMAL_EXTENDED</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_SYNTAX_SED"><B>RE_SYNTAX_SED</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Predefined syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#RE_UNMATCHED_RIGHT_PAREN_ORD"><B>RE_UNMATCHED_RIGHT_PAREN_ORD</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Syntax bit.
-<DT><A HREF="gnu/regexp/RE.html#RE(java.lang.Object)"><B>RE(Object)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Constructs a regular expression pattern buffer without any compilation
- flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
-<DT><A HREF="gnu/regexp/RE.html#RE(java.lang.Object, int)"><B>RE(Object, int)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
-<DT><A HREF="gnu/regexp/RE.html#RE(java.lang.Object, int, gnu.regexp.RESyntax)"><B>RE(Object, int, RESyntax)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and regular expression syntax.
-<DT><A HREF="gnu/regexp/REFilterInputStream.html#read()"><B>read()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html">REFilterInputStream</A>
-<DD><B>Deprecated.</B>&nbsp;Reads the next byte from the stream per the general contract of
- InputStream.read().
-<DT><A HREF="gnu/regexp/REFilterReader.html#read()"><B>read()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html">REFilterReader</A>
-<DD>Reads the next character from the stream per the general contract of
- Reader.read().
-<DT><A HREF="gnu/regexp/REFilterInputStream.html#read(byte[])"><B>read(byte[])</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html">REFilterInputStream</A>
-<DD><B>Deprecated.</B>&nbsp;Reads from the stream into the provided array.
-<DT><A HREF="gnu/regexp/REFilterInputStream.html#read(byte[], int, int)"><B>read(byte[], int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html">REFilterInputStream</A>
-<DD><B>Deprecated.</B>&nbsp;Reads from the stream into the provided array.
-<DT><A HREF="gnu/regexp/REFilterReader.html#read(char[])"><B>read(char[])</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html">REFilterReader</A>
-<DD>Reads from the stream into the provided array.
-<DT><A HREF="gnu/regexp/REFilterReader.html#read(char[], int, int)"><B>read(char[], int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html">REFilterReader</A>
-<DD>Reads from the stream into the provided array.
-<DT><A HREF="gnu/regexp/util/REApplet.html"><B>REApplet</B></A> - class gnu.regexp.util.<A HREF="gnu/regexp/util/REApplet.html">REApplet</A>.<DD>This is a simple applet to demonstrate the capabilities of gnu.regexp.<DT><A HREF="gnu/regexp/util/REApplet.html#REApplet()"><B>REApplet()</B></A> - 
-Constructor for class gnu.regexp.util.<A HREF="gnu/regexp/util/REApplet.html">REApplet</A>
-<DD>Creates an REApplet.
-<DT><A HREF="gnu/regexp/REException.html"><B>REException</B></A> - exception gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>.<DD>This is the regular expression exception class.<DT><A HREF="gnu/regexp/REFilterInputStream.html"><B>REFilterInputStream</B></A> - class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html">REFilterInputStream</A>.<DD><B>Deprecated.</B>&nbsp;<I>This class cannot properly handle all character
-             encodings.  For proper handling, use the REFilterReader
-             class instead.</I><DT><A HREF="gnu/regexp/REFilterInputStream.html#REFilterInputStream(java.io.InputStream, gnu.regexp.RE, java.lang.String)"><B>REFilterInputStream(InputStream, RE, String)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html">REFilterInputStream</A>
-<DD><B>Deprecated.</B>&nbsp;Creates an REFilterInputStream.
-<DT><A HREF="gnu/regexp/REFilterReader.html"><B>REFilterReader</B></A> - class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html">REFilterReader</A>.<DD>Replaces instances of a given RE with replacement text.<DT><A HREF="gnu/regexp/REFilterReader.html#REFilterReader(java.io.Reader, gnu.regexp.RE, java.lang.String)"><B>REFilterReader(Reader, RE, String)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html">REFilterReader</A>
-<DD>Creates an REFilterReader.
-<DT><A HREF="gnu/regexp/RE.html#REG_ANCHORINDEX"><B>REG_ANCHORINDEX</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Execution flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_BADBR"><B>REG_BADBR</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_BADPAT"><B>REG_BADPAT</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_BADRPT"><B>REG_BADRPT</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/RE.html#REG_DOT_NEWLINE"><B>REG_DOT_NEWLINE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Compilation flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_EBRACE"><B>REG_EBRACE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_EBRACK"><B>REG_EBRACK</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_ECTYPE"><B>REG_ECTYPE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_EEND"><B>REG_EEND</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_EPAREN"><B>REG_EPAREN</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_ERANGE"><B>REG_ERANGE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_ESCAPE"><B>REG_ESCAPE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_ESIZE"><B>REG_ESIZE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_ESPACE"><B>REG_ESPACE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/REException.html#REG_ESUBREG"><B>REG_ESUBREG</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/REException.html">REException</A>
-<DD>Error flag.
-<DT><A HREF="gnu/regexp/RE.html#REG_ICASE"><B>REG_ICASE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Compilation flag.
-<DT><A HREF="gnu/regexp/RE.html#REG_MULTILINE"><B>REG_MULTILINE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Compilation flag.
-<DT><A HREF="gnu/regexp/RE.html#REG_NO_INTERPOLATE"><B>REG_NO_INTERPOLATE</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Execution flag.
-<DT><A HREF="gnu/regexp/RE.html#REG_NOTBOL"><B>REG_NOTBOL</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Execution flag.
-<DT><A HREF="gnu/regexp/RE.html#REG_NOTEOL"><B>REG_NOTEOL</B></A> - 
-Static variable in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Execution flag.
-<DT><A HREF="gnu/regexp/REMatch.html"><B>REMatch</B></A> - class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>.<DD>An instance of this class represents a match
- completed by a gnu.regexp matching function.<DT><A HREF="gnu/regexp/REMatchEnumeration.html"><B>REMatchEnumeration</B></A> - class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html">REMatchEnumeration</A>.<DD>An REMatchEnumeration enumerates regular expression matches over a
- given input text.<DT><A HREF="gnu/regexp/RESyntax.html"><B>RESyntax</B></A> - class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>.<DD>An RESyntax specifies the way a regular expression will be compiled.<DT><A HREF="gnu/regexp/RESyntax.html#RESyntax()"><B>RESyntax()</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Construct a new syntax object with all bits turned off.
-<DT><A HREF="gnu/regexp/RESyntax.html#RESyntax(gnu.regexp.RESyntax)"><B>RESyntax(RESyntax)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Construct a new syntax object with all bits set the same 
- as the other syntax.
-<DT><A HREF="gnu/regexp/util/RETest.html"><B>RETest</B></A> - class gnu.regexp.util.<A HREF="gnu/regexp/util/RETest.html">RETest</A>.<DD>RETest provides a simple way to test regular expressions.</DL>
-<HR>
-<A NAME="_S_"><!-- --></A><H2>
-<B>S</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/RESyntax.html#set(int)"><B>set(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Set a given bit in this syntax.
-<DT><A HREF="gnu/regexp/RESyntax.html#setLineSeparator(java.lang.String)"><B>setLineSeparator(String)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html">RESyntax</A>
-<DD>Changes the line separator string for regular expressions
- created using this RESyntax.
-<DT><A HREF="gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String)"><B>substitute(Object, String)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Substitutes the replacement text for the first match found in the input.
-<DT><A HREF="gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String, int)"><B>substitute(Object, String, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Substitutes the replacement text for the first match found in the input
- beginning at the specified index position.
-<DT><A HREF="gnu/regexp/RE.html#substitute(java.lang.Object, java.lang.String, int, int)"><B>substitute(Object, String, int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Substitutes the replacement text for the first match found in the input
- string, beginning at the specified index position and using the
- specified execution flags.
-<DT><A HREF="gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String)"><B>substituteAll(Object, String)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Substitutes the replacement text for each non-overlapping match found 
- in the input text.
-<DT><A HREF="gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String, int)"><B>substituteAll(Object, String, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Substitutes the replacement text for each non-overlapping match found 
- in the input text, starting at the specified index.
-<DT><A HREF="gnu/regexp/RE.html#substituteAll(java.lang.Object, java.lang.String, int, int)"><B>substituteAll(Object, String, int, int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Substitutes the replacement text for each non-overlapping match found 
- in the input text, starting at the specified index and using the
- specified execution flags.
-<DT><A HREF="gnu/regexp/REMatch.html#substituteInto(java.lang.String)"><B>substituteInto(String)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Substitute the results of this match to create a new string.
-</DL>
-<HR>
-<A NAME="_T_"><!-- --></A><H2>
-<B>T</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/util/Tests.html"><B>Tests</B></A> - class gnu.regexp.util.<A HREF="gnu/regexp/util/Tests.html">Tests</A>.<DD>This is a very basic testsuite application for gnu.regexp.<DT><A HREF="gnu/regexp/REMatch.html#toString()"><B>toString()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Returns the string matching the pattern.
-<DT><A HREF="gnu/regexp/RE.html#toString()"><B>toString()</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Return a human readable form of the compiled regular expression,
- useful for debugging.
-<DT><A HREF="gnu/regexp/REMatch.html#toString(int)"><B>toString(int)</B></A> - 
-Method in class gnu.regexp.<A HREF="gnu/regexp/REMatch.html">REMatch</A>
-<DD>Returns the string matching the given subexpression.
-</DL>
-<HR>
-<A NAME="_U_"><!-- --></A><H2>
-<B>U</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/UncheckedRE.html"><B>UncheckedRE</B></A> - class gnu.regexp.<A HREF="gnu/regexp/UncheckedRE.html">UncheckedRE</A>.<DD>UncheckedRE is a subclass of RE that allows programmers an easier means
- of programmatically precompiling regular expressions.<DT><A HREF="gnu/regexp/UncheckedRE.html#UncheckedRE(java.lang.Object)"><B>UncheckedRE(Object)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/UncheckedRE.html">UncheckedRE</A>
-<DD>Constructs a regular expression pattern buffer without any compilation
- flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
-<DT><A HREF="gnu/regexp/UncheckedRE.html#UncheckedRE(java.lang.Object, int)"><B>UncheckedRE(Object, int)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/UncheckedRE.html">UncheckedRE</A>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
-<DT><A HREF="gnu/regexp/UncheckedRE.html#UncheckedRE(java.lang.Object, int, gnu.regexp.RESyntax)"><B>UncheckedRE(Object, int, RESyntax)</B></A> - 
-Constructor for class gnu.regexp.<A HREF="gnu/regexp/UncheckedRE.html">UncheckedRE</A>
-<DD>Constructs a regular expression pattern buffer using the specified
- compilation flags and regular expression syntax.
-</DL>
-<HR>
-<A NAME="_V_"><!-- --></A><H2>
-<B>V</B></H2>
-<DL>
-<DT><A HREF="gnu/regexp/RE.html#version()"><B>version()</B></A> - 
-Static method in class gnu.regexp.<A HREF="gnu/regexp/RE.html">RE</A>
-<DD>Returns a string representing the version of the gnu.regexp package.
-</DL>
-<HR>
-<A HREF="#_A_">A</A> <A HREF="#_C_">C</A> <A HREF="#_E_">E</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> 
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/index.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/index.html
deleted file mode 100644 (file)
index 4e7c777..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd>
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001-->
-<TITLE>
-Generated Documentation (Untitled)
-</TITLE>
-</HEAD>
-<FRAMESET cols="20%,80%">
-<FRAMESET rows="30%,70%">
-<FRAME src="overview-frame.html" name="packageListFrame">
-<FRAME src="allclasses-frame.html" name="packageFrame">
-</FRAMESET>
-<FRAME src="overview-summary.html" name="classFrame">
-</FRAMESET>
-<NOFRAMES>
-<H2>
-Frame Alert</H2>
-
-<P>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<BR>
-Link to <A HREF="overview-summary.html">Non-frame version.</A></NOFRAMES>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-frame.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-frame.html
deleted file mode 100644 (file)
index 032b811..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Overview
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
-<B></B></FONT></TD>
-</TR>
-</TABLE>
-
-<TABLE BORDER="0" WIDTH="100%">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" TARGET="packageFrame">All Classes</A></FONT>
-<P>
-<FONT size="+1" CLASS="FrameHeadingFont">
-Packages</FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="gnu/regexp/package-frame.html" TARGET="packageFrame">gnu.regexp</A></FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="gnu/regexp/util/package-frame.html" TARGET="packageFrame">gnu.regexp.util</A></FONT>
-<BR>
-</TD>
-</TR>
-</TABLE>
-
-<P>
-&nbsp;
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-summary.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-summary.html
deleted file mode 100644 (file)
index 6389891..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Overview
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Packages</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="gnu/regexp/package-summary.html">gnu.regexp</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="gnu/regexp/util/package-summary.html">gnu.regexp.util</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-</TABLE>
-
-<P>
-&nbsp;<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-tree.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/overview-tree.html
deleted file mode 100644 (file)
index c081733..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-: Class Hierarchy
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For All Packages</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies: </B><DD><A HREF="gnu/regexp/package-tree.html">gnu.regexp</A>, <A HREF="gnu/regexp/util/package-tree.html">gnu.regexp.util</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">class java.lang.Object<UL>
-<LI TYPE="circle">class java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable)
-<UL>
-<LI TYPE="circle">class java.awt.Container<UL>
-<LI TYPE="circle">class java.awt.Panel (implements javax.accessibility.Accessible)
-<UL>
-<LI TYPE="circle">class java.applet.Applet<UL>
-<LI TYPE="circle">class gnu.regexp.util.<A HREF="gnu/regexp/util/REApplet.html"><B>REApplet</B></A></UL>
-</UL>
-</UL>
-</UL>
-<LI TYPE="circle">class gnu.regexp.util.<A HREF="gnu/regexp/util/Egrep.html"><B>Egrep</B></A><LI TYPE="circle">class gnu.regexp.util.<A HREF="gnu/regexp/util/Grep.html"><B>Grep</B></A><LI TYPE="circle">class java.io.InputStream<UL>
-<LI TYPE="circle">class java.io.FilterInputStream<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/REFilterInputStream.html"><B>REFilterInputStream</B></A></UL>
-</UL>
-<LI TYPE="circle">class java.io.Reader<UL>
-<LI TYPE="circle">class java.io.FilterReader<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/REFilterReader.html"><B>REFilterReader</B></A></UL>
-</UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/REMatch.html"><B>REMatch</B></A> (implements java.lang.Cloneable, java.io.Serializable)
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/REMatchEnumeration.html"><B>REMatchEnumeration</B></A> (implements java.util.Enumeration, java.io.Serializable)
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/RESyntax.html"><B>RESyntax</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">class gnu.regexp.util.<A HREF="gnu/regexp/util/RETest.html"><B>RETest</B></A><LI TYPE="circle">class gnu.regexp.REToken (implements java.io.Serializable)
-<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/RE.html"><B>RE</B></A><UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/UncheckedRE.html"><B>UncheckedRE</B></A></UL>
-</UL>
-<LI TYPE="circle">class gnu.regexp.util.<A HREF="gnu/regexp/util/Tests.html"><B>Tests</B></A><LI TYPE="circle">class java.lang.Throwable (implements java.io.Serializable)
-<UL>
-<LI TYPE="circle">class java.lang.Exception<UL>
-<LI TYPE="circle">class gnu.regexp.<A HREF="gnu/regexp/REException.html"><B>REException</B></A></UL>
-</UL>
-</UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">interface gnu.regexp.<A HREF="gnu/regexp/CharIndexed.html"><B>CharIndexed</B></A></UL>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-tree.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/package-list b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/package-list
deleted file mode 100644 (file)
index 019bed1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-gnu.regexp
-gnu.regexp.util
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/packages.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/packages.html
deleted file mode 100644 (file)
index 24b1c01..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:45 PDT 2001 -->
-<TITLE>
-
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<BR>
-
-<BR>
-
-<BR>
-<CENTER>
-The front page has been relocated.Please see:
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="index.html">Frame version</A>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="overview-summary.html">Non-frame version.</A></CENTER>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/serialized-form.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/serialized-form.html
deleted file mode 100644 (file)
index 25896c3..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 21 14:27:46 PDT 2001 -->
-<TITLE>
-Serialized Form
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="serialized-form.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<CENTER>
-<H1>
-Serialized Form</H1>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>gnu.regexp</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="gnu.regexp.RE"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/RE.html">gnu.regexp.RE</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
-</TR>
-</TABLE>
-
-<H3>
-firstToken</H3>
-<PRE>
-gnu.regexp.REToken <B>firstToken</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-lastToken</H3>
-<PRE>
-gnu.regexp.REToken <B>lastToken</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-numSubs</H3>
-<PRE>
-int <B>numSubs</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-minimumLength</H3>
-<PRE>
-int <B>minimumLength</B></PRE>
-<DL>
-<DD>Minimum length, in characters, of any possible match.</DL>
-
-<P>
-<A NAME="gnu.regexp.REException"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/REException.html">gnu.regexp.REException</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
-</TR>
-</TABLE>
-
-<H3>
-type</H3>
-<PRE>
-int <B>type</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-pos</H3>
-<PRE>
-int <B>pos</B></PRE>
-<DL>
-</DL>
-
-<P>
-<A NAME="gnu.regexp.REMatch"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/REMatch.html">gnu.regexp.REMatch</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
-</TR>
-</TABLE>
-
-<H3>
-matchedText</H3>
-<PRE>
-java.lang.String <B>matchedText</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-eflags</H3>
-<PRE>
-int <B>eflags</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-offset</H3>
-<PRE>
-int <B>offset</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-anchor</H3>
-<PRE>
-int <B>anchor</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-index</H3>
-<PRE>
-int <B>index</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-start</H3>
-<PRE>
-int[] <B>start</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-end</H3>
-<PRE>
-int[] <B>end</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-next</H3>
-<PRE>
-<A HREF="gnu/regexp/REMatch.html">REMatch</A> <B>next</B></PRE>
-<DL>
-</DL>
-
-<P>
-<A NAME="gnu.regexp.REMatchEnumeration"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/REMatchEnumeration.html">gnu.regexp.REMatchEnumeration</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
-</TR>
-</TABLE>
-
-<H3>
-more</H3>
-<PRE>
-int <B>more</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-match</H3>
-<PRE>
-<A HREF="gnu/regexp/REMatch.html">REMatch</A> <B>match</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-expr</H3>
-<PRE>
-<A HREF="gnu/regexp/RE.html">RE</A> <B>expr</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-input</H3>
-<PRE>
-<A HREF="gnu/regexp/CharIndexed.html">CharIndexed</A> <B>input</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-eflags</H3>
-<PRE>
-int <B>eflags</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-index</H3>
-<PRE>
-int <B>index</B></PRE>
-<DL>
-</DL>
-
-<P>
-<A NAME="gnu.regexp.RESyntax"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/RESyntax.html">gnu.regexp.RESyntax</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
-</TR>
-</TABLE>
-
-<H3>
-bits</H3>
-<PRE>
-java.util.BitSet <B>bits</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-isFinal</H3>
-<PRE>
-boolean <B>isFinal</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-lineSeparator</H3>
-<PRE>
-java.lang.String <B>lineSeparator</B></PRE>
-<DL>
-</DL>
-
-<P>
-<A NAME="gnu.regexp.UncheckedRE"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/UncheckedRE.html">gnu.regexp.UncheckedRE</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-<HR SIZE="4" NOSHADE>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>gnu.regexp.util</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="gnu.regexp.util.REApplet"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="gnu/regexp/util/REApplet.html">gnu.regexp.util.REApplet</A> implements Serializable</B></FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
-</TR>
-</TABLE>
-
-<H3>
-l1</H3>
-<PRE>
-java.awt.Label <B>l1</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-l2</H3>
-<PRE>
-java.awt.Label <B>l2</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-l3</H3>
-<PRE>
-java.awt.Label <B>l3</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-l4</H3>
-<PRE>
-java.awt.Label <B>l4</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-b</H3>
-<PRE>
-java.awt.Button <B>b</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-tf</H3>
-<PRE>
-java.awt.TextField <B>tf</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-input</H3>
-<PRE>
-java.awt.TextArea <B>input</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-output</H3>
-<PRE>
-java.awt.TextArea <B>output</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-insens</H3>
-<PRE>
-java.awt.Checkbox <B>insens</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<H3>
-syntax</H3>
-<PRE>
-java.awt.Choice <B>syntax</B></PRE>
-<DL>
-</DL>
-
-<P>
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="serialized-form.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/stylesheet.css b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/api/stylesheet.css
deleted file mode 100644 (file)
index 95f5764..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults  */
-
-/* Page background color */
-body { background-color: #FFFFFF }
-
-/* Table colors */
-.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
-.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
-.TableRowColor         { background: #FFFFFF } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: normal; font-family: normal }
-.FrameHeadingFont { font-size: normal; font-family: normal }
-.FrameItemFont    { font-size: normal; font-family: normal }
-
-/* Example of smaller, sans-serif font in frames */
-/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#EEEEFF;}/* Light mauve */
-.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/changes.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/changes.html
deleted file mode 100644 (file)
index 21cfe29..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>package gnu.regexp - Regular Expressions for Java</TITLE>
-</HEAD>
-<BODY BGCOLOR=WHITE TEXT=BLACK>
-<FONT SIZE="+2"><B><CODE>package gnu.regexp;</CODE></B><HR NOSHADE>
-Change History</FONT><BR>
-<FONT SIZE="-1">This page was last updated on 21 October 2001</FONT>
-<P>
-<B>1.1.4 (21 October 2001)</B><BR>
-Patch to Makefile to include language resource files in the applet JAR. (Andrew G. Hammond)<BR>
-Updates to gnu.regexp.util.Grep to add "-z" option, expand ZIP files. (Ulf Dittmer)<BR>
-Some updates and clarifications to Javadoc, especially for substitute() methods. (Wes Biggs)<BR>
-Fix to RE constructor for some uses of alternation operator failing due to minimumLength being set incorrectly. (Marcus Abels)<BR>
-Added UncheckedRE subclass to provide constructors that are declared without exceptions (useful for static initializers). (Wes Biggs)<BR>
-The getMatchEnumeration() methods that took an integer index offset resulted in REMatch objects with incorrect values for their start and end indices (the correct text was matched, but the values from getStartIndex() and getEndIndex() methods were incorrect).  This has been fixed. (Wes Biggs)<BR>
-
-<P>
-<B>1.1.3a (18 June 2001)</B><BR>
-No code changes; distribution was missing a file.<BR>
-<P>
-<B>1.1.3 (18 June 2001)</B><BR>
-Change method signatures in REFilterReader to correctly override the Reader interface.  Patch from Doug Seifert.<BR>
-Fixed a bug in getMinimumLength() for expressions using alternation; because of this and the optimization introduced in 1.1.2, some matches were failing. (Wes Biggs)<BR>
-Il8n support: all error messages are now stored in MessagesBundle.properties (Alan Moore)<BR>
-Lookaheads, both positive and negative, are now supported, thanks to a patch from Shashank Bapat.<BR>
-Parse intervals more in accordance with POSIX, i.e., if they don't exactly match one of {n}, {n,}, or {n,m}, the characters are matched literally. (Alan Moore)<BR>
-Throw more exceptions when quantifiers (?, *, +, {}) appear in places where they are invalid, e.g., after a zero-width assertion (word boundary, lookahead), or after another quantifier. (Alan Moore)<BR>
-Fixed two instances where incomplete patterns would cause ArrayIndexOutOfBoundsExceptions instead of REExceptions. (Alan Moore)<BR>
-ASCII escapes \n, \r, and \t in [] lists are now supported. (Alan Moore)<BR>
-<P>
-<B>1.1.2 (11 April 2001)</B><BR>
-Fix REMatchEnumeration handling zero-length matches.<BR>
-Declare classes "final" as much as possible, for speed.<BR>
-Optimize match loop by checking remaining buffer against minimum length.<BR>
-Fix '\b' and '\<' support to work correctly if before any consuming operators in the RE.  Thanks to Alan Moore for identifying the problem and a fix.<BR>
-Correct support for '^' in multiline match mode when used with an InputStream or Reader.  Thanks to James Flynn for his suggestions and contributions.<BR>
-Code cleanup to get rid of some bizarre variable names and so forth.<BR>
-
-<P>
-<B>1.1.1 (16 February 2001)</B><BR>
-Better leftmost longest support (re-fixes alternation isMatch() issue).<BR>
-Fix for over-consuming behavior of character class/alternation.<BR>
-Fixed subexpression index reporting.<BR>
-Support for '\b', '\B', '\<' and '\>'.<BR>
-<P>
-
-<B>1.1.0 (6 February 2001)</B><BR>
-Many internal changes should result in speed increases.<BR>
-Fixed an issue where subexpression indices would not be correctly saved, causing StringIndexOutOfBoundsExceptions to be thrown from REMatch.<BR>
-Fixed a bug where subexpressions would not be found when nested and combined with alternation. (For example, "((A)B|(C)D)" would match "AB", but would not report subexpression #2.)<BR>
-Fixed a bug compiling expressions of the form "(())a".<BR>
-Fixed a problem where using the empty string as replacement text within a REFilterInputStream would throw an exception.<BR>
-Added a FAQ in the docs directory.  Added known bugs to the TODO.<BR>
-Added REG_NO_INTERPOLATE execution bit, which allows substitution text to include $1-$9 without being interpolated.  Suggested by Daniel Lescohier.<BR>
-Lee Sau Dan submitted support for using Readers, providing both CharIndexedReader and REFilterReader classes.  As a consequence, this version is no longer compatible with JDK 1.0.  However, Readers provide much better support for reading text in various encodings, and the use of InputStream to do the same has been deprecated.<BR>
-Clarified (in the javadoc) the semantics of getAllMatches() and substituteAll() when combined with REs that may match the empty string.<BR>
-RE constructors and match functions will convert any unrecognized Object input to a String using the class's toString() method, so it is no longer possible to get IllegalArgumentExceptions.  Suggested by Nic Ferrier.<BR>
-Regular expressions are now serializable.  Of course, it may be nearly as efficient to send the pattern string and recompile the RE on the other side.<BR>
-Incorporated a patch from Oleksandr Lytvyn to allow RE.isMatch() to return true if any alternation in the pattern allows the full input to be matched, not just the first alternation.<BR>
-Altered the [:print:] character class to correctly match all printable characters and space, not just alphanumerics.  Caught by Richard Trahan.<BR>
-The alphanumeric match sequence (\w) now matches the underscore (_) character.  Thanks to Aryaguna for pointing out the discrepancy.<BR>
-The start (^) and end ($) tokens, when used in multiline mode, now recognize multi-character newline sequences.  In related news, you can override the platform-dependent line separator string by calling the setLineSeparator() method on RESyntax.  REApplet has been modified to use this approach.<BR>
-Predefined RESyntax objects are now immutable, and attempts to modify them throw IllegalAccessErrors.  User-defined syntaxes can also be made immutable by calling the makeFinal() method.<BR>
-RESyntax.clear(int) has been introduced as a parallel to RESyntax.set(int).<BR>
-CharIndexed is now a public interface, enabling developers to provide their own implementations that may be passed into getMatch().  Suggested by Ernie Rael.<BR>
-Expressions ending with an open subexpression token ('(') now correctly throw compilation exceptions.<BR>
-Noted in the documentation for REMatch.toString(int) that the index is one-based.  Thanks to Daniel Rall for bringing it to attention.<BR>
-Fixed documentation note error regarding REG_DOT_NEWLINE.  Thanks to Christophe Vigny for pointing this out.<BR>
-Deprecated getSub(Start|End)Index(int) in favor of the new get(Start|End)Index(int) overloading.  Added a note in the JavaDoc that these are zero-based indices, per a suggestion by Chris Cobb.<BR>
-Fixed a bug where the regular expression "^$" would not match an empty string (or empty line, in multiline mode). Many thanks to James Jensen.<BR>
-Added better file condition error handling code to Grep utility, courtesy of Jon Schewe.<BR>
-The license (COPYING.LIB) has been changed to the GNU Lesser General Public License (the successor of the Library GPL).  The change is only in name.<BR>
-
-<P>
-<B>1.0.8</B> (21 March 1999)<BR>
-Fixed handling of POSIX character classes (not used in default syntax).<BR>
-Added Tap, the evil water droplet, to the home page (thanks to Jim Blair, corvus@gnu.org).<BR>
-Changed the demo applet to support selectable syntax.<BR>
-<P>
-<B>1.0.7</B> (3 March 1999)<BR>
-Fixed NullPointerException when compiling expressions starting with '+' or '*'.<BR>
-Fixed reporting of subexpression start indices in certain cases.<BR>
-Removed static initializer in REToken.java to aid in compiling on non-compliant platforms.<BR>
-Fixed endless loop caused by array read in REFilterInputStream.<BR>
-Fixed ArrayIndexOutOfBoundsExceptions that could be thrown from REMatch.toString(int).<BR>
-Updated all doc comment versions to 1.0.7.<BR>
-Added a few tests to the test cottage (it's not big enough to be a suite).<BR>
-
-<P>
-
-<B>1.0.6</B> (18 November 1998)<BR>
-Fixed bug in subexpression position reporting.<BR>
-Fixed some bugs with zero-length regular expressions.<BR>
-More documentation for gnu.regexp.util classes.<BR>
-Makefile changes for Cygwin compatibility.<BR>
-Added credits.html file.<BR>
-Fixed paths to API docs in HTML.<BR>
-
-<P>
-
-<B>1.0.5</B> (8 November 1998)<BR>
-Added gnu.regexp.REFilterInputStream class.<BR>
-New directory structure for distribution.<BR>
-Added gnu.regexp.util.Tests class, a limited testsuite.<BR>
-Fixed bug in backreferences (\1, \2...) introduced in 1.0.4.<BR>
-Fixed bug in handling of literal '-' within bracketed lists.<BR>
-Changes to Makefile to work with Cygnus/Win32 systems.<BR>
-General enhancements to Makefile.<BR>
-Added TODO and CONTENTS files to distribution.<BR>
-Added support for Perl5 escapes (\w,\d,\s, etc.) within bracketed lists.<BR>
-Added matching syntax bit, RE_CHAR_CLASS_ESC_IN_LISTS.<BR>
-
-<P>
-
-<B>1.0.4</B> (8 October 1998)<BR>
-Added getMinimumLength method.<BR>
-Added Makefile to distribution.<BR>
-Added HTML to distribution.<BR>
-Added gnu/regexp/util/REApplet.java demo applet to distribution.<BR>
-Added support for pure grouping (?:...) operator.<BR>
-Added support for comment (?#...) operator.<BR>
-Minor changes for compatibility with guavac compiler.<BR>
-Fixed some quirks with including dashes in lists.<BR>
-Fixed some documentation errors.<BR>
-Fixed 1.0.3 bug in REMatch reporting skipped subexpressions.<BR>
-Fixed some major problems with alternation nested in subexpressions.<BR>
-Fixed some pathological cases that would cause infinite loops.<BR>
-
-<P>
-
-<B>1.0.3</B> (19 August 1998)<BR>
-Added REMatchEnumeration and getMatchEnumeration methods.<BR>
-Added support for compiling patterns from StringBuffers.<BR>
-Added support for matching, substituting, searching against StringBuffer, char[] and InputStream.<BR>
-Added toString(int) to REMatch to get subexpression matches easily.<BR>
-Added getMatch() with StringBuffer argument to save contents leading up to a match.<BR>
-substitute() and substituteAll() can now take $0 - $9 metacharacters.<BR>
-General optimizations.<BR>
-Source code cleanup, toward GNU coding standards.<BR>
-More and better javadoc documentation.<BR>
-getAllMatches() now returns non-overlapping matches as it should.<BR>
-All classes in 1.0.3 are JDK 1.0.2 compatible and should work in applets.<BR>
-
-RETest is no longer in the JAR as it is not needed in an execution
-environment.  Source code is provided in the gnu/regexp/util
-directory.<BR>
-
-gnu/regexp/util also contains a pure-Java implementation of GNU grep
-and egrep, for your amusement and use on non-GNU operating systems
-which lack such rudimentary text processing facilities.  Grep and
-Egrep require <A HREF="http://www.urbanophile.com/arenn/hacking/download.html">gnu.getopt</A>
-to compile and run.<BR>
-
-Note that due to certain API changes, you will need to recompile any source code that uses gnu.regexp against the 1.0.3 classes.  No code changes are necessary.<BR>
-
-<P>
-
-<B>1.02a</B> (23 July 1998)<BR>
-No code changes.  Added README, changed LICENSE to LGPL and changed
-copyright messages on source files.  JAR file compiled with -O flag.
-
-<P>
-
-<B>1.02</B> (15 June 1998)<BR>
-Support for nested subexpressions.  More debugging support.
-Fixed bug when escaping braces with a backslash.
-<P>
-
-<B>1.01</B> (1 June 1998)<BR>
-Fixed bug in list operator ( [...] ) which was causing the RE compiler to
-interpret the closing ']' as a literal.
-
-<P>
-
-<B>1.00</B> (22 May 1998)<BR>
-New API using RESyntax.  New framework for "multiline" and "single
-line" matching.  Default support for most Perl 5 constructs, including
-the following operators: \A, \d, \D, \w, \W, \s, \S, \Z, stingy
-matching (*?, ??, +?). Some string optimizations should speed up most
-matches.  REG_NEWLINE wasn't working correctly in 0.07, it's gone and
-replaced by REG_MULTILINE (semantics matching Perl's "/m"
-operator). Support for POSIX character classes such as [:alpha:]
-within lists.  General code cleanup and added comments.
-
-<P>
-
-<B>0.07</B> (10 April 1998)<BR>
-Added more default-argument versions of methods; added REG_ANCHORINDEX flag for substring processing; fixed bug in isMatch() for expressions with top-level branches; fixed bug in getMatch() for zero-length input never matching.
-
-<P>
-
-<B>0.06</B> (3 March 1998)<BR>
-First general release.
-
-<P>
-
-<FONT SIZE="-1">
-<A HREF="index.html">[gnu.regexp]</A>
-<A HREF="syntax.html">[syntax and usage]</A>
-<A HREF="api/index.html">[api documentation]</A>
-<A HREF="reapplet.html">[test applet]</A>
-<A HREF="faq.html">[faq]</A>
-<A HREF="credits.html">[credits]</A>
-</FONT>
-</BODY>
-</HTML>
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/credits.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/credits.html
deleted file mode 100644 (file)
index efa555d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>package gnu.regexp - Regular Expressions for Java</TITLE>
-</HEAD>
-<BODY BGCOLOR=WHITE TEXT=BLACK>
-<FONT SIZE="+2"><B><CODE>package gnu.regexp;</CODE></B><HR NOSHADE>
-Credits</FONT><BR>
-<FONT SIZE="-1">This page was last updated on 6 February 2001</FONT>
-
-<P>
-
-<B>Shashank Bapat</B> contributed support for lookahead operators.<BR>
-<B>Wes Biggs</B> is the primary author of gnu.regexp and its maintainer.<BR>
-<B>Richard Bullington III</B> contributed a number of Makefile fixes.<BR>
-<B>David Crawford</B> wrote the nested subexpression code.<BR>
-<B>Lee Sau Dan</B> provided JDK 1.1 Reader support.<BR>
-<B>Paul Frantz</B> contributed a number of bug fixes.<BR>
-<B>Alan Moore</B> contributed a number of bug fixes.<BR>
-<B>Aaron Renn</B> is the author of gnu.getopt, used by Grep and Egrep.<BR>
-<B>Doug Seifert</B> helped with testing and defining the API.<BR>
-<B>Jason Venner</B> helped with API development.<BR>
-
-<P>
-
-Thanks to everyone else who has contributed or helped others use and learn
-gnu.regexp.  This project would not be a success without the time and
-dedication of everyone involved.
-
-<P>
-
-<FONT SIZE="-1">
-<A HREF="index.html">[gnu.regexp]</A>
-<A HREF="syntax.html">[syntax and usage]</A>
-<A HREF="api/index.html">[api documentation]</A>
-<A HREF="reapplet.html">[test applet]</A>
-<A HREF="faq.html">[faq]</A>
-<A HREF="changes.html">[change history]</A>
-</FONT>
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/faq.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/faq.html
deleted file mode 100644 (file)
index b5760e1..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>package gnu.regexp - Regular Expressions for Java</TITLE>
-</HEAD>
-<BODY BGCOLOR=WHITE TEXT=BLACK>
-<FONT SIZE="+2"><B><CODE>package gnu.regexp;</CODE></B><HR NOSHADE>
-Frequently Asked Questions</FONT><BR>
-<FONT SIZE="-1">This page was last updated on 26 January 2001</FONT>
-<P>
-<B>Thread safety</B><BR>
-<I>Is the package threadsafe?</I>
-<BR>
-<BR>
-Yes, by design.  Once a RE object is compiled, it is never modified.  Runtime data is attached to REMatch objects, which are created for each thread executing one of the match methods.
-<P>
-<B>Subexpression Indices</B><BR>
-<I>I have a regular expression that looks like "(Hello)World|(Foo)Bar".  When I try to match the text "HelloWorldFooBar", the first match returns "HelloWorld" and its first subexpression is "Hello", both of which are correct.  For the second match I get "FooBar", but the first subexpression is empty.  What gives?</I>
-<BR>
-<BR>
-The behavior is correct.  The subexpressions are numbered according to their position in the entire regular expression.  Therefore the subexpression that matches "Foo" in the second match is subexpression number two.
-<P>
-<B>Getopt classes</B><BR>
-<I>When I try to compile the classes in gnu.regexp.util, I get errors saying gnu.getopt.Getopt and gnu.getopt.LongOpt cannot be found.  Are they missing from the distribution?</I>
-<BR>
-<BR>
-While it's not necessary to compile the example classes in gnu.regexp.util, to do so you'll need to acquire Aaron Renn's excellent getopt package, which is also free software, but maintained separately.  You can find it <A HREF="http://www.urbanophile.com/arenn/hacking/download.html">on his web site</A>.
-<P>
-<B>Examples</B><BR>
-<I>Where can I get some examples of real-world regular expressions?</I>
-<BR>
-<BR>
-You could buy a book.  Or you could search the web.  Or you could join the mailing list and ask there.  Or you could contribute some so this answer is more helpful.
-<P>
-<B>Package naming</B><BR>
-<I>The official Sun recommendations on package naming conventions state that one should use a top-level domain name, reversed, for publicly distributed packages.  Why aren't you using org.gnu.regexp instead of gnu.regexp?</I>
-<BR>
-<BR>
-Because I like gnu.regexp better.  If you don't, feel free to repackage it.  Such is open source.  Before you flame me, realize that this conversation has been played out many, many times (and thus earns its place on this FAQ), and for many, many different gnu.* packages with many, many different maintainers.  Until I get an official recommendation from the FSF to the contrary, it's going to be gnu.regexp.
-<P>
-<B>Compile Problems</B><BR>
-<I>I get an error compiling RESyntax.java.  Is there a bug?</I>
-<BR>
-<BR>
-There is a problem with certain versions of javac and their support of static initializers.  If you encounter it, first compile RESyntax.java (javac RESyntax.java), then proceed with compiling the rest of the classes.
-<P>
-<B>Java Versions</B><BR>
-<I>Why doesn't gnu.regexp 1.1.0 and above work on Java 1.0.2?</I><BR>
-<BR>
-Because dependencies on the java.io.Reader and java.io.Serializable classes were introduced into the package with version 1.1.0.  Fortunately, unless you are running a Homebrew Computer Club antique, you quite likely can run a Java 1.1 or Java 2 virtual machine on your system.
-<P>
-<B>Two GNU Java Regular Expression Packages</B><BR>
-<I>Are there two GNU java regexp projects?  Why don't you join efforts?</I>
-<BR>
-<BR>
-Yes, there are, and I've corresponded briefly with the author of
-gnu.rex.  His package serves a different niche (smaller footprint,
-fewer features).  Unifying them with a single front-end might be worth
-a shot.  If you are interested in contributing to uniting the
-projects, let us know.
-<P>
-<B>License Terms</B><BR> 
-<I>I saw that gnu.regexp was licensed under
-the LGPL (Lesser GNU General Public License).  Can I get a formal
-statement of the legal situation of using this software from you?</I>
-<BR>
-<BR>
-The Free Software Foundation has a number of articles
-that discuss the legal ramifications of the LGPL.  See <a
-href="http://www.gnu.org/">the GNU site</a> for details.
-<P>
-<I>Can I get an affidavit of Y2K compliance from you?</I>
-<BR>
-<BR>
-As an independent developer, it is not feasible for me to guarantee
-Y2K compliance, POSIX compliance, or make any other warranties.  That
-being said, there are currently (version 1.1.3) no aspects of the
-regular expression library that refer in any way to date- or
-time-related functions or APIs, so gnu.regexp is unlikely in the
-extreme to cause any Y2K issues.
-<P>
-<B>Donations, Etc.</B><BR>
-<I>This is a great utility.  Can I send you money?</I>
-<BR>
-<BR>
-Actually, I just <i>wish</i> this was a frequently asked question.
-But seriously, I would much prefer that if you feel the urge, you
-donate to the Free Software Foundation on behalf of gnu.regexp.  Apart
-from helping fund important software development efforts, your gift is
-also tax deductible, and they'll send you a keen t-shirt if you're
-lucky.
-<P>
-<FONT SIZE="-1">
-<A HREF="index.html">[gnu.regexp]</A>
-<A HREF="changes.html">[change history]</A>
-<A HREF="syntax.html">[syntax and usage]</A>
-<A HREF="api/index.html">[api documentation]</A>
-<A HREF="reapplet.html">[test applet]</A>
-<A HREF="credits.html">[credits]</A>
-</FONT>
-</BODY>
-</HTML>
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/gnu-regexp-applet.jar b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/gnu-regexp-applet.jar
deleted file mode 100644 (file)
index 179d157..0000000
Binary files a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/gnu-regexp-applet.jar and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/index.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/index.html
deleted file mode 100644 (file)
index fbeb194..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 FINAL//EN">
-<HTML>
-<HEAD>
-<TITLE>package gnu.regexp - Regular Expressions for Java</TITLE>
-<LINK REV=MADE HREF="mailto:wes@cacas.org">
-</HEAD>
-<BODY BGCOLOR=WHITE TEXT=BLACK>
-<FONT SIZE="+2"><STRONG><CODE>package gnu.regexp;</CODE></STRONG>
-<BR CLEAR=ALL>
-<HR NOSHADE>
-<APPLET CODE="Animation.class" CODEBASE="http://www.gnu.org/graphics" WIDTH="130" HEIGHT="86" ALIGN=RIGHT>
-<PARAM name="base-name" value="drop">
-<PARAM name="extension" value="jpg">
-<PARAM name="num-images" value="15">
-<PARAM name="image-sequence" value="1..10,9,7,5,3,1">
-<PARAM name="frame-delay" value="30">
-<PARAM name="inner-loop-repeat" value="2">
-<PARAM name="loop-delay" value="10000">
-<PARAM name="outer-loop-repeat" value="0">
-<A HREF="http://www.gnu.org/graphics/drop-1.jpg"><IMG SRC="http://www.gnu.org/graphics/drop-1.jpg" ALT=" [image of the evil water droplet] " WIDTH="130" HEIGHT="86" BORDER="0">&#32;(jpeg 3k)</A>
-<A HREF="http://www.gnu.org/philosophy/gif.html">no gifs due to patent problems</A>
-</applet>
-
-Regular Expressions for Java</FONT><BR>
-<FONT SIZE="-1">This page was last updated on 21 October 2001</FONT>
-<P>
-<STRONG><A NAME="latest">Latest Version</A></STRONG>
-<BR>
-The latest version of the package is 1.1.4. Download <A HREF="ftp://ftp.tralfamadore.com/pub/java/gnu.regexp-1.1.4.tar.gz">gnu.regexp-1.1.4.tar.gz</A>.  You may need to rename the file if your browser changes it.<BR>
-The GZIPped file includes the Java archive library and
-the complete source code.  Versions 1.1.0 and above of gnu.regexp require Java 1.1 or higher.
-<P>
-<STRONG><A NAME="latest">Java 1.0 Compatibility Version</A></STRONG>
-<BR>
-The previous version of the package was 1.0.8, released in March 1999. Download <A HREF="ftp://ftp.tralfamadore.com/pub/java/gnu.regexp-1.0.8.tar.gz">gnu.regexp-1.0.8.tar.gz</A>.  You may need to rename the file if your browser changes it.<BR>
-The GZIPped file includes the Java archive library and
-the complete source code.  Versions 1.0.8 and below are compatible with Java 1.0.  Please note that the compatibility version is not being actively maintained.
-<P>
-<STRONG>Reference material (for latest version):</STRONG><BR>
-<A HREF="api/index.html">API documentation</A> (javadoc generated)<BR>
-<A HREF="syntax.html">Syntax and usage notes</A><BR>
-<A HREF="changes.html">Change history</A><BR>
-<A HREF="reapplet.html">Test applet</A><BR>
-<A HREF="faq.html">Frequently asked questions</A><BR>
-<A HREF="credits.html">Credits</A><BR>
-
-
-<P>
-
-<STRONG>Technical Notes</STRONG>
-<BR>
-
-The gnu.regexp package is a pure-Java implementation of a traditional
-(non-POSIX) NFA regular expression engine.  Its syntax can emulate
-many popular development tools, including awk, sed, emacs, perl and
-grep.  For a relatively complete list of supported and non-supported
-syntax, refer to the <A HREF="syntax.html">syntax and usage notes</A>.<BR>
-
-<P>
-<STRONG>Terms of Use</STRONG>
-<BR>
-
-The regexp library is distributed under the terms of the <A
-HREF="http://www.gnu.org/copyleft/lesser.html">GNU Lesser General
-Public License</A>.  The COPYING.LIB file included
-in the distribution contains the details.  This program is <A
-HREF="http://www.gnu.org/philosophy/free-sw.html">free software</A>.
-You are encouraged to adapt it to your own needs, and contribute to
-the program's ongoing development.
-
-<P>
-<STRONG>Installation</STRONG>
-<BR>
-1. Download the <A HREF="#latest">latest version</A>.<BR>
-2. Use GNU tar to extract the files.<BR>
-<BLOCKQUOTE>
-<CODE>tar xvzf gnu.regexp-1.1.4.tar.gz</CODE><BR>
-</BLOCKQUOTE>
-<BR>
-3. You will be left with the HTML-formatted documentation, a Java archive file containing the compressed bytecode for the gnu.regexp package, and the complete library source as well as source to a number of related utilities.<BR>
-4. Add the .jar file to your CLASSPATH setting.  See the README file for help.
-<P>
-<STRONG>Mailing List</STRONG>
-<BR>
-To join a mailing list of gnu.regexp users and developers, send an email with the word "subscribe" in the subject to <A HREF="mailto:regexp-request@cacas.org">regexp-request@cacas.org</A>.  You will be automatically subscribed.
-<P>
-Mailing list <A HREF="http://www.thispc.com/pipermail/regexp/">archives</A> are available.
-<P>
-<STRONG>Contribute</STRONG>
-<BR>
-If you would like to help contribute to the ongoing development of the package,
-or if you have suggestions for future enhancements and functionality,
-please send email to <a href="mailto:wes@cacas.org">wes@cacas.org</A> or better yet subscribe to the list.
-<P>
-<STRONG>Some applications built with gnu.regexp</STRONG><BR>
-<A HREF="http://www.enhydra.org/">Enhydra</A>, an open source application server<BR>
-<A HREF="http://www.xmlblaster.org/">xmlBlaster</A>, open source message-oriented middleware<BR>
-<A HREF="http://www.arlut.utexas.edu/gash2">Ganymede</A>, an RMI-based directory management system<BR>
-<A HREF="http://www.microstate.com/hamilton/">Hamilton</A>, an enterprise application server<BR>
-<A HREF="http://jedit.sourceforge.net/">jEdit</A>, a GUI text editor<BR>
-<A HREF="http://muffin.doit.org/">Muffin</A>, a filtering proxy web server<BR>
-<A HREF="http://www.jext.org/">Jext</A>, a GUI text editor<BR>
-<A HREF="http://www.sourceforge.net/projects/gutenpalm">GutenPalm</A>, document compressor for PalmOS<BR>
-<A HREF="http://www.mckoi.com/database/">Mckoi SQL Database</A>, an open source SQL-92 database system<BR>
-<A HREF="mailto:wes@cacas.org">Link to your application here!</A><BR>
-<P>
-<STRONG>Relevant links</STRONG><BR>
-<A HREF="http://www.gnu.org/software/java/java.html">GNU Java Software</A><BR>
-<A HREF="http://www.gnu.org/software/classpath/classpath.html">GNU Classpath Project</A><BR>
-<A HREF="http://java.sun.com/">JavaSoft (Sun)</A><BR>
-<A HREF="http://www.blackdown.org/java-linux.html">Java-Linux Porting Project</A><BR>
-<A HREF="http://www.transvirtual.com/">Kaffe OpenVM</A><BR>
-<A HREF="http://www.hungry.com/products/japhar/">Japhar free VM</A><BR>
-
-</BODY>
-</HTML>
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/reapplet.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/reapplet.html
deleted file mode 100644 (file)
index df02014..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>package gnu.regexp - Regular Expressions for Java</TITLE>
-</HEAD>
-<BODY BGCOLOR=WHITE TEXT=BLACK>
-<FONT SIZE="+2"><B><CODE>package gnu.regexp;</CODE></B><HR NOSHADE>
-Test Applet</FONT><BR>
-<FONT SIZE="-1">This page was last updated on 20 March 1999</FONT>
-
-<P>
-<STRONG>About the Applet</STRONG><BR>
-
-The applet below (if your browser supports Java applets, that is) lets
-you play around with the gnu.regexp engine by compiling regular
-expressions and testing them against arbitrary input text (if you
-like, cut and paste into the input textarea).  The applet JAR is about 27K
-in size, and includes the gnu.regexp library (24K).
-
-<P>
-<STRONG>Basic Usage</STRONG><BR>
-
-To get started, click the "Match" button using the defaults.  You
-should see two matches found.  Turn on the "ignore case" feature and
-click "Match" again.  A third match will be found.  Then try your own
-regular expressions (the applet defaults to a Perl5-like syntax) and
-input texts.
-
-<P>
-<STRONG>Troubleshooting</STRONG><BR>
-
-If the applet won't start, you may have an incompatible version of gnu.regexp
-in your browser's classpath setting (usually the gnu.regexp library will be downloaded for you by the browser).  You can remedy this by quitting the browser and adjusting your classpath setting to exclude gnu.regexp before relaunching.
-
-<P>
-
-<TABLE BORDER=0 BGCOLOR=BLACK CELLSPACING=0 CELLPADDING=1>
-<TR><TD><APPLET archive="gnu-regexp-applet.jar" code="gnu/regexp/util/REApplet.class" width=500 height=200>
-<PARAM NAME="input" VALUE="A man, a plan, a canal: Panama.">
-<PARAM NAME="regexp" VALUE="a\s+\w+">
-<PARAM NAME="syntax" VALUE="perl 5">
-</APPLET></TD></TR></TABLE>
-
-<P>
-
-<FONT SIZE="-1">
-<A HREF="index.html">[gnu.regexp]</A>
-<A HREF="syntax.html">[syntax and usage]</A>
-<A HREF="changes.html">[change history]</A>
-<A HREF="api/packages.html">[api documentation]</A>
-<A HREF="faq.html">[faq]</A>
-<A HREF="credits.html">[credits]</A>
-</FONT>
-</BODY>
-</HTML>
-
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/syntax.html b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/docs/syntax.html
deleted file mode 100644 (file)
index 7932ec2..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>package gnu.regexp - Regular Expressions for Java</TITLE>
-</HEAD>
-<BODY BGCOLOR=WHITE TEXT=BLACK>
-<FONT SIZE="+2"><B><CODE>package gnu.regexp;</CODE></B></FONT>
-<HR NOSHADE>
-<FONT SIZE="+2">Syntax and Usage Notes</FONT><BR>
-<FONT SIZE="-1">This page was last updated on 22 June 2001</FONT>
-<P>
-<B>Brief Background</B>
-<BR>
-
-A regular expression consists of a character string where some
-characters are given special meaning with regard to pattern matching.
-Regular expressions have been in use from the early days of computing,
-and provide a powerful and efficient way to parse, interpret and
-search and replace text within an application.
-
-<P>
-<B>Supported Syntax</B>
-<BR>
-Within a regular expression, the following characters have special meaning:<BR>
-<UL>
-<LI><B><I>Positional Operators</I></B><BR>
-<blockquote>
-<code>^</code> matches at the beginning of a line<SUP><A HREF="#note1">1</A></SUP><BR>
-<code>$</code> matches at the end of a line<SUP><A HREF="#note2">2</A></SUP><BR>
-<code>\A</code> matches the start of the entire string<BR>
-<code>\Z</code> matches the end of the entire string<BR>
-<code>\b</code> matches at a word break (Perl5 syntax only)<BR>
-<code>\B</code> matches at a non-word break (opposite of \b) (Perl5 syntax only)<BR>
-<code>\&lt;</code> matches at the start of a word (egrep syntax only)<BR>
-<code>\&gt;</code> matches at the end of a word (egrep syntax only)<BR>
-</blockquote>
-
-<li>
-<B><I>One-Character Operators</I></B><BR>
-<blockquote>
-<code>.</code> matches any single character<SUP><A HREF="#note3">3</A></SUP><BR>
-<code>\d</code> matches any decimal digit<BR>
-<code>\D</code> matches any non-digit<BR>
-<code>\n</code> matches a newline character<BR>
-<code>\r</code> matches a return character<BR>
-<code>\s</code> matches any whitespace character<BR>
-<code>\S</code> matches any non-whitespace character<BR>
-<code>\t</code> matches a horizontal tab character<BR>
-<code>\w</code> matches any word (alphanumeric) character<BR>
-<code>\W</code> matches any non-word (alphanumeric) character<BR>
-<code>\<i>x</i></code> matches the character <i>x</i>, if <i>x</i> is not one of the above listed escape sequences.<BR>
-</blockquote>
-
-<li>
-<B><I>Character Class Operator</I></B><BR>
-<blockquote>
-<code>[<i>abc</i>]</code> matches any character in the set <i>a</i>, <i>b</i> or <i>c</i><BR>
-<code>[^<i>abc</i>]</code> matches any character not in the set <i>a</i>, <i>b</i> or <i>c</i><BR>
-<code>[<i>a-z</i>]</code> matches any character in the range <i>a</i> to <i>z</i>, inclusive<BR>
-A leading or trailing dash will be interpreted literally.<BR>
-</blockquote>
-
-Within a character class expression, the following sequences have special meaning if the syntax bit RE_CHAR_CLASSES is on:<BR>
-<blockquote>
-<code>[:alnum:]</code> Any alphanumeric character<br>
-<code>[:alpha:]</code> Any alphabetical character<br>
-<code>[:blank:]</code> A space or horizontal tab<br>
-<code>[:cntrl:]</code> A control character<br>
-<code>[:digit:]</code> A decimal digit<br>
-<code>[:graph:]</code> A non-space, non-control character<br>
-<code>[:lower:]</code> A lowercase letter<br>
-<code>[:print:]</code> Same as graph, but also space and tab<br>
-<code>[:punct:]</code> A punctuation character<br>
-<code>[:space:]</code> Any whitespace character, including newline and return<br>
-<code>[:upper:]</code> An uppercase letter<br>
-<code>[:xdigit:]</code> A valid hexadecimal digit<br>
-</blockquote>
-
-<li>
-<B><I>Subexpressions and Backreferences</I></B><BR>
-<blockquote>
-<code>(<i>abc</i>)</code> matches whatever the expression <i>abc</i> would match, and saves it as a subexpression.  Also used for grouping.<BR>
-<code>(?:<i>...</i>)</code> pure grouping operator, does not save contents<BR>
-<code>(?#<i>...</i>)</code> embedded comment, ignored by engine<BR>
-<code>\<i>n</i></code> where 0 &lt; <i>n</i> &lt; 10, matches the same thing the <i>n</i><super>th</super> subexpression matched.<BR>
-</blockquote>
-
-<li>
-<B><I>Branching (Alternation) Operator</I></B><BR>
-<blockquote>
-<code><i>a</i>|<i>b</i></code> matches whatever the expression <i>a</i> would match, or whatever the expression <i>b</i> would match.<BR>
-</blockquote>
-
-<li>
-<B><I>Repeating Operators</I></B><BR>
-These symbols operate on the previous atomic expression.
-<blockquote>
-<code>?</code> matches the preceding expression or the null string<BR>
-<code>*</code> matches the null string or any number of repetitions of the preceding expression<BR>
-<code>+</code> matches one or more repetitions of the preceding expression<BR>
-<code>{<i>m</i>}</code> matches exactly <i>m</i> repetitions of the one-character expression<BR>
-<code>{<i>m</i>,<i>n</i>}</code> matches between <i>m</i> and <i>n</i> repetitions of the preceding expression, inclusive<BR>
-<code>{<i>m</i>,}</code> matches <i>m</i> or more repetitions of the preceding expression<BR>
-</blockquote>
-<li>
-<B><I>Stingy (Minimal) Matching</I></B><BR>
-
-If a repeating operator (above) is immediately followed by a
-<code>?</code>, the repeating operator will stop at the smallest
-number of repetitions that can complete the rest of the match.
-<p>
-<li>
-<B><I>Lookahead</I></B><BR>
-Lookahead refers to the ability to match part of an expression without consuming any of the input text.  There are two variations to this:<P>
-<blockquote>
-<code>(?=<i>foo</i>)</code> matches at any position where <i>foo</i> would match, but does not consume any characters of the input.<BR>
-<code>(?!<i>foo</i>)</code> matches at any position where <i>foo</i> would not match, but does not consume any characters of the input.<BR>
-</blockquote>
-
-</UL>
-<P>
-<B>Unsupported Syntax</B>
-<BR>
-
-Some flavors of regular expression utilities support additional escape
-sequences, and this is not meant to be an exhaustive list.  In the
-future, <code>gnu.regexp</code> may support some or all of the
-following:<BR>
-
-<blockquote>
-<code>(?<i>mods</i>)</code> inlined compilation/execution modifiers (Perl5)<BR>
-<code>\G</code> end of previous match (Perl5)<BR>
-<code>[.<i>symbol</i>.]</code> collating symbol in class expression (POSIX)<BR>
-<code>[=<i>class</i>=]</code> equivalence class in class expression (POSIX)<BR>
-<code>s/foo/bar/</code> style expressions as in sed and awk <I>(note: these can be accomplished through other means in the API)</I>
-</blockquote>
-
-<P>
-<B>Java Integration</B>
-<BR>
-
-In a Java environment, a regular expression operates on a string of
-Unicode characters, represented either as an instance of
-<code>java.lang.String</code> or as an array of the primitive
-<code>char</code> type.  This means that the unit of matching is a
-Unicode character, not a single byte.  Generally this will not present
-problems in a Java program, because Java takes pains to ensure that
-all textual data uses the Unicode standard.
-
-<P>
-
-Because Java string processing takes care of certain escape sequences,
-they are not implemented in <code>gnu.regexp</code>.  You should be
-aware that the following escape sequences are handled by the Java
-compiler if found in the Java source:<BR>
-
-<blockquote>
-<code>\b</code> backspace<BR>
-<code>\f</code> form feed<BR>
-<code>\n</code> newline<BR>
-<code>\r</code> carriage return<BR>
-<code>\t</code> horizontal tab<BR>
-<code>\"</code> double quote<BR>
-<code>\'</code> single quote<BR>
-<code>\\</code> backslash<BR>
-<code>\<i>xxx</i></code> character, in octal (000-377)<BR>
-<code>\u<i>xxxx</i></code> Unicode character, in hexadecimal (0000-FFFF)<BR>
-</blockquote>
-
-In addition, note that the <code>\u</code> escape sequences are
-meaningful anywhere in a Java program, not merely within a singly- or
-doubly-quoted character string, and are converted prior to any of the
-other escape sequences.  For example, the line <BR>
-
-<code>gnu.regexp.RE exp = new gnu.regexp.RE("\u005cn");</code><BR>
-
-would be converted by first replacing <code>\u005c</code> with a
-backslash, then converting <code>\n</code> to a newline.  By the time
-the RE constructor is called, it will be passed a String object
-containing only the Unicode newline character.
-
-<P>
-
-The POSIX character classes (above), and the equivalent shorthand
-escapes (<code>\d</code>, <code>\w</code> and the like) are
-implemented to use the <code>java.lang.Character</code> static
-functions whenever possible.  For example, <code>\w</code> and
-<code>[:alnum:]</code> (the latter only from within a class
-expression) will invoke the Java function
-<code>Character.isLetterOrDigit()</code> when executing.  It is
-<i>always</i> better to use the POSIX expressions than a range such as
-<code>[a-zA-Z0-9]</code>, because the latter will not match any letter
-characters in non-ISO 9660 encodings (for example, the umlaut
-character, "<code>&uuml;</code>").
-
-<P>
-<B>Reference Material</B>
-<BR>
-<UL>
-<LI><B><I>Print Books and Publications</I></B><BR>
-Friedl, Jeffrey E.F., <A HREF="http://www.oreilly.com/catalog/regex/"><I>Mastering Regular Expressions</I></A>. O'Reilly &amp; Associates, Inc., Sebastopol, California, 1997.<BR>
-<P>
-<LI><B><I>Software Manuals and Guides</I></B><BR>
-Berry, Karl and Hargreaves, Kathryn A., <A HREF="http://www.cs.utah.edu/csinfo/texinfo/regex/regex_toc.html">GNU Info Regex Manual Edition 0.12a</A>, 19 September 1992.<BR>
-<code>perlre(1)</code> man page (Perl Programmer's Reference Guide)<BR>
-<code>regcomp(3)</code> man page (GNU C)<BR>
-<code>gawk(1)</code> man page (GNU utilities)<BR>
-<code>sed(1)</code> man page (GNU utilities)<BR>
-<code>ed(1)</code> man page (GNU utilities)<BR>
-<code>grep(1)</code> man page (GNU utilities)<BR>
-<code>regexp(n)</code> and <code>regsub(n)</code> man pages (TCL)<BR>
-</UL>
-
-<P>
-<B>Notes</B>
-<BR>
-<SUP><A NAME="note1">1</A></SUP> but see the REG_NOTBOL and REG_MULTILINE flags<BR>
-<SUP><A NAME="note2">2</A></SUP> but see the REG_NOTEOL and REG_MULTILINE flags<BR>
-<SUP><A NAME="note3">3</A></SUP> but see the REG_MULTILINE flag<BR>
-<P>
-<FONT SIZE="-1">
-<A HREF="index.html">[gnu.regexp]</A>
-<A HREF="changes.html">[change history]</A>
-<A HREF="api/index.html">[api documentation]</A>
-<A HREF="reapplet.html">[test applet]</A>
-<A HREF="faq.html">[faq]</A>
-<A HREF="credits.html">[credits]</A>
-</FONT>
-
-</BODY>
-</HTML>
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/lib/gnu-regexp-1.1.4.jar b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/lib/gnu-regexp-1.1.4.jar
deleted file mode 100644 (file)
index c3c8770..0000000
Binary files a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/lib/gnu-regexp-1.1.4.jar and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/Makefile b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/Makefile
deleted file mode 100644 (file)
index 9df7805..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-#
-# Makefile for gnu.regexp for use with GNU make
-# Copyright (C) 1998-2001 Wes Biggs
-#
-# This library is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-#
-# This library 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 Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-# It's not strictly necessary to use this file -- most of what it does
-# you can do by running 'javac gnu/regexp/*.java'.  However, it does allow
-# convenient building of the following targets:
-#
-# make (no args): builds all the gnu.regexp.* classes, and the JAR file
-# make install: copies the JAR to your designated INSTALLDIR (see below)
-# make applet: builds the demo applet and its JAR
-# make utils: builds the gnu.regexp.util.* classes (requires gnu.getopt)
-# make javadocs: build the source documentation
-# make dist: build the distribution tar.gz file (requires GNU tar)
-# make clean: deletes all class files and JARs
-#
-# You may need to edit some of the paths or compiler defaults below.
-
-# This is the directory where .class files will be placed
-LIBDIR = ../lib
-LIBDIR32 = ..\lib
-
-# Note that these conditional makefile statements require GNU make
-# The special treatment for cygwin32 relies on the OSTYPE environment
-# variable. Because the Cygwin tools are still in beta, it's been
-# changing. This needs to be "cygwin32" for Beta 19 and higher beta versions,
-# "win32" for earlier versions, and just "cygwin" for recent releases.
-ifeq ($(OSTYPE),cygwin)
-FSEP = \\
-PSEP = ;
-LIBPATH = $(LIBDIR32)
-else
-FSEP = /
-PSEP = :
-LIBPATH = $(LIBDIR)
-endif
-
-JAVAFLAGSCLASSPATH = -classpath ".$(PSEP)$(LIBPATH)$(PSEP)${CLASSPATH}"
-GNUREGEXPPATH = gnu${FSEP}regexp${FSEP}
-GNUREGEXPUTILPATH = ${GNUREGEXPPATH}util${FSEP}
-
-# Change JAVAC variable to your java compiler.
-# Change JAVAFLAGS variable to any java flags you want to compile with.
-
-JAVAC = jikes
-JAVAFLAGS = -O
-
-#JAVAC = javac
-#JAVAFLAGS = -O
-
-JAVACOMPILE = $(JAVAC) -d "$(LIBPATH)" $(JAVAFLAGSCLASSPATH) $(JAVAFLAGS)
-
-# This is the directory the gnu.regexp JAR file will be installed in when
-# you do a 'make install'
-INSTALLDIR = /usr/local/java/lib
-
-# This is where the applet JAR goes
-DOCSDIR = ../docs
-# This is where the generated javadocs will go when you do a 'make javadocs'
-APIDOCSDIR = ../docs/api
-
-GNUREGEXPVERSION = 1.1.4
-
-GNUREGEXPCORECLASSES = \
-       $(LIBDIR)/gnu/regexp/RESyntax.class \
-       $(LIBDIR)/gnu/regexp/CharIndexed.class \
-       $(LIBDIR)/gnu/regexp/REMatch.class \
-       $(LIBDIR)/gnu/regexp/REToken.class \
-       $(LIBDIR)/gnu/regexp/REException.class \
-       $(LIBDIR)/gnu/regexp/RETokenChar.class \
-       $(LIBDIR)/gnu/regexp/RETokenRange.class \
-       $(LIBDIR)/gnu/regexp/RETokenPOSIX.class \
-       $(LIBDIR)/gnu/regexp/RETokenOneOf.class \
-       $(LIBDIR)/gnu/regexp/RETokenAny.class \
-       $(LIBDIR)/gnu/regexp/RETokenEndSub.class \
-       $(LIBDIR)/gnu/regexp/RETokenWordBoundary.class \
-       $(LIBDIR)/gnu/regexp/RETokenRepeated.class \
-       $(LIBDIR)/gnu/regexp/RETokenBackRef.class \
-       $(LIBDIR)/gnu/regexp/RETokenLookAhead.class \
-       $(LIBDIR)/gnu/regexp/CharIndexedString.class \
-       $(LIBDIR)/gnu/regexp/CharIndexedCharArray.class \
-       $(LIBDIR)/gnu/regexp/CharIndexedStringBuffer.class \
-       $(LIBDIR)/gnu/regexp/CharIndexedInputStream.class \
-       $(LIBDIR)/gnu/regexp/CharIndexedReader.class \
-       $(LIBDIR)/gnu/regexp/IntPair.class \
-       $(LIBDIR)/gnu/regexp/CharUnit.class \
-       $(LIBDIR)/gnu/regexp/RE.class \
-       $(LIBDIR)/gnu/regexp/UncheckedRE.class \
-       $(LIBDIR)/gnu/regexp/RETokenStart.class \
-       $(LIBDIR)/gnu/regexp/RETokenEnd.class \
-       $(LIBDIR)/gnu/regexp/REMatchEnumeration.class \
-       $(LIBDIR)/gnu/regexp/MessagesBundle.properties
-
-GNUREGEXPCLASSES = ${GNUREGEXPCORECLASSES} \
-       $(LIBDIR)/gnu/regexp/REFilterInputStream.class \
-       $(LIBDIR)/gnu/regexp/REFilterReader.class
-
-GNUREGEXPUTILCLASSES = \
-       $(LIBDIR)/gnu/regexp/util/Grep.class \
-       $(LIBDIR)/gnu/regexp/util/Egrep.class \
-       $(LIBDIR)/gnu/regexp/util/Tests.class \
-       $(LIBDIR)/gnu/regexp/util/RETest.class
-
-GNUREGEXPAPPLETCLASSES = ${GNUREGEXPCORECLASSES} \
-       $(LIBDIR)/gnu/regexp/util/REApplet.class
-
-gnu.regexp: $(GNUREGEXPCLASSES) $(LIBDIR)/gnu-regexp-${GNUREGEXPVERSION}.jar
-
-all: gnu.regexp applet utils
-
-applet: $(DOCSDIR)/gnu-regexp-applet.jar
-
-
-install: $(LIBDIR)/gnu-regexp-${GNUREGEXPVERSION}.jar
-       cp -f $(LIBDIR)/gnu-regexp-${GNUREGEXPVERSION}.jar ${INSTALLDIR}
-
-utils: ${GNUREGEXPUTILCLASSES}
-
-clean:
-       rm -f ${GNUREGEXPCLASSES} ${GNUREGEXPUTILCLASSES} ${GNUREGEXPAPPLETCLASSES}
-       rm -f $(LIBDIR)/gnu-regexp-${GNUREGEXPVERSION}.jar
-       rm -f $(DOCSDIR)/gnu-regexp-applet.jar
-
-GNUREGEXPDIR = gnu.regexp-${GNUREGEXPVERSION}
-
-# This constitutes the official distribution
-dist: $(LIBDIR)/gnu-regexp-${GNUREGEXPVERSION}.jar
-       rm -f ../.CONTENTS
-       sed 's/^/$(GNUREGEXPDIR)\//' < ../CONTENTS > ../.CONTENTS
-       cd ../..; tar cvzf $(GNUREGEXPDIR).tar.gz -T $(GNUREGEXPDIR)/.CONTENTS
-
-javadocs:
-       mkdir -p ${APIDOCSDIR}
-       javadoc -d ${APIDOCSDIR} -author -version -public gnu.regexp gnu.regexp.util
-
-$(LIBDIR)/gnu-regexp-${GNUREGEXPVERSION}.jar: ${GNUREGEXPCLASSES}
-       cd $(LIBDIR); jar cvf gnu-regexp-${GNUREGEXPVERSION}.jar gnu/regexp/*.class gnu/regexp/*.properties
-
-$(DOCSDIR)/gnu-regexp-applet.jar: ${GNUREGEXPCLASSES} $(LIBDIR)/gnu/regexp/util/REApplet.class
-       cd $(LIBDIR); jar cvf gnu-regexp-applet.jar gnu/regexp/*.class gnu/regexp/*.properties gnu/regexp/util/REApplet.class; mv gnu-regexp-applet.jar $(DOCSDIR)
-
-# Special rules for gnu.regexp.IntPair and gnu.regexp.CharUnit inner classes
-#
-$(LIBDIR)/gnu/regexp/IntPair.class $(LIBDIR)/gnu/regexp/CharUnit.class $(LIBDIR)/gnu/regexp/RE.class : gnu/regexp/RE.java
-
-# Common rule for compiling a java file
-$(LIBDIR)/gnu/regexp/%.class: gnu/regexp/%.java
-       $(JAVACOMPILE) $<
-
-# Properties files just get copied
-$(LIBDIR)/gnu/regexp/%.properties: gnu/regexp/%.properties
-       cp $< $@
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexed.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexed.java
deleted file mode 100644 (file)
index bcb338c..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  gnu/regexp/CharIndexed.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-
-/**
- * Defines the interface used internally so that different types of source
- * text can be accessed in the same way.  Built-in concrete classes provide
- * support for String, StringBuffer, InputStream and char[] types.
- * A class that is CharIndexed supports the notion of a cursor within a
- * block of text.  The cursor must be able to be advanced via the move()
- * method.  The charAt() method returns the character at the cursor position
- * plus a given offset.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-public interface CharIndexed {
-    /**
-     * Defines a constant (0xFFFF was somewhat arbitrarily chosen)
-     * that can be returned by the charAt() function indicating that
-     * the specified index is out of range.
-     */
-    char OUT_OF_BOUNDS = '\uFFFF';
-
-    /**
-     * Returns the character at the given offset past the current cursor
-     * position in the input.  The index of the current position is zero.
-     * It is possible for this method to be called with a negative index.
-     * This happens when using the '^' operator in multiline matching mode
-     * or the '\b' or '\<' word boundary operators.  In any case, the lower
-     * bound is currently fixed at -2 (for '^' with a two-character newline).
-     *
-     * @param index the offset position in the character field to examine
-     * @return the character at the specified index, or the OUT_OF_BOUNDS
-     *   character defined by this interface.
-     */
-    char charAt(int index);
-
-    /**
-     * Shifts the input buffer by a given number of positions.  Returns
-     * true if the new cursor position is valid.
-     */
-    boolean move(int index);
-
-    /**
-     * Returns true if the most recent move() operation placed the cursor
-     * position at a valid position in the input.
-     */
-    boolean isValid();
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedCharArray.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedCharArray.java
deleted file mode 100644 (file)
index 476f93f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedCharArray.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-
-class CharIndexedCharArray implements CharIndexed, Serializable {
-    private char[] s;
-    private int anchor;
-    
-    CharIndexedCharArray(char[] str, int index) {
-       s = str;
-       anchor = index;
-    }
-    
-    public char charAt(int index) {
-       int pos = anchor + index;
-       return ((pos < s.length) && (pos >= 0)) ? s[pos] : OUT_OF_BOUNDS;
-    }
-    
-    public boolean isValid() {
-       return (anchor < s.length);
-    }
-    
-    public boolean move(int index) {
-       return ((anchor += index) < s.length);
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedInputStream.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedInputStream.java
deleted file mode 100644 (file)
index d972ea3..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedReader.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-
-// TODO: move(x) shouldn't rely on calling next() x times
-
-class CharIndexedInputStream implements CharIndexed {
-    private static final int BUFFER_INCREMENT = 1024;
-    private static final int UNKNOWN = Integer.MAX_VALUE; // value for end
-    
-    private BufferedInputStream br;
-
-    // so that we don't try to reset() right away
-    private int index = -1;
-
-    private int bufsize = BUFFER_INCREMENT;
-
-    private int end = UNKNOWN;
-
-    private char cached = OUT_OF_BOUNDS;
-
-    // Big enough for a \r\n pair
-    // lookBehind[0] = most recent
-    // lookBehind[1] = second most recent
-    private char[] lookBehind = new char[] { OUT_OF_BOUNDS, OUT_OF_BOUNDS }; 
-    
-    CharIndexedInputStream(InputStream str, int index) {
-       if (str instanceof BufferedInputStream) br = (BufferedInputStream) str;
-       else br = new BufferedInputStream(str,BUFFER_INCREMENT);
-       next();
-       if (index > 0) move(index);
-    }
-    
-    private boolean next() {
-       if (end == 1) return false;
-       end--; // closer to end
-
-       try {
-           if (index != -1) {
-               br.reset();
-           }
-           int i = br.read();
-           br.mark(bufsize);
-           if (i == -1) {
-               end = 1;
-               cached = OUT_OF_BOUNDS;
-               return false;
-           }
-           cached = (char) i;
-           index = 1;
-       } catch (IOException e) { 
-           e.printStackTrace();
-           cached = OUT_OF_BOUNDS;
-           return false; 
-       }
-       return true;
-    }
-    
-    public char charAt(int index) {
-       if (index == 0) {
-           return cached;
-       } else if (index >= end) {
-           return OUT_OF_BOUNDS;
-       } else if (index == -1) {
-           return lookBehind[0];
-       } else if (index == -2) {
-           return lookBehind[1];
-       } else if (index < -2) {
-           return OUT_OF_BOUNDS;
-       } else if (index >= bufsize) {
-           // Allocate more space in the buffer.
-           try {
-               while (bufsize <= index) bufsize += BUFFER_INCREMENT;
-               br.reset();
-               br.mark(bufsize);
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (this.index != index) {
-           try {
-               br.reset();
-               br.skip(index-1);
-           } catch (IOException e) { }
-       }
-       char ch = OUT_OF_BOUNDS;
-       
-       try {
-           int i = br.read();
-           this.index = index+1; // this.index is index of next pos relative to charAt(0)
-           if (i == -1) {
-               // set flag that next should fail next time?
-               end = index;
-               return ch;
-           }
-           ch = (char) i;
-       } catch (IOException ie) { }
-       
-       return ch;
-    }
-    
-    public boolean move(int index) {
-       // move read position [index] clicks from 'charAt(0)'
-       boolean retval = true;
-       while (retval && (index-- > 0)) retval = next();
-       return retval;
-    }
-    
-    public boolean isValid() {
-       return (cached != OUT_OF_BOUNDS);
-    }
-}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedReader.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedReader.java
deleted file mode 100644 (file)
index aa0fa5a..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedReader.java
- *  Copyright (C) 2001 Lee Sau Dan
- *  Based on gnu.regexp.CharIndexedInputStream by Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.IOException;
-
-// TODO: move(x) shouldn't rely on calling next() x times
-
-class CharIndexedReader implements CharIndexed {
-    private static final int BUFFER_INCREMENT = 1024;
-    private static final int UNKNOWN = Integer.MAX_VALUE; // value for end
-    
-    private final BufferedReader br;
-    // so that we don't try to reset() right away
-    private int index = -1;
-
-    private int bufsize = BUFFER_INCREMENT;
-
-    private int end = UNKNOWN;
-
-    private char cached = OUT_OF_BOUNDS;
-
-    // Big enough for a \r\n pair
-    // lookBehind[0] = most recent
-    // lookBehind[1] = second most recent
-    private char[] lookBehind = new char[] { OUT_OF_BOUNDS, OUT_OF_BOUNDS }; 
-  
-    CharIndexedReader(Reader reader, int index) {
-       if (reader instanceof BufferedReader) {
-           br = (BufferedReader) reader; 
-       } else {
-           br = new BufferedReader(reader,BUFFER_INCREMENT);
-       }
-       next();
-       if (index > 0) move(index);
-    }
-    
-    private boolean next() {
-       lookBehind[1] = lookBehind[0];
-       lookBehind[0] = cached;
-
-       if (end == 1) {
-           cached = OUT_OF_BOUNDS;
-           return false;
-       }
-       end--; // closer to end
-       
-       try {
-           if (index != -1) {
-               br.reset();
-           }
-           int i = br.read();
-           br.mark(bufsize);
-           if (i == -1) {
-               end = 1;
-               cached = OUT_OF_BOUNDS;
-               return false;
-           }
-
-           // convert the byte read into a char
-           cached = (char) i;
-           index = 1;
-       } catch (IOException e) { 
-           e.printStackTrace();
-           cached = OUT_OF_BOUNDS;
-           return false; 
-       }
-       return true;
-    }
-    
-    public char charAt(int index) {
-       if (index == 0) {
-           return cached;
-       } else if (index >= end) {
-           return OUT_OF_BOUNDS;
-       } else if (index >= bufsize) {
-           // Allocate more space in the buffer.
-           try {
-               while (bufsize <= index) bufsize += BUFFER_INCREMENT;
-               br.reset();
-               br.mark(bufsize);
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (this.index != index) {
-           try {
-               br.reset();
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (index == -1) {
-           return lookBehind[0];
-       } else if (index == -2) {
-           return lookBehind[1];
-       } else if (index < -2) {
-           return OUT_OF_BOUNDS;
-       }
-
-       char ch = OUT_OF_BOUNDS;
-       
-       try {
-           int i = br.read();
-           this.index = index+1; // this.index is index of next pos relative to charAt(0)
-           if (i == -1) {
-               // set flag that next should fail next time?
-               end = index;
-               return ch;
-           }
-           ch = (char) i;
-       } catch (IOException ie) { }
-       
-       return ch;
-    }
-    
-    public boolean move(int index) {
-       // move read position [index] clicks from 'charAt(0)'
-       boolean retval = true;
-       while (retval && (index-- > 0)) retval = next();
-       return retval;
-    }
-    
-    public boolean isValid() {
-       return (cached != OUT_OF_BOUNDS);
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedString.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedString.java
deleted file mode 100644 (file)
index 3bf4a57..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedString.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-
-class CharIndexedString implements CharIndexed, Serializable {
-    private String s;
-    private int anchor;
-    private int len;
-    
-    CharIndexedString(String str, int index) {
-       s = str;
-       len = s.length();
-       anchor = index;
-    }
-
-    public char charAt(int index) {
-       int pos = anchor + index;
-       return ((pos < len) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
-    }
-    
-    public boolean isValid() {
-       return (anchor < len);
-    }
-    
-    public boolean move(int index) {
-       return ((anchor += index) < len);
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedStringBuffer.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/CharIndexedStringBuffer.java
deleted file mode 100644 (file)
index b9ea934..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedStringBuffer.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-
-class CharIndexedStringBuffer implements CharIndexed, Serializable {
-    private StringBuffer s;
-    private int anchor;
-
-    CharIndexedStringBuffer(StringBuffer str, int index) {
-       s = str;
-       anchor = index;
-    }
-
-  public char charAt(int index) {
-      int pos = anchor + index;
-    return ((pos < s.length()) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
-  }
-
-  public boolean isValid() {
-    return (anchor < s.length());
-  }
-
-  public boolean move(int index) {
-    return ((anchor += index) < s.length());
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/MessagesBundle.properties b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/MessagesBundle.properties
deleted file mode 100644 (file)
index 7f06daf..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Localized error messages for gnu.regexp
-
-# Prefix for REException messages
-error.prefix=At position {0} in regular expression pattern:
-
-# REException (parse error) messages
-repeat.assertion=repeated token is zero-width assertion
-repeat.chained=attempted to repeat a token that is already repeated
-repeat.no.token=quantifier (?*+{}) without preceding token
-repeat.empty.token=repeated token may be empty
-unmatched.brace=unmatched brace
-unmatched.bracket=unmatched bracket
-unmatched.paren=unmatched parenthesis
-interval.no.end=expected end of interval
-class.no.end=expected end of character class
-subexpr.no.end=expected end of subexpression
-interval.order=interval minimum is greater than maximum
-interval.error=interval is empty or contains illegal chracters
-ends.with.backslash=backslash at end of pattern
-
-# RESyntax message
-syntax.final=Syntax has been declared final and cannot be modified
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RE.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RE.java
deleted file mode 100644 (file)
index b9dcccb..0000000
+++ /dev/null
@@ -1,1343 +0,0 @@
-/*
- *  gnu/regexp/RE.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.Serializable;
-import java.util.Locale;
-import java.util.PropertyResourceBundle;
-import java.util.ResourceBundle;
-import java.util.Vector;
-
-class IntPair implements Serializable {
-  public int first, second;
-}
-
-class CharUnit implements Serializable {
-  public char ch;
-  public boolean bk;
-}
-
-/**
- * RE provides the user interface for compiling and matching regular
- * expressions.
- * <P>
- * A regular expression object (class RE) is compiled by constructing it
- * from a String, StringBuffer or character array, with optional 
- * compilation flags (below)
- * and an optional syntax specification (see RESyntax; if not specified,
- * <code>RESyntax.RE_SYNTAX_PERL5</code> is used).
- * <P>
- * Various methods attempt to match input text against a compiled
- * regular expression.  These methods are:
- * <LI><code>isMatch</code>: returns true if the input text in its entirety
- * matches the regular expression pattern.
- * <LI><code>getMatch</code>: returns the first match found in the input text,
- * or null if no match is found.
- * <LI><code>getAllMatches</code>: returns an array of all non-overlapping 
- * matches found in the input text.  If no matches are found, the array is
- * zero-length.
- * <LI><code>substitute</code>: substitute the first occurence of the pattern
- * in the input text with a replacement string (which may include
- * metacharacters $0-$9, see REMatch.substituteInto).
- * <LI><code>substituteAll</code>: same as above, but repeat for each match
- * before returning.
- * <LI><code>getMatchEnumeration</code>: returns an REMatchEnumeration object
- * that allows iteration over the matches (see REMatchEnumeration for some
- * reasons why you may want to do this instead of using <code>getAllMatches</code>.
- * <P>
- *
- * These methods all have similar argument lists.  The input can be a
- * String, a character array, a StringBuffer, a Reader or an
- * InputStream of some sort.  Note that when using a Reader or
- * InputStream, the stream read position cannot be guaranteed after
- * attempting a match (this is not a bug, but a consequence of the way
- * regular expressions work).  Using an REMatchEnumeration can
- * eliminate most positioning problems.
- *
- * <P>
- *
- * The optional index argument specifies the offset from the beginning
- * of the text at which the search should start (see the descriptions
- * of some of the execution flags for how this can affect positional
- * pattern operators).  For a Reader or InputStream, this means an
- * offset from the current read position, so subsequent calls with the
- * same index argument on a Reader or an InputStream will not
- * necessarily access the same position on the stream, whereas
- * repeated searches at a given index in a fixed string will return
- * consistent results.
- *
- * <P>
- * You can optionally affect the execution environment by using a
- * combination of execution flags (constants listed below).
- * 
- * <P>
- * All operations on a regular expression are performed in a
- * thread-safe manner.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @version 1.1.4-dev, to be released
- */
-
-public class RE extends REToken {
-  // This String will be returned by getVersion()
-  private static final String VERSION = "1.1.4-dev";
-
-  // The localized strings are kept in a separate file
-  private static ResourceBundle messages = PropertyResourceBundle.getBundle("gnu/regexp/MessagesBundle", Locale.getDefault());
-
-  // These are, respectively, the first and last tokens in our linked list
-  // If there is only one token, firstToken == lastToken
-  private REToken firstToken, lastToken;
-
-  // This is the number of subexpressions in this regular expression,
-  // with a minimum value of zero.  Returned by getNumSubs()
-  private int numSubs;
-
-    /** Minimum length, in characters, of any possible match. */
-    private int minimumLength;
-
-  /**
-   * Compilation flag. Do  not  differentiate  case.   Subsequent
-   * searches  using  this  RE will be case insensitive.
-   */
-  public static final int REG_ICASE = 2;
-
-  /**
-   * Compilation flag. The match-any-character operator (dot)
-   * will match a newline character.  When set this overrides the syntax
-   * bit RE_DOT_NEWLINE (see RESyntax for details).  This is equivalent to
-   * the "/s" operator in Perl.
-   */
-  public static final int REG_DOT_NEWLINE = 4;
-
-  /**
-   * Compilation flag. Use multiline mode.  In this mode, the ^ and $
-   * anchors will match based on newlines within the input. This is
-   * equivalent to the "/m" operator in Perl.
-   */
-  public static final int REG_MULTILINE = 8;
-
-  /**
-   * Execution flag.
-   * The match-beginning operator (^) will not match at the beginning
-   * of the input string. Useful for matching on a substring when you
-   * know the context of the input is such that position zero of the
-   * input to the match test is not actually position zero of the text.
-   * <P>
-   * This example demonstrates the results of various ways of matching on
-   * a substring.
-   * <P>
-   * <CODE>
-   * String s = "food bar fool";<BR>
-   * RE exp = new RE("^foo.");<BR>
-   * REMatch m0 = exp.getMatch(s);<BR>
-   * REMatch m1 = exp.getMatch(s.substring(8));<BR>
-   * REMatch m2 = exp.getMatch(s.substring(8),0,RE.REG_NOTBOL); <BR>
-   * REMatch m3 = exp.getMatch(s,8);                            <BR>
-   * REMatch m4 = exp.getMatch(s,8,RE.REG_ANCHORINDEX);         <BR>
-   * <P>
-   * // Results:<BR>
-   * //  m0 = "food"<BR>
-   * //  m1 = "fool"<BR>
-   * //  m2 = null<BR>
-   * //  m3 = null<BR>
-   * //  m4 = "fool"<BR>
-   * </CODE>
-   */
-  public static final int REG_NOTBOL = 16;
-
-  /**
-   * Execution flag.
-   * The match-end operator ($) does not match at the end
-   * of the input string. Useful for matching on substrings.
-   */
-  public static final int REG_NOTEOL = 32;
-
-  /**
-   * Execution flag.
-   * When a match method is invoked that starts matching at a non-zero
-   * index into the input, treat the input as if it begins at the index
-   * given.  The effect of this flag is that the engine does not "see"
-   * any text in the input before the given index.  This is useful so
-   * that the match-beginning operator (^) matches not at position 0
-   * in the input string, but at the position the search started at
-   * (based on the index input given to the getMatch function).  See
-   * the example under REG_NOTBOL.  It also affects the use of the \&lt;
-   * and \b operators.
-   */
-  public static final int REG_ANCHORINDEX = 64;
-
-  /**
-   * Execution flag.
-   * The substitute and substituteAll methods will not attempt to
-   * interpolate occurrences of $1-$9 in the replacement text with
-   * the corresponding subexpressions.  For example, you may want to
-   * replace all matches of "one dollar" with "$1".
-   */
-  public static final int REG_NO_INTERPOLATE = 128;
-
-  /** Returns a string representing the version of the gnu.regexp package. */
-  public static final String version() {
-    return VERSION;
-  }
-
-  // Retrieves a message from the ResourceBundle
-  static final String getLocalizedMessage(String key) {
-    return messages.getString(key);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer without any compilation
-   * flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @exception REException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public RE(Object pattern) throws REException {
-    this(pattern,0,RESyntax.RE_SYNTAX_PERL5,0,0);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags listed above.
-   * @exception REException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public RE(Object pattern, int cflags) throws REException {
-    this(pattern,cflags,RESyntax.RE_SYNTAX_PERL5,0,0);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and regular expression syntax.
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags listed above.
-   * @param syntax The type of regular expression syntax to use.
-   * @exception REException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public RE(Object pattern, int cflags, RESyntax syntax) throws REException {
-    this(pattern,cflags,syntax,0,0);
-  }
-
-  // internal constructor used for alternation
-  private RE(REToken first, REToken last,int subs, int subIndex, int minLength) {
-    super(subIndex);
-    firstToken = first;
-    lastToken = last;
-    numSubs = subs;
-    minimumLength = minLength;
-    addToken(new RETokenEndSub(subIndex));
-  }
-
-  private RE(Object patternObj, int cflags, RESyntax syntax, int myIndex, int nextSub) throws REException {
-    super(myIndex); // Subexpression index of this token.
-    initialize(patternObj, cflags, syntax, myIndex, nextSub);
-  }
-
-    // For use by subclasses
-    protected RE() { super(0); }
-
-    // The meat of construction
-  protected void initialize(Object patternObj, int cflags, RESyntax syntax, int myIndex, int nextSub) throws REException {
-      char[] pattern;
-    if (patternObj instanceof String) {
-      pattern = ((String) patternObj).toCharArray();
-    } else if (patternObj instanceof char[]) {
-      pattern = (char[]) patternObj;
-    } else if (patternObj instanceof StringBuffer) {
-      pattern = new char [((StringBuffer) patternObj).length()];
-      ((StringBuffer) patternObj).getChars(0,pattern.length,pattern,0);
-    } else {
-       pattern = patternObj.toString().toCharArray();
-    }
-
-    int pLength = pattern.length;
-
-    numSubs = 0; // Number of subexpressions in this token.
-    Vector branches = null;
-
-    // linked list of tokens (sort of -- some closed loops can exist)
-    firstToken = lastToken = null;
-
-    // Precalculate these so we don't pay for the math every time we
-    // need to access them.
-    boolean insens = ((cflags & REG_ICASE) > 0);
-
-    // Parse pattern into tokens.  Does anyone know if it's more efficient
-    // to use char[] than a String.charAt()?  I'm assuming so.
-
-    // index tracks the position in the char array
-    int index = 0;
-
-    // this will be the current parse character (pattern[index])
-    CharUnit unit = new CharUnit();
-
-    // This is used for {x,y} calculations
-    IntPair minMax = new IntPair();
-
-    // Buffer a token so we can create a TokenRepeated, etc.
-    REToken currentToken = null;
-    char ch;
-
-    while (index < pLength) {
-      // read the next character unit (including backslash escapes)
-      index = getCharUnit(pattern,index,unit);
-
-      // ALTERNATION OPERATOR
-      //  \| or | (if RE_NO_BK_VBAR) or newline (if RE_NEWLINE_ALT)
-      //  not available if RE_LIMITED_OPS is set
-
-      // TODO: the '\n' literal here should be a test against REToken.newline,
-      // which unfortunately may be more than a single character.
-      if ( ( (unit.ch == '|' && (syntax.get(RESyntax.RE_NO_BK_VBAR) ^ unit.bk))
-            || (syntax.get(RESyntax.RE_NEWLINE_ALT) && (unit.ch == '\n') && !unit.bk) )
-          && !syntax.get(RESyntax.RE_LIMITED_OPS)) {
-       // make everything up to here be a branch. create vector if nec.
-       addToken(currentToken);
-       RE theBranch = new RE(firstToken, lastToken, numSubs, subIndex, minimumLength);
-       minimumLength = 0;
-       if (branches == null) {
-           branches = new Vector();
-       }
-       branches.addElement(theBranch);
-       firstToken = lastToken = currentToken = null;
-      }
-      
-      // INTERVAL OPERATOR:
-      //  {x} | {x,} | {x,y}  (RE_INTERVALS && RE_NO_BK_BRACES)
-      //  \{x\} | \{x,\} | \{x,y\} (RE_INTERVALS && !RE_NO_BK_BRACES)
-      //
-      // OPEN QUESTION: 
-      //  what is proper interpretation of '{' at start of string?
-
-      else if ((unit.ch == '{') && syntax.get(RESyntax.RE_INTERVALS) && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk)) {
-       int newIndex = getMinMax(pattern,index,minMax,syntax);
-        if (newIndex > index) {
-          if (minMax.first > minMax.second)
-            throw new REException(getLocalizedMessage("interval.order"),REException.REG_BADRPT,newIndex);
-          if (currentToken == null)
-            throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,newIndex);
-          if (currentToken instanceof RETokenRepeated) 
-            throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,newIndex);
-          if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-            throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,newIndex);
-          if ((currentToken.getMinimumLength() == 0) && (minMax.second == Integer.MAX_VALUE))
-            throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,newIndex);
-          index = newIndex;
-          currentToken = setRepeated(currentToken,minMax.first,minMax.second,index); 
-        }
-        else {
-          addToken(currentToken);
-          currentToken = new RETokenChar(subIndex,unit.ch,insens);
-        } 
-      }
-      
-      // LIST OPERATOR:
-      //  [...] | [^...]
-
-      else if ((unit.ch == '[') && !unit.bk) {
-       Vector options = new Vector();
-       boolean negative = false;
-       char lastChar = 0;
-       if (index == pLength) throw new REException(getLocalizedMessage("unmatched.bracket"),REException.REG_EBRACK,index);
-       
-       // Check for initial caret, negation
-       if ((ch = pattern[index]) == '^') {
-         negative = true;
-         if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-         ch = pattern[index];
-       }
-
-       // Check for leading right bracket literal
-       if (ch == ']') {
-         lastChar = ch;
-         if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-       }
-
-       while ((ch = pattern[index++]) != ']') {
-         if ((ch == '-') && (lastChar != 0)) {
-           if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-           if ((ch = pattern[index]) == ']') {
-             options.addElement(new RETokenChar(subIndex,lastChar,insens));
-             lastChar = '-';
-           } else {
-             options.addElement(new RETokenRange(subIndex,lastChar,ch,insens));
-             lastChar = 0;
-             index++;
-           }
-          } else if ((ch == '\\') && syntax.get(RESyntax.RE_BACKSLASH_ESCAPE_IN_LISTS)) {
-            if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-           int posixID = -1;
-           boolean negate = false;
-            char asciiEsc = 0;
-           if (("dswDSW".indexOf(pattern[index]) != -1) && syntax.get(RESyntax.RE_CHAR_CLASS_ESC_IN_LISTS)) {
-             switch (pattern[index]) {
-             case 'D':
-               negate = true;
-             case 'd':
-               posixID = RETokenPOSIX.DIGIT;
-               break;
-             case 'S':
-               negate = true;
-             case 's':
-               posixID = RETokenPOSIX.SPACE;
-               break;
-             case 'W':
-               negate = true;
-             case 'w':
-               posixID = RETokenPOSIX.ALNUM;
-               break;
-             }
-           }
-            else if ("nrt".indexOf(pattern[index]) != -1) {
-              switch (pattern[index]) {
-                case 'n':
-                  asciiEsc = '\n';
-                  break;
-                case 't':
-                  asciiEsc = '\t';
-                  break;
-                case 'r':
-                  asciiEsc = '\r';
-                  break;
-              }
-            }
-           if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
-           
-           if (posixID != -1) {
-             options.addElement(new RETokenPOSIX(subIndex,posixID,insens,negate));
-           } else if (asciiEsc != 0) {
-             lastChar = asciiEsc;
-           } else {
-             lastChar = pattern[index];
-           }
-           ++index;
-         } else if ((ch == '[') && (syntax.get(RESyntax.RE_CHAR_CLASSES)) && (index < pLength) && (pattern[index] == ':')) {
-           StringBuffer posixSet = new StringBuffer();
-           index = getPosixSet(pattern,index+1,posixSet);
-           int posixId = RETokenPOSIX.intValue(posixSet.toString());
-           if (posixId != -1)
-             options.addElement(new RETokenPOSIX(subIndex,posixId,insens,false));
-         } else {
-           if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
-           lastChar = ch;
-         }
-         if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-       } // while in list
-       // Out of list, index is one past ']'
-           
-       if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
-           
-       // Create a new RETokenOneOf
-       addToken(currentToken);
-       options.trimToSize();
-       currentToken = new RETokenOneOf(subIndex,options,negative);
-      }
-
-      // SUBEXPRESSIONS
-      //  (...) | \(...\) depending on RE_NO_BK_PARENS
-
-      else if ((unit.ch == '(') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk)) {
-       boolean pure = false;
-       boolean comment = false;
-        boolean lookAhead = false;
-        boolean negativelh = false;
-       if ((index+1 < pLength) && (pattern[index] == '?')) {
-         switch (pattern[index+1]) {
-          case '!':
-            if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
-              pure = true;
-              negativelh = true;
-              lookAhead = true;
-              index += 2;
-            }
-            break;
-          case '=':
-            if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
-              pure = true;
-              lookAhead = true;
-              index += 2;
-            }
-            break;
-         case ':':
-           if (syntax.get(RESyntax.RE_PURE_GROUPING)) {
-             pure = true;
-             index += 2;
-           }
-           break;
-         case '#':
-           if (syntax.get(RESyntax.RE_COMMENTS)) {
-             comment = true;
-           }
-           break;
-          default:
-            throw new REException(getLocalizedMessage("repeat.no.token"), REException.REG_BADRPT, index);
-         }
-       }
-
-       if (index >= pLength) {
-           throw new REException(getLocalizedMessage("unmatched.paren"), REException.REG_ESUBREG,index);
-       }
-
-       // find end of subexpression
-       int endIndex = index;
-       int nextIndex = index;
-       int nested = 0;
-
-       while ( ((nextIndex = getCharUnit(pattern,endIndex,unit)) > 0)
-               && !(nested == 0 && (unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk)) )
-         if ((endIndex = nextIndex) >= pLength)
-           throw new REException(getLocalizedMessage("subexpr.no.end"),REException.REG_ESUBREG,nextIndex);
-         else if (unit.ch == '(' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))
-           nested++;
-         else if (unit.ch == ')' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))
-           nested--;
-
-       // endIndex is now position at a ')','\)' 
-       // nextIndex is end of string or position after ')' or '\)'
-
-       if (comment) index = nextIndex;
-       else { // not a comment
-         // create RE subexpression as token.
-         addToken(currentToken);
-         if (!pure) {
-           numSubs++;
-         }
-
-         int useIndex = (pure || lookAhead) ? 0 : nextSub + numSubs;
-         currentToken = new RE(String.valueOf(pattern,index,endIndex-index).toCharArray(),cflags,syntax,useIndex,nextSub + numSubs);
-         numSubs += ((RE) currentToken).getNumSubs();
-
-          if (lookAhead) {
-             currentToken = new RETokenLookAhead(currentToken,negativelh);
-         }
-
-         index = nextIndex;
-       } // not a comment
-      } // subexpression
-    
-      // UNMATCHED RIGHT PAREN
-      // ) or \) throw exception if
-      // !syntax.get(RESyntax.RE_UNMATCHED_RIGHT_PAREN_ORD)
-      else if (!syntax.get(RESyntax.RE_UNMATCHED_RIGHT_PAREN_ORD) && ((unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))) {
-       throw new REException(getLocalizedMessage("unmatched.paren"),REException.REG_EPAREN,index);
-      }
-
-      // START OF LINE OPERATOR
-      //  ^
-
-      else if ((unit.ch == '^') && !unit.bk) {
-       addToken(currentToken);
-       currentToken = null;
-       addToken(new RETokenStart(subIndex,((cflags & REG_MULTILINE) > 0) ? syntax.getLineSeparator() : null));
-      }
-
-      // END OF LINE OPERATOR
-      //  $
-
-      else if ((unit.ch == '$') && !unit.bk) {
-       addToken(currentToken);
-       currentToken = null;
-       addToken(new RETokenEnd(subIndex,((cflags & REG_MULTILINE) > 0) ? syntax.getLineSeparator() : null));
-      }
-
-      // MATCH-ANY-CHARACTER OPERATOR (except possibly newline and null)
-      //  .
-
-      else if ((unit.ch == '.') && !unit.bk) {
-       addToken(currentToken);
-       currentToken = new RETokenAny(subIndex,syntax.get(RESyntax.RE_DOT_NEWLINE) || ((cflags & REG_DOT_NEWLINE) > 0),syntax.get(RESyntax.RE_DOT_NOT_NULL));
-      }
-
-      // ZERO-OR-MORE REPEAT OPERATOR
-      //  *
-
-      else if ((unit.ch == '*') && !unit.bk) {
-       if (currentToken == null)
-          throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenRepeated)
-          throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-         throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
-       if (currentToken.getMinimumLength() == 0)
-         throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,index);
-       currentToken = setRepeated(currentToken,0,Integer.MAX_VALUE,index);
-      }
-
-      // ONE-OR-MORE REPEAT OPERATOR
-      //  + | \+ depending on RE_BK_PLUS_QM
-      //  not available if RE_LIMITED_OPS is set
-
-      else if ((unit.ch == '+') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ unit.bk)) {
-       if (currentToken == null)
-          throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenRepeated)
-          throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-         throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
-       if (currentToken.getMinimumLength() == 0)
-         throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,index);
-       currentToken = setRepeated(currentToken,1,Integer.MAX_VALUE,index);
-      }
-
-      // ZERO-OR-ONE REPEAT OPERATOR / STINGY MATCHING OPERATOR
-      //  ? | \? depending on RE_BK_PLUS_QM
-      //  not available if RE_LIMITED_OPS is set
-      //  stingy matching if RE_STINGY_OPS is set and it follows a quantifier
-
-      else if ((unit.ch == '?') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ unit.bk)) {
-       if (currentToken == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-
-       // Check for stingy matching on RETokenRepeated
-       if (currentToken instanceof RETokenRepeated) {
-          if (syntax.get(RESyntax.RE_STINGY_OPS) && !((RETokenRepeated)currentToken).isStingy())
-            ((RETokenRepeated)currentToken).makeStingy();
-          else
-            throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
-        }
-        else if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-          throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
-       else
-         currentToken = setRepeated(currentToken,0,1,index);
-      }
-       
-      // BACKREFERENCE OPERATOR
-      //  \1 \2 ... \9
-      // not available if RE_NO_BK_REFS is set
-
-      else if (unit.bk && Character.isDigit(unit.ch) && !syntax.get(RESyntax.RE_NO_BK_REFS)) {
-       addToken(currentToken);
-       currentToken = new RETokenBackRef(subIndex,Character.digit(unit.ch,10),insens);
-      }
-
-      // START OF STRING OPERATOR
-      //  \A if RE_STRING_ANCHORS is set
-      
-      else if (unit.bk && (unit.ch == 'A') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-       addToken(currentToken);
-       currentToken = new RETokenStart(subIndex,null);
-      }
-
-      // WORD BREAK OPERATOR
-      //  \b if ????
-
-      else if (unit.bk && (unit.ch == 'b') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN | RETokenWordBoundary.END, false);
-      } 
-
-      // WORD BEGIN OPERATOR 
-      //  \< if ????
-      else if (unit.bk && (unit.ch == '<')) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN, false);
-      } 
-
-      // WORD END OPERATOR 
-      //  \> if ????
-      else if (unit.bk && (unit.ch == '>')) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.END, false);
-      } 
-
-      // NON-WORD BREAK OPERATOR
-      // \B if ????
-
-      else if (unit.bk && (unit.ch == 'B') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN | RETokenWordBoundary.END, true);
-      } 
-
-      
-      // DIGIT OPERATOR
-      //  \d if RE_CHAR_CLASS_ESCAPES is set
-      
-      else if (unit.bk && (unit.ch == 'd') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-       addToken(currentToken);
-       currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,false);
-      }
-
-      // NON-DIGIT OPERATOR
-      //  \D
-
-       else if (unit.bk && (unit.ch == 'D') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,true);
-       }
-
-       // NEWLINE ESCAPE
-        //  \n
-
-       else if (unit.bk && (unit.ch == 'n')) {
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,'\n',false);
-       }
-
-       // RETURN ESCAPE
-        //  \r
-
-       else if (unit.bk && (unit.ch == 'r')) {
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,'\r',false);
-       }
-
-       // WHITESPACE OPERATOR
-        //  \s if RE_CHAR_CLASS_ESCAPES is set
-
-       else if (unit.bk && (unit.ch == 's') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,false);
-       }
-
-       // NON-WHITESPACE OPERATOR
-        //  \S
-
-       else if (unit.bk && (unit.ch == 'S') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,true);
-       }
-
-       // TAB ESCAPE
-        //  \t
-
-       else if (unit.bk && (unit.ch == 't')) {
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,'\t',false);
-       }
-
-       // ALPHANUMERIC OPERATOR
-        //  \w
-
-       else if (unit.bk && (unit.ch == 'w') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,false);
-       }
-
-       // NON-ALPHANUMERIC OPERATOR
-        //  \W
-
-       else if (unit.bk && (unit.ch == 'W') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,true);
-       }
-
-       // END OF STRING OPERATOR
-        //  \Z
-
-       else if (unit.bk && (unit.ch == 'Z') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-         addToken(currentToken);
-         currentToken = new RETokenEnd(subIndex,null);
-       }
-
-       // NON-SPECIAL CHARACTER (or escape to make literal)
-        //  c | \* for example
-
-       else {  // not a special character
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,unit.ch,insens);
-       } 
-      } // end while
-
-    // Add final buffered token and an EndSub marker
-    addToken(currentToken);
-      
-    if (branches != null) {
-       branches.addElement(new RE(firstToken,lastToken,numSubs,subIndex,minimumLength));
-       branches.trimToSize(); // compact the Vector
-       minimumLength = 0;
-       firstToken = lastToken = null;
-       addToken(new RETokenOneOf(subIndex,branches,false));
-    } 
-    else addToken(new RETokenEndSub(subIndex));
-
-  }
-
-  private static int getCharUnit(char[] input, int index, CharUnit unit) throws REException {
-    unit.ch = input[index++];
-    if (unit.bk = (unit.ch == '\\'))
-      if (index < input.length)
-       unit.ch = input[index++];
-      else throw new REException(getLocalizedMessage("ends.with.backslash"),REException.REG_ESCAPE,index);
-    return index;
-  }
-
-  /**
-   * Checks if the regular expression matches the input in its entirety.
-   *
-   * @param input The input text.
-   */
-  public boolean isMatch(Object input) {
-    return isMatch(input,0,0);
-  }
-  
-  /**
-   * Checks if the input string, starting from index, is an exact match of
-   * this regular expression.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   */
-  public boolean isMatch(Object input,int index) {
-    return isMatch(input,index,0);
-  }
-  
-
-  /**
-   * Checks if the input, starting from index and using the specified
-   * execution flags, is an exact match of this regular expression.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   */
-  public boolean isMatch(Object input,int index,int eflags) {
-    return isMatchImpl(makeCharIndexed(input,index),index,eflags);
-  }
-
-  private boolean isMatchImpl(CharIndexed input, int index, int eflags) {
-    if (firstToken == null)  // Trivial case
-      return (input.charAt(0) == CharIndexed.OUT_OF_BOUNDS);
-    REMatch m = new REMatch(numSubs, index, eflags);
-    if (firstToken.match(input, m)) {
-       while (m != null) {
-           if (input.charAt(m.index) == CharIndexed.OUT_OF_BOUNDS) {
-               return true;
-           }
-           m = m.next;
-       }
-    }
-    return false;
-  }
-    
-  /**
-   * Returns the maximum number of subexpressions in this regular expression.
-   * If the expression contains branches, the value returned will be the
-   * maximum subexpressions in any of the branches.
-   */
-  public int getNumSubs() {
-    return numSubs;
-  }
-
-  // Overrides REToken.setUncle
-  void setUncle(REToken uncle) {
-      if (lastToken != null) {
-         lastToken.setUncle(uncle);
-      } else super.setUncle(uncle); // to deal with empty subexpressions
-  }
-
-  // Overrides REToken.chain
-
-  boolean chain(REToken next) {
-    super.chain(next);
-    setUncle(next);
-    return true;
-  }
-
-  /**
-   * Returns the minimum number of characters that could possibly
-   * constitute a match of this regular expression.
-   */
-  public int getMinimumLength() {
-      return minimumLength;
-  }
-
-  /**
-   * Returns an array of all matches found in the input.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @return a non-null (but possibly zero-length) array of matches
-   */
-  public REMatch[] getAllMatches(Object input) {
-    return getAllMatches(input,0,0);
-  }
-
-  /**
-   * Returns an array of all matches found in the input,
-   * beginning at the specified index position.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @return a non-null (but possibly zero-length) array of matches
-   */
-  public REMatch[] getAllMatches(Object input, int index) {
-    return getAllMatches(input,index,0);
-  }
-
-  /**
-   * Returns an array of all matches found in the input string,
-   * beginning at the specified index position and using the specified
-   * execution flags.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return a non-null (but possibly zero-length) array of matches
-   */
-  public REMatch[] getAllMatches(Object input, int index, int eflags) {
-    return getAllMatchesImpl(makeCharIndexed(input,index),index,eflags);
-  }
-
-  // this has been changed since 1.03 to be non-overlapping matches
-  private REMatch[] getAllMatchesImpl(CharIndexed input, int index, int eflags) {
-    Vector all = new Vector();
-    REMatch m = null;
-    while ((m = getMatchImpl(input,index,eflags,null)) != null) {
-      all.addElement(m);
-      index = m.getEndIndex();
-      if (m.end[0] == 0) {   // handle pathological case of zero-length match
-       index++;
-       input.move(1);
-      } else {
-       input.move(m.end[0]);
-      }
-      if (!input.isValid()) break;
-    }
-    REMatch[] mset = new REMatch[all.size()];
-    all.copyInto(mset);
-    return mset;
-  }
-  
-    /* Implements abstract method REToken.match() */
-    boolean match(CharIndexed input, REMatch mymatch) { 
-       if (firstToken == null) return next(input, mymatch);
-
-       // Note the start of this subexpression
-       mymatch.start[subIndex] = mymatch.index;
-
-       return firstToken.match(input, mymatch);
-    }
-  
-  /**
-   * Returns the first match found in the input.  If no match is found,
-   * null is returned.
-   *
-   * @param input The input text.
-   * @return An REMatch instance referencing the match, or null if none.
-   */
-  public REMatch getMatch(Object input) {
-    return getMatch(input,0,0);
-  }
-  
-  /**
-   * Returns the first match found in the input, beginning
-   * the search at the specified index.  If no match is found,
-   * returns null.
-   *
-   * @param input The input text.
-   * @param index The offset within the text to begin looking for a match.
-   * @return An REMatch instance referencing the match, or null if none.
-   */
-  public REMatch getMatch(Object input, int index) {
-    return getMatch(input,index,0);
-  }
-  
-  /**
-   * Returns the first match found in the input, beginning
-   * the search at the specified index, and using the specified
-   * execution flags.  If no match is found, returns null.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return An REMatch instance referencing the match, or null if none.
-   */
-  public REMatch getMatch(Object input, int index, int eflags) {
-    return getMatch(input,index,eflags,null);
-  }
-
-  /**
-   * Returns the first match found in the input, beginning the search
-   * at the specified index, and using the specified execution flags.
-   * If no match is found, returns null.  If a StringBuffer is
-   * provided and is non-null, the contents of the input text from the
-   * index to the beginning of the match (or to the end of the input,
-   * if there is no match) are appended to the StringBuffer.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @param buffer The StringBuffer to save pre-match text in.
-   * @return An REMatch instance referencing the match, or null if none.  */
-  public REMatch getMatch(Object input, int index, int eflags, StringBuffer buffer) {
-    return getMatchImpl(makeCharIndexed(input,index),index,eflags,buffer);
-  }
-
-  REMatch getMatchImpl(CharIndexed input, int anchor, int eflags, StringBuffer buffer) {
-      // Create a new REMatch to hold results
-      REMatch mymatch = new REMatch(numSubs, anchor, eflags);
-      do {
-         // Optimization: check if anchor + minimumLength > length
-         if (minimumLength == 0 || input.charAt(minimumLength-1) != CharIndexed.OUT_OF_BOUNDS) {
-             if (match(input, mymatch)) {
-                 // Find longest match of them all to observe leftmost longest
-                 REMatch longest = mymatch;
-                 while ((mymatch = mymatch.next) != null) {
-                     if (mymatch.index > longest.index) {
-                         longest = mymatch;
-                     }
-                 }
-                 
-                 longest.end[0] = longest.index;
-                 longest.finish(input);
-                 return longest;
-             }
-         }
-         mymatch.clear(++anchor);
-         // Append character to buffer if needed
-         if (buffer != null && input.charAt(0) != CharIndexed.OUT_OF_BOUNDS) {
-             buffer.append(input.charAt(0));
-         }
-      } while (input.move(1));
-      
-      return null;
-  }
-
-  /**
-   * Returns an REMatchEnumeration that can be used to iterate over the
-   * matches found in the input text.
-   *
-   * @param input The input text.
-   * @return A non-null REMatchEnumeration instance.
-   */
-  public REMatchEnumeration getMatchEnumeration(Object input) {
-    return getMatchEnumeration(input,0,0);
-  }
-
-
-  /**
-   * Returns an REMatchEnumeration that can be used to iterate over the
-   * matches found in the input text.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @return A non-null REMatchEnumeration instance, with its input cursor
-   *  set to the index position specified.
-   */
-  public REMatchEnumeration getMatchEnumeration(Object input, int index) {
-    return getMatchEnumeration(input,index,0);
-  }
-
-  /**
-   * Returns an REMatchEnumeration that can be used to iterate over the
-   * matches found in the input text.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return A non-null REMatchEnumeration instance, with its input cursor
-   *  set to the index position specified.
-   */
-  public REMatchEnumeration getMatchEnumeration(Object input, int index, int eflags) {
-    return new REMatchEnumeration(this,makeCharIndexed(input,index),index,eflags);
-  }
-
-
-  /**
-   * Substitutes the replacement text for the first match found in the input.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @return A String interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substitute(Object input,String replace) {
-    return substitute(input,replace,0,0);
-  }
-
-  /**
-   * Substitutes the replacement text for the first match found in the input
-   * beginning at the specified index position.  Specifying an index
-   * effectively causes the regular expression engine to throw away the
-   * specified number of characters. 
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substitute(Object input,String replace,int index) {
-    return substitute(input,replace,index,0);
-  }
-
-  /**
-   * Substitutes the replacement text for the first match found in the input
-   * string, beginning at the specified index position and using the
-   * specified execution flags.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substitute(Object input,String replace,int index,int eflags) {
-    return substituteImpl(makeCharIndexed(input,index),replace,index,eflags);
-  }
-
-  private String substituteImpl(CharIndexed input,String replace,int index,int eflags) {
-    StringBuffer buffer = new StringBuffer();
-    REMatch m = getMatchImpl(input,index,eflags,buffer);
-    if (m==null) return buffer.toString();
-    buffer.append( ((eflags & REG_NO_INTERPOLATE) > 0) ?
-                  replace : m.substituteInto(replace) );
-    if (input.move(m.end[0])) {
-      do {
-       buffer.append(input.charAt(0));
-      } while (input.move(1));
-    }
-    return buffer.toString();
-  }
-  
-  /**
-   * Substitutes the replacement text for each non-overlapping match found 
-   * in the input text.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @return A String interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substituteAll(Object input,String replace) {
-    return substituteAll(input,replace,0,0);
-  }
-
-  /**
-   * Substitutes the replacement text for each non-overlapping match found 
-   * in the input text, starting at the specified index.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substituteAll(Object input,String replace,int index) {
-    return substituteAll(input,replace,index,0);
-  }
-  /**
-   * Substitutes the replacement text for each non-overlapping match found 
-   * in the input text, starting at the specified index and using the
-   * specified execution flags.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substituteAll(Object input,String replace,int index,int eflags) {
-    return substituteAllImpl(makeCharIndexed(input,index),replace,index,eflags);
-  }
-
-  private String substituteAllImpl(CharIndexed input,String replace,int index,int eflags) {
-    StringBuffer buffer = new StringBuffer();
-    REMatch m;
-    while ((m = getMatchImpl(input,index,eflags,buffer)) != null) {
-       buffer.append( ((eflags & REG_NO_INTERPOLATE) > 0) ?
-                      replace : m.substituteInto(replace) );
-      index = m.getEndIndex();
-      if (m.end[0] == 0) {
-       char ch = input.charAt(0);
-       if (ch != CharIndexed.OUT_OF_BOUNDS) 
-           buffer.append(ch);
-       input.move(1);
-      } else {
-         input.move(m.end[0]);
-      }
-
-      if (!input.isValid()) break;
-    }
-    return buffer.toString();
-  }
-  
-  /* Helper function for constructor */
-  private void addToken(REToken next) {
-    if (next == null) return;
-    minimumLength += next.getMinimumLength();
-    if (firstToken == null) {
-       lastToken = firstToken = next;
-    } else {
-      // if chain returns false, it "rejected" the token due to
-      // an optimization, and next was combined with lastToken
-      if (lastToken.chain(next)) {
-         lastToken = next;
-      }
-    }
-  }
-
-  private static REToken setRepeated(REToken current, int min, int max, int index) throws REException {
-    if (current == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-    return new RETokenRepeated(current.subIndex,current,min,max);
-  }
-
-  private static int getPosixSet(char[] pattern,int index,StringBuffer buf) {
-    // Precondition: pattern[index-1] == ':'
-    // we will return pos of closing ']'.
-    int i;
-    for (i=index; i<(pattern.length-1); i++) {
-      if ((pattern[i] == ':') && (pattern[i+1] == ']'))
-       return i+2;
-      buf.append(pattern[i]);
-    }
-    return index; // didn't match up
-  }
-
-  private int getMinMax(char[] input,int index,IntPair minMax,RESyntax syntax) throws REException {
-    // Precondition: input[index-1] == '{', minMax != null
-
-    boolean mustMatch = !syntax.get(RESyntax.RE_NO_BK_BRACES);
-    int startIndex = index;
-    if (index == input.length) {
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("unmatched.brace"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-    }
-    
-    int min,max=0;
-    CharUnit unit = new CharUnit();
-    StringBuffer buf = new StringBuffer();
-    
-    // Read string of digits
-    do {
-      index = getCharUnit(input,index,unit);
-      if (Character.isDigit(unit.ch))
-        buf.append(unit.ch);
-    } while ((index != input.length) && Character.isDigit(unit.ch));
-
-    // Check for {} tomfoolery
-    if (buf.length() == 0) {
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-    }
-
-    min = Integer.parseInt(buf.toString());
-       
-    if ((unit.ch == '}') && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk))
-      max = min;
-    else if (index == input.length)
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("interval.no.end"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-    else if ((unit.ch == ',') && !unit.bk) {
-      buf = new StringBuffer();
-      // Read string of digits
-      while (((index = getCharUnit(input,index,unit)) != input.length) && Character.isDigit(unit.ch))
-       buf.append(unit.ch);
-
-      if (!((unit.ch == '}') && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk)))
-        if (mustMatch)
-          throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
-        else
-          return startIndex;
-
-      // This is the case of {x,}
-      if (buf.length() == 0) max = Integer.MAX_VALUE;
-      else max = Integer.parseInt(buf.toString());
-    } else
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-
-    // We know min and max now, and they are valid.
-
-    minMax.first = min;
-    minMax.second = max;
-
-    // return the index following the '}'
-    return index;
-  }
-
-   /**
-    * Return a human readable form of the compiled regular expression,
-    * useful for debugging.
-    */
-   public String toString() {
-     StringBuffer sb = new StringBuffer();
-     dump(sb);
-     return sb.toString();
-   }
-
-  void dump(StringBuffer os) {
-    os.append('(');
-    if (subIndex == 0)
-      os.append("?:");
-    if (firstToken != null)
-      firstToken.dumpAll(os);
-    os.append(')');
-  }
-
-  // Cast input appropriately or throw exception
-  private static CharIndexed makeCharIndexed(Object input, int index) {
-      // We could let a String fall through to final input, but since
-      // it's the most likely input type, we check it first.
-    if (input instanceof String)
-      return new CharIndexedString((String) input,index);
-    else if (input instanceof char[])
-      return new CharIndexedCharArray((char[]) input,index);
-    else if (input instanceof StringBuffer)
-      return new CharIndexedStringBuffer((StringBuffer) input,index);
-    else if (input instanceof InputStream)
-      return new CharIndexedInputStream((InputStream) input,index);
-    else if (input instanceof Reader)
-       return new CharIndexedReader((Reader) input, index);
-    else if (input instanceof CharIndexed)
-       return (CharIndexed) input; // do we lose index info?
-    else 
-       return new CharIndexedString(input.toString(), index);
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REException.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REException.java
deleted file mode 100644 (file)
index 40d5d19..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *  gnu/regexp/REException.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-import java.text.MessageFormat;
-
-/**
- * This is the regular expression exception class.  An exception of this type
- * defines the three attributes:
- * <OL>
- * <LI> A descriptive message of the error.
- * <LI> An integral type code equivalent to one of the statically
- *      defined symbols listed below.
- * <LI> The approximate position in the input string where the error
- *      occurred.
- * </OL>
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-
-public class REException extends Exception {
-  private int type;
-  private int pos;
-
-  // Error conditions from GNU regcomp(3) manual
-
-  /**
-   * Error flag.
-   * Invalid use of repetition operators such  as  using
-   * `*' as the first character.
-   */
-  public static final int REG_BADRPT  =  1;
-
-  /**
-   * Error flag.
-   * Invalid use of back reference operator.
-   */
-  public static final int REG_BADBR   =  2;
-
-  /**
-   * Error flag.
-   * Un-matched brace interval operators.
-   */
-  public static final int REG_EBRACE  =  3;
-
-  /**
-   * Error flag.
-   * Un-matched bracket list operators.
-   */
-  public static final int REG_EBRACK  =  4;
-
-  /**
-   * Error flag.
-   * Invalid  use  of the range operator, eg. the ending
-   * point of the range occurs  prior  to  the  starting
-   * point.
-   */
-  public static final int REG_ERANGE  =  5;
-
-  /**
-   * Error flag.
-   * Unknown character class name. <B>Not implemented</B>.
-   */
-  public static final int REG_ECTYPE  =  6;
-
-  /**
-   * Error flag.
-   * Un-matched parenthesis group operators.
-   */
-  public static final int REG_EPAREN  =  7;
-
-  /**
-   * Error flag.
-   * Invalid back reference to a subexpression.
-   */
-  public static final int REG_ESUBREG =  8;
-
-  /**
-   * Error flag.
-   * Non specific error. <B>Not implemented</B>.
-   */
-  public static final int REG_EEND    =  9;
-
-  /**
-   * Error flag.
-   * Invalid escape sequence. <B>Not implemented</B>.
-   */
-  public static final int REG_ESCAPE  = 10;
-
-  /**
-   * Error flag.
-   * Invalid  use  of pattern operators such as group or list.
-   */
-  public static final int REG_BADPAT  = 11;
-
-  /**
-   * Error flag.
-   * Compiled  regular  expression  requires  a  pattern
-   * buffer larger than 64Kb. <B>Not implemented</B>.
-   */
-  public static final int REG_ESIZE   = 12;
-
-  /**
-   * Error flag.
-   * The regex routines ran out of memory. <B>Not implemented</B>.
-   */
-  public static final int REG_ESPACE  = 13;
-
-  REException(String msg, int type, int position) { 
-    super(msg); 
-    this.type = type;
-    this.pos = position;
-  }
-
-  /**
-   * Returns the type of the exception, one of the constants listed above.
-   */
-
-  public int getType() {
-    return type;
-  }
-
-  /**
-   * Returns the position, relative to the string or character array being
-   * compiled, where the error occurred.  This position is generally the point
-   * where the error was detected, not necessarily the starting index of
-   * a bad subexpression.
-   */
-  public int getPosition() {
-    return pos;
-  }
-
-  /**
-   * Reports the descriptive message associated with this exception
-   * as well as its index position in the string or character array
-   * being compiled.
-   */
-  public String getMessage() {
-    Object[] args = {new Integer(pos)};
-    StringBuffer sb = new StringBuffer();
-    String prefix = RE.getLocalizedMessage("error.prefix");
-    sb.append(MessageFormat.format(prefix, args));
-    sb.append('\n');
-    sb.append(super.getMessage());
-    return sb.toString();
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REFilterInputStream.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REFilterInputStream.java
deleted file mode 100644 (file)
index 0f4d501..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *  gnu/regexp/REFilterInputStream.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.FilterInputStream;
-import java.io.InputStream;
-
-/**
- * Replaces instances of a given RE found within an InputStream
- * with replacement text.   The replacements are interpolated into the
- * stream when a match is found.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @deprecated This class cannot properly handle all character
- *             encodings.  For proper handling, use the REFilterReader
- *             class instead.
- */
-
-public class REFilterInputStream extends FilterInputStream {
-
-    private RE expr;
-    private String replace;
-    private String buffer;
-    private int bufpos;
-    private int offset;
-    private CharIndexedInputStream stream;
-
-  /**
-   * Creates an REFilterInputStream.  When reading from this stream,
-   * occurrences of patterns matching the supplied regular expression
-   * will be replaced with the supplied replacement text (the
-   * metacharacters $0 through $9 may be used to refer to the full
-   * match or subexpression matches).
-   *
-   * @param stream The InputStream to be filtered.
-   * @param expr The regular expression to search for.
-   * @param replace The text pattern to replace matches with.  
-   */
-  public REFilterInputStream(InputStream stream, RE expr, String replace) {
-    super(stream);
-    this.stream = new CharIndexedInputStream(stream,0);
-    this.expr = expr;
-    this.replace = replace;
-  }
-
-  /**
-   * Reads the next byte from the stream per the general contract of
-   * InputStream.read().  Returns -1 on error or end of stream.
-   */
-  public int read() {
-    // If we have buffered replace data, use it.
-    if ((buffer != null) && (bufpos < buffer.length())) {
-      return (int) buffer.charAt(bufpos++);
-    }
-
-    // check if input is at a valid position
-    if (!stream.isValid()) return -1;
-
-    REMatch mymatch = new REMatch(expr.getNumSubs(),offset,0);
-    if (expr.match(stream, mymatch)) {
-      mymatch.end[0] = mymatch.index;
-      mymatch.finish(stream);
-      stream.move(mymatch.toString().length());
-      offset += mymatch.toString().length();
-      buffer = mymatch.substituteInto(replace);
-      bufpos = 1;
-
-      // This is prone to infinite loops if replace string turns out empty.
-      if (buffer.length() > 0) {
-         return buffer.charAt(0);
-      }
-    }
-    char ch = stream.charAt(0);
-    if (ch == CharIndexed.OUT_OF_BOUNDS) return -1;
-    stream.move(1);
-    offset++;
-    return ch;
-  }
-
-  /** 
-   * Returns false.  REFilterInputStream does not support mark() and
-   * reset() methods. 
-   */
-  public boolean markSupported() {
-    return false;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(byte[] b, int off, int len) {
-    int i;
-    int ok = 0;
-    while (len-- > 0) {
-      i = read();
-      if (i == -1) return (ok == 0) ? -1 : ok;
-      b[off++] = (byte) i;
-      ok++;
-    }
-    return ok;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(byte[] b) {
-    return read(b,0,b.length);
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REFilterReader.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REFilterReader.java
deleted file mode 100644 (file)
index 449efcc..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- *  gnu/regexp/REFilterReader.java
- *  Copyright (C) 2001 Lee Sau Dan
- *  Based on gnu.regexp.REFilterInputStream by Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.FilterReader;
-import java.io.Reader;
-
-/**
- * Replaces instances of a given RE with replacement text. 
- *
- * @author <A HREF="http://www.csis.hku.hk/~sdlee/">Lee Sau Dan</A>
- * @since gnu.regexp 1.1.0
- */
-
-public class REFilterReader extends FilterReader {
-
-  private RE expr;
-  private String replace;
-  private String buffer;
-  private int bufpos;
-  private int offset;
-  private CharIndexedReader stream;
-
-  /**
-   * Creates an REFilterReader.  When reading from this stream,
-   * occurrences of patterns matching the supplied regular expression
-   * will be replaced with the supplied replacement text (the
-   * metacharacters $0 through $9 may be used to refer to the full
-   * match or subexpression matches.
-   *
-   * @param stream The Reader to be filtered.
-   * @param expr The regular expression to search for.
-   * @param replace The text pattern to replace matches with.  
-   */
-  public REFilterReader(Reader stream, RE expr, String replace) {
-    super(stream);
-    this.stream = new CharIndexedReader(stream,0);
-    this.expr = expr;
-    this.replace = replace;
-  }
-
-  /**
-   * Reads the next character from the stream per the general contract of
-   * Reader.read().  Returns -1 on error or end of stream.
-   */
-  public int read() {
-    // If we have buffered replace data, use it.
-    if ((buffer != null) && (bufpos < buffer.length())) {
-      return (int) buffer.charAt(bufpos++);
-    }
-
-    // check if input is at a valid position
-    if (!stream.isValid()) return -1;
-
-    REMatch mymatch = new REMatch(expr.getNumSubs(),offset,0);
-    if (expr.match(stream,mymatch)) {
-      mymatch.end[0] = mymatch.index;
-      mymatch.finish(stream);
-      stream.move(mymatch.toString().length());
-      offset += mymatch.toString().length();
-      buffer = mymatch.substituteInto(replace);
-      bufpos = 1;
-
-      if (buffer.length() > 0) {
-         return buffer.charAt(0);
-      }
-    }
-    char ch = stream.charAt(0);
-    if (ch == CharIndexed.OUT_OF_BOUNDS) return -1;
-    stream.move(1);
-    offset++;
-    return ch;
-  }
-
-  /** 
-   * Returns false.  REFilterReader does not support mark() and
-   * reset() methods. 
-   */
-  public boolean markSupported() {
-    return false;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(char[] b, int off, int len) {
-    int i;
-    int ok = 0;
-    while (len-- > 0) {
-      i = read();
-      if (i == -1) return (ok == 0) ? -1 : ok;
-      b[off++] = (char) i;
-      ok++;
-    }
-    return ok;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(char[] b) {
-    return read(b,0,b.length);
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REMatch.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REMatch.java
deleted file mode 100644 (file)
index e732fc3..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- *  gnu/regexp/REMatch.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Serializable;
-
-/**
- * An instance of this class represents a match
- * completed by a gnu.regexp matching function. It can be used
- * to obtain relevant information about the location of a match
- * or submatch.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-public final class REMatch implements Serializable, Cloneable {
-    private String matchedText;
-
-    // These variables are package scope for fast access within the engine
-    int eflags; // execution flags this match was made using
-
-    // Offset in source text where match was tried.  This is zero-based;
-    // the actual position in the source text is given by (offset + anchor).
-    int offset;
-
-    // Anchor position refers to the index into the source input
-    // at which the matching operation began.
-    // This is also useful for the ANCHORINDEX option.
-    int anchor;
-
-    // Package scope; used by RE.
-    int index; // used while matching to mark current match position in input
-    int[] start; // start positions (relative to offset) for each (sub)exp.
-    int[] end;   // end positions for the same
-    REMatch next; // other possibility (to avoid having to use arrays)
-
-    public Object clone() {
-       try {
-           REMatch copy = (REMatch) super.clone();
-           copy.next = null;
-
-           copy.start = (int[]) start.clone();
-           copy.end = (int[]) end.clone();
-
-           return copy;
-       } catch (CloneNotSupportedException e) {
-           throw new Error(); // doesn't happen
-       }
-    }
-
-    void assignFrom(REMatch other) {
-       start = other.start;
-       end = other.end;
-       index = other.index;
-       // need to deep clone?
-       next = other.next;
-    }
-
-    REMatch(int subs, int anchor, int eflags) {
-       start = new int[subs+1];
-       end = new int[subs+1];
-       this.anchor = anchor;
-       this.eflags = eflags;
-       clear(anchor);
-    }
-
-    void finish(CharIndexed text) {
-       start[0] = 0;
-       StringBuffer sb = new StringBuffer();
-       int i;
-       for (i = 0; i < end[0]; i++)
-           sb.append(text.charAt(i));
-       matchedText = sb.toString();
-       for (i = 0; i < start.length; i++) {
-           // If any subexpressions didn't terminate, they don't count
-           // TODO check if this code ever gets hit
-           if ((start[i] == -1) ^ (end[i] == -1)) {
-               start[i] = -1;
-               end[i] = -1;
-           }
-       }
-       next = null; // cut off alternates
-    }
-    
-    /** Clears the current match and moves the offset to the new index. */
-    void clear(int index) {
-       offset = index;
-       this.index = 0;
-       for (int i = 0; i < start.length; i++) {
-           start[i] = end[i] = -1;
-       }
-       next = null; // cut off alternates
-    }
-    
-    /**
-     * Returns the string matching the pattern.  This makes it convenient
-     * to write code like the following:
-     * <P>
-     * <code> 
-     * REMatch myMatch = myExpression.getMatch(myString);<br>
-     * if (myMatch != null) System.out.println("Regexp found: "+myMatch);
-     * </code>
-     */
-    public String toString() {
-       return matchedText;
-    }
-    
-    /**
-     * Returns the index within the input text where the match in its entirety
-     * began.
-     */
-    public int getStartIndex() {
-       return offset + start[0];
-    }
-    
-    /**
-     * Returns the index within the input string where the match in
-     * its entirety ends.  The return value is the next position after
-     * the end of the string; therefore, a match created by the
-     * following call:
-     *
-     * <P>
-     * <code>REMatch myMatch = myExpression.getMatch(myString);</code>
-     * <P>
-     * can be viewed (given that myMatch is not null) by creating
-     * <P>
-     * <code>String theMatch = myString.substring(myMatch.getStartIndex(),
-     * myMatch.getEndIndex());</code>
-     * <P>
-     * But you can save yourself that work, since the <code>toString()</code>
-     * method (above) does exactly that for you.  
-     */
-    public int getEndIndex() {
-       return offset + end[0];
-    }
-  
-    /**
-     * Returns the string matching the given subexpression.  The subexpressions
-     * are indexed starting with one, not zero.  That is, the subexpression
-     * identified by the first set of parentheses in a regular expression
-     * could be retrieved from an REMatch by calling match.toString(1).
-     *
-     * @param sub Index of the subexpression.
-     */
-    public String toString(int sub) {
-       if ((sub >= start.length) || (start[sub] == -1)) return "";
-       return (matchedText.substring(start[sub],end[sub]));
-    }
-    
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> begins, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     * @deprecated Use getStartIndex(int) instead.
-     */
-    public int getSubStartIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = start[sub];
-       return (x == -1) ? x : offset + x;
-    }
-    
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> begins, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     * @since gnu.regexp 1.1.0
-     */
-    public int getStartIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = start[sub];
-       return (x == -1) ? x : offset + x;
-    }
-  
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> ends, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     * @deprecated Use getEndIndex(int) instead
-     */
-    public int getSubEndIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = end[sub];
-       return (x == -1) ? x : offset + x;
-    }
-    
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> ends, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     */
-    public int getEndIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = end[sub];
-       return (x == -1) ? x : offset + x;
-    }
-    
-    /**
-     * Substitute the results of this match to create a new string.
-     * This is patterned after PERL, so the tokens to watch out for are
-     * <code>$0</code> through <code>$9</code>.  <code>$0</code> matches
-     * the full substring matched; <code>$<i>n</i></code> matches
-     * subexpression number <i>n</i>.
-     *
-     * @param input A string consisting of literals and <code>$<i>n</i></code> tokens.
-     */
-    public String substituteInto(String input) {
-       // a la Perl, $0 is whole thing, $1 - $9 are subexpressions
-       StringBuffer output = new StringBuffer();
-       int pos;
-       for (pos = 0; pos < input.length()-1; pos++) {
-           if ((input.charAt(pos) == '$') && (Character.isDigit(input.charAt(pos+1)))) {
-               int val = Character.digit(input.charAt(++pos),10);
-               if (val < start.length) {
-                   output.append(toString(val));
-               } 
-           } else output.append(input.charAt(pos));
-       }
-       if (pos < input.length()) output.append(input.charAt(pos));
-       return output.toString();
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REMatchEnumeration.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REMatchEnumeration.java
deleted file mode 100644 (file)
index ee4b8ec..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  gnu/regexp/REMatchEnumeration.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * An REMatchEnumeration enumerates regular expression matches over a
- * given input text.  You obtain a reference to an enumeration using
- * the <code>getMatchEnumeration()</code> methods on an instance of
- * RE. 
- *
- * <P>
- *
- * REMatchEnumeration does lazy computation; that is, it will not
- * search for a match until it needs to.  If you'd rather just get all
- * the matches at once in a big array, use the
- * <code>getAllMatches()</code> methods on RE.  However, using an
- * enumeration can help speed performance when the entire text does
- * not need to be searched immediately.
- *
- * <P>
- * 
- * The enumerated type is especially useful when searching on a Reader
- * or InputStream, because the InputStream read position cannot be
- * guaranteed after calling <code>getMatch()</code> (see the
- * description of that method for an explanation of why).  Enumeration
- * also saves a lot of overhead required when calling
- * <code>getMatch()</code> multiple times.
- * 
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A> 
- */
-public class REMatchEnumeration implements Enumeration, Serializable {
-  private static final int YES = 1;
-  private static final int MAYBE = 0;
-  private static final int NO = -1;
-  
-  private int more;
-  private REMatch match;
-  private RE expr;
-  private CharIndexed input;
-  private int eflags;
-    private int index;
-
-  // Package scope constructor is used by RE.getMatchEnumeration()
-  REMatchEnumeration(RE expr, CharIndexed input, int index, int eflags) {
-    more = MAYBE;
-    this.expr = expr;
-    this.input = input;
-    this.index = index;
-    this.eflags = eflags;
-  }
-
-  /** Returns true if there are more matches in the input text. */
-  public boolean hasMoreElements() {
-    return hasMoreMatches(null);
-  }
-
-  /** Returns true if there are more matches in the input text. */
-  public boolean hasMoreMatches() {
-    return hasMoreMatches(null);
-  }
-
-  /** Returns true if there are more matches in the input text.
-   * Saves the text leading up to the match (or to the end of the input)
-   * in the specified buffer.
-   */
-  public boolean hasMoreMatches(StringBuffer buffer) {
-    if (more == MAYBE) {
-       match = expr.getMatchImpl(input,index,eflags,buffer);
-       if (match != null) {
-           input.move((match.end[0] > 0) ? match.end[0] : 1);
-           
-           index = (match.end[0] > 0) ? match.end[0] + match.offset : index + 1;
-           more = YES;
-       } else more = NO;
-    }
-    return (more == YES);
-  }
-
-  /** Returns the next match in the input text. */
-  public Object nextElement() throws NoSuchElementException {
-    return nextMatch();
-  }
-
-  /** 
-   * Returns the next match in the input text. This method is provided
-   * for convenience to avoid having to explicitly cast the return value
-   * to class REMatch.
-   */
-  public REMatch nextMatch() throws NoSuchElementException {
-    if (hasMoreElements()) {
-       more = (input.isValid()) ? MAYBE : NO;
-       return match;
-    }
-    throw new NoSuchElementException();
-  }
-}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RESyntax.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RESyntax.java
deleted file mode 100644 (file)
index 42abfa4..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- *  gnu/regexp/RESyntax.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Serializable;
-import java.util.BitSet;
-
-/**
- * An RESyntax specifies the way a regular expression will be compiled.
- * This class provides a number of predefined useful constants for
- * emulating popular regular expression syntaxes.  Additionally the
- * user may construct his or her own syntax, using any combination of the
- * syntax bit constants.  The syntax is an optional argument to any of the
- * matching methods on class RE.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-
-public final class RESyntax implements Serializable {
-    static final String DEFAULT_LINE_SEPARATOR = System.getProperty("line.separator");
-
-    private static final String SYNTAX_IS_FINAL = RE.getLocalizedMessage("syntax.final");
-
-    private BitSet bits;
-
-    // true for the constant defined syntaxes
-    private boolean isFinal = false;
-
-    private String lineSeparator = DEFAULT_LINE_SEPARATOR;
-
-  // Values for constants are bit indexes
-
-  /**
-   * Syntax bit. Backslash is an escape character in lists.
-   */
-  public static final int RE_BACKSLASH_ESCAPE_IN_LISTS =  0;
-
-  /**
-   * Syntax bit. Use \? instead of ? and \+ instead of +.
-   */
-  public static final int RE_BK_PLUS_QM                =  1;
-
-  /**
-   * Syntax bit. POSIX character classes ([:...:]) in lists are allowed.
-   */
-  public static final int RE_CHAR_CLASSES              =  2;
-
-  /**
-   * Syntax bit. ^ and $ are special everywhere.
-   * <B>Not implemented.</B>
-   */
-  public static final int RE_CONTEXT_INDEP_ANCHORS     =  3; 
-
-  /**
-   * Syntax bit. Repetition operators are only special in valid positions.
-   * <B>Not implemented.</B>
-   */
-  public static final int RE_CONTEXT_INDEP_OPS         =  4; 
-
-  /**
-   * Syntax bit. Repetition and alternation operators are invalid
-   * at start and end of pattern and other places. 
-   * <B>Not implemented</B>.
-   */
-  public static final int RE_CONTEXT_INVALID_OPS       =  5; 
-
-  /**
-   * Syntax bit. Match-any-character operator (.) matches a newline.
-   */
-  public static final int RE_DOT_NEWLINE               =  6;
-
-  /**
-   * Syntax bit. Match-any-character operator (.) does not match a null.
-   */
-  public static final int RE_DOT_NOT_NULL              =  7;
-
-  /**
-   * Syntax bit. Intervals ({x}, {x,}, {x,y}) are allowed.
-   */
-  public static final int RE_INTERVALS                 =  8;
-
-  /**
-   * Syntax bit. No alternation (|), match one-or-more (+), or 
-   * match zero-or-one (?) operators.
-   */
-  public static final int RE_LIMITED_OPS               =  9;
-
-  /**
-   * Syntax bit. Newline is an alternation operator.
-   */
-  public static final int RE_NEWLINE_ALT               = 10; // impl.
-
-  /**
-   * Syntax bit. Intervals use { } instead of \{ \}
-   */
-  public static final int RE_NO_BK_BRACES              = 11; 
-
-  /**
-   * Syntax bit. Grouping uses ( ) instead of \( \).
-   */
-  public static final int RE_NO_BK_PARENS              = 12;
-
-  /**
-   * Syntax bit. Backreferences not allowed.
-   */
-  public static final int RE_NO_BK_REFS                = 13;
-
-  /**
-   * Syntax bit. Alternation uses | instead of \|
-   */
-  public static final int RE_NO_BK_VBAR                = 14;
-
-  /**
-   * Syntax bit. <B>Not implemented</B>.
-   */
-  public static final int RE_NO_EMPTY_RANGES           = 15;
-
-  /**
-   * Syntax bit. An unmatched right parenthesis (')' or '\)', depending
-   * on RE_NO_BK_PARENS) will throw an exception when compiling.
-   */
-  public static final int RE_UNMATCHED_RIGHT_PAREN_ORD = 16;
-
-  /**
-   * Syntax bit. <B>Not implemented.</B>
-   */
-  public static final int RE_HAT_LISTS_NOT_NEWLINE     = 17;
-
-  /**
-   * Syntax bit.  Stingy matching is allowed (+?, *?, ??, {x,y}?).
-   */
-  public static final int RE_STINGY_OPS                = 18;
-
-  /**
-   * Syntax bit. Allow character class escapes (\d, \D, \s, \S, \w, \W).
-   */
-  public static final int RE_CHAR_CLASS_ESCAPES        = 19;
-
-  /**
-   * Syntax bit. Allow use of (?:xxx) grouping (subexpression is not saved).
-   */
-  public static final int RE_PURE_GROUPING             = 20;
-
-  /**
-   * Syntax bit. Allow use of (?=xxx) and (?!xxx) apply the subexpression
-   * to the text following the current position without consuming that text.
-   */
-  public static final int RE_LOOKAHEAD                 = 21;
-
-  /**
-   * Syntax bit. Allow beginning- and end-of-string anchors (\A, \Z).
-   */
-  public static final int RE_STRING_ANCHORS            = 22;
-
-  /**
-   * Syntax bit. Allow embedded comments, (?#comment), as in Perl5.
-   */
-  public static final int RE_COMMENTS                  = 23;
-
-  /**
-   * Syntax bit. Allow character class escapes within lists, as in Perl5.
-   */
-  public static final int RE_CHAR_CLASS_ESC_IN_LISTS   = 24;
-
-  private static final int BIT_TOTAL                   = 25;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the awk utility.
-   */
-  public static final RESyntax RE_SYNTAX_AWK;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the ed utility.
-   */
-  public static final RESyntax RE_SYNTAX_ED;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the egrep utility.
-   */
-  public static final RESyntax RE_SYNTAX_EGREP;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the GNU Emacs editor.
-   */
-  public static final RESyntax RE_SYNTAX_EMACS;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the grep utility.
-   */
-  public static final RESyntax RE_SYNTAX_GREP;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the POSIX awk specification.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_AWK;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX basic regular expression support.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_BASIC;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the POSIX egrep specification.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_EGREP;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX extended regular expression support.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_EXTENDED;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX basic minimal regular expressions.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_MINIMAL_BASIC;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX extended minimal regular expressions.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_MINIMAL_EXTENDED;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the sed utility.
-   */
-  public static final RESyntax RE_SYNTAX_SED;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 4,
-   */
-  public static final RESyntax RE_SYNTAX_PERL4;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 4,
-   * using single line mode (/s modifier).
-   */
-  public static final RESyntax RE_SYNTAX_PERL4_S; // single line mode (/s)
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 5.
-   */
-  public static final RESyntax RE_SYNTAX_PERL5;  
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 5,
-   * using single line mode (/s modifier).
-   */
-  public static final RESyntax RE_SYNTAX_PERL5_S;
-  
-  static {
-      // Define syntaxes
-      
-      RE_SYNTAX_EMACS = new RESyntax().makeFinal();
-      
-      RESyntax RE_SYNTAX_POSIX_COMMON = new RESyntax()
-         .set(RE_CHAR_CLASSES)
-         .set(RE_DOT_NEWLINE)
-         .set(RE_DOT_NOT_NULL)
-         .set(RE_INTERVALS)
-         .set(RE_NO_EMPTY_RANGES)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_BASIC = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_BK_PLUS_QM)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_EXTENDED = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INDEP_OPS)
-         .set(RE_NO_BK_BRACES)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
-         .makeFinal();
-
-      RE_SYNTAX_AWK = new RESyntax()
-         .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
-         .set(RE_DOT_NOT_NULL)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_REFS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_NO_EMPTY_RANGES)
-         .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_AWK = new RESyntax(RE_SYNTAX_POSIX_EXTENDED)
-         .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
-         .makeFinal();
-      
-      RE_SYNTAX_GREP = new RESyntax()
-         .set(RE_BK_PLUS_QM)
-         .set(RE_CHAR_CLASSES)
-         .set(RE_HAT_LISTS_NOT_NEWLINE)
-         .set(RE_INTERVALS)
-         .set(RE_NEWLINE_ALT)
-         .makeFinal();
-      
-      RE_SYNTAX_EGREP = new RESyntax()
-         .set(RE_CHAR_CLASSES)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INDEP_OPS)
-         .set(RE_HAT_LISTS_NOT_NEWLINE)
-         .set(RE_NEWLINE_ALT)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_VBAR)
-         .makeFinal();
-    
-      RE_SYNTAX_POSIX_EGREP = new RESyntax(RE_SYNTAX_EGREP)
-         .set(RE_INTERVALS)
-         .set(RE_NO_BK_BRACES)
-         .makeFinal();
-    
-      /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
-    
-      RE_SYNTAX_ED = new RESyntax(RE_SYNTAX_POSIX_BASIC)
-         .makeFinal();
-    
-      RE_SYNTAX_SED = new RESyntax(RE_SYNTAX_POSIX_BASIC)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_MINIMAL_BASIC = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_LIMITED_OPS)
-         .makeFinal();
-      
-      /* Differs from RE_SYNTAX_POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
-        replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
-      
-      RE_SYNTAX_POSIX_MINIMAL_EXTENDED = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INVALID_OPS)
-         .set(RE_NO_BK_BRACES)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_REFS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
-         .makeFinal();
-      
-      /* There is no official Perl spec, but here's a "best guess" */
-      
-      RE_SYNTAX_PERL4 = new RESyntax()
-         .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INDEP_OPS)          // except for '{', apparently
-         .set(RE_INTERVALS)
-         .set(RE_NO_BK_BRACES)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_NO_EMPTY_RANGES)
-         .set(RE_CHAR_CLASS_ESCAPES)    // \d,\D,\w,\W,\s,\S
-         .makeFinal();
-      
-      RE_SYNTAX_PERL4_S = new RESyntax(RE_SYNTAX_PERL4)
-         .set(RE_DOT_NEWLINE)
-         .makeFinal();
-      
-      RE_SYNTAX_PERL5 = new RESyntax(RE_SYNTAX_PERL4)
-         .set(RE_PURE_GROUPING)          // (?:)
-         .set(RE_STINGY_OPS)             // *?,??,+?,{}?
-         .set(RE_LOOKAHEAD)              // (?=)(?!)
-         .set(RE_STRING_ANCHORS)         // \A,\Z
-         .set(RE_CHAR_CLASS_ESC_IN_LISTS)// \d,\D,\w,\W,\s,\S within []
-         .set(RE_COMMENTS)              // (?#)
-         .makeFinal();
-      
-      RE_SYNTAX_PERL5_S = new RESyntax(RE_SYNTAX_PERL5)
-         .set(RE_DOT_NEWLINE)
-         .makeFinal();
-  }
-
-  /**
-   * Construct a new syntax object with all bits turned off.
-   * This is equivalent to RE_SYNTAX_EMACS.
-   */
-  public RESyntax() {
-    bits = new BitSet(BIT_TOTAL);
-  }
-
-    /**
-     * Called internally when constructing predefined syntaxes
-     * so their interpretation cannot vary.  Conceivably useful
-     * for your syntaxes as well.  Causes IllegalAccessError to
-     * be thrown if any attempt to modify the syntax is made.
-     *
-     * @return this object for convenient chaining
-     */
-    public RESyntax makeFinal() {
-       isFinal = true;
-       return this;
-    }
-
-  /**
-   * Construct a new syntax object with all bits set the same 
-   * as the other syntax.
-   */
-  public RESyntax(RESyntax other) {
-    bits = (BitSet) other.bits.clone();
-  }
-
-  /**
-   * Check if a given bit is set in this syntax.
-   */
-  public boolean get(int index) {
-    return bits.get(index);
-  }
-
-  /**
-   * Set a given bit in this syntax. 
-   *
-   * @param index the constant (RESyntax.RE_xxx) bit to set.
-   * @return a reference to this object for easy chaining.
-   */
-  public RESyntax set(int index) {
-      if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
-    bits.set(index);
-    return this;
-  }
-
-  /**
-   * Clear a given bit in this syntax. 
-   *
-   * @param index the constant (RESyntax.RE_xxx) bit to clear.
-   * @return a reference to this object for easy chaining.
-   */
-  public RESyntax clear(int index) {
-      if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
-      bits.clear(index);
-      return this;
-  }
-
-    /**
-     * Changes the line separator string for regular expressions
-     * created using this RESyntax.  The default separator is the
-     * value returned by the system property "line.separator", which
-     * should be correct when reading platform-specific files from a
-     * filesystem.  However, many programs may collect input from
-     * sources where the line separator is differently specified (for
-     * example, in the applet environment, the text box widget
-     * interprets line breaks as single-character newlines,
-     * regardless of the host platform.
-     *
-     * Note that setting the line separator to a character or
-     * characters that have specific meaning within the current syntax
-     * can cause unexpected chronosynclastic infundibula.
-     *
-     * @return this object for convenient chaining 
-     */
-    public RESyntax setLineSeparator(String aSeparator) {
-       if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
-       lineSeparator = aSeparator;
-       return this;
-    }
-
-    /**
-     * Returns the currently active line separator string.  The default
-     * is the platform-dependent system property "line.separator".
-     */
-    public String getLineSeparator() {
-       return lineSeparator;
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REToken.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/REToken.java
deleted file mode 100644 (file)
index d5075a2..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  gnu/regexp/REToken.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Serializable;
-
-abstract class REToken implements Serializable {
-
-  protected REToken next = null;
-  protected REToken uncle = null;
-  protected int subIndex;
-
-  protected REToken(int subIndex) {
-      this.subIndex = subIndex;
-  }
-
-  int getMinimumLength() {
-    return 0;
-  }
-
-  void setUncle(REToken anUncle) {
-    uncle = anUncle;
-  }
-
-    /** Returns true if the match succeeded, false if it failed. */
-    abstract boolean match(CharIndexed input, REMatch mymatch);
-  
-    /** Returns true if the rest of the tokens match, false if they fail. */
-    protected boolean next(CharIndexed input, REMatch mymatch) {
-       if (next == null) {
-           if (uncle == null) {
-               return true;
-           } else {
-               return uncle.match(input, mymatch);
-           }
-       } else {
-           return next.match(input, mymatch);
-       }
-    }
-  
-  boolean chain(REToken token) {
-      next = token;
-      return true; // Token was accepted
-  }
-
-    abstract void dump(StringBuffer os);
-
-  void dumpAll(StringBuffer os) {
-    dump(os);
-    if (next != null) next.dumpAll(os);
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenAny.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenAny.java
deleted file mode 100644 (file)
index f68ff16..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  gnu/regexp/RETokenAny.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenAny extends REToken {
-  /** True if '.' can match a newline (RE_DOT_NEWLINE) */
-  private boolean newline; 
-
-  /** True if '.' can't match a null (RE_DOT_NOT_NULL) */
-  private boolean matchNull;    
-  
-  RETokenAny(int subIndex, boolean newline, boolean matchNull) { 
-    super(subIndex);
-    this.newline = newline;
-    this.matchNull = matchNull;
-  }
-
-  int getMinimumLength() {
-    return 1;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-    char ch = input.charAt(mymatch.index);
-    if ((ch == CharIndexed.OUT_OF_BOUNDS)
-       || (!newline && (ch == '\n'))
-       || (matchNull && (ch == 0))) {
-       return false;
-    }
-    ++mymatch.index;
-    return next(input, mymatch);
-  }
-
-  void dump(StringBuffer os) {
-    os.append('.');
-  }
-}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenBackRef.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenBackRef.java
deleted file mode 100644 (file)
index 62fded7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  gnu/regexp/RETokenBackRef.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenBackRef extends REToken {
-  private int num;
-  private boolean insens;
-  
-  RETokenBackRef(int subIndex, int num, boolean insens) {
-    super(subIndex);
-    this.num = num;
-    this.insens = insens;
-  }
-
-  // should implement getMinimumLength() -- any ideas?
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       int b,e;
-       b = mymatch.start[num];
-       e = mymatch.end[num];
-       if ((b==-1)||(e==-1)) return false; // this shouldn't happen, but...
-       for (int i=b; i<e; i++) {
-           if (input.charAt(mymatch.index+i-b) != input.charAt(i)) {
-               return false;
-           }
-       }
-       mymatch.index += e-b;
-       return next(input, mymatch);
-    }
-    
-    void dump(StringBuffer os) {
-       os.append('\\').append(num);
-    }
-}
-
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenChar.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenChar.java
deleted file mode 100644 (file)
index 822273e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  gnu/regexp/RETokenChar.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenChar extends REToken {
-  private char[] ch;
-  private boolean insens;
-
-  RETokenChar(int subIndex, char c, boolean ins) {
-    super(subIndex);
-    ch = new char [1];
-    ch[0] = (insens = ins) ? Character.toLowerCase(c) : c;
-  }
-
-  int getMinimumLength() {
-    return ch.length;
-  }
-  
-    boolean match(CharIndexed input, REMatch mymatch) {
-       int z = ch.length;
-       char c;
-       for (int i=0; i<z; i++) {
-           c = input.charAt(mymatch.index+i);
-           if (( (insens) ? Character.toLowerCase(c) : c ) != ch[i]) {
-               return false;
-           }
-       }
-       mymatch.index += z;
-
-       return next(input, mymatch);
-    }
-
-  // Overrides REToken.chain() to optimize for strings
-  boolean chain(REToken next) {
-    if (next instanceof RETokenChar) {
-      RETokenChar cnext = (RETokenChar) next;
-      // assume for now that next can only be one character
-      int newsize = ch.length + cnext.ch.length;
-      
-      char[] chTemp = new char [newsize];
-      
-      System.arraycopy(ch,0,chTemp,0,ch.length);
-      System.arraycopy(cnext.ch,0,chTemp,ch.length,cnext.ch.length);
-      
-      ch = chTemp;
-      return false;
-    } else return super.chain(next);
-  }
-
-  void dump(StringBuffer os) {
-    os.append(ch);
-  }
-}
-
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenEnd.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenEnd.java
deleted file mode 100644 (file)
index cfa0640..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  gnu/regexp/RETokenEnd.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-
-final class RETokenEnd extends REToken {
-    /**
-     * Indicates whether this token should match on a line break.
-     */
-  private String newline;
-
-  RETokenEnd(int subIndex,String newline) { 
-    super(subIndex);
-    this.newline = newline;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       char ch = input.charAt(mymatch.index);
-       if (ch == CharIndexed.OUT_OF_BOUNDS)
-           return ((mymatch.eflags & RE.REG_NOTEOL)>0) ? 
-               false : next(input, mymatch);
-       if (newline != null) {
-           char z;
-           int i = 0; // position in newline
-           do {
-               z = newline.charAt(i);
-               if (ch != z) return false;
-               ++i;
-               ch = input.charAt(mymatch.index + i);
-           } while (i < newline.length());
-           
-           return next(input, mymatch);
-       }
-       return false;
-    }
-
-  void dump(StringBuffer os) {
-    os.append('$');
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenEndSub.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenEndSub.java
deleted file mode 100644 (file)
index fc1e1a4..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  gnu/regexp/RETokenEndSub.java
- *  Copyright (C) 2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenEndSub extends REToken {
-    RETokenEndSub(int subIndex) {
-       super(subIndex);
-    }
-    
-    boolean match(CharIndexed input, REMatch mymatch) {
-       mymatch.end[subIndex] = mymatch.index;
-       return next(input, mymatch);
-    }
-    
-    void dump(StringBuffer os) {
-       // handled by RE
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenLookAhead.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenLookAhead.java
deleted file mode 100644 (file)
index 74a9bfe..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  gnu/regexp/RETokenOneOf.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-
-/**
- * @since gnu.regexp 1.1.3
- * @author Shashank Bapat
- */
-final class RETokenLookAhead extends REToken
-{
-  REToken re;
-  boolean negative;
-
-  RETokenLookAhead(REToken re, boolean negative) throws REException {
-    super(0);
-    this.re = re;
-    this.negative = negative;
-  }
-
-  boolean match(CharIndexed input, REMatch mymatch)
-  {
-    REMatch trymatch = (REMatch)mymatch.clone();
-    REMatch trymatch1 = (REMatch)mymatch.clone();
-    REMatch newMatch = null;
-    if (re.match(input, trymatch)) {
-      if (negative) return false;
-      if (next(input, trymatch1))
-        newMatch = trymatch1;
-    }
-
-    if (newMatch != null) {
-      if (negative) return false;
-      //else
-      mymatch.assignFrom(newMatch);
-      return true;
-    }
-    else { // no match
-      if (negative)
-        return next(input, mymatch);
-      //else
-      return false;
-    }
-  }
-
-    void dump(StringBuffer os) {
-       os.append("(?");
-       os.append(negative ? '!' : '=');
-       re.dumpAll(os);
-       os.append(')');
-    }
-}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenOneOf.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenOneOf.java
deleted file mode 100644 (file)
index 536b57e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *  gnu/regexp/RETokenOneOf.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.util.Vector;
-
-final class RETokenOneOf extends REToken {
-  private Vector options;
-  private boolean negative;
-
-  // This constructor is used for convenience when we know the set beforehand,
-  // e.g. \d --> new RETokenOneOf("0123456789",false, ..)
-  //      \D --> new RETokenOneOf("0123456789",true, ..)
-
-  RETokenOneOf(int subIndex, String optionsStr, boolean negative, boolean insens) {
-    super(subIndex);
-    options = new Vector();
-    this.negative = negative;
-    for (int i = 0; i < optionsStr.length(); i++)
-      options.addElement(new RETokenChar(subIndex,optionsStr.charAt(i),insens));
-  }
-
-  RETokenOneOf(int subIndex, Vector options, boolean negative) {
-    super(subIndex);
-    this.options = options;
-    this.negative = negative;
-  }
-
-  int getMinimumLength() {
-    int min = Integer.MAX_VALUE;
-    int x;
-    for (int i=0; i < options.size(); i++) {
-      if ((x = ((REToken) options.elementAt(i)).getMinimumLength()) < min)
-       min = x;
-    }
-    return min;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-    if (negative && (input.charAt(mymatch.index) == CharIndexed.OUT_OF_BOUNDS)) 
-      return false;
-
-    REMatch newMatch = null;
-    REMatch last = null;
-    REToken tk;
-    boolean isMatch;
-    for (int i=0; i < options.size(); i++) {
-       tk = (REToken) options.elementAt(i);
-       REMatch tryMatch = (REMatch) mymatch.clone();
-       if (tk.match(input, tryMatch)) { // match was successful
-           if (negative) return false;
-
-           if (next(input, tryMatch)) {
-               // Add tryMatch to list of possibilities.
-               if (last == null) {
-                   newMatch = tryMatch;
-                   last = tryMatch;
-               } else {
-                   last.next = tryMatch;
-                   last = tryMatch;
-               }
-           } // next succeeds
-       } // is a match
-    } // try next option
-
-    if (newMatch != null) {
-       if (negative) {
-           return false;
-       } else {
-           // set contents of mymatch equal to newMatch
-
-           // try each one that matched
-           mymatch.assignFrom(newMatch);
-           return true;
-       }
-    } else {
-       if (negative) {
-           ++mymatch.index;
-           return next(input, mymatch);
-       } else {
-           return false;
-       }
-    }
-
-    // index+1 works for [^abc] lists, not for generic lookahead (--> index)
-  }
-
-  void dump(StringBuffer os) {
-    os.append(negative ? "[^" : "(?:");
-    for (int i = 0; i < options.size(); i++) {
-      if (!negative && (i > 0)) os.append('|');
-      ((REToken) options.elementAt(i)).dumpAll(os);
-    }
-    os.append(negative ? ']' : ')');
-  }  
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenPOSIX.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenPOSIX.java
deleted file mode 100644 (file)
index c1a0e7e..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  gnu/regexp/RETokenPOSIX.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenPOSIX extends REToken {
-  int type;
-  boolean insens;
-  boolean negated;
-
-  static final int  ALNUM = 0;
-  static final int  ALPHA = 1;
-  static final int  BLANK = 2;
-  static final int  CNTRL = 3;
-  static final int  DIGIT = 4;
-  static final int  GRAPH = 5;
-  static final int  LOWER = 6;
-  static final int  PRINT = 7;
-  static final int  PUNCT = 8;
-  static final int  SPACE = 9;
-  static final int  UPPER = 10;
-  static final int XDIGIT = 11;
-
-  // Array indices correspond to constants defined above.
-  static final String[] s_nameTable =  {
-    "alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower",
-    "print", "punct", "space", "upper", "xdigit" 
-  };
-
-  // The RE constructor uses this to look up the constant for a string
-  static int intValue(String key) {
-    for (int i = 0; i < s_nameTable.length; i++) {
-      if (s_nameTable[i].equals(key)) return i;
-    }
-    return -1;
-  }
-
-  RETokenPOSIX(int subIndex, int type, boolean insens, boolean negated) {
-    super(subIndex);
-    this.type = type;
-    this.insens = insens;
-    this.negated = negated;
-  }
-
-    int getMinimumLength() {
-       return 1;
-    }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-    char ch = input.charAt(mymatch.index);
-    if (ch == CharIndexed.OUT_OF_BOUNDS)
-      return false;
-    
-    boolean retval = false;
-    switch (type) {
-    case ALNUM:
-       // Note that there is some debate over whether '_' should be included
-       retval = Character.isLetterOrDigit(ch) || (ch == '_');
-       break;
-    case ALPHA:
-       retval = Character.isLetter(ch);
-       break;
-    case BLANK:
-       retval = ((ch == ' ') || (ch == '\t'));
-       break;
-    case CNTRL:
-       retval = Character.isISOControl(ch);
-       break;
-    case DIGIT:
-       retval = Character.isDigit(ch);
-       break;
-    case GRAPH:
-       retval = (!(Character.isWhitespace(ch) || Character.isISOControl(ch)));
-       break;
-    case LOWER:
-       retval = ((insens && Character.isLetter(ch)) || Character.isLowerCase(ch));
-       break;
-    case PRINT:
-       retval = (!(Character.isWhitespace(ch) || Character.isISOControl(ch)))
-           || (ch == ' ');
-       break;
-    case PUNCT:
-       // This feels sloppy, especially for non-U.S. locales.
-       retval = ("`~!@#$%^&*()-_=+[]{}\\|;:'\"/?,.<>".indexOf(ch)!=-1);
-       break;
-    case SPACE:
-       retval = Character.isWhitespace(ch);
-       break;
-    case UPPER:
-       retval = ((insens && Character.isLetter(ch)) || Character.isUpperCase(ch));
-       break;
-    case XDIGIT:
-       retval = (Character.isDigit(ch) || ("abcdefABCDEF".indexOf(ch)!=-1));
-       break;
-    }
-
-    if (negated) retval = !retval;
-    if (retval) {
-       ++mymatch.index;
-       return next(input, mymatch);
-    }
-    else return false;
-  }
-
-  void dump(StringBuffer os) {
-    if (negated) os.append('^');
-    os.append("[:" + s_nameTable[type] + ":]");
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenRange.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenRange.java
deleted file mode 100644 (file)
index eb3e25c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *  gnu/regexp/RETokenRange.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenRange extends REToken {
-  private char lo, hi;
-  private boolean insens;
-
-  RETokenRange(int subIndex, char lo, char hi, boolean ins) {
-    super(subIndex);
-    this.lo = (insens = ins) ? Character.toLowerCase(lo) : lo;
-    this.hi = ins ? Character.toLowerCase(hi) : hi;
-  }
-
-  int getMinimumLength() {
-    return 1;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       char c = input.charAt(mymatch.index);
-       if (c == CharIndexed.OUT_OF_BOUNDS) return false;
-       if (insens) c = Character.toLowerCase(c);
-       if ((c >= lo) && (c <= hi)) {
-           ++mymatch.index;
-           return next(input, mymatch);
-       }
-       return false;
-    }
-    
-  void dump(StringBuffer os) {
-    os.append(lo).append('-').append(hi);
-  }
-}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenRepeated.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenRepeated.java
deleted file mode 100644 (file)
index 44b1c53..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- *  gnu/regexp/RETokenRepeated.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.util.Vector;
-
-final class RETokenRepeated extends REToken {
-    private REToken token;
-    private int min,max;
-    private boolean stingy;
-    
-    RETokenRepeated(int subIndex, REToken token, int min, int max) {
-       super(subIndex);
-       this.token = token;
-       this.min = min;
-       this.max = max;
-    }
-
-    /** Sets the minimal matching mode to true. */
-    void makeStingy() {
-       stingy = true;
-    }
-    
-    /** Queries if this token has minimal matching enabled. */
-    boolean isStingy() {
-       return stingy;
-    }
-    
-    /**
-     * The minimum length of a repeated token is the minimum length
-     * of the token multiplied by the minimum number of times it must
-     * match.
-     */
-    int getMinimumLength() {
-       return (min * token.getMinimumLength());
-    }
-
-    // We do need to save every possible point, but the number of clone()
-    // invocations here is really a killer for performance on non-stingy
-    // repeat operators.  I'm open to suggestions...
-
-    // Hypothetical question: can you have a RE that matches 1 times,
-    // 3 times, 5 times, but not 2 times or 4 times?  Does having
-    // the subexpression back-reference operator allow that?
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       // number of times we've matched so far
-       int numRepeats = 0; 
-       
-       // Possible positions for the next repeat to match at
-       REMatch newMatch = mymatch;
-       REMatch last = null;
-       REMatch current;
-
-       // Add the '0-repeats' index
-       // positions.elementAt(z) == position [] in input after <<z>> matches
-       Vector positions = new Vector();
-       positions.addElement(newMatch);
-       
-       // Declare variables used in loop
-       REMatch doables;
-       REMatch doablesLast;
-       REMatch recurrent;
-
-       do {
-           // Check for stingy match for each possibility.
-           if (stingy && (numRepeats >= min)) {
-               REMatch result = matchRest(input, newMatch);
-               if (result != null) {
-                   mymatch.assignFrom(result);
-                   return true;
-               }
-           }
-
-           doables = null;
-           doablesLast = null;
-
-           // try next repeat at all possible positions
-           for (current = newMatch; current != null; current = current.next) {
-               recurrent = (REMatch) current.clone();
-               if (token.match(input, recurrent)) {
-                   // add all items in current to doables array
-                   if (doables == null) {
-                       doables = recurrent;
-                       doablesLast = recurrent;
-                   } else {
-                       // Order these from longest to shortest
-                       // Start by assuming longest (more repeats)
-                       doablesLast.next = recurrent;
-                   }
-                   // Find new doablesLast
-                   while (doablesLast.next != null) {
-                       doablesLast = doablesLast.next;
-                   }
-               }
-           }
-           // if none of the possibilities worked out, break out of do/while
-           if (doables == null) break;
-           
-           // reassign where the next repeat can match
-           newMatch = doables;
-           
-           // increment how many repeats we've successfully found
-           ++numRepeats;
-           
-           positions.addElement(newMatch);
-       } while (numRepeats < max);
-       
-       // If there aren't enough repeats, then fail
-       if (numRepeats < min) return false;
-       
-       // We're greedy, but ease off until a true match is found 
-       int posIndex = positions.size();
-       
-       // At this point we've either got too many or just the right amount.
-       // See if this numRepeats works with the rest of the regexp.
-       REMatch allResults = null;
-       REMatch allResultsLast = null;
-
-       REMatch results = null;
-       while (--posIndex >= min) {
-           newMatch = (REMatch) positions.elementAt(posIndex);
-           results = matchRest(input, newMatch);
-           if (results != null) {
-               if (allResults == null) {
-                   allResults = results;
-                   allResultsLast = results;
-               } else {
-                   // Order these from longest to shortest
-                   // Start by assuming longest (more repeats)
-                   allResultsLast.next = results;
-               }
-               // Find new doablesLast
-               while (allResultsLast.next != null) {
-                   allResultsLast = allResultsLast.next;
-               }
-           }
-           // else did not match rest of the tokens, try again on smaller sample
-       }
-       if (allResults != null) {
-           mymatch.assignFrom(allResults); // does this get all?
-           return true;
-       }
-       // If we fall out, no matches.
-       return false;
-    }
-
-    private REMatch matchRest(CharIndexed input, final REMatch newMatch) {
-       REMatch current, single;
-       REMatch doneIndex = null;
-       REMatch doneIndexLast = null;
-       // Test all possible matches for this number of repeats
-       for (current = newMatch; current != null; current = current.next) {
-           // clone() separates a single match from the chain
-           single = (REMatch) current.clone();
-           if (next(input, single)) {
-               // chain results to doneIndex
-               if (doneIndex == null) {
-                   doneIndex = single;
-                   doneIndexLast = single;
-               } else {
-                   doneIndexLast.next = single;
-               }
-               // Find new doneIndexLast
-               while (doneIndexLast.next != null) {
-                   doneIndexLast = doneIndexLast.next;
-               }
-           }
-       }
-       return doneIndex;
-    }
-
-    void dump(StringBuffer os) {
-       os.append("(?:");
-       token.dumpAll(os);
-       os.append(')');
-       if ((max == Integer.MAX_VALUE) && (min <= 1))
-           os.append( (min == 0) ? '*' : '+' );
-       else if ((min == 0) && (max == 1))
-           os.append('?');
-       else {
-           os.append('{').append(min);
-           if (max > min) {
-               os.append(',');
-               if (max != Integer.MAX_VALUE) os.append(max);
-           }
-           os.append('}');
-       }
-       if (stingy) os.append('?');
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenStart.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenStart.java
deleted file mode 100644 (file)
index f411572..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  gnu/regexp/RETokenStart.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-class RETokenStart extends REToken {
-    private String newline; // matches after a newline
-    
-    RETokenStart(int subIndex, String newline) {
-       super(subIndex);
-       this.newline = newline;
-    }
-    
-    boolean match(CharIndexed input, REMatch mymatch) {
-       // charAt(index-n) may be unknown on a Reader/InputStream. FIXME
-       // Match after a newline if in multiline mode
-       
-       if (newline != null) {
-           int len = newline.length();
-           if (mymatch.offset >= len) {
-               boolean found = true;
-               char z;
-               int i = 0; // position in REToken.newline
-               char ch = input.charAt(mymatch.index - len);
-               do {
-                   z = newline.charAt(i);
-                   if (ch != z) {
-                       found = false;
-                       break;
-                   }
-                   ++i;
-                   ch = input.charAt(mymatch.index - len + i);
-               } while (i < len);
-           
-               if (found) return next(input, mymatch);
-           }
-       }
-       
-       // Don't match at all if REG_NOTBOL is set.
-       if ((mymatch.eflags & RE.REG_NOTBOL) > 0) return false;
-       
-       if ((mymatch.eflags & RE.REG_ANCHORINDEX) > 0)
-           return (mymatch.anchor == mymatch.offset) ? 
-               next(input, mymatch) : false;
-       else
-           return ((mymatch.index == 0) && (mymatch.offset == 0)) ?
-               next(input, mymatch) : false;
-    }
-    
-    void dump(StringBuffer os) {
-       os.append('^');
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenWordBoundary.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/RETokenWordBoundary.java
deleted file mode 100644 (file)
index dd8f478..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *  gnu/regexp/RETokenWordBoundary.java
- *  Copyright (C) 2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-/**
- * Represents a combination lookahead/lookbehind for POSIX [:alnum:].
- */
-final class RETokenWordBoundary extends REToken {
-    private boolean negated;
-    private int where;
-    static final int BEGIN = 1;
-    static final int END = 2;
-
-    RETokenWordBoundary(int subIndex, int where, boolean negated) {
-       super(subIndex);
-       this.where = where;
-       this.negated = negated;
-    }
-    
-    boolean match(CharIndexed input, REMatch mymatch) {
-       // Word boundary means input[index-1] was a word character
-       // and input[index] is not, or input[index] is a word character
-       // and input[index-1] was not
-       //  In the string "one two three", these positions match:
-       //  |o|n|e| |t|w|o| |t|h|r|e|e|
-       //  ^     ^ ^     ^ ^         ^
-       boolean after = false;  // is current character a letter or digit?
-       boolean before = false; // is previous character a letter or digit?
-       char ch;
-
-       // TODO: Also check REG_ANCHORINDEX vs. anchor
-       if (((mymatch.eflags & RE.REG_ANCHORINDEX) != RE.REG_ANCHORINDEX) 
-           || (mymatch.offset + mymatch.index > mymatch.anchor)) {
-           if ((ch = input.charAt(mymatch.index - 1)) != CharIndexed.OUT_OF_BOUNDS) {
-               before = Character.isLetterOrDigit(ch) || (ch == '_');
-           }
-       }
-
-       if ((ch = input.charAt(mymatch.index)) != CharIndexed.OUT_OF_BOUNDS) {
-           after = Character.isLetterOrDigit(ch) || (ch == '_');
-       }
-
-       // if (before) and (!after), we're at end (\>)
-       // if (after) and (!before), we're at beginning (\<)
-       boolean doNext = false;
-
-       if ((where & BEGIN) == BEGIN) {
-           doNext = after && !before;
-       }
-       if ((where & END) == END) {
-           doNext ^= before && !after;
-       }
-
-       if (negated) doNext = !doNext;
-
-       return (doNext ? next(input, mymatch) : false);
-    }
-    
-    void dump(StringBuffer os) {
-       if (where == (BEGIN | END)) {
-           os.append( negated ? "\\B" : "\\b" );
-       } else if (where == BEGIN) {
-           os.append("\\<");
-       } else {
-           os.append("\\>");
-       }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/UncheckedRE.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/UncheckedRE.java
deleted file mode 100644 (file)
index 2e69926..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- *  gnu/regexp/UncheckedRE.java
- *  Copyright (C) 2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  This library 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 Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-/**
- * UncheckedRE is a subclass of RE that allows programmers an easier means
- * of programmatically precompiling regular expressions.  It is constructed
- * and used in exactly the same manner as an instance of the RE class; the
- * only difference is that its constructors do not throw REException.
- * Instead, if a syntax error is encountered during construction, a
- * RuntimeException will be thrown.
- * <P>
- * Note that this makes UncheckedRE dangerous if constructed with
- * dynamic data.  Do not use UncheckedRE unless you are completely sure
- * that all input being passed to it contains valid, well-formed 
- * regular expressions for the syntax specified.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @see gnu.regexp.RE 
- * @since gnu.regexp 1.1.4
- */
-
-public final class UncheckedRE extends RE {
-  /**
-   * Constructs a regular expression pattern buffer without any compilation
-   * flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @exception RuntimeException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public UncheckedRE(Object pattern) {
-      this(pattern,0,RESyntax.RE_SYNTAX_PERL5);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags in the RE class.
-   * @exception RuntimeException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public UncheckedRE(Object pattern, int cflags) {
-      this(pattern,cflags,RESyntax.RE_SYNTAX_PERL5);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and regular expression syntax.
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags in the RE class.
-   * @param syntax The type of regular expression syntax to use.
-   * @exception RuntimeException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public UncheckedRE(Object pattern, int cflags, RESyntax syntax) {
-      try {
-         initialize(pattern,cflags,syntax,0,0);
-      } catch (REException e) { 
-         throw new RuntimeException(e.getMessage());
-      }
-  }
-}
-
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Egrep.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Egrep.java
deleted file mode 100644 (file)
index c215fa8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  gnu/regexp/util/Egrep.java
- *  Copyright (C) 1998 Wes Biggs
- *
- *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp.util;
-import gnu.regexp.RESyntax;
-
-/**
- * This is a front end to the gnu.regexp.util.Grep class which sets the
- * syntax used to RE_SYNTAX_EGREP, which aims to emulate the standard UNIX
- * egrep command.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @version 1.01
- * @use gnu.getopt
- */
-public class Egrep {
-  private Egrep() { }
-
-  /**
-   * Invokes Grep.grep() using the RE_SYNTAX_EGREP syntax and the
-   * command line arguments specified.  Output is sent to System.out.
-   * For a list of options, use the argument "--help".
-   */
-  public static void main(String[] argv) {
-    System.exit(Grep.grep(argv,RESyntax.RE_SYNTAX_EGREP,System.out));
-  }
-}
-
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Grep.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Grep.java
deleted file mode 100644 (file)
index df8df64..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- *  gnu/regexp/util/Grep.java
- *  Copyright (C) 1998 Wes Biggs
- *  Copyright (C) 2001 Lee Sau Dan for the use of Reader for handling file I/O
- *  Copyright (C) 2001 Ulf Dittmer for support of grepping into ZIP files
- *
- *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp.util;
-
-import gnu.getopt.Getopt;
-import gnu.getopt.LongOpt;
-import gnu.regexp.RE;
-import gnu.regexp.REException;
-import gnu.regexp.REMatch;
-import gnu.regexp.RESyntax;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.zip.*;
-
-
-/**
- * Grep is a pure-Java clone of the GNU grep utility.  As such, it is much
- * slower and not as full-featured, but it has the advantage of being
- * available on any system with a Java virtual machine.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- *         <A HREF="http://www.csis.hku.hk/~sdlee/">Lee Sau Dan</A>
- *         <A HREF="http://www.capital.net/~dittmer/">Ulf Dittmer</A>
- * @version 1.03
- * @use gnu.getopt
- */
-public class Grep {
-  private static final int BYTE_OFFSET = 0;
-  private static final int COUNT = 1;
-  private static final int LINE_NUMBER = 2;
-  private static final int QUIET = 3;
-  private static final int SILENT = 4;
-  private static final int NO_FILENAME = 5;
-  private static final int REVERT_MATCH = 6;
-  private static final int FILES_WITH_MATCHES = 7;
-  private static final int LINE_REGEXP = 8;
-  private static final int FILES_WITHOUT_MATCH = 9;
-  private static final int EXPAND_ZIP_FILES = 10;
-
-  private static final String PROGNAME = "gnu.regexp.util.Grep";
-  private static final String PROGVERSION = "1.03";
-
-  private Grep() { }
-  /**
-   * Invokes the grep() function below with the command line arguments
-   * and using the RESyntax.RE_SYNTAX_GREP syntax, which attempts to
-   * emulate the traditional UNIX grep syntax.
-   */
-  public static void main(String[] argv) {
-    System.exit(grep(argv, RESyntax.RE_SYNTAX_GREP, System.out));
-  }
-
-  /**
-   * Runs Grep with the specified arguments.  For a list of 
-   * supported options, specify "--help".
-   *
-   * This is the meat of the grep routine, but unlike main(), you can
-   * specify your own syntax and PrintStream to use for output.
-   */
-  public static int grep(String[] argv, RESyntax syntax, PrintStream out) {
-    // use gnu.getopt to read arguments
-    int cflags = 0;
-    
-    boolean[] options = new boolean [10];
-
-    String encoding = null;
-    
-    LongOpt[] longOptions = { 
-        new LongOpt("byte-offset",         LongOpt.NO_ARGUMENT, null, 'b'),
-       new LongOpt("count",               LongOpt.NO_ARGUMENT, null, 'c'),
-       new LongOpt("no-filename",         LongOpt.NO_ARGUMENT, null, 'h'),
-       new LongOpt("ignore-case",         LongOpt.NO_ARGUMENT, null, 'i'),
-       new LongOpt("files-with-matches",  LongOpt.NO_ARGUMENT, null, 'l'),
-       new LongOpt("help",                LongOpt.NO_ARGUMENT, null, '!'),
-       new LongOpt("line-number",         LongOpt.NO_ARGUMENT, null, 'n'),
-       new LongOpt("quiet",               LongOpt.NO_ARGUMENT, null, 'q'),
-       new LongOpt("silent",              LongOpt.NO_ARGUMENT, null, 'q'),
-       new LongOpt("no-messages",         LongOpt.NO_ARGUMENT, null, 's'),
-       new LongOpt("revert-match",        LongOpt.NO_ARGUMENT, null, 'v'),
-       new LongOpt("line-regexp",         LongOpt.NO_ARGUMENT, null, 'x'),
-       new LongOpt("extended-regexp",     LongOpt.NO_ARGUMENT, null, 'E'),
-       new LongOpt("fixed-strings",       LongOpt.NO_ARGUMENT, null, 'F'), // TODO
-       new LongOpt("basic-regexp",        LongOpt.NO_ARGUMENT, null, 'G'),
-       new LongOpt("files-without-match", LongOpt.NO_ARGUMENT, null, 'L'),
-       new LongOpt("version",             LongOpt.NO_ARGUMENT, null, 'V'),
-       new LongOpt("zip",                 LongOpt.NO_ARGUMENT, null, 'z'),
-       new LongOpt("encoding",      LongOpt.REQUIRED_ARGUMENT, null, 'N')
-         };
-
-    Getopt g = new Getopt(PROGNAME, argv, "bchilnqsvxyEFGLVzN:", longOptions);
-    int c;
-    String arg;
-    while ((c = g.getopt()) != -1) {
-      switch (c) {
-      case 'b':
-       options[BYTE_OFFSET] = true;
-       break;
-      case 'c':
-       options[COUNT] = true;
-       break;
-      case 'h':
-       options[NO_FILENAME] = true;
-       break;
-      case 'i':
-      case 'y':
-       cflags |= RE.REG_ICASE;
-       break;
-      case 'l':
-       options[FILES_WITH_MATCHES] = true;
-       break;
-      case 'n':
-       options[LINE_NUMBER] = true;
-       break;
-      case 'q':
-       options[QUIET] = true;
-       break;
-      case 's':
-       options[SILENT] = true;
-       break;
-      case 'v':
-       options[REVERT_MATCH] = true;
-       break;
-      case 'x':
-       options[LINE_REGEXP] = true;
-       break;
-      case 'E':  // TODO: check compatibility with grep
-       syntax = RESyntax.RE_SYNTAX_EGREP;
-       break;
-      case 'F':  // TODO: fixed strings
-       break;
-      case 'G':
-       syntax = RESyntax.RE_SYNTAX_GREP;
-       break;
-      case 'L':
-       options[FILES_WITHOUT_MATCH] = true;
-       break;
-      case 'V':
-       System.err.println(PROGNAME+' '+PROGVERSION);
-       return 0;
-      case 'z':
-       options[EXPAND_ZIP_FILES] = true;
-       break;
-      case 'N':
-       encoding = g.getOptarg();
-       try { // try out this encoding now.  If not found, fall back to default
-         "".getBytes(encoding);
-       } catch (UnsupportedEncodingException uee) {
-         System.err.println(PROGNAME+": (Warning)"
-                            + " Unsupported Encoding: " + encoding 
-                            + "; reverting to default");
-         encoding = null;
-       }
-       break;
-      case '!': // help
-         try {
-             BufferedReader br = new BufferedReader(new InputStreamReader((Grep.class).getResourceAsStream("GrepUsage.txt"),"UTF8"));
-             String line;
-             while ((line = br.readLine()) != null)
-                 out.println(line);
-         } catch (IOException ie) { }
-       return 0;
-      }
-    }        
-    
-    InputStream is = null;
-    RE pattern = null;
-    if (g.getOptind() >= argv.length) {
-      System.err.println("Usage: java " + PROGNAME + " [OPTION]... PATTERN [FILE]...");
-      System.err.println("Try `java " + PROGNAME + " --help' for more information.");
-      return 2;
-    }
-    try {
-      pattern = new RE(argv[g.getOptind()],cflags,syntax);
-    } catch (REException e) {
-      System.err.println("Error in expression: "+e);
-      return 2;
-    }
-
-    boolean notFound = true;
-    if (argv.length >= g.getOptind()+2) {
-      for (int i = g.getOptind() + 1; i < argv.length; i++) {
-         boolean no_filename = (argv.length == g.getOptind()+2)
-             || options[NO_FILENAME];
-       if (argv[i].equals("-")) {
-           final String filename = no_filename ? null : "(standard input)";
-           if (processStream(pattern,System.in,encoding,options,filename,null,out))
-               notFound = false;
-       } else {
-           final String filename = no_filename ? null : argv[i];
-           try {
-               File file = new File(argv[i]);
-               if(file.isDirectory()) {
-                   System.err.println(PROGNAME + ": " + argv[i] + ": Is a directory");
-               } else if(!file.canRead()) {
-                   System.err.println(PROGNAME + ": " + argv[i] + ": Permission denied");
-               } else if (options[EXPAND_ZIP_FILES] && argv[i].endsWith(".zip")) {
-                   // iterate over all files within this ZIP file
-                   try {
-                       ZipFile zf = new ZipFile(file);
-                       Enumeration list = zf.entries();
-                       while (list.hasMoreElements()) {
-                           ZipEntry ze = (ZipEntry) list.nextElement();
-                           if (! ze.isDirectory()) {
-                               if (processStream(pattern, zf.getInputStream(ze), encoding, options, filename, ze.getName(), out))
-                                   notFound = false;
-                           }
-                       }
-                   } catch (Exception ex) {
-                       System.err.println(PROGNAME + ": " + argv[i] + ": Problem reading ZIP file");
-                       return 2;
-                   }
-               } else {
-                   if (processStream(pattern,
-                                     new FileInputStream(argv[i]),
-                                     encoding, options, filename, null, out))
-                       notFound = false;
-               }
-           } catch (FileNotFoundException e) {
-               if (!options[SILENT])
-                   System.err.println(PROGNAME+": "+e);
-           }
-       }
-      }
-    } else {
-       if (processStream(pattern,System.in,encoding,options,null,null,out))
-           notFound = false;
-    }
-    return notFound ? 1 : 0;
-  }
-
-  private static boolean processStream(RE pattern, InputStream is, 
-                                      String encoding, boolean[] options, 
-                                      String filename, String zipName,
-                                      PrintStream out) {
-    try {
-      final InputStreamReader isr = encoding == null?
-       new InputStreamReader(is) : new InputStreamReader(is,encoding);
-      final BufferedReader r = new BufferedReader(isr);
-      return processReader(pattern, r, options, filename, zipName, out);
-    } catch (UnsupportedEncodingException uee) {
-      /* since grep() should have checked that the 'encoding' parameter
-        is valid, it should be impossible that this exception would
-        happen.  Of, sso, it is a logic error.
-      */
-      throw new Error(PROGNAME + ": programming logic error");
-    }
-  }
-
-    private static String fileNameString (String fileName, String zipName) {
-       if (zipName == null)
-           return fileName;
-       else
-           return zipName + " in " + fileName;
-    }
-
-  private static boolean processReader(RE pattern,
-                                      BufferedReader br,
-                                      boolean[] options, String filename,
-                                      String zipName, PrintStream out) {
-
-    int newlineLen = System.getProperty("line.separator").length();
-    int count = 0;
-    long atByte = 0;
-    int atLine = 1;
-    String line;
-    REMatch match;
-    
-    try {
-      while ((line = br.readLine()) != null) {
-       match = pattern.getMatch(line);
-       if (((options[LINE_REGEXP] && pattern.isMatch(line))
-            || (!options[LINE_REGEXP] && (match != null))) 
-           ^ options[REVERT_MATCH]) {
-         count++;
-         if (!options[COUNT]) {
-           if (options[QUIET]) {
-             return true;
-           }
-           if (options[FILES_WITH_MATCHES]) {
-             if (filename != null)
-               out.println(fileNameString(filename, zipName));
-             return true;
-           }
-           if (options[FILES_WITHOUT_MATCH]) {
-             return false;
-           }
-           if (filename != null) {
-               out.print(fileNameString(filename, zipName));
-               out.print(':');
-           }
-           if (options[LINE_NUMBER]) {
-             out.print(atLine);
-             out.print(':');
-           }
-           if (options[BYTE_OFFSET]) {
-             out.print(atByte + match.getStartIndex() );
-             out.print(':');
-           }
-           out.println(line);
-         }
-       } // a match
-       atByte += line.length() + newlineLen; // could be troublesome...
-       atLine++;
-      } // a valid line
-      br.close();
-
-      if (options[COUNT]) {
-       if (filename != null)
-         out.println(fileNameString(filename, zipName)+':');
-       out.println(count);
-      }
-      if (options[FILES_WITHOUT_MATCH] && count==0) {
-       if (filename != null)
-         out.println(fileNameString(filename, zipName));
-      }
-    } catch (IOException e) {
-      System.err.println(PROGNAME+": "+e);
-    }
-    return ((count > 0) ^ options[REVERT_MATCH]);
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/GrepUsage.txt b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/GrepUsage.txt
deleted file mode 100644 (file)
index 2dca465..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-Usage: java gnu.regexp.util.Grep [OPTION]... PATTERN [FILE] ...
-Search for PATTERN in each FILE or standard input.
-Most options same as GNU grep.
-
-Regexp selection and interpretation:
-  -E, --extended-regexp     PATTERN is an extended regular expression
-  -G, --basic-regexp        PATTERN is a basic regular expression
-  -i, --ignore-case         ignore case distinctions
-Unsupported (may be available in a future release):
-  -e, --regexp=PATTERN      use PATTERN as a regular expression
-  -f, --file=FILE           obtain PATTERN from FILE
-  -F, --fixed-regexp        PATTERN is a fixed string separated by newlines
-  -w, --word-regexp         force PATTERN to match only whole words
-  -x, --line-regexp         force PATTERN to match only whole lines
-
-Miscellaneous:
-  -s, --no-messages         suppress error messages
-  -v, --revert-match        select non-matching lines
-  -N, --encoding           use the specified file encoding
-  -z, --zip                expand ZIP files
-  -V, --version             print version information and exit
-      --help                display this help and exit
-
-Output control:
-  -b, --byte-offset         print the byte offset with output lines
-  -n, --line-number         print line number with output lines
-  -h, --no-filename         suppress the prefixing filename on output
-  -q, --quiet, --silent     suppress all normal output
-  -L, --files-without-match only print FILE names containing no match
-  -l, --files-with-matches  only print FILE names containing matches
-  -c, --count               only print a count of matching lines per FILE
-Unsupported (may be available in a future release):
-  -H, --with-filename       print the filename for each match
-
-Context control:
-Unsupported (may be available in a future release):
-  -B, --before-context=NUM  print NUM lines of leading context
-  -A, --after-context=NUM   print NUM lines of trailing context
-  -NUM                      same as both -B NUM and -A NUM
-  -C, --context             same as -2
-  -U, --binary              do not strip CR characters at EOL (MSDOS)
-  -u, --unix-byte-offsets   report offsets as if CRs were not there (MSDOS)
-
-With no FILE, or when FILE is -, read standard input. If less than
-two FILEs given, assume -h. Exit with 0 if matches, with 1 if none.
-Exit with 2 if syntax errors or system errors.
-
-Report bugs to <wes@cacas.org>.
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/REApplet.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/REApplet.java
deleted file mode 100644 (file)
index ac54cfc..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- *  gnu/regexp/util/REApplet.java
- *  Copyright (C) 1998 Wes Biggs
- *
- *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp.util;
-import java.applet.*;
-import java.awt.*;
-import gnu.regexp.*;
-
-/**
- * This is a simple applet to demonstrate the capabilities of gnu.regexp.
- * To run it, use appletviewer on the reapplet.html file included in the
- * documentation directory.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @version 1.02
- */
-public class REApplet extends Applet {
-    private Label l1, l2, l3, l4;
-    private Button b;
-    private TextField tf;
-    private TextArea input, output;
-    private Checkbox insens;
-    private Choice syntax;
-    private static String[] names = new String[] { 
-       "awk", "ed", "egrep", "emacs", "grep", "POSIX awk", "POSIX basic", 
-       "POSIX egrep", "POSIX extended", "POSIX minimal basic", 
-       "POSIX minimal extended", "sed", "perl 4", "perl 4 (singe line)", 
-       "perl 5", "perl 5 (single line)" 
-    };
-
-    private static RESyntax[] values = new RESyntax[] { 
-       new RESyntax(RESyntax.RE_SYNTAX_AWK).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_ED).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_EGREP).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_EMACS).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_GREP).setLineSeparator("\n"),
-       new RESyntax(RESyntax.RE_SYNTAX_POSIX_AWK).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_POSIX_BASIC).setLineSeparator("\n"),
-       new RESyntax(RESyntax.RE_SYNTAX_POSIX_EGREP).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_POSIX_EXTENDED).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_POSIX_MINIMAL_BASIC).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_POSIX_MINIMAL_EXTENDED).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_SED).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_PERL4).setLineSeparator("\n"),
-       new RESyntax(RESyntax.RE_SYNTAX_PERL4_S).setLineSeparator("\n"), 
-       new RESyntax(RESyntax.RE_SYNTAX_PERL5).setLineSeparator("\n"),
-       new RESyntax(RESyntax.RE_SYNTAX_PERL5_S).setLineSeparator("\n")
-    };
-
-    /** Creates an REApplet. */
-    public REApplet() { super(); }
-    
-    /** Initializes the applet and constructs GUI elements. */
-    public void init() {
-       // test run RE stuff to cache gnu.regexp.* classes.
-       try {
-           RE x = new RE("^.*(w[x])\1$");
-           REMatchEnumeration xx = x.getMatchEnumeration("wxwx");
-           while (xx.hasMoreMatches()) xx.nextMatch().toString();
-       } catch (REException arg) { }
-       
-       setBackground(Color.lightGray);
-       
-       /*
-         Layout looks like this:
-         
-         [0,0:[0,0: Regular Expression] [1,0: Textbox]
-         [0,1: Expression Syntax]  [1,1: [0,0: Choice] [1,0: Checkbox]]
-         [1,2: Button]]
-         [0,1: Input Text] [1,1: Match]
-         [0,2: Textarea]   [1,2: Textarea]
-       */
-       
-       GridBagLayout gbag = new GridBagLayout();
-       setLayout(gbag);
-       GridBagConstraints c = new GridBagConstraints();
-       Panel p = new Panel();
-       GridBagLayout gbag2 = new GridBagLayout();
-       p.setLayout(gbag2);
-       
-       c.anchor = GridBagConstraints.WEST;
-       c.weightx = 1.0;
-       
-       // [0,0: Regular Expression]
-       c.gridx = 0;
-       c.gridy = 0;
-       l1 = new Label("Regular Expression");
-       gbag2.setConstraints(l1,c);
-       p.add(l1);
-       
-       // [1,0: TextField]
-       c.gridx = 1;
-       tf = new TextField(getParameter("regexp"),30);
-       gbag2.setConstraints(tf,c);
-       p.add(tf);
-       
-       // [0,1: Expression Syntax]
-       c.gridx = 0;
-       c.gridy = 1;
-       l4 = new Label("Expression Syntax");
-       gbag2.setConstraints(l4,c);
-       p.add(l4);
-       
-       // [1,1: subpanel]
-       Panel p2 = new Panel();
-       GridBagLayout gbag3 = new GridBagLayout();
-       p2.setLayout(gbag3);
-       c.gridx = 1;
-       gbag2.setConstraints(p2,c);
-       p.add(p2);
-       
-       // Subpanel [0,0: Choice]
-       c.gridx = 0;
-       c.gridy = 0;
-       syntax = new Choice();
-       for (int i = 0; i < names.length; i++) syntax.addItem(names[i]);
-       String zz = getParameter("syntax");
-       if (zz != null) {
-           try {
-               syntax.select(getParameter("syntax"));
-           } catch (IllegalArgumentException e) { }
-       }
-
-       gbag3.setConstraints(syntax,c);
-       p2.add(syntax);
-        
-       c.gridx = 1;
-       insens = new Checkbox("Ignore case",false);
-       gbag3.setConstraints(insens,c);
-       p2.add(insens);
-       
-       // Next Row
-       c.gridx = 1;
-       c.gridy = 2;
-       b = new Button("Match");
-       gbag2.setConstraints(b,c);
-       p.add(b);
-       
-       // Add the entire upper panel.
-       c.gridwidth = 2;
-       c.gridheight = 1;
-       c.gridx = 0;
-       c.gridy = 0;
-       c.anchor = GridBagConstraints.CENTER;
-       gbag.setConstraints(p,c);
-       add(p);
-       
-       c.gridwidth = 1;
-       c.gridheight = 1;
-       
-       // Main: [0,1]:
-       l2 = new Label("Input Text");
-       c.gridwidth = 1;
-       c.gridx = 0;
-       c.gridy = 1;
-       gbag.setConstraints(l2,c);
-       add(l2);
-       
-       l3 = new Label("Matches Found");
-       c.gridx = 1;
-       gbag.setConstraints(l3,c);
-       add(l3);
-       
-       input = new TextArea(getParameter("input"),5,30);
-       c.gridx = 0;
-       c.gridy = 2;
-       gbag.setConstraints(input,c);
-       add(input);
-       
-       c.gridx = 1;
-       output = new TextArea(5,30);
-       output.setEditable(false);
-       c.gridwidth = GridBagConstraints.REMAINDER;
-       gbag.setConstraints(output,c);
-       add(output);
-    }
-    
-    /**
-     * Handles events in the applet.  Returns true if the indicated event
-     * was handled, false for all other events.
-     */
-    public boolean action(Event e, Object arg) {
-       Object target = e.target;
-       
-       if (target == b) { // match
-           try {
-               String expr = tf.getText();
-               RE reg = null;
-               RESyntax res = values[syntax.getSelectedIndex()];
-               reg = new RE(expr,insens.getState() ? RE.REG_ICASE | RE.REG_MULTILINE : RE.REG_MULTILINE, res);
-               REMatchEnumeration en = reg.getMatchEnumeration(input.getText());
-               StringBuffer sb = new StringBuffer();
-               int matchNum = 0;
-               while (en.hasMoreMatches()) {
-                   sb.append(String.valueOf(++matchNum));
-                   sb.append(". ");
-                   sb.append(en.nextMatch().toString());
-                   sb.append('\n');
-               }
-               output.setText(sb.toString());
-           } catch (REException err) { 
-               output.setText("Expression compilation error: " + err.getMessage());
-           }
-       return true;
-       } else return false;
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/RETest.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/RETest.java
deleted file mode 100644 (file)
index 9c99f36..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- *  gnu/regexp/util/RETest.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This file is in the public domain.  However, the gnu.regexp library
- *  proper is licensed under the terms of the GNU Lesser General Public
- *  License (see the file COPYING.LIB for details).
- */
-package gnu.regexp.util;
-import gnu.regexp.*;
-
-/**
- *  RETest provides a simple way to test regular expressions.
- *  It runs from the command line using the Java interpreter.
- *  To use it, enter the following from a command prompt (provided
- *  that the Java system knows where to find the RETest bytecodes):
- *  <BR><CODE>java gnu.regexp.util.RETest [regExp] [inputString]</CODE><BR>
- *  where <i>regExp</i> is a regular expression (you'll probably have
- *  to escape shell meta-characters) and <i>inputString</i> is the string
- *  to match against (again, put it in quotes or escape any shell meta-
- *  characters).
- *  <P>
- *  The test function will report the package version number, whether
- *  the expression matches the input string, what the match it found was,
- *  and the contents of any subexpressions, if applicable.
- *  <P>
- *  You may optionally add a third integer argument which is the number of
- *  times to repeat the test.  When this option is used, RETest will report
- *  average compile and match times.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @version 1.01
- */
-public class RETest {
-  private RETest() { }
-
-  /**
-   * Invokes the test function with the command line arguments specified.
-   * See class description for usage notes.
-   *
-   * @param argv
-   * The command line arguments.
-   *
-   * @exception REException
-   * There was an error compiling or executing the regular expression.
-   */
-  public static void main(String argv[]) throws REException {
-    System.out.println("gnu.regexp version "+RE.version());
-    
-    int numRepeats = 1;
-    if (argv.length == 3)
-      numRepeats = Integer.parseInt(argv[2]);
-    if (argv.length < 2) {
-      System.out.println("usage: java gnu.regexp.util.RETest regExp inputString [numRepeats]");
-      System.exit(1);
-    }
-    
-    // Construct the regular expression
-
-    RE expression = null;
-    long begin = System.currentTimeMillis();
-
-    for (int rpt = 0; rpt < numRepeats; rpt++)
-      expression = new RE(argv[0]);
-
-    long end = System.currentTimeMillis();
-    
-    if (numRepeats>1) {
-      System.out.println("Compiling "+numRepeats+" times took "+(end-begin)+" ms");
-      System.out.println("Average compile time: "+((end-begin)/numRepeats)+" ms");
-    }
-
-    // Display regular expression
-    System.out.println("        Input Text: "+argv[1]);
-    System.out.println("Regular Expression: "+argv[0]);
-    System.out.println("     Compiled Form: "+expression);
-    System.out.println("    Minimum Length: "+expression.getMinimumLength());
-
-    // Is the input in its entirety a match?
-    System.out.println(" isMatch() returns: "+expression.isMatch(argv[1]));
-    
-    REMatch[] matches = expression.getAllMatches(argv[1]);
-    System.out.println("   getAllMatches(): " + matches.length + " matches");
-    for (int i = 0; i < matches.length; i++) {
-      System.out.println("Match " + i + " (" + matches[i].getStartIndex()
-                        + "," + matches[i].getEndIndex() + "): "
-                        + matches[i]);
-    }
-
-    // Get the first match    
-    REMatch match = null;
-
-    begin = System.currentTimeMillis();
-
-    for (int rpt = 0; rpt < numRepeats; rpt++)
-      match = expression.getMatch(argv[1]);
-
-    end = System.currentTimeMillis();
-
-    if (numRepeats>1) {
-      System.out.println("Finding first match "+numRepeats+" times took "+(end-begin)+" ms");
-      System.out.println("Average match time: "+((end-begin)/numRepeats)+" ms");
-    }
-
-    if (match == null)
-      System.out.println("Expression did not find a match.");
-    else {
-      // Report the full match indices
-
-      System.out.println("Match found from position "
-                        + match.getStartIndex() + " to position "
-                        + match.getEndIndex());
-      
-      // Take advantage of REMatch.toString() to print match text
-      
-      System.out.println("Match was: '" + match + "'");
-      
-      // Report subexpression positions
-      
-      for (int i=1; i <= expression.getNumSubs(); i++) {
-       if (match.getStartIndex(i) > -1) {
-         System.out.println("Subexpression #" + i + ": from position "
-                            + match.getStartIndex(i) + " to position "
-                            + match.getEndIndex(i));
-               
-         // Note how the $n is constructed for substituteInto
-               
-         System.out.println(match.substituteInto("The subexpression matched this text: '$"+i+"'"));
-       }
-      }
-    }
-
-    // Here's a substitute test.
-    System.out.println("substitute(): " + expression.substitute(argv[1],"<!--$0-->"));
-    System.out.println("substituteAll(): " + expression.substituteAll(argv[1],"<!--$0-->"));
-  }
-}
diff --git a/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Tests.java b/upstream/org.ibex.core/upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/util/Tests.java
deleted file mode 100644 (file)
index b6aa05d..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * gnu/regexp/util/Tests.java -- Simple testsuite for gnu.regexp package
- * Copyright (C) 1998-2001 Wes Biggs
- *
- * This file is in the public domain.  However, the gnu.regexp library
- * proper is licensed under the terms of the GNU Lesser General Public
- * License (see the file COPYING.LIB for details).
- */
-
-package gnu.regexp.util;
-import gnu.regexp.*;
-import java.io.StringBufferInputStream;
-import java.io.StringReader;
-
-/**
- * This is a very basic testsuite application for gnu.regexp.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @version 1.1.1
- */
-public class Tests {
-  private Tests() { }
-
-    private static void check(RE expr, String input, String expect, int id) {
-       // Test it using all possible input types
-       check(expr.getMatch(input),expect,id, "String");
-       check(expr.getMatch(new StringBuffer(input)),expect,id, "StringBuffer");
-       check(expr.getMatch(input.toCharArray()),expect,id, "char[]");
-       check(expr.getMatch(new StringReader(input)),expect,id, "Reader");
-       check(expr.getMatch(new StringBufferInputStream(input)),expect,id, "InputStream");
-    }
-  private static void check(REMatch m, String expect, int x, String type) {
-    if ((m == null) || !m.toString().equals(expect)) System.out.print("*** Failed");
-    else System.out.print("Passed");
-    System.out.println(" test #"+x + " (" + type + ")");
-  }
-
-  /**
-   * Runs the testsuite.  No command line arguments are necessary. 
-   *
-   * @exception REException An error occurred compiling a regular expression.
-   */
-  public static void main(String[] argv) throws REException {
-    RE e;
-
-    
-    e = new RE("(.*)z");
-    check(e,("xxz"),"xxz",1);
-
-    e = new RE(".*z");
-    check(e,("xxz"),"xxz",2);
-    
-    e = new RE("(x|xy)z");
-    check(e,("xz"),"xz",3);
-    check(e,("xyz"),"xyz",4);
-
-    e = new RE("(x)+z");
-    check(e,("xxz"),"xxz",5);
-
-    e = new RE("abc");
-    check(e,("xyzabcdef"),"abc",6);
-
-    e = new RE("^start.*end$");
-    check(e,("start here and go to the end"),"start here and go to the end",7);
-
-    e = new RE("(x|xy)+z");
-    check(e,("xxyz"),"xxyz",8);
-
-    e = new RE("type=([^ \t]+)[ \t]+exts=([^ \t\n\r]+)");
-    check(e,("type=text/html   exts=htm,html"),"type=text/html exts=htm,html",9);
-
-    e = new RE("(x)\\1");
-    check(e,("zxxz"),"xx", 10);
-
-    e = new RE("(x*)(y)\\2\\1");
-    check(e,("xxxyyxx"),"xxyyxx",11);
-
-    e = new RE("[-go]+");
-    check(e,("go-go"),"go-go",12);
-
-    e = new RE("[\\w-]+");
-    check(e,("go-go"),"go-go",13);
-
-    e = new RE("^start.*?end");
-    check(e,("start here and end in the middle, not the very end"),"start here and end",14);
-    
-    e = new RE("\\d\\s\\w\\n\\r");
-    check(e,("  9\tX\n\r  "),"9\tX\n\r",15);
-
-    e = new RE("zow",RE.REG_ICASE);
-    check(e,("ZoW"),"ZoW",16);
-
-    e = new RE("(\\d+)\\D*(\\d+)\\D*(\\d)+");
-    check(e,("size--10 by 20 by 30 feet"),"10 by 20 by 30",17);
-
-    e = new RE("(ab)(.*?)(d)");
-    REMatch m = e.getMatch("abcd");
-    check(m,"abcd",18, "String");
-    System.out.println(((m.toString(2).equals("c")) ? "Pass" : "*** Fail") 
-                      + "ed test #19");
-
-    e = new RE("^$");
-    check(e,(""),"",20);
-
-    e = new RE("a*");
-    check(e,(""),"",21);
-    check(e,("a"),"a",22);
-    check(e,("aa"),"aa",23);
-
-    e = new RE("(([12]))?");
-    check(e,("12"),"1",24);
-
-    e = new RE("(.*)?b");
-    check(e,("ab"),"ab",25);
-
-    e = new RE("(.*)?-(.*)"); 
-    check(e,("a-b"), "a-b", 26);
-
-    e = new RE("(a)b");
-    check(e,("aab"), "ab", 27);
-
-    e = new RE("[M]iss");
-    check(e,("one Mississippi"), "Miss", 28);
-
-    e = new RE("\\S Miss");
-    check(e,("one Mississippi"), "e Miss", 29);
-
-    e = new RE("a*");
-    check(e,("b"),"",30);
-    check(e,("ab"),"a",31);
-    check(e,("aab"),"aa",32);
-
-    // Single character should match anywhere in String
-    e = new RE("a");
-    check(e,("a"),"a", 33);
-    check(e,("ab"),"a", 34);
-    check(e,("ba"),"a", 35);
-    check(e,("bab"),"a", 36);
-    
-  }
-}      
diff --git a/upstream/org.ibex.core/upstream/jode-1.1.1/patches/javadep.patch b/upstream/org.ibex.core/upstream/jode-1.1.1/patches/javadep.patch
deleted file mode 100644 (file)
index 85548ea..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- javaDependencies.pl.in     Mon Jan 26 20:17:37 2004
-+++ javaDependencies.pl.in     Mon Jan 26 20:17:54 2004
-@@ -85,8 +85,8 @@
-       my ($magic, $minor, $major) = unpack("Nnn", $buff);
-       die "Wrong magic $magic" if $magic != 0xcafebabe;
--      die "Wrong minor $minor" if $minor > 3;
--      die "Wrong minor $major" if $major != 45;
-+#     die "Wrong minor $minor" if $minor > 3;
-+#     die "Wrong minor $major" if $major != 45;
-       
-       readInBuff 2 or die "Can't read cpool length";
-       
diff --git a/upstream/org.ibex.core/upstream/libmspack-20030726/patches/libmspack.patch b/upstream/org.ibex.core/upstream/libmspack-20030726/patches/libmspack.patch
deleted file mode 100644 (file)
index ade411d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- ../libmspack.orig/mspack/Makefile  Sat Jul 26 10:44:57 2003
-+++ mspack/Makefile    Sun Nov  2 17:12:35 2003
-@@ -1,12 +1,13 @@
- CC=gcc
- RM=rm -f
- AR=ar
-+RANLIB=ranlib
- WARNINGS=-Wall -Wsign-compare -Wconversion -pedantic
- LARGEFILE=-std=c99 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
- DEBUG=-g -DDEBUG
- OPTIM=-O3
--CFLAGS= $(WARNINGS) $(LARGEFILE) $(DEBUG) $(OPTIM) -I.
-+CFLAGS= $(WARNINGS) $(LARGEFILE) $(DEBUG) $(OPTIM) -I. -DMSPACK_NO_DEFAULT_SYSTEM
- all: libmspack.a
-@@ -27,6 +28,7 @@
- libmspack.a: $(OBJS)
-       -$(RM) $@
-       $(AR) q $@ $(OBJS)
-+      $(RANLIB) $@
- .c.o:
-       $(CC) $(CFLAGS) -o $@ -c $<
diff --git a/upstream/org.ibex.core/upstream/newlib-1.11.0/patches/mips.patch b/upstream/org.ibex.core/upstream/newlib-1.11.0/patches/mips.patch
deleted file mode 100644 (file)
index 64b5de8..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-diff -ru ../newlib-1.11.0.orig/libgloss/configure ./libgloss/configure
---- ../newlib-1.11.0.orig/libgloss/configure   Fri Oct 25 14:35:21 2002
-+++ ./libgloss/configure       Sun Aug 31 06:51:40 2003
-@@ -762,6 +762,9 @@
-   mips*-*-pe)
-       configdirs="wince"
-       ;;
-+  mips*-unknown-elf*)
-+        configdirs="${configdirs}"
-+        ;;
-   mips*-*-*)
-       configdirs="${configdirs} mips testsuite"
-       ;;
-@@ -818,7 +821,7 @@
- # Extract the first word of "gcc", so it can be a program name with args.
- set dummy gcc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:822: checking for $ac_word" >&5
-+echo "configure:825: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -848,7 +851,7 @@
-   # Extract the first word of "cc", so it can be a program name with args.
- set dummy cc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:852: checking for $ac_word" >&5
-+echo "configure:855: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -897,7 +900,7 @@
- fi
- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
--echo "configure:901: checking whether we are using GNU C" >&5
-+echo "configure:904: checking whether we are using GNU C" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -906,7 +909,7 @@
-   yes;
- #endif
- EOF
--if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:913: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-   ac_cv_prog_gcc=yes
- else
-   ac_cv_prog_gcc=no
-@@ -921,7 +924,7 @@
-   ac_save_CFLAGS="$CFLAGS"
-   CFLAGS=
-   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
--echo "configure:925: checking whether ${CC-cc} accepts -g" >&5
-+echo "configure:928: checking whether ${CC-cc} accepts -g" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -953,7 +956,7 @@
- # Extract the first word of "ar", so it can be a program name with args.
- set dummy ar; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:957: checking for $ac_word" >&5
-+echo "configure:960: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -987,7 +990,7 @@
- # Extract the first word of "ranlib", so it can be a program name with args.
- set dummy ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:991: checking for $ac_word" >&5
-+echo "configure:994: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-diff -ru ../newlib-1.11.0.orig/libgloss/configure.in ./libgloss/configure.in
---- ../newlib-1.11.0.orig/libgloss/configure.in        Fri Oct 25 14:35:21 2002
-+++ ./libgloss/configure.in    Sun Aug 31 06:44:47 2003
-@@ -73,6 +73,9 @@
-   mips*-*-pe)
-       configdirs="wince"
-       ;;
-+  mips*-unknown-elf*)
-+        configdirs="${configdirs}"
-+        ;;
-   mips*-*-*)
-       configdirs="${configdirs} mips testsuite"
-       ;;
-Only in ./libgloss: configure.in~
-Only in ./libgloss: configure.old
-diff -ru ../newlib-1.11.0.orig/newlib/configure.host ./newlib/configure.host
---- ../newlib-1.11.0.orig/newlib/configure.host        Thu Dec 19 21:32:43 2002
-+++ ./newlib/configure.host    Fri Sep  5 18:26:20 2003
-@@ -508,6 +508,10 @@
-       newlib_cflags="${newlib_cflags}"
-       syscall_dir=syscalls
-       ;;
-+  mips*-unknown-elf*)
-+      newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED"
-+      syscall_dir=syscalls
-+        ;;
-   mmix-*)
-       syscall_dir=syscalls
-       # We need every symbol 32-bit aligned, so the invalid
-Only in ./newlib: configure.host~
-Only in ./newlib/libc/stdlib: mprec.c
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/Makefile b/upstream/org.ibex.core/upstream/org.ibex.crypto/Makefile
deleted file mode 100644 (file)
index 9503004..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-JAVAC = javac
-sources = $(shell find src -name '*.java')
-classes = $(sources:src/%.java=build/%.class)
-dats = org/ibex/net/ssl/rootcerts.dat
-
-jar_sources = \
-       $(shell find src/org/ibex/crypto -name '*.java') \
-       src/org/ibex/net/SSL.java \
-       src/org/ibex/net/ssl/RootCerts.java
-jar_classes = $(jar_sources:src/%.java=build/%.class)
-jar = BriSSL.jar
-
-all: $(classes) $(dats:%=build/%)
-
-$(classes): $(sources)
-       @mkdir -p build
-       $(JAVAC) -d build $(sources)
-
-build/%.dat: src/%.dat
-       @mkdir -p `dirname $@`
-       cp $^ $@
-               
-$(jar): $(classes) 
-       cd build && jar cf ../$@  $(jar_classes:build/%.class=%*.class)
-       
-test: all
-       java -cp build org.ibex.net.ssl.Test www.paypal.com 443
-
-clean: 
-       rm -rf build/*
-
-# This stuff is only for Brian to use 
-# We should probably verify this file somehow
-tmp/.havecacertrs:
-       @mkdir -p tmp
-       wget -O - http://ftp.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_20020323.tar.gz | gzip -dc | tar -C tmp -xf-
-       cd tmp/ca-certificates/mozilla && \
-               make all \
-               for f in *.pem; do \
-                       openssl x509 -in "$$f" -out "$$f.der" -outform der; \
-               done
-       touch $@
-
-update-rootcerts: tmp/.havecacerts src/org/ibex/net/ssl/GenCompactCAList.java
-       java -cp build org.ibex.net.ssl.GenCompactCAList binary tmp/ca-certificates/mozilla/*.der > src/org/ibex/net/ssl/rootcerts.dat  
-       java -cp build org.ibex.net.ssl.GenCompactCAList class tmp/ca-certificates/mozilla/*.der > src/org/ibex/net/ssl/RootCerts.java
-
-sizecheck:
-       @for c in $(jar_classes); do \
-               for f in `echo $$c|sed 's,\.class$$,,;'`*.class; do gzip -c $$f; done | wc -c | tr -d '\n'; \
-               echo -e "\t`echo $$c | sed 's,build/org/ibex,,;s,\.class$$,,;s,/,.,g;'`"; \
-       done | sort -rn | awk '{ sum += $$1; print }  END { print sum,"Total"; }'
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/doc/COPYING b/upstream/org.ibex.core/upstream/org.ibex.crypto/doc/COPYING
deleted file mode 100644 (file)
index 6ecac4b..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-src/com/brian_web/*
--------------------
-src/com/brian_web/net/SSL.java is Copyright 2004 Brian Alliet and
-Copyright 2003 Adam Megacz. It is released under the GNU Lesser
-General Public License with the exception of the portion of clause 6a
-after the semicolon (aka the "obnoxious relink clause")
-
-src/com/brian_web/{x509,der} are Copyright 2004 Brian Alliet and
-Copyright 2000 The Legion Of The Bouncy Castle 
-(http://www.bouncycastle.org) and is released under the Bouncy
-Castle License below.
-
-The rest of src/com/brian_web is Copyright 2004 Brian Alliet
-are released under the GNU Lesser General Public License (below).
-
-src/org/bouncycastle/*
-----------------------
-src/org/bouncycastle is Copyright 2000 The Legion Of The Bouncy Castle
-(http://www.bouncycastle.org) and is released under the following license:
-
--- Bouncy Castle License --
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
--- End --
-
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java
deleted file mode 100644 (file)
index bf5206b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.ibex.crypto;
-
-public class Base36 {
-    public static String encode(long l) {
-        StringBuffer ret = new StringBuffer();
-        while (l > 0) {
-            if ((l % 36) < 10) ret.append((char)(((int)'0') + (int)(l % 36)));
-            else ret.append((char)(((int)'A') + (int)((l % 36) - 10)));
-            l /= 36;
-        }
-        return ret.toString();
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Base64.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Base64.java
deleted file mode 100644 (file)
index f53b067..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.ibex.crypto;
-
-public class Base64
-{
-        private static final byte[] encodingTable =
-                {
-                    (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
-            (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
-            (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
-            (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
-                    (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
-            (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
-            (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
-            (byte)'v',
-                    (byte)'w', (byte)'x', (byte)'y', (byte)'z',
-                    (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6',
-            (byte)'7', (byte)'8', (byte)'9',
-                    (byte)'+', (byte)'/'
-                };
-
-        /**
-         * encode the input data producong a base 64 encoded byte array.
-         *
-         * @return a byte array containing the base 64 encoded data.
-         */
-        public static byte[] encode(
-                byte[]  data)
-        {
-                byte[]  bytes;
-                
-                int modulus = data.length % 3;
-                if (modulus == 0)
-                {
-                        bytes = new byte[4 * data.length / 3];
-                }
-                else
-                {
-                        bytes = new byte[4 * ((data.length / 3) + 1)];
-                }
-
-        int dataLength = (data.length - modulus);
-                int a1, a2, a3;
-                for (int i = 0, j = 0; i < dataLength; i += 3, j += 4)
-                {
-                        a1 = data[i] & 0xff;
-                        a2 = data[i + 1] & 0xff;
-                        a3 = data[i + 2] & 0xff;
-
-                        bytes[j] = encodingTable[(a1 >>> 2) & 0x3f];
-                        bytes[j + 1] = encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f];
-                        bytes[j + 2] = encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f];
-                        bytes[j + 3] = encodingTable[a3 & 0x3f];
-                }
-
-                /*
-                 * process the tail end.
-                 */
-                int     b1, b2, b3;
-                int     d1, d2;
-
-                switch (modulus)
-                {
-                case 0:         /* nothing left to do */
-                        break;
-                case 1:
-                        d1 = data[data.length - 1] & 0xff;
-                        b1 = (d1 >>> 2) & 0x3f;
-                        b2 = (d1 << 4) & 0x3f;
-
-                        bytes[bytes.length - 4] = encodingTable[b1];
-                        bytes[bytes.length - 3] = encodingTable[b2];
-                        bytes[bytes.length - 2] = (byte)'=';
-                        bytes[bytes.length - 1] = (byte)'=';
-                        break;
-                case 2:
-                        d1 = data[data.length - 2] & 0xff;
-                        d2 = data[data.length - 1] & 0xff;
-
-                        b1 = (d1 >>> 2) & 0x3f;
-                        b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f;
-                        b3 = (d2 << 2) & 0x3f;
-
-                        bytes[bytes.length - 4] = encodingTable[b1];
-                        bytes[bytes.length - 3] = encodingTable[b2];
-                        bytes[bytes.length - 2] = encodingTable[b3];
-                        bytes[bytes.length - 1] = (byte)'=';
-                        break;
-                }
-
-                return bytes;
-        }
-
-        /*
-         * set up the decoding table.
-         */
-        private static final byte[] decodingTable;
-
-        static
-        {
-                decodingTable = new byte[128];
-
-                for (int i = 'A'; i <= 'Z'; i++)
-                {
-                        decodingTable[i] = (byte)(i - 'A');
-                }
-
-                for (int i = 'a'; i <= 'z'; i++)
-                {
-                        decodingTable[i] = (byte)(i - 'a' + 26);
-                }
-
-                for (int i = '0'; i <= '9'; i++)
-                {
-                        decodingTable[i] = (byte)(i - '0' + 52);
-                }
-
-                decodingTable['+'] = 62;
-                decodingTable['/'] = 63;
-        }
-
-        /**
-         * decode the base 64 encoded input data.
-         *
-         * @return a byte array representing the decoded data.
-         */
-        public static byte[] decode(
-                byte[]  data)
-        {
-                byte[]  bytes;
-                byte    b1, b2, b3, b4;
-
-                if (data[data.length - 2] == '=')
-                {
-                        bytes = new byte[(((data.length / 4) - 1) * 3) + 1];
-                }
-                else if (data[data.length - 1] == '=')
-                {
-                        bytes = new byte[(((data.length / 4) - 1) * 3) + 2];
-                }
-                else
-                {
-                        bytes = new byte[((data.length / 4) * 3)];
-                }
-
-                for (int i = 0, j = 0; i < data.length - 4; i += 4, j += 3)
-                {
-                        b1 = decodingTable[data[i]];
-                        b2 = decodingTable[data[i + 1]];
-                        b3 = decodingTable[data[i + 2]];
-                        b4 = decodingTable[data[i + 3]];
-
-                        bytes[j] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[j + 1] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[j + 2] = (byte)((b3 << 6) | b4);
-                }
-
-                if (data[data.length - 2] == '=')
-                {
-                        b1 = decodingTable[data[data.length - 4]];
-                        b2 = decodingTable[data[data.length - 3]];
-
-                        bytes[bytes.length - 1] = (byte)((b1 << 2) | (b2 >> 4));
-                }
-                else if (data[data.length - 1] == '=')
-                {
-                        b1 = decodingTable[data[data.length - 4]];
-                        b2 = decodingTable[data[data.length - 3]];
-                        b3 = decodingTable[data[data.length - 2]];
-
-                        bytes[bytes.length - 2] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 1] = (byte)((b2 << 4) | (b3 >> 2));
-                }
-                else
-                {
-                        b1 = decodingTable[data[data.length - 4]];
-                        b2 = decodingTable[data[data.length - 3]];
-                        b3 = decodingTable[data[data.length - 2]];
-                        b4 = decodingTable[data[data.length - 1]];
-
-                        bytes[bytes.length - 3] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 2] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[bytes.length - 1] = (byte)((b3 << 6) | b4);
-                }
-
-                return bytes;
-        }
-
-        /**
-         * decode the base 64 encoded String data.
-         *
-         * @return a byte array representing the decoded data.
-         */
-        public static byte[] decode(
-                String  data)
-        {
-                byte[]  bytes;
-                byte    b1, b2, b3, b4;
-
-                if (data.charAt(data.length() - 2) == '=')
-                {
-                        bytes = new byte[(((data.length() / 4) - 1) * 3) + 1];
-                }
-                else if (data.charAt(data.length() - 1) == '=')
-                {
-                        bytes = new byte[(((data.length() / 4) - 1) * 3) + 2];
-                }
-                else
-                {
-                        bytes = new byte[((data.length() / 4) * 3)];
-                }
-
-                for (int i = 0, j = 0; i < data.length() - 4; i += 4, j += 3)
-                {
-                        b1 = decodingTable[data.charAt(i)];
-                        b2 = decodingTable[data.charAt(i + 1)];
-                        b3 = decodingTable[data.charAt(i + 2)];
-                        b4 = decodingTable[data.charAt(i + 3)];
-
-                        bytes[j] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[j + 1] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[j + 2] = (byte)((b3 << 6) | b4);
-                }
-
-                if (data.charAt(data.length() - 2) == '=')
-                {
-                        b1 = decodingTable[data.charAt(data.length() - 4)];
-                        b2 = decodingTable[data.charAt(data.length() - 3)];
-
-                        bytes[bytes.length - 1] = (byte)((b1 << 2) | (b2 >> 4));
-                }
-                else if (data.charAt(data.length() - 1) == '=')
-                {
-                        b1 = decodingTable[data.charAt(data.length() - 4)];
-                        b2 = decodingTable[data.charAt(data.length() - 3)];
-                        b3 = decodingTable[data.charAt(data.length() - 2)];
-
-                        bytes[bytes.length - 2] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 1] = (byte)((b2 << 4) | (b3 >> 2));
-                }
-                else
-                {
-                        b1 = decodingTable[data.charAt(data.length() - 4)];
-                        b2 = decodingTable[data.charAt(data.length() - 3)];
-                        b3 = decodingTable[data.charAt(data.length() - 2)];
-                        b4 = decodingTable[data.charAt(data.length() - 1)];
-
-                        bytes[bytes.length - 3] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 2] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[bytes.length - 1] = (byte)((b3 << 6) | b4);
-                }
-
-                return bytes;
-        }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/DER.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/DER.java
deleted file mode 100644 (file)
index b683a05..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * org.ibex.der.* - By Brian Alliet
- * Copyright (C) 2004 Brian Alliet
- * 
- * Based on Bouncy Castle by The Legion Of The Bouncy Castle
- * Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-package org.ibex.crypto;
-import java.io.IOException;
-import java.io.*;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.math.BigInteger;
-
-public class DER {
-    public static class Null {
-        final static Null instance = new Null();
-        private Null() { /* noop */ }
-        public boolean equals(Object o) { return o == this; }
-    }
-
-    public static class TaggedObject {
-        public final Object object;
-        public final int tag;
-        public TaggedObject(int tag, Object object) { this.tag = tag; this.object = object; }
-    }
-
-    public static class UnknownObject {
-        public final byte[] data;
-        public final int tag;
-        public UnknownObject(int tag,byte[] data) { this.tag = tag; this.data = data; }
-    }
-
-    public static class BitString {
-        public final int paddingBits;
-        public final byte[] data;
-    
-        public BitString(int paddingBits, byte[] data) {
-            this.paddingBits = paddingBits;
-            this.data = data;
-        }
-    }
-
-    public static class Exception extends java.io.IOException {
-        public Exception(String s) { super(s); }
-    }
-
-    public static class InputStream extends FilterInputStream {
-        private static final int MAX_OBJECT_SIZE = 4*1024*1024;
-    
-        private int limit;
-        public int bytesLeft() { return limit < 0 ? Integer.MAX_VALUE : limit-pos; }
-        private int pos;
-        public int getPos() { return pos; }
-    
-        // hack around gcj bug
-        public static DER.InputStream New(java.io.InputStream is) { return new DER.InputStream(is); }
-        public InputStream(java.io.InputStream is) { this(is,-1); } 
-        public InputStream(java.io.InputStream is, int limit) {
-            super(is);
-            this.limit = limit;
-        }
-    
-        public int read() throws IOException {
-            if(limit >= 0 && pos >= limit) return -1;
-            int n = super.read();
-            if(n != -1) {
-                pos++;
-            }
-            return n;
-        }
-    
-        public int read(byte[] buf, int start, int len) throws IOException {
-            if(limit >= 0) {
-                if(pos >= limit) return -1;
-                len = Math.min(len,limit-pos);
-            }
-            int n = super.read(buf,start,len);
-            if(n != -1) {
-                pos += n;
-            }
-            return n;
-        }
-    
-        protected void readFully(byte[] buf) throws IOException {
-            int pos = 0;
-            int left = buf.length;
-            while(left > 0) {
-                int n = read(buf,pos,left);
-                if(n == -1) throw new EOFException();
-                pos += n;
-                left -=n;
-            }
-        }
-    
-        protected int readByte() throws IOException {
-            int n = read();
-            if(n == -1) throw new EOFException();
-            return n;
-        }
-    
-        // From bouncycastle
-        private int readLength() throws IOException {
-            int length = read();
-            if (length < 0) throw new IOException("EOF found when length expected");
-            if (length == 0x80) return -1;      // indefinite-length encoding
-            if (length > 127) {
-                int size = length & 0x7f;
-                length = 0;
-                for (int i = 0; i < size; i++) {
-                    int next = read();
-                    if (next < 0) throw new IOException("EOF found reading length");    
-                    length = (length << 8) + next;
-                }
-            }
-            return length;
-        }
-        
-        public InputStream getSequenceStream() throws IOException {
-            int tag = readByte();
-            int length = readLength();
-            if(length < 0) throw new Exception("Indefinite length objects not supported");
-            if(tag != (CONSTRUCTED|0x10)) throw new Exception("Constructed Sequence expected");
-            return new InputStream(this,length);
-        }
-    
-        private static final int CONSTRUCTED = 0x20;    
-        public Object readObject() throws IOException {
-            int tag = readByte();        
-            int length = readLength();
-            if(length < 0) throw new Exception("Indefinite length objects not supported");
-            if(length > MAX_OBJECT_SIZE) throw new Exception("Object too large");
-        
-            switch(tag) {
-                case 0x01: return buildBoolean(length); // Boolean
-                case 0x02: return buildInteger(length); // Integer
-                case 0x03: return buildBitString(length); // Bit String
-                case 0x04: return buildOctetString(length); // Octet String
-                case 0x05: return Null.instance; // NULL
-                case 0x06: return buildObjectIdentifier(length); // Object Identifier
-                
-                case 0x13: // PrintableString
-                    // It is incorrect to treat this as an IA5String but the T.61 standard is way too old and backwards
-                    // to be worth supporting
-                case 0x14: // T.61 String 
-                case 0x16: // IA5String
-                    return buildIA5String(length);
-                case 0x17: return buildTime(length,false);// UTC Time
-                case 0x18: return buildTime(length,true); // Generalizd Time
-                
-                case CONSTRUCTED | 0x10: // Constructed Sequence
-                case CONSTRUCTED | 0x11: // Constructed Set
-                    { 
-                        return buildSequence(length);
-                    }
-                default: {
-                    if((tag & 0x80) != 0) {
-                        if ((tag & 0x1f) == 0x1f) throw new Exception("Unsupported high tag ecountered");
-                        // tagged object - bottom 5 bits are tag
-                        if(length == 0)
-                            return new TaggedObject(tag&0x1,((tag & CONSTRUCTED) == 0) ? (Object)Null.instance : (Object)new Vector());
-                        if((tag & CONSTRUCTED) == 0)
-                            return new TaggedObject(tag&0x1f,buildOctetString(length));
-                 
-                        InputStream dis = new InputStream(this,length);
-                        Object o = dis.readObject();
-                        if(dis.bytesLeft() == 0) return new TaggedObject(tag&0x1f,o);
-                        Vector v = new Vector();
-                        v.addElement(o);
-                        return buildSequence(dis,v);
-                    } else {
-                        return new UnknownObject(tag,readBytes(length));
-                    }
-                }     
-            }
-        }
-
-        protected Vector buildSequence(int length) throws IOException { return buildSequence(new InputStream(this,length),new Vector()); }
-        protected Vector buildSequence(InputStream dis,Vector v) throws IOException {
-            try {
-                for(;;) v.addElement(dis.readObject());
-            } catch(EOFException e) { 
-                return v; 
-            }
-        }    
-    
-        protected byte[] readBytes(int length) throws IOException {
-            byte[] buf = new byte[length];
-            readFully(buf);
-            return buf;
-        }
-    
-        protected BigInteger buildInteger(int length) throws IOException { return new BigInteger(readBytes(length)); }
-    
-        // From bouncycastle
-        protected String buildObjectIdentifier(int length) throws IOException {
-            byte[] bytes = readBytes(length);
-            StringBuffer    objId = new StringBuffer();
-            int             value = 0;
-            boolean         first = true;
-
-            for (int i = 0; i != bytes.length; i++)
-                {
-                    int b = bytes[i] & 0xff;
-
-                    value = value * 128 + (b & 0x7f);
-                    if ((b & 0x80) == 0)             // end of number reached
-                        {
-                            if (first)
-                                {
-                                    switch (value / 40)
-                                        {
-                                            case 0:
-                                                objId.append('0');
-                                                break;
-                                            case 1:
-                                                objId.append('1');
-                                                value -= 40;
-                                                break;
-                                            default:
-                                                objId.append('2');
-                                                value -= 80;
-                                        }
-                                    first = false;
-                                }
-
-                            objId.append('.');
-                            objId.append(Integer.toString(value));
-                            value = 0;
-                        }
-                }
-            return objId.toString();
-        }
-    
-        protected String buildIA5String(int length) throws IOException {
-            byte[] buf = readBytes(length);
-            char[] buf2 = new char[buf.length];
-            for(int i=0;i<buf.length;i++) buf2[i] = (char)(buf[i]&0xff);
-            return new String(buf2);
-        }
-    
-        private static final SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
-        protected Date buildTime(int length, boolean generalized) throws IOException {
-            String s = buildIA5String(length);
-            if(!generalized && s.length() > 0) {
-                if(s.charAt(0) < '5') s = "20" + s;
-                else s = "19" + s;
-            }
-            switch(s.length()) {
-                case 13: s = s.substring(0,12) + "00GMT+00:00"; break; //  YYYYMMDDhhmmZ
-                case 15: s = s.substring(0,14) + "GMT+00:00";   break; // YYYYMMDDhhmmssZ
-                case 17: s = s.substring(0,12) + "00GMT" + s.substring(12,15) + ":" + s.substring(15,17); break;  // YYYYMMDDhhmm+hh'mm'
-                case 19: s = s.substring(0,14) + "GMT" + s.substring(14, 17) + ":" + s.substring(17, 19); // YYYYMMDDhhmmss+hh'mm'
-                default: throw new Exception("Unknown time format " + s);
-            }
-            try {
-                return dateF.parse(s);
-            } catch(ParseException e) {
-                throw new Exception("Coudln't parse time: " + e.getMessage());
-            }
-        }
-    
-        protected BitString buildBitString(int length) throws IOException {
-            if(length < 1) throw new Exception("bit string too short");
-            int padding = read();
-            if(padding == -1) throw new IOException("unexpected eof");
-            return new BitString(padding,readBytes(length-1));
-        }
-    
-        protected byte[] buildOctetString(int length) throws IOException { return readBytes(length); }
-    
-        protected Boolean buildBoolean(int length) throws IOException {
-            byte[] bytes = readBytes(length);
-            return bytes[0] != 0 ? Boolean.TRUE : Boolean.FALSE;
-        }
-    
-        /*
-          public static void main(String[] args) throws Exception {
-          InputStream is = new InputStream(new FileInputStream(args[0]));
-          try {
-          for(;;) dump(is.readObject(),"");
-          } catch(EOFException e) {
-          System.err.println("EOF");
-          }
-          }
-          public static void dump(Object o, String indent) {
-          if(o instanceof Vector) {
-          Vector v = (Vector) o;
-          System.out.println(indent + "Sequence/Set");
-          for(int i=0;i<v.size();i++) {
-          dump(v.elementAt(i),indent + i + ":  ");
-          }
-          } else if(o instanceof TaggedObject){
-          dump(((TaggedObject)o).object,indent + "Tagged object: ");
-          } else if(o instanceof byte[]) {
-          System.err.println(indent + "<Byte Array>");
-          } else {
-          System.err.println(indent + o.toString());
-          }
-          }*/
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Digest.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/Digest.java
deleted file mode 100644 (file)
index c487ae8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/**
- * base implementation of MD4 family style digest as outlined in
- * "Handbook of Applied Cryptography", pages 344 - 347.
- */
-public abstract class Digest {
-    private byte[]  xBuf;
-    private int     xBufOff;
-    private long    byteCount;
-
-    protected Digest() { xBuf = new byte[4]; xBufOff = 0; }
-    public void update(byte in) {
-        xBuf[xBufOff++] = in;
-        if (xBufOff == xBuf.length) {
-            processWord(xBuf, 0);
-            xBufOff = 0;
-        }
-        byteCount++;
-    }
-
-    public void update(byte[] in, int inOff, int len) {
-        // fill the current word
-        while ((xBufOff != 0) && (len > 0)) {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-
-        // process whole words.
-        while (len > xBuf.length) {
-            processWord(in, inOff);
-            inOff += xBuf.length;
-            len -= xBuf.length;
-            byteCount += xBuf.length;
-        }
-
-        // load in the remainder.
-        while (len > 0) {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-    }
-
-    protected void finish() {
-        long    bitLength = (byteCount << 3);
-        // add the pad bytes.
-        update((byte)128);
-        while (xBufOff != 0) update((byte)0);
-        processLength(bitLength);
-        processBlock();
-    }
-
-    public void reset() {
-        byteCount = 0;
-        xBufOff = 0;
-        for ( int i = 0; i < xBuf.length; i++) xBuf[i] = 0;
-    }
-
-    protected abstract void processWord(byte[] in, int inOff);
-    protected abstract void processLength(long bitLength);
-    protected abstract void processBlock();
-    public abstract int getDigestSize();
-    public abstract void doFinal(byte[] out, int outOff);
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/HMAC.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/HMAC.java
deleted file mode 100644 (file)
index 22fb126..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.ibex.crypto;
-
-public class HMAC extends Digest {
-    private final Digest h;
-    private final byte[] digest;
-    private final byte[] k_ipad = new byte[64];
-    private final byte[] k_opad = new byte[64];
-    
-    public int getDigestSize() { return h.getDigestSize(); }
-    public HMAC(Digest h, byte[] key) {
-        this.h = h;
-        if(key.length > 64) {
-            h.reset();
-            h.update(key,0,key.length);
-            key = new byte[h.getDigestSize()];
-            h.doFinal(key,0);
-        }
-        digest = new byte[h.getDigestSize()];
-        for(int i=0;i<64;i++) {
-            byte b = i < key.length ? key[i] : 0;
-            k_ipad[i] = (byte)(b ^ 0x36);
-            k_opad[i] = (byte)(b ^ 0x5C);
-        }
-        reset();
-    }
-    public void reset() {
-        h.reset();
-        h.update(k_ipad,0,64);
-    }
-    public void update(byte[] b, int off, int len) { h.update(b,off,len); }
-    public void doFinal(byte[] out, int off){
-        h.doFinal(digest,0);
-        h.update(k_opad,0,64);
-        h.update(digest,0,digest.length);
-        h.doFinal(out,off);
-        reset();
-    }
-    protected void processWord(byte[] in, int inOff) {}
-    protected void processLength(long bitLength) {}
-    protected void processBlock() {}
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/MD2.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/MD2.java
deleted file mode 100644 (file)
index 1f546a2..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/* implementation of MD2
- * as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992
- */
-public class MD2 extends Digest
-{
-    private static final int DIGEST_LENGTH = 16;
-
-    /* X buffer */
-    private byte[]   X = new byte[48];
-    private int     xOff;
-    /* M buffer */
-    private byte[]   M = new byte[16];
-    private int     mOff;
-    /* check sum */
-    private byte[]   C = new byte[16];
-    //private int COff;
-
-    public MD2()
-    {
-        reset();
-    }
-
-    /**
-     * return the size, in bytes, of the digest produced by this message digest.
-     *
-     * @return the size, in bytes, of the digest produced by this message digest.
-     */
-    public int getDigestSize()
-    {
-        return DIGEST_LENGTH;
-    }
-    /**
-     * close the digest, producing the final digest value. The doFinal
-     * call leaves the digest reset.
-     *
-     * @param out the array the digest is to be copied into.
-     * @param outOff the offset into the out array the digest is to start at.
-     */
-    public void doFinal(byte[] out, int outOff)
-    {
-        // add padding
-        byte paddingByte = (byte)(M.length-mOff);
-        for (int i=mOff;i<M.length;i++)
-        {
-            M[i] = paddingByte;
-        }
-        //do final check sum
-        processCheckSum(M);
-        // do final block process
-        processBlock(M);
-
-        processBlock(C);
-
-        System.arraycopy(X,xOff,out,outOff,16);
-
-        reset();
-    }
-    /**
-     * reset the digest back to it's initial state.
-     */
-    public void reset()
-    {
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-        mOff = 0;
-        for (int i = 0; i != M.length; i++)
-        {
-            M[i] = 0;
-        }
-        //COff = 0;
-        for (int i = 0; i != C.length; i++)
-        {
-            C[i] = 0;
-        }
-    }
-    /**
-     * update the message digest with a single byte.
-     *
-     * @param in the input byte to be entered.
-     */
-    public void update(byte in)
-    {
-        M[mOff++] = in;
-
-        if (mOff == 16)
-        {
-            processCheckSum(M);
-            processBlock(M);
-            mOff = 0;
-        }
-    }
-
-    /**
-     * update the message digest with a block of bytes.
-     *
-     * @param in the byte array containing the data.
-     * @param inOff the offset into the byte array where the data starts.
-     * @param len the length of the data.
-     */
-    public void update(byte[] in, int inOff, int len)
-    {
-        //
-        // fill the current word
-        //
-        while ((mOff != 0) && (len > 0))
-        {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-
-        //
-        // process whole words.
-        //
-        while (len > 16)
-        {
-            System.arraycopy(in,inOff,M,0,16);
-            processCheckSum(M);
-            processBlock(M);
-            len -= 16;
-            inOff += 16;
-        }
-
-        //
-        // load in the remainder.
-        //
-        while (len > 0)
-        {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-    }
-    protected void processCheckSum(byte[] m)
-    {
-        int L = C[15];
-        for (int i=0;i<16;i++)
-        {
-            C[i] ^= S[(m[i] ^ L) & 0xff];
-            L = C[i];
-        }
-    }
-    protected void processBlock(byte[] m)
-    {
-        for (int i=0;i<16;i++)
-        {
-            X[i+16] = m[i];
-            X[i+32] = (byte)(m[i] ^ X[i]);
-        }
-        // encrypt block
-        int t = 0;
-
-        for (int j=0;j<18;j++)
-        {
-            for (int k=0;k<48;k++)
-            {
-                t = X[k] ^= S[t];
-                t = t & 0xff;
-            }
-            t = (t + j)%256;
-        }
-     }
-     // 256-byte random permutation constructed from the digits of PI
-    private static final byte[] S = {
-      (byte)41,(byte)46,(byte)67,(byte)201,(byte)162,(byte)216,(byte)124,
-      (byte)1,(byte)61,(byte)54,(byte)84,(byte)161,(byte)236,(byte)240,
-      (byte)6,(byte)19,(byte)98,(byte)167,(byte)5,(byte)243,(byte)192,
-      (byte)199,(byte)115,(byte)140,(byte)152,(byte)147,(byte)43,(byte)217,
-      (byte)188,(byte)76,(byte)130,(byte)202,(byte)30,(byte)155,(byte)87,
-      (byte)60,(byte)253,(byte)212,(byte)224,(byte)22,(byte)103,(byte)66,
-      (byte)111,(byte)24,(byte)138,(byte)23,(byte)229,(byte)18,(byte)190,
-      (byte)78,(byte)196,(byte)214,(byte)218,(byte)158,(byte)222,(byte)73,
-      (byte)160,(byte)251,(byte)245,(byte)142,(byte)187,(byte)47,(byte)238,
-      (byte)122,(byte)169,(byte)104,(byte)121,(byte)145,(byte)21,(byte)178,
-      (byte)7,(byte)63,(byte)148,(byte)194,(byte)16,(byte)137,(byte)11,
-      (byte)34,(byte)95,(byte)33,(byte)128,(byte)127,(byte)93,(byte)154,
-      (byte)90,(byte)144,(byte)50,(byte)39,(byte)53,(byte)62,(byte)204,
-      (byte)231,(byte)191,(byte)247,(byte)151,(byte)3,(byte)255,(byte)25,
-      (byte)48,(byte)179,(byte)72,(byte)165,(byte)181,(byte)209,(byte)215,
-      (byte)94,(byte)146,(byte)42,(byte)172,(byte)86,(byte)170,(byte)198,
-      (byte)79,(byte)184,(byte)56,(byte)210,(byte)150,(byte)164,(byte)125,
-      (byte)182,(byte)118,(byte)252,(byte)107,(byte)226,(byte)156,(byte)116,
-      (byte)4,(byte)241,(byte)69,(byte)157,(byte)112,(byte)89,(byte)100,
-      (byte)113,(byte)135,(byte)32,(byte)134,(byte)91,(byte)207,(byte)101,
-      (byte)230,(byte)45,(byte)168,(byte)2,(byte)27,(byte)96,(byte)37,
-      (byte)173,(byte)174,(byte)176,(byte)185,(byte)246,(byte)28,(byte)70,
-      (byte)97,(byte)105,(byte)52,(byte)64,(byte)126,(byte)15,(byte)85,
-      (byte)71,(byte)163,(byte)35,(byte)221,(byte)81,(byte)175,(byte)58,
-      (byte)195,(byte)92,(byte)249,(byte)206,(byte)186,(byte)197,(byte)234,
-      (byte)38,(byte)44,(byte)83,(byte)13,(byte)110,(byte)133,(byte)40,
-      (byte)132, 9,(byte)211,(byte)223,(byte)205,(byte)244,(byte)65,
-      (byte)129,(byte)77,(byte)82,(byte)106,(byte)220,(byte)55,(byte)200,
-      (byte)108,(byte)193,(byte)171,(byte)250,(byte)36,(byte)225,(byte)123,
-      (byte)8,(byte)12,(byte)189,(byte)177,(byte)74,(byte)120,(byte)136,
-      (byte)149,(byte)139,(byte)227,(byte)99,(byte)232,(byte)109,(byte)233,
-      (byte)203,(byte)213,(byte)254,(byte)59,(byte)0,(byte)29,(byte)57,
-      (byte)242,(byte)239,(byte)183,(byte)14,(byte)102,(byte)88,(byte)208,
-      (byte)228,(byte)166,(byte)119,(byte)114,(byte)248,(byte)235,(byte)117,
-      (byte)75,(byte)10,(byte)49,(byte)68,(byte)80,(byte)180,(byte)143,
-      (byte)237,(byte)31,(byte)26,(byte)219,(byte)153,(byte)141,(byte)51,
-      (byte)159,(byte)17,(byte)131,(byte)20
-    };
-
-
-    protected void processWord(byte[] in, int inOff) {}
-    protected void processLength(long bitLength) {}
-    protected void processBlock() {}
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/MD5.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/MD5.java
deleted file mode 100644 (file)
index 66f79b0..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/**
- * implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347.
- */
-public class MD5
-    extends Digest
-{
-    private static final int    DIGEST_LENGTH = 16;
-
-    private int     H1, H2, H3, H4;         // IV's
-
-    private int[]   X = new int[16];
-    private int     xOff;
-
-    /**
-     * Standard constructor
-     */
-    public MD5()
-    {
-        reset();
-    }
-
-    public int getDigestSize()
-    {
-        return DIGEST_LENGTH;
-    }
-
-    protected void processWord(
-        byte[]  in,
-        int     inOff)
-    {
-        X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8)
-            | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); 
-
-        if (xOff == 16)
-        {
-            processBlock();
-        }
-    }
-
-    protected void processLength(
-        long    bitLength)
-    {
-        if (xOff > 14)
-        {
-            processBlock();
-        }
-
-        X[14] = (int)(bitLength & 0xffffffff);
-        X[15] = (int)(bitLength >>> 32);
-    }
-
-    private void unpackWord(
-        int     word,
-        byte[]  out,
-        int     outOff)
-    {
-        out[outOff]     = (byte)word;
-        out[outOff + 1] = (byte)(word >>> 8);
-        out[outOff + 2] = (byte)(word >>> 16);
-        out[outOff + 3] = (byte)(word >>> 24);
-    }
-
-    public void doFinal(
-        byte[]  out,
-        int     outOff)
-    {
-        finish();
-
-        unpackWord(H1, out, outOff);
-        unpackWord(H2, out, outOff + 4);
-        unpackWord(H3, out, outOff + 8);
-        unpackWord(H4, out, outOff + 12);
-
-        reset();
-    }
-
-    /**
-     * reset the chaining variables to the IV values.
-     */
-    public void reset()
-    {
-        super.reset();
-
-        H1 = 0x67452301;
-        H2 = 0xefcdab89;
-        H3 = 0x98badcfe;
-        H4 = 0x10325476;
-
-        xOff = 0;
-
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-
-    /*
-     * rotate int x left n bits.
-     */
-    private int rotateLeft(
-        int x,
-        int n)
-    {
-        return (x << n) | (x >>> (32 - n));
-    }
-
-    /*
-     * F, G, H and I are the basic MD5 functions.
-     */
-    private int F(
-        int u,
-        int v,
-        int w)
-    {
-        return (u & v) | (~u & w);
-    }
-
-    private int G(
-        int u,
-        int v,
-        int w)
-    {
-        return (u & w) | (v & ~w);
-    }
-
-    private int H(
-        int u,
-        int v,
-        int w)
-    {
-        return u ^ v ^ w;
-    }
-
-    private int K(
-        int u,
-        int v,
-        int w)
-    {
-        return v ^ (u | ~w);
-    }
-
-    protected void processBlock()
-    {
-        int a = H1;
-        int b = H2;
-        int c = H3;
-        int d = H4;
-
-        //
-        // Round 1 - F cycle, 16 times.
-        //
-        a = rotateLeft((a + F(b, c, d) + X[ 0] + 0xd76aa478), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[ 1] + 0xe8c7b756), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[ 2] + 0x242070db), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[ 3] + 0xc1bdceee), 22) + c;
-        a = rotateLeft((a + F(b, c, d) + X[ 4] + 0xf57c0faf), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[ 5] + 0x4787c62a), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[ 6] + 0xa8304613), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[ 7] + 0xfd469501), 22) + c;
-        a = rotateLeft((a + F(b, c, d) + X[ 8] + 0x698098d8), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[ 9] + 0x8b44f7af), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[10] + 0xffff5bb1), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[11] + 0x895cd7be), 22) + c;
-        a = rotateLeft((a + F(b, c, d) + X[12] + 0x6b901122), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[13] + 0xfd987193), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[14] + 0xa679438e), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[15] + 0x49b40821), 22) + c;
-
-        //
-        // Round 2 - G cycle, 16 times.
-        //
-        a = rotateLeft((a + G(b, c, d) + X[ 1] + 0xf61e2562), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[ 6] + 0xc040b340), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[11] + 0x265e5a51), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[ 0] + 0xe9b6c7aa), 20) + c;
-        a = rotateLeft((a + G(b, c, d) + X[ 5] + 0xd62f105d), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[10] + 0x02441453), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[15] + 0xd8a1e681), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[ 4] + 0xe7d3fbc8), 20) + c;
-        a = rotateLeft((a + G(b, c, d) + X[ 9] + 0x21e1cde6), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[14] + 0xc33707d6), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[ 3] + 0xf4d50d87), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[ 8] + 0x455a14ed), 20) + c;
-        a = rotateLeft((a + G(b, c, d) + X[13] + 0xa9e3e905), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[ 2] + 0xfcefa3f8), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[ 7] + 0x676f02d9), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[12] + 0x8d2a4c8a), 20) + c;
-
-        //
-        // Round 3 - H cycle, 16 times.
-        //
-        a = rotateLeft((a + H(b, c, d) + X[ 5] + 0xfffa3942), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[ 8] + 0x8771f681), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[11] + 0x6d9d6122), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[14] + 0xfde5380c), 23) + c;
-        a = rotateLeft((a + H(b, c, d) + X[ 1] + 0xa4beea44), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[ 4] + 0x4bdecfa9), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[ 7] + 0xf6bb4b60), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[10] + 0xbebfbc70), 23) + c;
-        a = rotateLeft((a + H(b, c, d) + X[13] + 0x289b7ec6), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[ 0] + 0xeaa127fa), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[ 3] + 0xd4ef3085), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[ 6] + 0x04881d05), 23) + c;
-        a = rotateLeft((a + H(b, c, d) + X[ 9] + 0xd9d4d039), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[12] + 0xe6db99e5), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[15] + 0x1fa27cf8), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[ 2] + 0xc4ac5665), 23) + c;
-
-        //
-        // Round 4 - K cycle, 16 times.
-        //
-        a = rotateLeft((a + K(b, c, d) + X[ 0] + 0xf4292244), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[ 7] + 0x432aff97), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[14] + 0xab9423a7), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[ 5] + 0xfc93a039), 21) + c;
-        a = rotateLeft((a + K(b, c, d) + X[12] + 0x655b59c3), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[ 3] + 0x8f0ccc92), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[10] + 0xffeff47d), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[ 1] + 0x85845dd1), 21) + c;
-        a = rotateLeft((a + K(b, c, d) + X[ 8] + 0x6fa87e4f), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[15] + 0xfe2ce6e0), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[ 6] + 0xa3014314), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[13] + 0x4e0811a1), 21) + c;
-        a = rotateLeft((a + K(b, c, d) + X[ 4] + 0xf7537e82), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[11] + 0xbd3af235), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[ 2] + 0x2ad7d2bb), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[ 9] + 0xeb86d391), 21) + c;
-
-        H1 += a;
-        H2 += b;
-        H3 += c;
-        H4 += d;
-
-        //
-        // reset the offset and clean out the word buffer.
-        //
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/PKCS1.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/PKCS1.java
deleted file mode 100644 (file)
index 054f538..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.ibex.crypto;
-import java.security.SecureRandom;
-
-public class PKCS1 {
-    private final RSA rsa;
-    private final SecureRandom srand;
-    public PKCS1(RSA rsa) { this(rsa,new SecureRandom()); }
-    public PKCS1(RSA rsa,SecureRandom srand) { this.rsa = rsa; this.srand = srand; }
-    
-    public byte[] encode(byte[] in) {
-        int size = rsa.getInputBlockSize();
-        if(in.length > size -  11) throw new IllegalArgumentException("message too long");
-        byte[] buf = new byte[size];
-        byte[] rand = new byte[size - in.length - 2];
-        srand.nextBytes(rand);
-        for(int i=0;i<rand.length;i++) while(rand[i] == 0) rand[i] = (byte)srand.nextInt();
-        int p=0;
-        buf[p++] = 0x02;
-        System.arraycopy(rand,0,buf,p,rand.length);
-        p+=rand.length;
-        buf[p++]  = 0x0;
-        System.arraycopy(in,0,buf,p,in.length);
-
-        return rsa.process(buf);
-    }
-    
-    public byte[] decode(byte[] in) throws Exn {
-        byte[] buf = rsa.process(in);
-        if(buf.length < 10) throw new Exn("Data too short");
-        if(buf[0] != 2 && buf[0] != 1) throw new Exn("Data not in correct format " + (buf[0]&0xff));
-        int start = 9;
-        while(start < buf.length && buf[start] != 0) start++;
-        if(start == buf.length) throw new Exn("No null separator");
-        start++;
-        byte[] ret = new byte[buf.length - start];
-        System.arraycopy(buf,start,ret,0,ret.length);
-        return ret;
-    }
-    
-    public static class Exn extends Exception { public Exn(String s) { super(s); } }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/RC4.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/RC4.java
deleted file mode 100644 (file)
index be6f821..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.ibex.crypto;
-
-
-public class RC4 {
-    private final byte[] s = new byte[256];
-    private int x,y;
-    
-    public RC4(byte[] k) {
-        for(int i=0;i<256;i++) s[i] = (byte)i;
-        for(int i=0,j=0;i<256;i++) {
-            j = (j + (s[i]&0xff) + (k[i%k.length]&0xff))&0xff;
-            byte tmp = s[i];
-            s[i] = s[j];
-            s[j] = tmp;
-        }
-    }
-    
-    public void process(byte[] in, int ip, byte[] out, int op, int len) {
-        int x = this.x;
-        int y = this.y;
-        byte[] s = this.s;
-        for(int i=0;i<len;i++) {
-            x = (x + 1) & 0xff;
-            y = (y + (s[x]&0xff)) & 0xff;
-            byte tmp = s[x];
-            s[x] = s[y];
-            s[y] = tmp;
-            int t = ((s[x]&0xff) + (s[y]&0xff))&0xff;
-            int k = s[t];
-            out[op+i] = (byte)((in[ip+i]&0xff)^k);
-        }
-        this.x = x;
-        this.y = y;
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/RSA.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/RSA.java
deleted file mode 100644 (file)
index bc15cef..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.ibex.crypto;
-import java.math.BigInteger;
-import java.util.*;
-
-public class RSA {
-    private final BigInteger pq;
-    private final BigInteger e;
-    private final boolean reverse;
-    
-    public RSA(BigInteger pq, BigInteger e, boolean reverse) {
-        this.pq = pq;
-        this.e = e;
-        this.reverse = reverse;
-    }
-    
-    public int getInputBlockSize() { return (pq.bitLength()+7) / 8 - (reverse ? 0 : 1); }
-    public int getOutputBlockSize() { return (pq.bitLength()+7) / 8 - (reverse ? 1 : 0); }
-    
-    public byte[] process(byte[] in) {
-        // output block is the same size as the modulus (rounded up)
-        int outSize = getOutputBlockSize();
-        BigInteger t = new BigInteger(1,in);
-        BigInteger c = t.modPow(e,pq);
-        byte[] cbytes = c.toByteArray();
-        if(cbytes.length > outSize || (reverse && cbytes[0] == 0)) {
-            if(cbytes[0] != 0) throw new RuntimeException("should never happen");
-            byte[] buf = new byte[outSize];
-            System.arraycopy(cbytes,1,buf,0,outSize);
-            return buf;
-        } else if(!reverse && cbytes.length < outSize) {
-            // output needs to be exactly outSize in length
-            byte[] buf = new byte[outSize];
-            System.arraycopy(cbytes,0,buf,outSize-cbytes.length,cbytes.length);
-            return buf;
-        } else {
-            return cbytes;
-        }
-    }
-
-    public static class PublicKey {
-        public final BigInteger modulus;
-        public final BigInteger exponent;
-        
-        public PublicKey(Object o) {
-            Vector seq = (Vector) o;
-            modulus = (BigInteger) seq.elementAt(0);
-            exponent = (BigInteger) seq.elementAt(1);
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/SHA1.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/SHA1.java
deleted file mode 100644 (file)
index ab1af7e..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/**
- * implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349.
- *
- * It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5
- * is the "endienness" of the word processing!
- */
-public class SHA1
-    extends Digest
-{
-    private static final int    DIGEST_LENGTH = 20;
-
-    private int     H1, H2, H3, H4, H5;
-
-    private int[]   X = new int[80];
-    private int     xOff;
-
-    /**
-     * Standard constructor
-     */
-    public SHA1()
-    {
-        reset();
-    }
-
-    public int getDigestSize()
-    {
-        return DIGEST_LENGTH;
-    }
-
-    protected void processWord(
-        byte[]  in,
-        int     inOff)
-    {
-        X[xOff++] = ((in[inOff] & 0xff) << 24) | ((in[inOff + 1] & 0xff) << 16)
-                    | ((in[inOff + 2] & 0xff) << 8) | ((in[inOff + 3] & 0xff)); 
-
-        if (xOff == 16)
-        {
-            processBlock();
-        }
-    }
-
-    private void unpackWord(
-        int     word,
-        byte[]  out,
-        int     outOff)
-    {
-        out[outOff]     = (byte)(word >>> 24);
-        out[outOff + 1] = (byte)(word >>> 16);
-        out[outOff + 2] = (byte)(word >>> 8);
-        out[outOff + 3] = (byte)word;
-    }
-
-    protected void processLength(
-        long    bitLength)
-    {
-        if (xOff > 14)
-        {
-            processBlock();
-        }
-
-        X[14] = (int)(bitLength >>> 32);
-        X[15] = (int)(bitLength & 0xffffffff);
-    }
-
-    public void doFinal(
-        byte[]  out,
-        int     outOff)
-    {
-        finish();
-
-        unpackWord(H1, out, outOff);
-        unpackWord(H2, out, outOff + 4);
-        unpackWord(H3, out, outOff + 8);
-        unpackWord(H4, out, outOff + 12);
-        unpackWord(H5, out, outOff + 16);
-
-        reset();
-    }
-
-    /**
-     * reset the chaining variables
-     */
-    public void reset()
-    {
-        super.reset();
-
-        H1 = 0x67452301;
-        H2 = 0xefcdab89;
-        H3 = 0x98badcfe;
-        H4 = 0x10325476;
-        H5 = 0xc3d2e1f0;
-
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-
-    private int f(
-        int    u,
-        int    v,
-        int    w)
-    {
-        return ((u & v) | ((~u) & w));
-    }
-
-    private int h(
-        int    u,
-        int    v,
-        int    w)
-    {
-        return (u ^ v ^ w);
-    }
-
-    private int g(
-        int    u,
-        int    v,
-        int    w)
-    {
-        return ((u & v) | (u & w) | (v & w));
-    }
-
-    private int rotateLeft(
-        int    x,
-        int    n)
-    {
-        return (x << n) | (x >>> (32 - n));
-    }
-
-    protected void processBlock()
-    {
-        //
-        // expand 16 word block into 80 word block.
-        //
-        for (int i = 16; i <= 79; i++)
-        {
-            X[i] = rotateLeft((X[i - 3] ^ X[i - 8] ^ X[i - 14] ^ X[i - 16]), 1);
-        }
-
-        //
-        // set up working variables.
-        //
-        int     A = H1;
-        int     B = H2;
-        int     C = H3;
-        int     D = H4;
-        int     E = H5;
-
-        //
-        // round 1
-        //
-        for (int j = 0; j <= 19; j++)
-        {
-            int     t = rotateLeft(A, 5) + f(B, C, D) + E + X[j] + 0x5a827999;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        //
-        // round 2
-        //
-        for (int j = 20; j <= 39; j++)
-        {
-            int     t = rotateLeft(A, 5) + h(B, C, D) + E + X[j] + 0x6ed9eba1;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        //
-        // round 3
-        //
-        for (int j = 40; j <= 59; j++)
-        {
-            int     t = rotateLeft(A, 5) + g(B, C, D) + E + X[j] + 0x8f1bbcdc;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        //
-        // round 4
-        //
-        for (int j = 60; j <= 79; j++)
-        {
-            int     t = rotateLeft(A, 5) + h(B, C, D) + E + X[j] + 0xca62c1d6;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        H1 += A;
-        H2 += B;
-        H3 += C;
-        H4 += D;
-        H5 += E;
-
-        //
-        // reset the offset and clean out the word buffer.
-        //
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/X509.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/crypto/X509.java
deleted file mode 100644 (file)
index 09db7be..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * com.brian_web.x509.* - By Brian Alliet
- * Copyright (C) 2004 Brian Alliet
- * 
- * Based on Bouncy Castle by The Legion Of The Bouncy Castle
- * Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-import java.io.*;
-import java.util.*;
-
-public class X509 {
-    public static class Certificate {
-        public static final String RSA_ENCRYPTION           = "1.2.840.113549.1.1.1";
-        public static final String MD2_WITH_RSA_ENCRYPTION  = "1.2.840.113549.1.1.2";
-        public static final String MD4_WITH_RSA_ENCRYPTION  = "1.2.840.113549.1.1.3";
-        public static final String MD5_WITH_RSA_ENCRYPTION  = "1.2.840.113549.1.1.4";
-        public static final String SHA1_WITH_RSA_ENCRYPTION = "1.2.840.113549.1.1.5";
-    
-        public static final String BASIC_CONSTRAINTS = "2.5.29.19";
-    
-        private final byte[] certBytes;
-        private final byte[] tbsCertBytes;
-    
-        public final Number version;    
-        public final Number serialNo;
-        public final X509.Name issuer;
-        public final Date startDate;
-        public final Date endDate;
-        public final X509.Name subject;
-    
-        public final AlgorithmIdentifier publicKeyAlgorithm;
-        public final DER.BitString publicKey;
-    
-        public final Object issuerUniqueID;
-        public final Object subjectUniqueID;
-    
-        public final Vector extensions;
-    
-        public final DER.BitString signature;
-        public final AlgorithmIdentifier signatureAlgorithm;
-    
-        public final BC basicContraints;
-
-    
-        public Certificate(InputStream is) throws IOException {
-            int i;
-            RecordingInputStream certIS = new RecordingInputStream(is);
-            DER.InputStream certSequence = DER.InputStream.New(certIS).getSequenceStream();
-            RecordingInputStream tbsCertIS = new RecordingInputStream(certSequence);
-        
-            try {
-                Vector tbsSequence = (Vector) DER.InputStream.New(tbsCertIS).readObject();
-                tbsCertBytes = tbsCertIS.getBytes();
-                signatureAlgorithm = new AlgorithmIdentifier(certSequence.readObject());
-                signature = (DER.BitString) certSequence.readObject();
-            
-                i=0;
-                if(tbsSequence.elementAt(i) instanceof DER.TaggedObject)
-                    version = (Number)((DER.TaggedObject)tbsSequence.elementAt(i++)).object;
-                else
-                    version = new Integer(0);
-            
-                serialNo = (Number) tbsSequence.elementAt(i++);
-                AlgorithmIdentifier signatureAlgorithm2 = new AlgorithmIdentifier(tbsSequence.elementAt(i++));
-                if(!signatureAlgorithm2.equals(signatureAlgorithm))
-                    throw new DER.Exception("AlgoritmIdentifier mismatch " + signatureAlgorithm + " vs " + signatureAlgorithm2);
-                issuer = new X509.Name(tbsSequence.elementAt(i++));
-            
-                Vector validity = (Vector) tbsSequence.elementAt(i++);
-                startDate = (Date) validity.elementAt(0);
-                endDate = (Date) validity.elementAt(1);
-            
-                subject = new X509.Name(tbsSequence.elementAt(i++));
-            
-                Vector publicKeyInfo = (Vector) tbsSequence.elementAt(i++);
-                publicKeyAlgorithm = new AlgorithmIdentifier(publicKeyInfo.elementAt(0));
-                publicKey = (DER.BitString) publicKeyInfo.elementAt(1);
-          
-                Object issuerUniqueID_=null,subjectUniqueID_=null;
-                Vector extensions_=null;
-                for(;i < tbsSequence.size();i++) {
-                    DER.TaggedObject to = (DER.TaggedObject) tbsSequence.elementAt(i);
-                    switch(to.tag) {
-                        case 1: issuerUniqueID_ = to.object; break;
-                        case 2: subjectUniqueID_ = to.object; break;
-                        case 3: extensions_ = (Vector) to.object; break;
-                    }
-                }
-                issuerUniqueID = issuerUniqueID_;
-                subjectUniqueID = subjectUniqueID_;
-                extensions = extensions_;
-            
-                BC bc = null;
-            
-                if(extensions != null) {
-                    for(Enumeration e = extensions.elements(); e.hasMoreElements(); ) {
-                        Vector extension = (Vector) e.nextElement();
-                        String oid = (String) extension.elementAt(0);
-                        byte[] data = (byte[]) extension.elementAt(extension.size()-1);
-                        if(oid.equals(BASIC_CONSTRAINTS))
-                            bc = new BC(DER.InputStream.New(new ByteArrayInputStream(data)).readObject());
-                    }
-                }
-                basicContraints = bc;
-            } catch(RuntimeException e) {
-                e.printStackTrace();
-                throw new DER.Exception("Invalid x509 Certificate");
-            }
-            certBytes = certIS.getBytes();
-        }
-    
-    
-        public String getSubjectField(String fieldID) { return subject.get(fieldID); }
-        public String getCN() { return getSubjectField(X509.Name.CN); }
-    
-        public boolean isValid() {
-            Date now = new Date();
-            return !now.after(endDate) && !now.before(startDate);
-        }
-    
-        public RSA.PublicKey getRSAPublicKey() throws DER.Exception {
-            if(!RSA_ENCRYPTION.equals(publicKeyAlgorithm.id)) throw new DER.Exception("This isn't an RSA public key");
-            try {
-                return new RSA.PublicKey(DER.InputStream.New(new ByteArrayInputStream(publicKey.data)).readObject());
-            } catch(IOException e) {
-                throw new DER.Exception(e.getMessage());
-            } catch(RuntimeException e) {
-                throw new DER.Exception("Invalid RSA Public Key " + e.getMessage());
-            }
-        }
-    
-        public boolean isSignedBy(Certificate signer) throws DER.Exception {
-            return isSignedWith(signer.getRSAPublicKey());
-        }
-        public boolean isSignedWith(RSA.PublicKey rsapk) throws DER.Exception {
-            try {
-                Digest digest;
-                if(signatureAlgorithm.id.equals(MD5_WITH_RSA_ENCRYPTION)) digest = new MD5();
-                else if(signatureAlgorithm.id.equals(SHA1_WITH_RSA_ENCRYPTION)) digest = new SHA1();
-                else if(signatureAlgorithm.id.equals(MD2_WITH_RSA_ENCRYPTION)) digest = new MD2();
-                else throw new DER.Exception("Unknown signing algorithm: " + signatureAlgorithm.id);
-                        
-                PKCS1 pkcs1 = new PKCS1(new RSA(rsapk.modulus,rsapk.exponent,true));
-                byte[] d = pkcs1.decode(signature.data);
-            
-                Vector v = (Vector) DER.InputStream.New(new ByteArrayInputStream(d)).readObject();
-                byte[] signedDigest = (byte[]) v.elementAt(1);
-                            
-                if(signedDigest.length != digest.getDigestSize()) return false;
-            
-                digest.update(tbsCertBytes,0,tbsCertBytes.length);
-                byte[] ourDigest = new byte[digest.getDigestSize()];
-                digest.doFinal(ourDigest,0);
-            
-                for(int i=0;i<digest.getDigestSize();i++) if(ourDigest[i] != signedDigest[i]) return false;
-                return true;
-            }
-            catch(RuntimeException e) { e.printStackTrace(); return false; }
-            catch(PKCS1.Exn e) { e.printStackTrace(); return false; }
-            catch(IOException e) { e.printStackTrace(); return false; }
-        }
-    
-        public byte[] getMD5Fingerprint() { return getFingerprint(new MD5()); }
-        public byte[] getSHA1Fingerprint() { return getFingerprint(new SHA1()); }
-        public byte[] getFingerprint(Digest h) {
-            h.update(certBytes,0,certBytes.length);
-            byte[] digest = new byte[h.getDigestSize()];
-            h.doFinal(digest,0);
-            return digest;
-        }
-    
-        private class RecordingInputStream extends FilterInputStream {
-            public ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            private boolean on = true;
-            public void on() { on = true; }
-            public void off() { on = false; }
-            public RecordingInputStream(InputStream is) { super(is); }
-            public int read() throws IOException {
-                int n = super.read();
-                if(n != -1 && on) baos.write(n);
-                return n;
-            }
-            public int read(byte[] buf, int off, int len) throws IOException {
-                int n = super.read(buf,off,len);
-                if(n != -1 && on) baos.write(buf,off,n);
-                return n;
-            }
-            public byte[] getBytes() { return baos.toByteArray(); }
-        }
-    
-        public static class BC {
-            public final boolean isCA;
-            public final Number pathLenConstraint;
-            BC(Object o) {
-                Vector seq = (Vector) o;
-                isCA = seq.size() > 0 ? ((Boolean) seq.elementAt(0)).booleanValue() : false;
-                pathLenConstraint = seq.size() > 1 ? (Number) seq.elementAt(1) : null;
-            }
-        }
-    
-        public static class AlgorithmIdentifier {
-            public final String id;
-            public final Object parameters;
-        
-            AlgorithmIdentifier(Object o) {
-                Vector seq = (Vector) o;
-                id = (String) seq.elementAt(0);
-                parameters = seq.elementAt(1);
-            }
-            public boolean equals(Object o_) {
-                if(o_ == this) return true;
-                if(!(o_ instanceof AlgorithmIdentifier)) return false;
-                AlgorithmIdentifier o = (AlgorithmIdentifier) o_;
-                return o.id.equals(id) && o.parameters.equals(parameters);
-            }
-            public int hashCode() { return id.hashCode() ^ parameters.hashCode(); }
-        }
-    
-        /*public static void main(String[] args) throws Exception {
-          Certificate cert = new Certificate(new FileInputStream(args[0]));
-          System.err.println("CN: " + cert.getCN());
-          System.err.println("Subject: " + cert.subject);
-          System.err.println("Issuer: " + cert.issuer);
-          System.err.println("Start Date: " + cert.startDate);
-          System.err.println("End Date: " + cert.endDate);
-          System.err.println("SHA1 Fingerprint: " + prettyBytes(cert.getSHA1Fingerprint()));
-          RSA.PublicKey key = cert.getRSA.PublicKey();
-          System.err.println("Modulus: " + prettyBytes(key.modulus.toByteArray()));
-          System.err.println("Exponent: " + key.exponent);
-          System.err.println("Signature: " + prettyBytes(cert.signature.data));
-          }
-    
-          public static String prettyBytes(byte[] fp) {
-          StringBuffer sb = new StringBuffer(fp.length*3);
-          for(int i=0;i<fp.length;i++) {
-          if(i>0) sb.append(":");
-          sb.append("0123456789abcdef".charAt((fp[i] & 0xf0) >>> 4));
-          sb.append("0123456789abcdef".charAt((fp[i] & 0x0f) >>> 0));
-          }
-          return sb.toString();
-          }*/
-    }
-
-    public static class Name {
-        // Some common OIDs
-        public static final String C = "2.5.4.6";
-        public static final String O = "2.5.4.10";
-        public static final String T = "2.5.4.12";
-        public static final String SN = "2.5.4.5";
-        public static final String L = "2.5.4.7";
-        public static final String ST = "2.5.4.8";
-        public static final String OU = "2.5.4.11";
-        public static final String CN = "2.5.4.3";
-        public static final String E = "1.2.840.113549.1.9.1";
-    
-        private final Vector keys = new Vector();
-        private final Vector values = new Vector();
-    
-        public Name(Object seq_) throws DER.Exception {
-            try {
-                Vector seq = (Vector) seq_;
-                for(Enumeration e = seq.elements();e.hasMoreElements();) {
-                    Vector component = (Vector) ((Vector)e.nextElement()).elementAt(0);
-                    keys.addElement(component.elementAt(0));
-                    values.addElement(component.elementAt(1));
-                }
-            } catch(RuntimeException e) {
-                e.printStackTrace();
-                throw new DER.Exception("Invalid Name " + e.toString());
-            }
-        }
-    
-        public boolean equals(Object o_) {
-            if(o_ instanceof String) return toString().equals(o_);
-            if(!(o_ instanceof Name)) return false;
-            Name o = (Name) o_;
-            if(keys.size() != o.keys.size()) return false;
-            int size = keys.size();
-            for(int i=0;i<size;i++) {
-                String oid = (String) keys.elementAt(i);
-                String oid2 = (String) o.keys.elementAt(i);
-                if(!oid.equals(oid2)) return false;
-            
-                String val1 = (String) values.elementAt(i);
-                String val2 = (String) o.values.elementAt(i);
-                if(val1.equals(val2)) continue;
-            
-                val1 = val1.trim().toLowerCase();
-                val2 = val2.trim().toLowerCase();
-                if(val1.equals(val2)) continue;
-            
-                val1 = removeExtraSpaces(val1);
-                val2 = removeExtraSpaces(val2);
-                if(val1.equals(val2)) continue;
-            
-                return false;
-            }
-            return true;
-        }
-    
-        public int hashCode() { return keys.hashCode() ^ values.hashCode(); }
-    
-        public String get(String fieldID) {
-            int i = keys.indexOf(fieldID);
-            return i == -1 ? null : (String)values.elementAt(i);
-        }
-    
-        public String[] getOIDs() {
-            String[] ret = new String[keys.size()];
-            keys.copyInto(ret);
-            return ret;
-        }
-    
-        public String[] getValues() {
-            String[] ret = new String[values.size()];
-            values.copyInto(ret);
-            return ret;
-        }
-    
-        private static String removeExtraSpaces(String s) {
-            if(s.indexOf(' ') == -1) return s;
-            StringBuffer sb = new StringBuffer(s.length());
-            int l = s.length();
-            boolean inWhitespace = false;
-            for(int i=0;i<l;i++) {
-                if(s.charAt(i) == ' ') {
-                    if(inWhitespace) continue;
-                    inWhitespace = true;
-                } else if(inWhitespace) {
-                    inWhitespace = false;
-                }
-                sb.append(s.charAt(i));
-            }
-            return sb.toString();
-        }
-    
-        private final static Hashtable oidMap = new Hashtable();
-        static {
-            oidMap.put(Name.C,"C");
-            oidMap.put(Name.O,"O");
-            oidMap.put(Name.T,"T");
-            oidMap.put(Name.SN,"SN");
-            oidMap.put(Name.L,"L");
-            oidMap.put(Name.ST,"ST");
-            oidMap.put(Name.OU,"OU");
-            oidMap.put(Name.CN,"CN");
-            oidMap.put(Name.E,"E");
-        }
-    
-        public String toString() {
-            StringBuffer sb = new StringBuffer();
-            int size = keys.size();
-            for(int i=0;i<size;i++) {
-                if(sb.length() > 0) sb.append(",");
-                String fieldID = (String) keys.elementAt(i);
-                String fieldName = (String) oidMap.get(fieldID);
-                sb.append(fieldName != null ? fieldName : fieldID).append("=").append(values.elementAt(i));
-            }
-            return sb.toString();
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/SSL.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/SSL.java
deleted file mode 100644 (file)
index 04519cd..0000000
+++ /dev/null
@@ -1,1010 +0,0 @@
-/*
- * org.ibex.net.SSL - By Brian Alliet
- * Copyright (C) 2004 Brian Alliet
- * 
- * Based on TinySSL by Adam Megacz
- * Copyright (C) 2003 Adam Megacz <adam@xwt.org> all rights reserved.
- * 
- * You may modify, copy, and redistribute this code under the terms of
- * the GNU Lesser General Public License version 2.1, with the exception
- * of the portion of clause 6a after the semicolon (aka the "obnoxious
- * relink clause")
- */
-
-package org.ibex.net;
-
-import org.ibex.crypto.*;
-import java.security.SecureRandom;
-
-import java.net.Socket;
-import java.net.SocketException;
-
-import java.io.*;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Random;
-import java.util.Vector;
-
-// FEATURE: Server socket
-
-public class SSL extends Socket {
-    private String hostname;
-    
-    private int negotiated;
-    
-    private boolean tls = true;
-    private boolean sha;
-    
-    private final DataInputStream rawIS;
-    private final DataOutputStream rawOS;
-    
-    private final InputStream sslIS;
-    private final OutputStream sslOS;
-    
-    private byte[] sessionID;
-
-    private Digest clientWriteMACDigest;        
-    private Digest serverWriteMACDigest;        
-    private byte[] masterSecret;
-    
-    private RC4 writeRC4;
-    private RC4 readRC4;
-    
-    private long serverSequenceNumber;
-    private long clientSequenceNumber;
-    
-    private int warnings;
-    private boolean closed;
-    
-    // These are only used during negotiation
-    private byte[] serverRandom;
-    private byte[] clientRandom;
-    private byte[] preMasterSecret;
-    
-    // Buffers
-    private byte[] mac;
-    
-    private byte[] pending = new byte[16384];
-    private int pendingStart;
-    private int pendingLength;
-
-    private byte[] sendRecordBuf = new byte[16384];
-    
-    private int handshakeDataStart;
-    private int handshakeDataLength;
-    private byte[] readRecordBuf = new byte[16384+20];   // 20 == sizeof(sha1 hash)
-    private byte[] readRecordScratch = new byte[16384+20];
-    
-    private ByteArrayOutputStream handshakesBuffer;
-    
-    // End Buffers
-    
-    // Static variables
-    private final static byte[] pad1 = new byte[48];
-    private final static byte[] pad2 = new byte[48];
-    private final static byte[] pad1_sha = new byte[40];
-    private final static byte[] pad2_sha = new byte[40];
-    
-    static {
-        for(int i=0; i<pad1.length; i++) pad1[i] = (byte)0x36;
-        for(int i=0; i<pad2.length; i++) pad2[i] = (byte)0x5C;
-        for(int i=0; i<pad1_sha.length; i++) pad1_sha[i] = (byte)0x36;
-        for(int i=0; i<pad2_sha.length; i++) pad2_sha[i] = (byte)0x5C;
-    }
-    
-    private final static Hashtable caKeys = new Hashtable();
-    private static VerifyCallback verifyCallback;
-    
-    //
-    // Constructors
-    //
-    public SSL(String host) throws IOException { this(host,443); }
-    public SSL(String host, int port) throws IOException { this(host,port,true); }
-    public SSL(String host, int port, boolean negotiate) throws IOException { this(host,port,negotiate,null); }
-    public SSL(String host, int port, State state) throws IOException { this(host,port,true,state); }
-    public SSL(String host, int port, boolean negotiate, State state) throws IOException {
-        super(host,port);
-        hostname = host;
-        rawIS = new DataInputStream(new BufferedInputStream(super.getInputStream()));
-        rawOS = new DataOutputStream(new BufferedOutputStream(super.getOutputStream()));
-        sslIS = new SSLInputStream();
-        sslOS = new SSLOutputStream();
-        if(negotiate) negotiate(state);
-    }
-
-    public synchronized void setTLS(boolean b) { if(negotiated!=0) throw new IllegalStateException("already negotiated"); tls = b; }
-    
-    public void negotiate() throws IOException { negotiate(null); }
-    public synchronized void negotiate(State state) throws IOException {
-        if(negotiated != 0) throw new IllegalStateException("already negotiated");
-        
-        handshakesBuffer = new ByteArrayOutputStream();
-        
-        try {
-            sendClientHello(state != null ? state.sessionID : null);
-            flush();
-            debug("sent ClientHello (" + (tls?"TLSv1.0":"SSLv3.0")+")");
-            
-            receiveServerHello();
-            debug("got ServerHello (" + (tls?"TLSv1.0":"SSLv3.0")+")");
-            
-            boolean resume = 
-                state != null && sessionID.length == state.sessionID.length && 
-                eq(state.sessionID,0,sessionID,0,sessionID.length);
-            
-            if(resume) 
-                negotiateResume(state);
-            else
-                negotiateNew();
-            
-            // we're done with these now
-            clientRandom = serverRandom = preMasterSecret = null;
-            handshakesBuffer = null;
-            
-            log("Negotiation with " + hostname + " complete (" + (tls?"TLSv1.0":"SSLv3.0")+")");
-        } finally {
-            if((negotiated & 3) != 3) {
-                negotiated = 0;
-                try { super.close(); } catch(IOException e) { /* ignore */ }
-                closed = true;
-            }
-        }
-    }
-    
-    private void negotiateResume(State state) throws IOException {
-        masterSecret = state.masterSecret;
-        
-        initCrypto();
-        log("initializec crypto");
-        
-        receiveChangeCipherSpec();
-        debug("Received ChangeCipherSpec");
-        negotiated |= 2;
-        receieveFinished();
-        debug("Received Finished");
-        
-        sendChangeCipherSpec();
-        debug("Sent ChangeCipherSpec");
-        negotiated |= 1;
-        sendFinished();
-        debug("Sent Finished");
-    }
-    
-    private void negotiateNew() throws IOException {
-        X509.Certificate[] certs = receiveServerCertificates();
-        debug("got Certificate");
-        
-        boolean gotCertificateRequest = false;
-        OUTER: for(;;) {
-            byte[] buf = readHandshake();
-            switch(buf[0]) {
-            case 14: // ServerHelloDone
-                if(buf.length != 4) throw new Exn("ServerHelloDone contained trailing garbage");
-                debug("got ServerHelloDone");
-                break OUTER;
-            case 13: // CertificateRequest
-                debug("Got a CertificateRequest message but we don't suport client certificates");
-                gotCertificateRequest = true;
-                break;
-            default:
-                throw new Exn("unknown handshake type " + buf[0]);
-            }
-        }
-        
-        if(gotCertificateRequest)
-            sendHandshake((byte)11,new byte[3]); // send empty cert list
-        
-        try {
-            if(!hostname.equalsIgnoreCase(certs[0].getCN()))
-                throw new Exn("Certificate is for " + certs[0].getCN() + " not " + hostname);
-            verifyCerts(certs);
-        } catch(Exn e) {
-            if(verifyCallback == null) throw e;
-            synchronized(SSL.class) {
-                if(!verifyCallback.checkCerts(certs,hostname,e)) throw e;
-            }
-        }
-        
-        computeMasterSecret();
-        
-        sendClientKeyExchange(certs[0]);
-        debug("sent ClientKeyExchange");
-        
-        initCrypto();
-        
-        sendChangeCipherSpec();
-        debug("sent ChangeCipherSpec");
-        negotiated |= 1;
-        sendFinished();
-        debug("sent Finished");
-        flush();
-        
-        receiveChangeCipherSpec();
-        debug("got ChangeCipherSpec");
-        negotiated |= 2;
-        receieveFinished();
-        debug("got Finished");
-    }
-    
-    public State getSessionState() {
-        if((negotiated&3)!=3 || !closed || warnings != 0) return null;
-        return new State(sessionID,masterSecret);
-    }
-    public boolean isActive() { return !closed; }
-    public boolean isNegotiated() { return (negotiated&3) == 3; }
-    
-    private void sendClientHello(byte[] sessionID) throws IOException {
-        if(sessionID != null && sessionID.length > 256) throw new IllegalArgumentException("sessionID");
-        // 2 = version, 32 = randomvalue, 1 = sessionID size, 2 = cipher list size, 4 = the two ciphers,
-        // 2 = compression length/no compression
-        int p = 0;
-        byte[] buf = new byte[2+32+1+(sessionID == null ? 0 : sessionID.length)+2+2+4];
-        buf[p++] = 0x03; // major version
-        buf[p++] = tls ? (byte)0x01 : (byte)0x00;
-        
-        clientRandom = new byte[32];
-        int now = (int)(System.currentTimeMillis() / 1000L);
-        new Random().nextBytes(clientRandom);
-        clientRandom[0] = (byte)(now>>>24);
-        clientRandom[1] = (byte)(now>>>16);
-        clientRandom[2] = (byte)(now>>>8);
-        clientRandom[3] = (byte)(now>>>0);
-        System.arraycopy(clientRandom,0,buf,p,32);
-        p += 32;
-        
-        buf[p++] = sessionID != null ? (byte)sessionID.length : 0;
-        if(sessionID != null && sessionID.length != 0) System.arraycopy(sessionID,0,buf,p,sessionID.length);
-        p += sessionID != null ? sessionID.length : 0;
-        buf[p++] = 0x00; // 4 bytes of ciphers
-        buf[p++] = 0x04;
-        buf[p++] = 0x00; // SSL_RSA_WITH_RC4_128_SHA
-        buf[p++] = 0x05;
-        buf[p++] = 0x00; // SSL_RSA_WITH_RC4_128_MD5
-        buf[p++] = 0x04; 
-        
-        buf[p++] = 0x01;
-        buf[p++] = 0x00;
-                
-        sendHandshake((byte)1,buf);
-        flush();
-    }
-    
-    private void receiveServerHello() throws IOException {
-        // ServerHello
-        byte[] buf = readHandshake();
-        if(buf[0] != 2) throw new Exn("expected a ServerHello message");
-        
-        if(buf.length < 6 + 32 + 1) throw new Exn("ServerHello too small");
-        if(buf.length < 6 + 32 + 1 + buf[6+32] + 3) throw new Exn("ServerHello too small " + buf.length+" "+buf[6+32]); 
-        
-        if(buf[4] != 0x03 || !(buf[5]==0x00 || buf[5]==0x01)) throw new Exn("server wants to use version " + buf[4] + "." + buf[5]);
-        tls = buf[5] == 0x01;
-        int p = 6;
-        serverRandom = new byte[32];
-        System.arraycopy(buf,p,serverRandom,0,32);
-        p += 32;
-        sessionID = new byte[buf[p++]&0xff];
-        if(sessionID.length != 0) System.arraycopy(buf,p,sessionID,0,sessionID.length);
-        p += sessionID.length;
-        int cipher = ((buf[p]&0xff)<<8) | (buf[p+1]&0xff);
-        p += 2;
-        switch(cipher) {
-            case 0x0004: sha = false; debug("Using SSL_RSA_WITH_RC4_128_MD5"); break;
-            case 0x0005: sha = true;  debug("Using SSL_RSA_WITH_RC4_128_SHA"); break;
-            default: throw new Exn("Unsupported cipher " + cipher);
-        }
-        mac = new byte[sha ? 20 : 16];
-        if(buf[p++] != 0x0) throw new Exn("unsupported compression " + buf[p-1]);
-    }
-    
-    private X509.Certificate[] receiveServerCertificates() throws IOException {
-        byte[] buf = readHandshake();
-        if(buf[0] != 11) throw new Exn("expected a Certificate message");
-        if((((buf[4]&0xff)<<16)|((buf[5]&0xff)<<8)|((buf[6]&0xff)<<0)) != buf.length-7) throw new Exn("size mismatch in Certificate message");
-        int p = 7;
-        int count = 0;
-        
-        for(int i=p;i<buf.length-3;i+=((buf[p+0]&0xff)<<16)|((buf[p+1]&0xff)<<8)|((buf[p+2]&0xff)<<0)) count++;
-        if(count == 0) throw new Exn("server didn't provide any certificates");
-        X509.Certificate[] certs = new X509.Certificate[count];
-        count = 0;
-        while(p < buf.length) {
-            int len = ((buf[p+0]&0xff)<<16)|((buf[p+1]&0xff)<<8)|((buf[p+2]&0xff)<<0);
-            p += 3;
-            if(p + len > buf.length) throw new Exn("Certificate message cut short");
-            certs[count++] = new X509.Certificate(new ByteArrayInputStream(buf,p,len));
-            p += len;
-        }
-        return certs;
-    }
-    
-    private void sendClientKeyExchange(X509.Certificate serverCert) throws IOException {
-        byte[] encryptedPreMasterSecret;
-        RSA.PublicKey pks = serverCert.getRSAPublicKey();
-        PKCS1 pkcs1 = new PKCS1(new RSA(pks.modulus,pks.exponent,false),random);
-        encryptedPreMasterSecret = pkcs1.encode(preMasterSecret);
-        byte[] buf;
-        if(tls) {
-            buf = new byte[encryptedPreMasterSecret.length+2];
-            buf[0] = (byte) (encryptedPreMasterSecret.length>>>8);
-            buf[1] = (byte) (encryptedPreMasterSecret.length>>>0);
-            System.arraycopy(encryptedPreMasterSecret,0,buf,2,encryptedPreMasterSecret.length);
-        } else {
-            // ugh... netscape didn't send the length bytes and now every SSLv3 implementation
-            // must implement this bug
-            buf = encryptedPreMasterSecret;
-        }
-        sendHandshake((byte)16,buf);
-    }
-    
-    private void sendChangeCipherSpec() throws IOException {
-        sendRecord((byte)20,new byte[] { 0x01 });
-    }
-    
-    private void computeMasterSecret() {
-        preMasterSecret = new byte[48];
-        preMasterSecret[0] = 0x03; // version_high
-        preMasterSecret[1] = tls ? (byte) 0x01 : (byte) 0x00; // version_low
-        randomBytes(preMasterSecret,2,46);
-        
-        if(tls) {
-            masterSecret = tlsPRF(48,preMasterSecret,getBytes("master secret"),concat(clientRandom,serverRandom));
-        } else {
-            masterSecret = concat(new byte[][] {
-                    md5(new byte[][] { preMasterSecret,
-                            sha1(new byte[][] { new byte[] { 0x41 }, preMasterSecret, clientRandom, serverRandom })}),
-                            md5(new byte[][] { preMasterSecret,
-                                    sha1(new byte[][] { new byte[] { 0x42, 0x42 }, preMasterSecret, clientRandom, serverRandom })}),
-                                    md5(new byte[][] { preMasterSecret,
-                                            sha1(new byte[][] { new byte[] { 0x43, 0x43, 0x43 }, preMasterSecret, clientRandom, serverRandom })})
-            } );    
-        }
-    }
-    
-    public void initCrypto() {
-        byte[] keyMaterial;
-        
-        if(tls) {
-            keyMaterial = tlsPRF(
-                    (mac.length + 16 + 0)*2, // MAC len + key len + iv len
-                    masterSecret,
-                    getBytes("key expansion"),
-                    concat(serverRandom,clientRandom)
-            );
-        } else {
-            keyMaterial = new byte[] { };
-            for(int i=0; keyMaterial.length < 72; i++) {
-                byte[] crap = new byte[i + 1];
-                for(int j=0; j<crap.length; j++) crap[j] = (byte)(((byte)0x41) + ((byte)i));
-                keyMaterial = concat(new byte[][] { keyMaterial,
-                        md5(new byte[][] { masterSecret,
-                                sha1(new byte[][] { crap, masterSecret, serverRandom, clientRandom }) }) });
-            }            
-        }
-
-        byte[] clientWriteMACSecret = new byte[mac.length];
-        byte[] serverWriteMACSecret = new byte[mac.length];
-        byte[] clientWriteKey = new byte[16];
-        byte[] serverWriteKey = new byte[16];
-        
-        int p = 0;
-        System.arraycopy(keyMaterial, p, clientWriteMACSecret, 0, mac.length); p += mac.length;
-        System.arraycopy(keyMaterial, p, serverWriteMACSecret, 0, mac.length); p += mac.length;
-        System.arraycopy(keyMaterial, p, clientWriteKey, 0, 16); p += 16; 
-        System.arraycopy(keyMaterial, p, serverWriteKey, 0, 16); p += 16;
-        
-        Digest inner;
-        
-        writeRC4 = new RC4(clientWriteKey);
-        inner = sha ? (Digest)new SHA1() : (Digest)new MD5();
-        clientWriteMACDigest = tls ? (Digest) new HMAC(inner,clientWriteMACSecret) : (Digest)new SSLv3HMAC(inner,clientWriteMACSecret);
-        
-        readRC4 = new RC4(serverWriteKey);
-        inner = sha ? (Digest)new SHA1() : (Digest)new MD5();
-        serverWriteMACDigest = tls ? (Digest)new HMAC(inner,serverWriteMACSecret) : (Digest)new SSLv3HMAC(inner,serverWriteMACSecret);
-    }
-    
-    private void sendFinished() throws IOException {
-        byte[] handshakes = handshakesBuffer.toByteArray();
-        if(tls) {
-            sendHandshake((byte)20, tlsPRF(
-                    12,
-                    masterSecret,
-                    getBytes("client finished"),
-                    concat(md5(handshakes),sha1(handshakes))));
-            
-        } else {
-            sendHandshake((byte)20, concat(new byte[][] { 
-                    md5(new byte[][] { masterSecret, pad2, 
-                                       md5(new byte[][] { handshakes, new byte[] { (byte)0x43, (byte)0x4C, (byte)0x4E, (byte)0x54 },
-                                                          masterSecret, pad1 }) }),
-                    sha1(new byte[][] { masterSecret, pad2_sha,
-                                       sha1(new byte[][] { handshakes, new byte[] { (byte)0x43, (byte)0x4C, (byte)0x4E, (byte)0x54 },
-                                                          masterSecret, pad1_sha } ) })
-                }));
-        }
-    }
-        
-    private void receiveChangeCipherSpec() throws IOException {    
-        int size = readRecord((byte)20);
-        if(size == -1) throw new Exn("got eof when expecting a ChangeCipherSpec message");
-        if(size != 1 || readRecordBuf[0] != 0x01) throw new Exn("Invalid ChangeCipherSpec message");
-    }
-    
-    private void receieveFinished() throws IOException {
-        byte[] handshakes = handshakesBuffer.toByteArray();
-        byte[] buf = readHandshake();
-        if(buf[0] != 20) throw new Exn("expected a Finished message");
-        byte[] expected;
-        
-        if(tls) {
-            if(buf.length != 4 + 12) throw new Exn("Finished message too short");
-            expected = tlsPRF(
-                    12,masterSecret,
-                    getBytes("server finished"),
-                    concat(md5(handshakes),sha1(handshakes)));
-        } else {
-            if(buf.length != 4 + 16 +20) throw new Exn("Finished message too short");
-            expected = concat(new byte[][] {
-                    md5(new byte[][] { masterSecret, pad2,
-                            md5(new byte[][] { handshakes, new byte[] { (byte)0x53, (byte)0x52, (byte)0x56, (byte)0x52 },
-                                    masterSecret, pad1 }) }),
-                                    sha1(new byte[][] { masterSecret, pad2_sha,
-                                            sha1(new byte[][] { handshakes, new byte[] { (byte)0x53, (byte)0x52, (byte)0x56, (byte)0x52 },
-                                                    masterSecret, pad1_sha } ) } ) } );
-        }
-        if(!eq(expected,0,buf,4,expected.length)) throw new Exn("server finished message mismatch");
-    }
-    
-    private void flush() throws IOException { rawOS.flush(); }
-
-    private void sendHandshake(byte type, byte[] payload) throws IOException {
-        if(payload.length > (1<<24)) throw new IllegalArgumentException("payload.length");
-        byte[] buf = new byte[4+payload.length];
-        buf[0] = type;
-        buf[1] = (byte)(payload.length>>>16);
-        buf[2] = (byte)(payload.length>>>8);
-        buf[3] = (byte)(payload.length>>>0);
-        System.arraycopy(payload,0,buf,4,payload.length);
-        handshakesBuffer.write(buf);
-        sendRecord((byte)22,buf);
-    }
-    
-    private void sendRecord(byte proto, byte[] buf) throws IOException { sendRecord(proto,buf,0,buf.length); }
-    private void sendRecord(byte proto, byte[] payload, int off, int totalLen) throws IOException {
-        int macLength = (negotiated & 1) != 0 ? mac.length : 0;
-        while(totalLen > 0) {
-            int len = min(totalLen,16384-macLength);
-            rawOS.writeByte(proto);
-            rawOS.writeShort(tls ? 0x0301 : 0x0300);
-            if((negotiated & 1) != 0) {
-                computeMAC(proto,payload,off,len,clientWriteMACDigest,clientSequenceNumber);
-                // FEATURE: Encode in place
-                writeRC4.process(payload,off,sendRecordBuf,0,len);
-                writeRC4.process(mac,0,sendRecordBuf,len,macLength);
-                rawOS.writeShort(len + macLength);
-                rawOS.write(sendRecordBuf,0, len +macLength);
-                clientSequenceNumber++;
-            } else {
-                rawOS.writeShort(len);
-                rawOS.write(payload,off,len);
-            }
-            totalLen -= len;
-            off += len;
-        }
-    }
-    
-    private byte[] readHandshake() throws IOException {
-        if(handshakeDataLength == 0) {
-            handshakeDataStart = 0;
-            handshakeDataLength = readRecord((byte)22);
-            if(handshakeDataLength == -1) throw new Exn("got eof when expecting a handshake packet");
-        }
-        byte[] buf = readRecordBuf;
-        int len = ((buf[handshakeDataStart+1]&0xff)<<16)|((buf[handshakeDataStart+2]&0xff)<<8)|((buf[handshakeDataStart+3]&0xff)<<0);
-        // Handshake messages can theoretically span multiple records, but in practice this does not occur
-        if(len > handshakeDataLength) {
-            sendAlert(true,10); // 10 == unexpected message
-            throw new Exn("handshake message size too large " + len + " vs " + (handshakeDataLength-handshakeDataStart));
-        }
-        byte[] ret = new byte[4+len];
-        System.arraycopy(buf,handshakeDataStart,ret,0,ret.length);
-        handshakeDataLength -= ret.length;
-        handshakeDataStart += ret.length;
-        handshakesBuffer.write(ret);
-        return ret;
-    }
-    
-    private int readRecord(byte reqProto) throws IOException {
-        int macLength = (negotiated & 2) != 0 ? mac.length : 0;
-        for(;;) {
-            byte proto;
-            int version, len;
-            
-            try {
-                proto = rawIS.readByte();
-            } catch(EOFException e) {
-                // this may or may not be an error. it is up to the application protocol
-                closed = true;
-                super.close();
-                throw new PrematureCloseExn();
-            }
-            try {
-                version = rawIS.readShort();
-                if(version != 0x0300 && version != 0x0301) throw new Exn("invalid version ");
-                len = rawIS.readShort();
-                if(len <= 0 || len > 16384+((negotiated&2)!=0 ? macLength : 0)) throw new Exn("invalid length " + len);
-                rawIS.readFully((negotiated&2)!=0 ? readRecordScratch : readRecordBuf,0,len);
-            } catch(EOFException e) {
-                // an EOF here is always an error (we don't pass the EOF back on to the app
-                // because it isn't a "legitimate" eof)
-                throw new Exn("Hit EOF too early");
-            }
-            
-            if((negotiated & 2) != 0) {
-                if(len < macLength) throw new Exn("packet size < macLength");
-                // FEATURE: Decode in place
-                readRC4.process(readRecordScratch,0,readRecordBuf,0,len);
-                computeMAC(proto,readRecordBuf,0,len-macLength,serverWriteMACDigest,serverSequenceNumber);
-                for(int i=0;i<macLength;i++)
-                    if(mac[i] != readRecordBuf[len-macLength+i])
-                        throw new Exn("mac mismatch");
-                len -= macLength;
-                serverSequenceNumber++;
-            }
-            
-            if(proto == reqProto) return len;
-            
-            switch(proto) {
-                case 21: { // ALERT
-                    if(len != 2) throw new Exn("invalid lengh for alert");
-                    int level = readRecordBuf[0];
-                    int desc = readRecordBuf[1];
-                    if(level == 1) {
-                        if(desc == 0) { // CloseNotify
-                            debug("Server requested connection closure");
-                            try {
-                                sendCloseNotify();
-                            } catch(SocketException e) { /* incomplete close, thats ok */ }
-                            closed = true;
-                            super.close();
-                            return -1;
-                        } else {
-                            warnings++;
-                            log("SSL ALERT WARNING: desc: " + desc);
-                        }
-                    } else if(level == 2) {
-                        throw new Exn("SSL ALERT FATAL: desc: " +desc);
-                    } else {
-                        throw new Exn("invalid alert level");
-                    }
-                    break;
-                }
-                case 22: { // Handshake
-                    int type = readRecordBuf[0];
-                    int hslen = ((readRecordBuf[1]&0xff)<<16)|((readRecordBuf[2]&0xff)<<8)|((readRecordBuf[3]&0xff)<<0);
-                    if(hslen > len - 4) throw new Exn("Multiple sequential handshake messages received after negotiation");
-                    if(type == 0) { // HellloRequest
-                        if(tls) sendAlert(false,100); // politely refuse, 100 == NoRegnegotiation
-                    } else {
-                        throw new Exn("Unexpected Handshake type: " + type);
-                    }
-                }
-                default: throw new Exn("Unexpected protocol: " + proto);
-            }
-        }
-    }
-    
-    private static void longToBytes(long l, byte[] buf, int off) {
-        for(int i=0;i<8;i++) buf[off+i] = (byte)(l>>>(8*(7-i)));
-    }
-    private void computeMAC(byte proto, byte[] payload, int off, int len, Digest digest, long sequenceNumber) {
-        if(tls) {
-            longToBytes(sequenceNumber,mac,0);
-            mac[8] = proto;
-            mac[9] = 0x03; // version
-            mac[10] = 0x01;
-            mac[11] = (byte)(len>>>8);
-            mac[12] = (byte)(len>>>0);
-            
-            digest.update(mac,0,13);
-            digest.update(payload,off,len);
-            digest.doFinal(mac,0);
-        } else {
-            longToBytes(sequenceNumber, mac, 0);
-            mac[8] = proto;
-            mac[9] = (byte)(len>>>8);
-            mac[10] = (byte)(len>>>0);
-            
-            digest.update(mac, 0, 11);
-            digest.update(payload, off, len);
-            digest.doFinal(mac, 0);
-        }
-    }
-    
-    private void sendCloseNotify() throws IOException { sendRecord((byte)21, new byte[] { 0x01, 0x00 }); }
-    private void sendAlert(boolean fatal, int message) throws IOException {
-        byte[] buf = new byte[] { fatal ? (byte)2 :(byte)1, (byte)message };
-        sendRecord((byte)21,buf);
-        flush();
-    }
-    
-    //
-    // Hash functions
-    //
-    
-    // Shared digest objects
-    private MD5 masterMD5 = new MD5();
-    private SHA1 masterSHA1 = new SHA1();
-    
-    private byte[] md5(byte[] in) { return md5( new byte[][] { in }); }
-    private byte[] md5(byte[][] inputs) {
-        masterMD5.reset();
-        for(int i=0; i<inputs.length; i++) masterMD5.update(inputs[i], 0, inputs[i].length);
-        byte[] ret = new byte[masterMD5.getDigestSize()];
-        masterMD5.doFinal(ret, 0);
-        return ret;
-    }
-    
-    private byte[] sha1(byte[] in)  { return sha1(new byte[][] { in }); }
-    private byte[] sha1(byte[][] inputs) {
-        masterSHA1.reset();
-        for(int i=0; i<inputs.length; i++) masterSHA1.update(inputs[i], 0, inputs[i].length);
-        byte[] ret = new byte[masterSHA1.getDigestSize()];
-        masterSHA1.doFinal(ret, 0);
-        return ret;
-    }
-    
-    /*  RFC-2246
-     PRF(secret, label, seed) = P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);
-     L_S = length in bytes of secret;
-     L_S1 = L_S2 = ceil(L_S / 2);
-     
-     The secret is partitioned into two halves (with the possibility of
-     one shared byte) as described above, S1 taking the first L_S1 bytes
-     and S2 the last L_S2 bytes.
-     
-     P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +
-     HMAC_hash(secret, A(2) + seed) +
-     HMAC_hash(secret, A(3) + seed) + ...
-     
-     A(0) = seed
-     A(i) = HMAC_hash(secret, A(i-1))
-     */           
-    private byte[] tlsPRF(int size,byte[] secret, byte[] label, byte[] seed) {
-        if(size > 112) throw new IllegalArgumentException("size > 112");
-        seed = concat(label,seed);
-        
-        int half_length = (secret.length + 1) / 2;
-        byte[] s1 = new byte[half_length];
-        System.arraycopy(secret,0,s1,0,half_length);
-        byte[] s2 = new byte[half_length];
-        System.arraycopy(secret,secret.length - half_length, s2, 0, half_length);
-
-        Digest hmac_md5 = new HMAC(new MD5(),s1);
-        Digest hmac_sha = new HMAC(new SHA1(),s2);
-        
-        byte[] md5out = new byte[112];
-        byte[] shaout = new byte[120];
-        byte[] digest = new byte[20];
-        int n;
-        
-        n = 0;
-        hmac_md5.update(seed,0,seed.length);
-        hmac_md5.doFinal(digest,0);
-        
-        // digest == md5_a_1
-        while(n < size) {
-            hmac_md5.update(digest,0,16);
-            hmac_md5.update(seed,0,seed.length);
-            hmac_md5.doFinal(md5out,n);
-            hmac_md5.update(digest,0,16);
-            hmac_md5.doFinal(digest,0);
-            n += 16;
-        }
-        
-        n = 0;
-        hmac_sha.update(seed,0,seed.length);
-        hmac_sha.doFinal(digest,0);
-        
-        while(n < size) {
-            hmac_sha.update(digest,0,20);
-            hmac_sha.update(seed,0,seed.length);
-            hmac_sha.doFinal(shaout,n);
-            hmac_sha.update(digest,0,20);
-            hmac_sha.doFinal(digest,0);
-            n += 20;
-         }
-            
-        byte[] ret = new byte[size];
-        for(int i=0;i<size;i++) ret[i] = (byte)(md5out[i] ^ shaout[i]);
-        return ret;
-    }
-
-    public static class SSLv3HMAC extends Digest {
-        private final Digest h;
-        private final byte[] digest;
-        private final byte[] key;
-        private final int padSize;
-        
-        public int getDigestSize() { return h.getDigestSize(); }
-        
-        public SSLv3HMAC(Digest h, byte[] key) {
-            this.h = h;
-            this.key = key;
-            switch(h.getDigestSize()) {
-                case 16: padSize = 48; break;
-                case 20: padSize = 40; break;
-                default: throw new IllegalArgumentException("unsupported digest size");
-            }
-            digest = new byte[h.getDigestSize()];
-            reset();
-        }
-        public void reset() {
-            h.reset();
-            h.update(key,0,key.length);
-            h.update(pad1,0,padSize);
-        }
-        public void update(byte[] b, int off, int len) { h.update(b,off,len); }
-        public void doFinal(byte[] out, int off){
-            h.doFinal(digest,0);
-            h.update(key,0,key.length);
-            h.update(pad2,0,padSize);
-            h.update(digest,0,digest.length);
-            h.doFinal(out,off);
-            reset();
-        }
-        protected void processWord(byte[] in, int inOff) {}
-        protected void processLength(long bitLength) {}
-        protected void processBlock() {}
-    }
-    
-    //
-    // Static Methods
-    //
-    
-    private static SecureRandom random = new SecureRandom();
-    public static synchronized void randomBytes(byte[] buf, int off, int len) {
-        byte[] bytes =  new byte[len];
-        random.nextBytes(bytes);
-        System.arraycopy(bytes,0,buf,off,len);
-    }
-    
-    public static byte[] concat(byte[] a, byte[] b) { return concat(new byte[][] { a, b }); }
-    public static byte[] concat(byte[] a, byte[] b, byte[] c) { return concat(new byte[][] { a, b, c }); }
-    public static byte[] concat(byte[][] inputs) {
-        int total = 0;
-        for(int i=0; i<inputs.length; i++) total += inputs[i].length;
-        byte[] ret = new byte[total];
-        for(int i=0,pos=0; i<inputs.length;pos+=inputs[i].length,i++)
-            System.arraycopy(inputs[i], 0, ret, pos, inputs[i].length);
-        return ret;
-    }
-    
-    public static byte[] getBytes(String s) {
-        try {
-            return s.getBytes("US-ASCII");
-        } catch (UnsupportedEncodingException e) {
-            return null; // will never happen
-        }
-    }
-    
-    public static boolean eq(byte[] a, int aoff, byte[] b, int boff, int len){
-        for(int i=0;i<len;i++) if(a[aoff+i] != b[boff+i]) return false;
-        return true;
-    }
-    
-    //
-    // InputStream/OutputStream/Socket interfaces
-    //
-    public OutputStream getOutputStream() { return sslOS; }
-    public InputStream getInputStream() { return sslIS; }
-    public synchronized void close() throws IOException {
-        if(!closed) {
-            if(negotiated != 0) {
-                sendCloseNotify();
-                flush();
-                // don't bother sending a close_notify back to the server 
-                // this is an incomplete close which is allowed by the spec
-            }
-            super.close();
-            closed = true;
-        }
-    }
-    
-    private int read(byte[] buf, int off, int len) throws IOException {
-        if(pendingLength == 0) {
-            if(closed) return -1;
-            int readLen = readRecord((byte)23);
-            if(readLen == -1) return -1; // EOF
-            len = min(len,readLen);
-            System.arraycopy(readRecordBuf,0,buf,off,len);
-            if(readLen > len) System.arraycopy(readRecordBuf,len,pending,0,readLen-len);
-            pendingStart = 0;
-            pendingLength = readLen - len;
-            return len;
-        } else {
-            len = min(len,pendingLength);
-            System.arraycopy(pending,pendingStart,buf,off,len);
-            pendingLength -= len;
-            pendingStart += len;
-            return len;
-        }
-    }
-    
-    private void write(byte[] buf, int off, int len) throws IOException {
-        if(closed) throw new SocketException("Socket closed");
-        sendRecord((byte)23,buf,off,len);
-        flush();
-    }
-    
-    private class SSLInputStream extends InputStream {
-        public int available() throws IOException {
-            synchronized(SSL.this) {
-                return negotiated != 0 ? pendingLength : rawIS.available();
-            }
-        }
-        public int read() throws IOException {
-            synchronized(SSL.this) {
-                if(negotiated==0) return rawIS.read();
-                if(pendingLength > 0) {
-                    pendingLength--;
-                    return pending[pendingStart++];
-                } else {
-                    byte[] buf = new byte[1];
-                    int n = read(buf);
-                    return n == -1 ? -1 : buf[0]&0xff;
-                }
-            }
-        }
-        public int read(byte[] buf, int off, int len) throws IOException {
-            synchronized(SSL.this) {
-                return negotiated!=0 ? SSL.this.read(buf,off,len) : rawIS.read(buf,off,len);
-            }
-        }
-        public long skip(long n) throws IOException {
-            synchronized(SSL.this) {
-                if(negotiated==0) return rawIS.skip(n);
-                if(pendingLength > 0) {
-                    n = min((int)n,pendingLength);
-                    pendingLength -= n;
-                    pendingStart += n;
-                    return n;
-                }
-                return super.skip(n);
-            }
-        }
-    }
-    
-    private class SSLOutputStream extends OutputStream {
-        public void flush() throws IOException { rawOS.flush(); }
-        public void write(int b) throws IOException { write(new byte[] { (byte)b }); }
-        public void write(byte[] buf, int off, int len) throws IOException {
-            synchronized(SSL.this) {
-                if(negotiated!=0)
-                    SSL.this.write(buf,off,len);
-                else
-                    rawOS.write(buf,off,len);
-            }
-        }
-    }
-    
-    public static class Exn extends IOException { public Exn(String s) { super(s); } }
-    public static class PrematureCloseExn extends Exn {
-        public PrematureCloseExn() { super("Connection was closed by the remote WITHOUT a close_noify"); }
-    }
-    
-    public static boolean debugOn = false;
-    private static void debug(Object o) { if(debugOn) System.err.println("[BriSSL-Debug] " + o.toString()); }
-    private static void log(Object o) { System.err.println("[BriSSL] " + o.toString()); }
-            
-    private static void verifyCerts(X509.Certificate[] certs) throws DER.Exception, Exn {
-        try {
-            verifyCerts_(certs);
-        } catch(RuntimeException e) {
-            e.printStackTrace();
-            throw new Exn("Error while verifying certificates: " + e);
-        }
-    }
-    
-    private static void verifyCerts_(X509.Certificate[] certs) throws DER.Exception, Exn {
-        boolean ignoreLast = false;
-        for(int i=0;i<certs.length;i++) {
-            debug("Cert " + i + ": " + certs[i].subject + " ok");
-            if(!certs[i].isValid())
-                throw new Exn("Certificate " + i + " in certificate chain is not valid (" + certs[i].startDate + " - " + certs[i].endDate + ")");
-            if(i != 0) {
-                X509.Certificate.BC bc = certs[i].basicContraints;
-                if(bc == null) {
-                    if(i == certs.length - 1) {
-                        ignoreLast = true;
-                        break;
-                    }
-                    throw new Exn("CA-cert lacks Basic Constraints");
-                } else {
-                    if(!bc.isCA) throw new Exn("non-CA certificate used for signing");
-                    if(bc.pathLenConstraint != null && bc.pathLenConstraint.longValue() < i-1) throw new Exn("CA cert can't be used this deep");
-                }
-            }
-            if(i != certs.length - 1) {
-                if(!certs[i].issuer.equals(certs[i+1].subject))
-                    throw new Exn("Issuer for certificate " + i + " does not match next in chain");
-                if(!certs[i].isSignedBy(certs[i+1]))
-                    throw new Exn("Certificate " + i + " in chain is not signed by the next certificate");
-            }
-        }
-        
-        X509.Certificate cert = certs[ignoreLast ? certs.length - 2 : certs.length-1];
-        
-        RSA.PublicKey pks = (RSA.PublicKey) caKeys.get(cert.issuer);
-        if(pks == null) throw new Exn("Certificate is signed by an unknown CA (" + cert.issuer + ")");
-        if(!cert.isSignedWith(pks)) throw new Exn("Certificate is not signed by its CA");
-        log("" + cert.subject + " is signed by " + cert.issuer);
-    }
-    
-    public static void addCACert(byte[] b) throws IOException { addCACert(new ByteArrayInputStream(b)); }
-    public static void addCACert(InputStream is) throws IOException { addCACert(new X509.Certificate(is)); }
-    public static void addCACert(X509.Certificate cert) throws DER.Exception { addCAKey(cert.subject,cert.getRSAPublicKey()); }
-    public static void addCAKey(X509.Name subject, RSA.PublicKey pks)  {
-        synchronized(caKeys) {
-            if(caKeys.get(subject) != null)
-                throw new IllegalArgumentException(subject.toString() + " already exists!");
-            caKeys.put(subject,pks);
-        }
-    }
-    
-    static {
-        try {
-            // This will force a <clinit> which'll load the certs
-            Class.forName("org.ibex.net.ssl.RootCerts");
-            log("Loaded root keys from org.ibex.net.ssl.RootCerts");
-        } catch(ClassNotFoundException e) {
-            InputStream is = SSL.class.getClassLoader().getResourceAsStream("org.ibex/net/ssl/rootcerts.dat");
-            if(is != null) {
-                try {
-                    addCompactCAKeys(is);
-                    log("Loaded root certs from rootcerts.dat");
-                } catch(IOException e2) {
-                    log("Error loading certs from rootcerts.dat: " + e2.getMessage()); 
-                }
-            }
-        }
-    }
-        
-    public static int addCompactCAKeys(InputStream is) throws IOException {
-        synchronized(caKeys) {
-            try {
-                Vector seq = (Vector) new DER.InputStream(is).readObject();
-                for(Enumeration e = seq.elements(); e.hasMoreElements();) {
-                    Vector seq2 = (Vector) e.nextElement();
-                    X509.Name subject = new X509.Name(seq2.elementAt(0));
-                    RSA.PublicKey pks = new RSA.PublicKey(seq2.elementAt(1));
-                    addCAKey(subject,pks);
-                }
-                return seq.size();
-            } catch(RuntimeException e) {
-                e.printStackTrace();
-                throw new IOException("error while reading stream: " + e);
-            }
-        }
-    }
-    
-    public static synchronized void setVerifyCallback(VerifyCallback cb) { verifyCallback = cb; }
-    
-    // State Info
-    public static class State {
-        byte[] sessionID;
-        byte[] masterSecret;
-        State(byte[] sessionID, byte[] masterSecret) {
-            this.sessionID = sessionID;
-            this.masterSecret = masterSecret;
-        }
-    }
-    
-    public interface VerifyCallback {
-        public boolean checkCerts(X509.Certificate[] certs, String hostname, Exn exn);
-    }
-    
-    // Helper methods
-    private static final int min(int a, int b) { return a < b ? a : b; }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/GenCompactCAList.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/GenCompactCAList.java
deleted file mode 100644 (file)
index e15a194..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.ibex.net.ssl;
-
-import java.io.*;
-//import org.bouncycastle.asn1.*;
-//import org.bouncycastle.asn1.x509.*;
-
-public class GenCompactCAList {
-    /*
-    public static void main(String[] args) throws Exception {
-        if(args.length < 2) throw new Exception("Usage: GenCAList format file(s)");
-        String format = args[0];
-        DER.EncodableVector vec = new DEREncodableVector();
-        for(int i=1;i<args.length;i++) {
-            X509.CertificateStructure x509 = new X509.CertificateStructure((ASN1Sequence) new ASN1InputStream(new FileInputStream(args[i])).readObject());
-            X509.Name subject = x509.getSubject();
-            SubjectPublicKeyInfo pki = x509.getSubjectPublicKeyInfo();
-            RSA.PublicKeyStructure rsa = new RSA.PublicKeyStructure((ASN1Sequence) pki.getPublicKey());
-            DER.EncodableVector vec2 = new DEREncodableVector();
-            vec2.add(subject);
-            vec2.add(rsa);
-            vec.add(new DERSequence(vec2));
-        }
-        if(format.equals("binary")) {
-            DER.OutputStream dos = new DEROutputStream(System.out);
-            dos.writeObject(new DERSequence(vec));
-            dos.close();
-        } else if(format.equals("class")){
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DER.OutputStream dos = new DEROutputStream(baos);
-            dos.writeObject(new DERSequence(vec));
-            dos.close();
-            baos.close();            
-            byte[] buf = baos.toByteArray();
-            StringBuffer sb = new StringBuffer();
-            for(int i=0;i<buf.length;i+=7) {
-                long l = 0;
-                for(int j=0;j<7;j++) {
-                    l <<= 8;
-                    byte b = (i+j < buf.length) ? buf[i+j] : -1;
-                    l |= (b & 0xffL);
-                }
-                for(int j=0;j<8;j++) {
-                    char c = (char) ((l>>>(7*(7-j)))&0x7f);
-                    if(c=='\n') sb.append("\\n"); 
-                    else if(c=='\r') sb.append("\\r");
-                    else if(c=='\\') sb.append("\\\\");
-                    else if(c=='"') sb.append("\\\"");
-                    else if(c >= 32 && c <= 126) sb.append(c);
-                    else sb.append("\\" +  toOctal3(c));
-                }
-            }
-            System.out.println("package org.ibex.net.ssl;");
-            System.out.println("public final class RootCerts {");
-            System.out.println("    private final static String DATA = \"" + sb.toString() + "\";");
-            System.out.print(
-                    "    static {\n" +
-                    "        try {\n" + 
-                    "            org.ibex.net.SSL.addCompactCAKeys(new java.io.ByteArrayInputStream(unpack(DATA)));\n" + 
-                    "        } catch(Exception e) {\n" + 
-                    "            System.err.println(\"Error loading root CA keys: \" + e.getMessage());\n" + 
-                    "        }\n" +
-                    "    }\n");
-            System.out.println("    public static void load() {   }");  // force clinit
-            System.out.print(
-                    "    private static byte[] unpack(String s) {\n" + 
-                    "        int len = s.length();\n" + 
-                    "        if(len % 8 != 0) throw new IllegalArgumentException(\"not a multiple of 8\");\n" + 
-                    "        byte[] ret = new byte[(len / 8) * 7];\n" + 
-                    "        for(int i=0; i<len; i += 8) {\n" + 
-                    "            long l = 0;\n" + 
-                    "            for(int j=0;j<8;j++) {\n" + 
-                    "                l <<= 7;\n" + 
-                    "                l |= (s.charAt(i + j) & 0x7fL);\n" + 
-                    "            }\n" + 
-                    "            int base = (i / 8) * 7;\n" + 
-                    "            for(int j=6; j>=0; j--) {\n" + 
-                    "                ret[base + j] = (byte)(l & 0xff);\n" + 
-                    "                l >>>= 8;\n" + 
-                    "            }\n" + 
-                    "        }\n" + 
-                    "        return ret;\n" + 
-                    "    }");
-            System.out.println("}");
-        } else {
-            throw new Error("unknown format");
-        }
-    }
-    
-    private final static String toOctal3(int n) {
-        char[] buf = new char[3];
-        for(int i=2;i>=0;i--) {
-            buf[i] = (char) ('0' + (n & 7));
-            n >>= 3;
-        }
-        return new String(buf);
-    }
-    */
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/RootCerts.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/RootCerts.java
deleted file mode 100644 (file)
index 18438a0..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.ibex.net.ssl;
-public final class RootCerts {
-    private final static String DATA = "\030 Oi\031B\004\001M\014\020\030ID\0260\004A@5(\020\014\023\001\025*3\010,`\011\003\000jP  &\002\"\020f\021\031@\"\006\001U @8L\024W0\\m\006K9Nt7[F\0219@*\006\001U @PL\034A!\020%d*\r\036M\026\010\011\024r\014\\1\014L\002p0\r*\004\001Db\004\n\011\002.\"Piti\001$o7]\004\004\032\004b$\030\010@`I*\014HC=aP\010$\002\026\nX,Fk%\\@2\032,w\033%Nt9\035.7!9Fo6L\020 \010(\005\002\000@ \013\016L#`<U(08!\031K\002P@\016\0206\006F\036y\022;UX\rS\006V7Sv\007\034C3@1\"\r#_<f4\024,eA+\026)a\014`(\0034D$`\033\005 *J%C%\035V\032[~p6(t\021NIq>4\nHEq?\037L\014\027H{ajbF\036G^\013I0h_F\037\011@A&:@*zgGl\017=5x=q(\030:BLZ\016T[\032}4\"K{\003\031^\004\nh~yVzLF(,r\036\011\002 hJ\031\035:rYad\025\ngPV/\000s*_}Z}VBYv9\026\034G\013\007:')i^nsg-b\003TN\011!32\022*e6F1\033g\004UF;3K_K\026[\010>\005f\011W\014)&\nZ\002S\017\"e,m\037\014ogh\000B-Jt\024\026:2T>%%'o~x o\027W\011#i;H/\037y1P\011c\"gT\0241!\001\001\001\000`\020\000\004a\002\000_f\006yD\0260\004A@5(\020\014\023\001\024hS\010P`\022\003\000jP (&\013 Y\014E#Ijs:\010\010\024\021DL0\022\001@5(\020\026\023\016P,F\"Qdu9]\004\004+ahe9\033L\026a\001(T(\010\011f+Qno9\032f\022\021@@\006\001U @\030L2A2\031\nG\023Uft\020\021/\007#\025dn0[\004\004\032\004@R7[nC\004\010\002\n\001 @\020\010\002ow\r\014|o\020\000\010-\034x\011e_4?<6\003y[/hG6g7S1\011N/$\024S\017Y\034~zJ^$}P\030kG\017gy-U\002k-\027\024e\013(\005A\022zmKR_mc\025?\033N\005Qqz\"AV\\\nl?A\036?t\014Sg&+\021\020*:8ex=q\035M\020\007@u1C*/\005\021yt\036Bj(7\032yR:^\005YiN\031$qc3(\030\001,8N:8\003a@*G&Pi\023\006\022\nZ2`O\021jg$|\0231_g'|\026K>wW!5m4'\023\017-w\033(\025{I4q\004\rv7K\026HYP%\006\1778\000^\ra$N-V@prmE\025\004.\021:*>mvM6\023],fDhK>$W]!@\004_S\006ri5\026\0041\r^N3GUNUOW\032)kQVpQ-K6iPMq-Jp{}{}\025jO*4-\011` \030\004\000\001\030 @\027)AJ1\005L\001\0200\r*\004\003\004`%\032\024b\024\030\004@`\032T\010\n\011Bh\026#\021(r:\\nB\002\005\0041\016L\00300\r*\004\005DbD\013\021HT9\035.7!\001(T(\010\011f+Qno9\032f\022\011@>\006\001U @\030L0A2\031\nG\023Uft\020\020mF\013Mf \030H\0104\011\001$o7]\006\010\020\004\024\002A\000 \020\004Z-T\020R,\016\023/PA\003C\033l'\0038\023\021s8\023.\037wV'\004!&:{j\006-ZtPAm6)\013\016\\x=Hh\006bo\000Z(\ry\002eJ\"\nw\006\021\001^uSm\037xZV`E9n\031\032:\025\027\004\03704<`\004o)vF\035S\1771N+GJ{^lVbm5:\027%R:\036CF7IH~pA$S\026\0136\0320\004#n\023}\031\020W\014~\004]b-L\\R]\021yE;\021y`\001D.=1g_RK_5\026rb\0252H\037#+\031S^oK\036\026upa[\026\011\002-_,j54$\0310\005B.!\036]\004\022\033\024h+]^\013\032\036[Bv\034fTDL:\030tW[TIU\0173\033i\016\013I]\0101L:HpKw/DM\031\\1aWC\005xcG4*h\016.,|3d\\7Zp$\030l,5lI~cx\0119\025\0318??&@@0\010\000\0020A\000.C\003\020b\013\030\002 `\032T\010\006\011@J4)D(0\011\001@5(\020\024\023\005P,F\"Qdu9]\004\004\n\010b\035\030\006``\032T\010\013\011E\010\026#\021(r:\\nB\002Q(P\020\023LW#]^r5L$\003\000x\014\003*A\0001\030]\002d2\025\016'+Mh (\035,&c%F !P$\005\023=^t\030 @\020P\n\004\001\000@\035\021QB\037\003D\005\030\022\006`y\033GFo`\033RwZ4thj/b\035B\006\0042\005\r\024^f*\020\n^Vl>J+;Sr\033;h9eh7\026\177I}y.adf\014x9xq;\024h\017`CE\0223\002\020a\1776&9\036Xp\014\\\016\027|uc\002aAz\016=\007L!v\031\027@~_,'>M\010\036\023}GtZ\022g7\0346'\021{\003*QI\034`; \001ScyE\011nvG8\011g]fD2Bax\010|_cCgn\007\034\177J\031\024\\\026[\004\027fH0\006[\010Kzllj{#\177n\037>(&jtwVw\020\000F\036O\007k\0253y;+QH\010Y\027.8dR?\010lo\011\004\020@R-D=wFB\007vjR\022\r\001@9O@>,\017sgI\010y7 \016\\Q\013k2e\r\024\005k\001UZ.\027'h\020#(uL Y4Q\034X\020cS}\003\003z\002\001@ \000\011B\004\001;L\014s\010,`\011\003\000jP \030&\002)Q&\021!@$\006\001U @PL\026A2\031\nG\023Uft\020\020(#\010t`\033\003\000jP ,&\024 Y\014E#Ijs:\010\nE\"@@N2]\016v{IV1\021L\004\0200\r*\004\001Dc$\013\021HT9\035.7!\001\"u0[\r\0263%Jd\020\020h\022\002I^o:\014\020 \010(\005\002\000@ \016 z5~n\002+(=\022>G_\004+z|\020i[1\017\017\027E_R0Z{\001Aa+\010\026\177x\035G\017.\025u\010[]Tx6#R\011\006\005THT\003BR\010B<8EI\177\021\004S+L98/\0043n\026UMN\001,|+T7N`xR}Ad\023kF\177\rs\032\017\005\\Q}\025:Sk\035Br\004U?>l=Rc8\025(\0375GD3 7\\\004WqyRJ?Cd-G>Z\010\010fE\031O\006TD\"fB%qz:m)?\034z\001uP/x\022n\007`Lq-^\005$_\016[\035+Q0\006\0351>?`\177E\013\037d\022'YC_\011E OW\037hK\"\037@`t:o\011;\037>M\001mR\001B,!oC\021`UF_\000S8e\033\002-j]\020\017G\032t8 \031Ll[:IMT\027D$k![i7\014St4\016{\"6v*\000\177L\013mKK\0271i\001\000`\020\000\004a\002\000GF\010\014<b\013\030\002 `\032T\010\006\011@JU\031DN0\022A@5(\020\024\023\017\020-V+IRc0[D\004+a`r2\\n2\002\r^m8\030-gI0@I7\030ec\011\030`$\003\000jP ,&\035 [,W\023%Fa7\010\010WCAde9\\d\005#\025Fh7\033mF{\035Re9L%s\0014\014\003*A\0001\031\031\002m2\\M\026\033\005\\ \"^\016\007\023\025fs\020\020lW\023QRf4Xl\027#\024@A:]\r\006{IRt<L\020\030H\n\003\001\0002>$LJ\013J~E%\033(\032lDv?\021\n\037J\rN\177E\011r r%ya\010x\034r\017>]\0322\027\001'3**8$)\031.]-MJ<5\031\036AP\"n\023/Z\000)d*#zD_\004\024\000_\033\025\014\034x/r7-\031s^H\177Rd\037\\\022V\r\037 0\0017DbE\021L\003\002:&\017\\<f\007|[l\030=\011e[yZ\017\006\033\0313)dmln\010VdH\033\013\037\020\020\014\002\000\000L\020 \r\034a\001K\014!3\000$\014\003*A\000a\030\011*S\030If\002(\030\006U\002\002B1r\005Ze9\032,6\0138@E<\034\016&+Mf ![mW\003\005\\y\026\010\011\026s\014\\1\023\014\004@0\r*\004\005DcT\0135Jr4Xl\026q\001\nx8\034LW\033L@T2Xm\006s=Xo3Z,W\031Dl0\032\001@5(\020\006\023\026P-V+IRc0[D\004+a`r2\\n2\002\035Xo1\030-B\002\rJr:\032,fK\rBt2H\010\027+QPo9\032.GIB\004\001\005\000P \010\004\001p\022\011LbwoVJ9\\*8J\037\026&\036\024r)\"3\025BBm!_F\r/=\027JCvPbnWWC\000\0017jA6H)^qU\004\\f\0231m\n\034*&i3-(e14;\002u$\001@Q\013\005\011(# _\036RVs |\031q\0250Q47E\022I2e\027\036H\0350m\177\011\017kpz)t\033z\017J\023F\014iuW\002@2_?F\013>[\03393u\025vcgym\033R\021\007i\0315u\037D\ru$r/zb\034HS<kF\020'\00582\030f\n~\014*Z+.X\026 :9S*e^2\0020o;(=vw8<i\013Y)%\002g+e\026oD\"o6y@p\000\007_\032yIAZ3d&gW~\0251cVY\021ZZwd\005C=\034\006,-\030(ec\021\011Q9-~G{fY2Rh\033g7E\\*K7T@\026x+\017Xm<~(H\010}5P\020\014\002\000\000L\020 \013\\`g\030Bf\000H\030\006U\002\001B0\022%\n1\011\014\002\0000\r*\004\005\004a\024\023\005Xt4[-w\023\024b\023\030\004 `\032T\010\013\011BH7K\011Jr*\034NW\033Pb/\030\013 `\032T\010\003\011IH&\0131hi6[n&)\001\006y1\031.%#Ijs:\010\0106{\021J )Z,vs%\\g\020\024Mv{Pa\002\000B@(\020\004\002\000d\0343!@J\034zm~3/b\006_Xy=\001\030u4\177~3MgMV$LPXl'l_!\034s\000<V-gO\nF}B=qD[\035'p'\020Ei\000\034zP*Fh_hQ6<\013V>g!\017s\002<\022\002\035SU/rTw\000/]\016]\025a^\032=\023\014;\032mZ jI\003Wz$N^\r\010\024P+!wi8-v3BD\027\022@c\\3u\022\002\035:n\"G;\010ZNv=;gT\023CIlZ#]N/.@M!daU,\004\023WDz,\001UA\035\026\0079CZqjC=/L&Q,Hg\013O\024\021D;WN;\023oP\010FN4\002k\020I\026\003v~|A~h@\001\007\000Xl\036;j=4\013\036\n\035a\032-\020\011K6<vj$E\024\005F+R\033i\014q\023\177@b]kF\\,dm\002\".\034g@`fa8dk2l6>xJ`]6h\010\006\001\000\000&\010\017<`a\030Bf\000H\030\006U\002\001B0\022%\n1\011\014\002\0000\r*\004\005\004a\024\023\005Xt4[-w\023\024b\023\030\004 `\032T\010\013\011BH7K\011Jr*\034NW\033Pb)\030\011``\032T\010\003\011H\010&\0131hi6[n&)\001\006y1\031.%#Ijs:\010\011V{\011Rl2H\n&{=h0@b (\014\004\001#6l'\00553y5+\010;l\004A:&#`Xgl<? Bce{^SB\034\016|DAy\"`/\\i\024V}\010D 2?PD9q|+6\032-+FS\001\026G#\n n5^Aj/`Ju\036\002/\026f\011\r\026\006)#ZF+UjEItG\0206\011^\000Z\"P\027XmBh$c^\004)%q\030$\035q\011@^0=>\"\017^Kw4R]O-\n\001jZ\0274\"\030@@0\010\000\0020A\000-#\002hb\013\030\002 `\032T\010\006\011@I\024)D$0\010\001@5(\020\024\023\004PL\026cQRm7\\LS\010L`\021\003\000jP ,&\n!^,&+I(r:\\nC\011\010` \003\000jP \014&\031!\030-G#%Zo9\031$\004\033eDe9\025\016'+Mh )\033mw!B\004\001\005\000P \010\004\001#\002.d*\\`zWt\011N)UUsT\024x\\\036DV\0011X8k8q,S\03227t\025o6`\011\002[;2A;\034bQ\030_k$#4\022uN\0352\014w\000A\025@*'\\!oS\016#x{Uf\02155\002<w\037 \"@St9LS\n\032-rca:2C%((0e\016WVV%CbS)0rRg\\\017aM/_rR\011Kx!^U`px#x\001\026(\rKM8;\034QMtwk>\035KOEPD!\022\002=\026\003\005$W\027L\017uZL\005~-\033P:d\005T,F\023\006\037VJcp$\001Gjvd\006=<p^W/(\003W\027PCr\177~\025vZ7OIdlr:snu\0227gIH\013\027\023o\027\022#)Ocr$`B\\\003f%\033n\030uls[PcS..t1LwV@`cp<#.k\177r=\016.JPj:6!\\\023FG\020\020\014\002\000\000L\020 \rda\001T\014!3\000$\014\003*A\000a\030\011\006A\030Bf\000H\030\006U\002\002\0020\022=\0341\010\014\001`0\r*\004\003D`u#=do7\035\rs\010``\026\003\000jP (&\017!\030-fZ\025\\g4[LR\002%\\c\027\014%\023\001\034\014\003*A\0011\031\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\021\r\0273%fi7[F\021\031@\"\006\001U @\030L\024b0[M6+9Ni7\031&\022\001@<\006\004JPdD\033n\r\000B \0210EFa \030L\026s-Jn3Z-f)9Fo6L\020 \010(\005\002\000@ \r<\013PM \011:\177B\023\027bPuH,< .VmL\036u<\010B3^\034)U\0251EB\003yu\036_/ \023&#\nC{z<G\033f:ww*nP\030G\013\014\030(Ndo\033*I=%st}:\007^bvdReLm\036IMov95t\017Vhe\011D$B\011\025\017\0262\0275b\027,?53\r\023\024dL?p\016brlMIt+'\031q\031\023yj\016:\0353)M`/=,_\005#8V`C>O^#_3B\005\011zC+qW2\025\023\\*55.Ayu^\032xN\003\027-G6{ZO#$o\011UAF\007\017>J\037\")o\03038\016S\\CoD@D\\#\003m T\004\032\007s\013i+KGC\006W>\000e\013 `\rCE\031>rTJ\031Iq6\n\007pO(=\006\034-MH`.2V2W(yMa|%1m\021O \025cy{77869\025\001\000`\020\000\004a\002\000RF\010\rlb\013\030\002 `\032T\010\006\011@H$)D\"0\007A@5(\020\016\023\004\020N'+Mfe6\034f\021\031@\"\006\001U @PL\024B2[\n6K\035\\ '\025F\023A@l\006\001U @XL^B2[\n6K\035\\ 'XM&+\rh (\035,&c%fh4[Lr\002\rJr:\032,fK\rBt2H\010\027+QPo9\032.GIDJ0\021A@5(\020\006\023\016\020LVbMRg7\010\011v\023)Jc:\010\n\007+\011Xi9Z\r\026s\034@C L$3\001\004\014\011\025!I\0107\\\032\001\004@\"a#]Jb6X.7#\025d@1\031-G\033%Nn\027\030LS\004\006\022\002@` \014!8?6_{P$\006ws7\027\020:Yp\026bZh\011OF\022T\007\033~2l\035r/_~t&?h=f\021OH6ApIqm_\013evlY|JE~m\027E@\002}0--BH<?\\g2+#XD\016vgOY,\020\002`\021\000('p\014IGl*H\007\005_:)X\020{\010h5i`\022`D\025`,hYX\030~3?9\021)oPO$t5l!IPd>\013U\"D\004\003\000@\000\023\004\010\002B\030 63\010,`\011\003\000jP \030&\002!\021&\021\011@\036\006\001U @8L\020B9\035.7\033\025Xs\030Df\001\010\030\006U\002\002B0R\011Jl)Z,vq\001\034V\030M\006\003\020\030\006U\002\002b2Z\011Jl)Z,vq\001&e1].&)\001&e9\035LW\021\001\006e9\035\r\0263%Fa:\031$\004\013Uhh7\\M\027#db!\030\007``\032T\010\003\011F\010&+1&i3[D\005\033\025Fu9\031$\005\033\025dv2\\D\004\032\004b#\030\010 `I*\014HC=aP\010$\002\026\n\035lV\0235Bs:\031.$\003\011Jl9Z,vq9De\030 1\020\024\006\002\000k\000\"'DKp\004!\037y\0349\n\007|>\021n\003\001-\022\013\037\rH\011\001#4!9`j?\026\023\"\026 0\n?}:MF\022,dvm\026f=\034]kZ@\033mfto\0141\n8\014e8\002SY\037fD@E_i( :\032\026XuY@C\020$\014p\n\011<E\026\011\020\013~b\0241;-'BF\0311E9G\032X\026\000o \003\037xb\002##(2Cyw\022_Vn{|&RN` \030\004\000\001\030 @\033IB\003(\030Bf\000H\030\006U\002\001B0\022\r\0021\005L\001\0200\r*\004\004\004`$z8b\020\030\003@`\032T\010\007\011AjF{I^n:\033f\021A@,\006\001U @PL\036C2\\ND+9Ni7\031$\004K9F.\030J&\0028\030\006U\002\002b2\002\rJr:\032,fK\rBt4[mb\002\005jt4\033n&KQr \"\032.fKMRo7\014\"3\000D\014\003*A\0001\030)Fe9\035\014Vs\035Rn2L$\003\000x\014\011\025!I\0107\\\032\001\004@\"a\013\rB@1Y.'#\025\\g4[LRs\r^m\030 @\020P\n\004\001\000@\035Z&]\"\024PZ<Vo[_]\037]\006g*b7^\0320Lo\011Ig,Oi\r\001S\005O0.Zq~\003N$|G\010#\0317\025]\031?\035f%g$1a#zL\013D\021Zm\037\021$AxHHhhjQ:\030\021\007\020\035Fj[.6?\014gPu!i\010us\013\026%i]l#Fsd2Zc@ hw\021kD$pR\000-=3Hlj)\027\036L \032aL=\017)`\003\016HsNn\037S3.\000Sbx\001\010I2r1\004p\177C73(**mk3\0321\022*\001-G\021!,\\0FH\\P\013\002\n3\"?!_u\177s\037\014T O\030z\005\002\007\035`~('e\035o0rN`)\006b80bF\013\001Q\006*M!]\003\024UnP\r:d-_uymE=0R\005t\005u#1u8}YYB{q\010l5:u\021Yi%,{\023E\004sG\023s</\"\036\002\001@ \000\011B\003{\030\033&\020Y@\022\006\001U @0L\004D\"L#C\000h\014\003*A\001!\030M\010e:]\0166\033!J *\031-F+-^m\020\020(s\010t`\033\003\000jP ,&\024*\031-F*MJc\020\025\016'+Mh !Y-g#\025d1\020L\003p0\r*\004\001Dc\004#\025jt9Xm\006)\001(e6\031-6{4@R7[nB\002\r\0020@b (\014\004\001]\002K\037\020-Nr\022kZ.\037?),0\004\025bD\033nv\032N\033%u;\007/bzQ\r>qY\003\026{\031\031n\016\006e9R\005\000IBCPp|#FYSu\023A0G+\032vh\014\030J_5\\w2S>hF\001t\004El*Qy?_t$+t+}|\005.ik-\000=\005L\011W\0314!IJV\022\020\\\001\022g\021%_C\003P\000\r/\017qW=\024 \031\017\010\035\007\0309D@@0\010\000\0020@tF\0041D\0260\004A@5(\020\014\023\001\025*3\011\020`\"\003\000jP (&\033\"\032,vKQBl\020\024m\026;9Bt:\\LR\002Qdu9]\004\004\033<\\1\010L\001p0\r*\004\005Da\004\"M(C H\010S\011B\003\007\001 0\020\005\001Y\001TsfAq\023;~C\n\031Mt\014_y/5\010-\027!h`3\004s\0000rRQ\011\032-s\nVrI9\000\001\007vNJb\"\rdIL?3\003$#s\026lT';!NedJ:\0207`nk\007\177{C=|.l\034oM\017@Li^\037\034GPx>\000\0316\016%\010'8Z*TSy\022MvhT;p\011\030\000e\000U\016p\004\00412\003j\"hMhv\033-/+!5b\002\000@f\010\020\006t0@j&\020Y@\022\006\001U @0L\004u9L!S\000,\014\003*A\001\001\030\021*t0Z\006\0219@*\006\001U @8L\034S0[\016B\0021Bk2H\0106KQr1\022\014\004 0\r*\004\005\004c4#%Ni:\030-B\002MRg7\030.G+IJ *\034NW\033P@C7KF\021\011@\036\006\001U @XL\020D)U\0104\011\00101\030EF\001 \030\006U\002\000b0j\021&T\020\024Mv{Q\006A\020\026\006\023\011\004`\037\003\002%(2\"\rw\006@!\020\010X$c0P\014FK\035fi3]\016'+Mh.1[mS\004\010\002\n\001 @\020\010\003%F\023-\\z)w\003D45*\006zO\no$Da\033E<XHFE\r*\030]>Z|teg)?0(1422\177q\033TUa|PF\0363gI\017n[o,K4\np31Iw$DFunB\0034n\002GZ25\\+\010\031N}\026 wp,l\\l Y\024\017#\005\026\030\022Cr\025+ lja\002\017\031Ah\035]\036)JA\"hh\000e[\014\002}#l\024V\004&5\006J8#K\010,WBN\0265ET\013?-\004sr\023\004&)\017[\026\011\024VI\033\036k\\\011l,\037S\022zI\010}Q\033\036\005.\"KH^+yd?Bg2F\020CL<Hh5W8\003@\025v<pH\003Iu\0167\030\022|9\0212\020\032 k>\r\026Hi[\025fQca3FiKg'\033\037]\024e\001\0020+\010\014p\021l~Gg9\013Y2\002k4M*HCg\011XD IY8n^  \030\004\000\001\030 :#\002\030b\013\030\002 `\032T\010\006\011@JU\031DH0\021\001@5(\020\024\023\rQ\r\026;%ha6\010\n6K\035\\a:\035.&)\001(r:\\nB\002\r^.\030D&\000x\030\006U\002\002b0B\021&T!P$\004)Ha\001C@P\030\010\002\177\023GEr.yL&\030uD\017tpZ\177\177\003#e(-q=y\022)DHEX\0077`pkp\032o\"oW\037H.S\030G81`joY [a\034\"vNu \003ag\007\026hA(DFB~sz;BRG\n\017yms\027a(8}ir32\031<c-=}r$O\177$\nO^B4\007LclJ,0\\b\023\035m)]^#\011vaCdBVh\031\035sd+8\0066)\035\001\000 3\004\010\003:\030 5\023\010,`\011\003\000jP \030&\002:\\f\020i@\026\006\001U @@L\010U:\030-\003\010\\`\025\003\000jP \034&\016)X-G!\001\030a5Y$\004\033%hy\030I\006\002\020\030\006U\002\002B1Z\021Rg4]\014\026a\001&i3[L\027#Ude\020\025\016'+Mh ![ec\010D`\017\003\000jP ,&\010\"\024jD\032\004@X\031\014\"c\000P\014\003*A\0001\0305\010S*\010\n&{=hC H\013\003\021DB0\017AA\022T\031\021\006{C \020H\004,\0221X(\006#%Ns4YnG\023Uft\027\030mviB\004\001\005\000P \010\004\001\\:|\021L\003V-\032`\030Cr7_\011aM:\\\0053M7\031f@(J@\"mUSvC  `s\022%\036\0248\016\013jw=\024\026G\007~5+c1y&t\r\036BL>d`^k8mk*3\025*IOi\024\000r-g\026`\005M\003b_K-2r+<_#OrThw\003cq\004\014_|N~By6v\005cs\021/\\\002.\000D\017{%N\004\023{\021.$JFI\027Jb4w\034^p\001%=\031BuW(\n\013'2\024\005\\(d20`\011[<NOz.Lk+\033(-\033T kPTB\r3\\[j\034*\026{\007\017kn\024\026\025\031PP)9\031s\r\036)\005m'hc\020]-ey:lchK~Cmf\035w>?\027\001FM\026\0342A\024&hy\007d\nB^lW\010FBvUVnAnO\033CYJHm\002%\026#\014E9}Qnh,2\014DeB;0\020\014\002\000\000L\020 \np`L\030Bf\000H\030\006U\002\001B0\023\rB1\011\014\002\0000\r*\004\005\004a\024)5\006e9\035\r\0263db\022\030\004\000`\032T\010\013\011B)\024!\001\006e7\035\014W\021D*0\011A@5(\020\006\023\006\021%T\033\025dt4YO\022\002\r\0020A\000! \024\010\002\001\000.S:3F\000U:\022%\025+X7G\033%&\002aH\022Qw\014\024F[\"\016Gl\n\001!;}_(M\010\026jX\007%.P\021(c(\010\005|m8\004\007\020(f\rI\\\027\000$A\023y4\016\0270hE\\9.V\017,1\rMi]Ef\"7#X\0224!e\034egJOf\"\003>lUc!)HEnl\r9~\031\025iE\022Lqa\n[ \005*&\016$ey\002dEb3em\036[z\034\0260ta>56Z'\033\177!37\002mR\001K&\036F_dB~Mi@\035\\|3~O\034~o'G@\034\r$_j3pR6&T*Y\033_\007\"\033nG\006\nx\007M\033\023\001LKg=0L-\0212U\006\020X>:\026\035\023e?wCUT@MQ\023e1b=K=\032#AAB\014\017M\013T\177d)\\kXNc\\@'B2y<\025G\rjh\025h4\rW[*\032\013nB,\004\003\000@\000\023\004\010\002\\\030\023\006\020Y@\022\006\001U @0L\004c0L\"#\000@\014\003*A\001!\030%\n-!Y.'#%Ly\030DF\001\000\030\006U\002\002b0J%\010 !Y-g#\025d1\nL\00200\r*\004\001DaD)5\006e9\035\r\0263d@R L\020 \010(\005\002\000@ \reBn%}{AKVbFr\"\003e*\037\r\020\004h}\006\007 \030\020\016/Mxs5^\005\032\022RuFZ&2\000\rE~/\006|.\027t{$\006PQW}ds\001~01W\006r}4OVl\n*\0002\001^U)J@\0332^>+Ts\016n\031[4 r=CEPg\014]sa\032dv9#8O\024R`K=\0249\003KL\022\036\034\0160m\0318i\025\020&h:r!0;oK \003vRb\013a/8\021\035\004\027wc\nc\014\014 nvV\030\016\007C-?F\021\007?OWxVso!\002A,yO\025\031}pr7W!%\034\034~UYu/\0179^+\034&;M3'&\024\023ra\017\033:UD;3yVJGi7G[*?D\035o0\002\n<XA!3&E8bp#\"*uu\030T`8WF#E@eC1[\030%-0`5\014-gj>c\010Q?BDaj\031{\001\000`\020\000\004a\002\000Pf\010\rPb\024\030\004@`\032T\010\n\011BhVsQdu9]\005fs\025h1 \014\007`0\r*\004\005E\006w;]n.2[NG\023Uft\027\033LW!=\016C!P+t\032A& 4[L6{I`.\020\030O\022\003IJf\027\010\005\006c%Zi:\034d\006c%Bb\027\n&\022)@F\006\001U @XL8(1J$\003\021@`0\020\021-g#Ijs:\013Mf+P@L4[-\027#\025H1\031L\006\0200\r*\004\001De$+9hr:\\nBs9Jt\020\020mFK\025\\t\020\020lW\023QRf4Xl\027#%^n\020\020.W#!^r4]\017\023\004\006\022\002@` \011\033Ri6r1)=5\005P\17715=O:E/39\022S\017.B\023IVXyTiU\"jB5\025\\K!ro\\:b\035\\\036\\\\\022\024\"?\nPK\004WJ%9\177\016\001blr{\\2\025\0224D$\013`\014__j)i[_f\007<K\025\011<NIWtU\002A\\XKkU$\010Ug?cpz6fYfVm\022R%,o,o/dOdJYzc|J\000^y\r\017R\\\024\004\003\000@\000\023\004\010\002I\030 7#\010P`\022\003\000jP (&\013\"[NG\023Uft\027\033LW!D~0\036A@5(\020\026\024\033\035nw99Jn:\034NW\033P\\n2]\005u\032M\030_!T\n2\003%\\c7\\N\002q\001Dy\020\034LV18@(6\032-VKQf 6\032,\026\0218R1\022L\00400\r*\004\005DcBC\014R \031\014\006\003\001\001\nn:\034NW\033P\\n2]\004\004c%Zi:\031,C\011h`8\003\000jP \014&1\"[NG\023Uft\027\033LW!\001&e1].&)\001&e9\035LW\021\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\030 1\020\024\006\002\000cp+tsGcNx\030\020`~I0\177iLrrh^Du\030-2f!\030^haQ\025:CWL\0003M\nys\027\016\"M\\|m\036t\020\016\033U5\"*\032\002l^\177U\0173U.WF$\rDV\014}\013%Pa,HE-\032M\011d)N=+\0360v .\023rl|\034\001{N\033}\037\032\\@h\030\005Yjg\011Bs~B\\mH.@\006ms\030)Z7\035Cty^\031\002\011b  \030\004\000\001\030 @\034)B\0034\030E\006\001\020\030\006U\002\002B0Z\025\\t9\035.7!9\\e:\014(\003\001x\014\003*A\0011!]nw;KLVsQdu9]\005fs\025h/!T\n5yH`4\034\010\r\026s\r^r8\013D\006\023d@r2YEb\001!Xi6Z.G\031\001Xi0XEbIDJ0\021A@5(\020\026\023\016\n\0142I\000b9\034N$\004+9hr:\\nBs9Jt\020\023\r\026k%he2\014&3\001D\014\003*A\0001\031)\nn:\034NW\033P\\n2]\004\004\033\025dt4YM\026\033\005hi7[D\004\013Uhh7\\M\027#d@(\031\014\006CA$a\002\000B@(\020\004\002\000VS):HJ\r2u(d\0008T,d\025\ni=\r|\026J&c]X\003ZJg[^\010\014\003M\005H40\0335\031/:^\\\035S\003,N\026\032N_\0023P8>[[GY~)\020(\036X`5\030kvqL5R`?\010\010\031\\Ui(\002 \001~tJ(3PA&g\010\005}0w<u+Mr0om;)I+BE\020i*n.2(\033g\\EiL\014q\177\027[B'\002vDR#\037n\002Q=Dhlr~\032?<8F,\013A7R,dd\016f3n)bW^\032f*M:<k'\026,y$\007y\027i\n\013\026Q\021N\002LJXWvdd&\003\\I@\035k[?ww\020BUA\005\030\n?\027Z\"HiC8fSxz\014]=\036B[o<\001\016\nHJA8\002 &Io\001dK\"#?|\021z9lU\005A\007\023;vy\033\037C\014\010,&2\raVjp\000~\010\010\006\001\000\000&\010\020\005,0@r&\020Y@\022\006\001U @0L\004U)L\"C\000H\014\003*A\001!\030-\nn:\034NW\033P\\n2]\006\024AA\014\006\001U @XP~w;]ef+9hr:\\nBs9Jt\027PmFK\025\\t/Ph\025z%\\f7Kh5\002L@i7\030mw\023@\\ 1\036$\007\023\025L.\020\033\r\026k%hs\020\033\r\026\013\010\\1\022L\00400\r*\004\005DcBC\014R \030N'\023I\001\nn:\034NW\033P\\n2]\004\004c%Zi:\031,C\011L`1\003\000jP \014&*\"[NG\023Uft\027\033LW!\001\006l4Y-g!\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\030 0p\024\006\002\000d\016S\025qD/_V\011my\003oH\031\177Q43&\0137AT\023~\006G*\011}O]/\034~\006\024QJ+xu8\r\016dO+0!Zk4\177\033^\010{Y^0\022K3Xa\033w_R\006\014\n\032If<U|>v\0369C=\003Y.Go\016V\022;\035a7*SPY~\037L-j|F*n\0035\000tj,XV#F\000E\026h\034\020Iol9\004oC_F9@*'\031\036^{b` \010\014a\002\000T\006\010\016\014b\013\030\002 `\032T\010\006\011@JU\031D(0\011\001@5(\020\024\023\005Q-g#Ijs:\013Mf+Pb;\030\016 `\032T\010\013\011LNw;\\\\e7\035\016'+Mh.7\031.Bz\r S\020\032-f\033=dp\027\010\014'I\001de3\013D\002C1Rm4]\0162\0031Ra1\013E\023\011\024`#\003\000jP ,&\034\024\030e\022\001Dr9\034H\010VsQdu9]\005fs\025h &\032-VKQJd\030NF\003@\030\006U\002\000b3\n\025\\t9\035.7!9\\e:\010\n6+\rjr2H\n6+Ile9\010\0106+Ihi3\032,6\013QRo7\010\010\027+QPo9\032.GIB\003\007\001 0\020\0064Q\003\032\025\0038OL\037/\033d&\037}<b`dj\035\013\020AQmOyr37D\024d]Q~P \\~##S8R8f\002&\006\025\016 l [Y\017fB)}rfqi`\003\023z\035L{F\r%\r\025d\025_\0226SM2As\001=\026Z3?_\004Jl\n2\"3\023#dL\033\007 \004+j4MY?\016o\014!\177~n\011\025FrA^A\016-8\rD,\0310n*K7\031\006\002\000@f\010\016t`O\030Bf\000H\030\006U\002\001B0\022U&1\010\014\001`0\r*\004\005\004`t+Eji3\030/\003\0118`,\003\000jP ,&%\"\\.VK\031Bx\020\024\016&+5Ru6H\0106+Ihi3\032,6\013QJ  ].FC=di:\036&\010\014$\005\001@@\031j\010\032\034\006f\002\001<\014\032Q^\0205!PvD\033DOzM-MO\0042#P\rxT\"H\011^N\005Ao\033\027fR<fn^kW<~\031\0260?X[<U3SqJ!PJ~=4$+x\022\020zcv4JpF\006\034zB8]`\027MHG.e~do!\">ky\007IO3fF\023\024\030}l\0225@^),\014pCa=L#&+\022x.Wz-Ej5\177_\004\014\005X\010\006\001\000\000&\010\016p`N\030Bf\000H\030\006U\002\001B0\022U&1\010\014\001`0\r*\004\005\004`t+Eji3\030/\003\0114`+\003\000jP ,&$\"\\.VK\031Bx\020\024lV\033Ude\020\020lW\023QRf4Xl\027#\024@A:]\r\006{IRt<L\020\030H\n\003\001\0000+[\naN\0101;T\011Q4>\0106d\"FD`\024\036\1776@FxN\010b\020pz\027f:>\005p.\000\037\0028ilq\"RP#\022Yq5Tkp-O\026g@/h \024;}]\000B=N\010\000(O~>~\000fu\007:-J|\021|\001a\031\nUr17D\037\0275-x&A\0149L&V&\nbD<;WJzns\r\n{bv+u\006KFP\007NQ\016=|)}p1w\020\020\014\002\000\000L\020\036AA41\005L\001\0200\r*\004\003\004`%*Lb\034\030\006@`\032T\010\n\011DhW\013URf0^\004\005\033\025Fu9\031$\004K9F.\030K&\002X\030\006U\002\000b2\"\025bu4YL\027A\001&e1].&)\001\016l7XL\026a\001JB:\\m\026s\025fs\020\020h\022iDa\001D@P\030\010\002ug\013d\000&-DhU\036\0228%\016W?'hMq}\017\036\002s TL\011\\vB\027\023\036\025\\=GP&J\014V]qN\032:\027v~)Si4sL(kNOn\024s\rW\034|\035~\000lfj>M1/\001w|f5&\035\nbG\001\003zN\"Dt\022\036\033\021%RR\010pmp8Y\006=dEej\013\034\0064g\035\037hrn\\\024f!\016\017Ccs\001\\vN\031p\\.#\006a\001\000`\020\000\004a\001pL\n3\010,`\011\003\000jP \030&\002*Tf\021a@4\006\001U @PL&E8]-\0263\005p )Y,7+IJ $[L2qDL0\022\001@5(\020\006\023\016Q.\027+%La<\010\n6+\rjr2H\014T\023Ufi7\031.7\031\001\006A\026L&\010\014$\005\001@@\031bxfx\027[]{i\035%>Z\006Eis h\031\030z\010[\025NS\010h#<\026C.\026\n\003\0201Ut-\024BQ\"P=12`l27xJ\006\023\023s}(g\025\"&gi\035AJPpQ\007&\022\034\r\rHh\001\\ZP6(.phC\025|TIE*k\n\017\034\023hoS7p.\032uCWg/EpX\0350\014E$',_\"\035sS:V_\025\016\014 \025@${\177#t`\030\010\006\001\000\000&\010\016p`N\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ad+Eji3\030/\002\002MJc:\\LS\011\030`$\003\000jP ,&\035\"\\.VK\031Bx\020\024lV\033Ude\020\031('+MRn2\\n2\002\r\002-\031\014\020\030H\n\003\001\0009\007\023LL<R\003\006e\0037be#\024q=XuH#=\177:|{#S\005\017\177A<}Lt\r?\0112\007pwK-Q\022,B\035vEf\011E5\026\022d`\022\r\017\024\010k\024\016LEFXM\013\\\0246 8\014U$\0066M\026/q\016\0239|\011s[P$CH\0344\036\027\030+\n\000H\027eRwxZ_(nqf\007\031\0039js\027))uL+(I\024''\017<~\001UVoH7P\020\014\002\000\000L\020 \025da\001T\014!3\000$\014\003*A\000a\030\011\006A\030Bf\000H\030\006U\002\002\0020\022=\0341\010\014\001`0\r*\004\003D`u#=do7\035\rs\010``\026\003\000jP (&\017#\033n'\"\025\\g4[LR\002%\\c\027\014%\023\001\034\014\003*A\0011\031\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\021\r\0273%fi7[F\021\031@\"\006\001U @\030L\024f7\\NF+9Ni7\031&\022\001@<\006\004JPdD\033n\r\000B \0210EFa \031Mw\023QJn3Z-f)9Fo6L\020 \020(\005\002\001\000 \014U{\014nN\000xqk?8F\rhi\001aoRb@\022\014Pu\006l{]o`\033,\032BP\025\034yzW&W\024\022Rn>\021;Q\007&#-\035]VGY\024W-{\034y\020\016iN-8\021FY\022U#\0075Q\"M\034iI:\027\027s~ #k\016R\027/o\0215Ug.g@yq\021oitZi0r\0230oj\n8g5\032Wz;\021Q\007\\l.Rr@4\034|.)\014\027D=\024t\030\035AX%\033\016,\000\026$-\006\002\017\006hAW8\027hHy\004Z2 H\020\027;q\004<pN~|v\024\\\011\021sav\002g\03531O\026La],\007KW1\022b\016\017\007\033#D&FS;3l8\030\014;\022\006 \006R\0368mwy\004yva3,oAdG\007!W\\p\006=&\016\010YaH/G\011+K\n`WU\\WB\025[9869z0\007\003dQ\021\014,\001{\004=q\n\031\003lky\027\0307Of\013h\005\023J6\013^\000E\014T/\"({@\024pY\033\020>\035<+<n[\006d(~WC\027Z`\020\020)(\\\010\020\003z2L\032G_q\035G.G\031(%/V6&\003y\003z>\024EL\016E@\016=\001SK%\025dFP{(Z|(@Eh\027\0335L\010n&\031\023h&\022\017i\034C2V`\024]P~_=*09SUr\005\034(NtRY8zI\031)Np*`CF$z\020S[pqCA\036\016,K7\010\020\001PgEz\033\\J3\036*:\010\rvm-\022\037PoVjUb97\016Y\027\025:\035\017ydu\031n \037cU\033HQh\010\032 A\r\011'\011`c\034Xw?@63\031\036Gl9\024\0307}\\\0273\"dRq\031E\002\037yy65\022=5MZOm;\021/lLt\027wB\003DwP\007#\003\nAo\007K\035S>aiM\010\010\006\001\000\000&\010\020\004\0060:L!3\000$\014\003*A\000a\030\011*S\030F\006\0010\030\006U\002\002B0z\035(E\020\020mw\023A^r0]\r\026{8b'\030\011 `\032T\010\013\011GHu\"\024@C<XLW\022Qdu9]\004\005\033=Xu:\032-vsLX $[L2qDF0\020A@5(\020\006\023\r\021jD)\001\006y1\031.%#Ijs:\010\010vc=Da6\010\n&{=h0@b (\014\004\001\025\007h\026o\002B9h=1q\014nt.\016\027,\022M\000lz\016{%\030\010TS\016\006d$\022|EaH\032=\037MCbOB7\024\034l\007}J.S\003gj?K51\024i+qVl!O\000s;6).=d1e)#G\025i8\002sY\010.?fR,k\016AZd5\005*\022\000'\0364p~\001BUaUD\035\013xia5)\033$M\0058\022\020\003xH+G<m\003p)<vbL@@0\010\000\0020@wf\005\011D\0260\004A@5(\020\014\023\001\022J\003\010|`\035\003\000jP (&\026!^,&+I(r:\\nB\002)Bp0[EB\002%\\c\027\014$\023\000|\014\003*A\0001\030a\006y1\031.%#Ijs:\010\011$\nA\002N\020\024Mv{P@C L\020\030H\n\003\001\000-u_f)\016\020;\"?V=3Hs\003\037\020\024Xw-5>\003Hz\1772LT:j\030Ok\026_gd,6\026aPk\r{n,E9 \026!-7NOvqp.C\021B$c|\"\037n$wU}yM\030C.\026~c5\023SH6<\027H\001,h]+-Ay0v\037dK\021D\035@\010Bu .:68fu\"C1$+H_*+U<@>\r\007b:NA{as!\004g.]p\020\014\002\000\000L\020\036AA41\005L\001\0200\r*\004\003\004`$R@b\037\030\007 `\032T\010\n\011EH7K\011Jr*\034NW\033P@J0\\\014\026q0@I7\030ec\011(`(\003\000jP \014&!!^,&+I(r:\\nB\002)\002P SD\005\033\025Fu9\031$\005\033\025dv2\\D\004\032\004a\001D@P\030\010\002X&Qh7\006{+\000,\011>;3\010\026%g~~ZH\rRqU\02552\017WA\006e~\004B\\W3790wF6\031]\037/\000\017\017y\021\\6\0309y3sd#b\032\011Q\037gOK\006&JCa?\004x(\007\020[\n|\022w\007b(l\031XZ\177\032_C\016\037\007L\\slt/j\"uE=*TkQNo;/H[KF\030]Ps\022\035_\020\0228\0344\001\"\013i\027\031\002mI\001\000`\020\000\004a\002\000`\006\007\001D\0260\004A@5(\020\014\023\001\025*3\010``\026\003\000jP (&\017#U\010R\002\r^r8\033n&\013QRo7\014$s\001\024\014\003*A\0011\030y\016T\"H\0107K\011Jr*\034NW\033P@S7[\016W#%^n9K\004\004K9F.\030GF\001`\030\006U\002\000b1*\035(E\020\020o\026\023\025dT9\035.7!\001$o7]\004\003)B\004\001\005\000P \010\004\001<\011\033GxSqu\027\000{\003kYe4\002z\036\010J\022 7\016=R*'UavGYkrI[>w\026}\nm&*rp\034J\034wk|$\024\"@;J\177d0\013;8'rsH\0235#CW\025\016.*_@\031fZS:q\027,r \032\n1\rA{~\\Ei$w\017Na\001\006.{a@]vk0pz\025J\036\036&A)Uy:\035L{\034\177\026G\014z\013v5YZR,\177b\037\014\013|\026T\025\032G(\rPFyl*\010%\002i\016C(x3e\\nwx~\007W\\\026(\035-K\003m\032%7!<1f\006\014<$\033$-Bsr9\025-[~4\016?=sN{\006|9\010gW*>\014e}\003\037s\016yQ\026\036q\003\031[mdpg\001E\034\005@\034m\013U95$-\010\011T\023\033\025u+_\nL\017nG\0261{8\037MK(\037y|#-z\016i^,~\031?D\020\020\014\002\000\000L\020\035\031A\n1\005L\001\0200\r*\004\003\004`%*Lb\030\030\005@`\032T\010\n\011Chu\"\024@C7\\N\006{IBt4[mc\010p`\032\003\000jP \014&\023#U\010R\002\rrb2\\JG\023Uft\020\024Mv{Pa\001D@P\030\010\002qf'n[9Cqb|WQ\026}\030=\rY292<\n\n\035G]\0221S)5ugEo<P)E3FXKa gn?'\037hA\0264\021,\036\033J#8?%|\014e&Sz+\177j\025J(zZ\022\032\005X4\023\032\0238T\014hWo?\013\005O`)ze+ HYBw\005\010D]\"=\013*co<Y6\177sTT#H,a\023\000\036HIi++4\r\0001N8J\022xp\003\001\000`\020\000\004a\002\000[f\005yD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021!@$\006\001U @XL\026P0\\NFs\025ds\020\020h\023\010|`\035\003\000jP \014&\026#[\rv\023\005XS4Ymb\002ABr:\033LW\023L@C L\020 \010(\005\002\000@ \r\0213p2V\022B'Q_\020)Hi5hc8<\016`\r\0068G\024fq\013\007\017\010##\006\030\032\024\005a1zc\024A\023v\031T|\001xc\004&\\3%w\030\001+ \0004!Yg&\014e\000\004 NF\017av7\013UG<\031.q\rs\0300\016(\001R;'Zx\024\033L\007R\026|{\177:_[\020Pk\013\037Y\177\032\neL\020zDt`\036@\0019g%\002gTklM\"[X@h^i\r]IEgszl\004K\005mQ\002\000F$\000VnxrvSFEW=1\025Sr\033$Va,C\026\000O\014c<Q(\004J\014$+\0261W#\"E\003!,scjA\003\0067H\ro7w\035S\014xf,d?[\032/\033#rGU%,7\006\013oAw#\022rnM@\014!\026\ny\013;f)L\nBP\023\025#\013Z}}_`/\017KD8F/\013\"Y)4`YG\023\010\035\013\nV=\001\000`\020\000\004a\002\000_&\006iD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021Y@2\006\001U @XL$P9\032-V\013Ir ![\014\027\033L@1\020\020h\023\011\030`$\003\000jP \014&\035#[\rv\023\005XS4Ymb\002Adi6X.'I\001\006l0\\n2\001D@C L\020 \010(\005\002\000@ \013i\000jGhJ\032`E\014$9\021Qa[k@BR\007\025f\031-\030hW5{\017d\033g\006\006)\022\031[eVC\031^v\003s\025s\037W7\034MRs\\E\020A\023I8|h\030\001!&[\027\002fm\035\017yL=\0102Z\035'>\020X\017f]oOiJ&\n\021r\032:Q<\006\nY\nm!#\007W\026.M$\011-s/.YAP0\024\0268u\032MlZ=\002,k~QNwl|\030)C|rb9\\w=N<X uJ\030\034 \017F[\032)s6{\"\013$\017w]4|Bt2\033dp1y\027}\007)S;}\021\020WF$\035hH`\026\002@F\027f?y&`D\011w*\033LhK-\025VMsL\013mL%K^b+N@~\022a\026\027/!c\030Sp]\013jVY3J\1778@?W*Ao&_k\004Ol3\003H%?]SB\006;\177FV\011\\Im#h\023E9\021)\001\000`\020\000\004a\002\000_&\006iD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021Y@2\006\001U @XL$P9\032-V\013Ir ![\014\027\033L@2\020\020h\023\011\030`$\003\000jP \014&\035#[\rv\023\005XS4Ymb\002Adi6X.'I\001\006l0\\n2\001H@C L\020 \010(\005\002\000@ \011\0243}oz\0211a:\005]|l/d\026},\r\035)0%@\004t\177\016Bn\017tT>{ 1JY$I\036\\ZA=\016N\022V%\177a45'M\nmzjg0 \"?\r2c\027L:9juXw:q&|~m;\024\0208\002\027m\034H\r\001R-=\177/O\\v7SB<v\r\"\033JT\017{x\011mv\027\177\0348Cqt\004V_0NKSc\023\0222\025@\005\177w\007!L%!VO:Z\nnFpP\022(=u\002$t\\$\034~a\020.{K#2\022$\035\003!|q\030$6\026\007\000st(>\017$l`\000k>\0367$v9\025b]\rC[>\024l\025Jg\014D\027)?D]=(\000-{B:,o0J8fq^&Tj\014p\037#R(t}pl\005Yfs[95kp~|f;\011x\031\034K\1778\024\036h\032ek\004\003\031K\002fz\023\r\000)I\037M\025\006w\001\000`\020\000\004a\002\000_&\006iD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021Y@2\006\001U @XL$P9\032-V\013Ir ![\014\027\033L@3\020\020h\023\011\030`$\003\000jP \014&\035#[\rv\023\005XS4Ymb\002Adi6X.'I\001\006l0\\n2\001L@C L\020 \010(\005\002\000@ \011\ny,ek0\030\000$r~Gb\027\0177QD\003y,%S\036\030r\010/n\025QzoU3\001jPlejj'\014:rU\0368G\002Q\010\005\014\014I3({WqNx5-t'W\033r[H/\0256#>oaWP\032\0246tY\024uJ]p*=KD\0020lH::\nHc\025L\020So%;9\002\032\005$k/\007nHH#(8~\013#f6\001\034\177us^L[npR1Xi<xj Q%y_\014{a\0119\022\027,{\037 \037\017\022(\013>\024.\0147\034\017\0242\031}Cv \177\"\002)I'\023h={\035,o^@j\007deO$\\O\022\026`\011]\004k?\010o>1^\030\037\005~\016x-H\026+yUH7E\021*!p9\022;afD\"xPWmk\1773p~c0-\021\026;LDDP\n@(jWW=,@3]dm;\0118ZqP\023Jw\030;)@uW\001\000`\020\000\004a\002\000Yf\0059D\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021\001@\034\006\001U @XL\016R7[nB\002\r\0021\rL\003\0200\r*\004\001Db$;1^b0[\n6K\035\\ )\033mw!\001\006A\030 @\020P\n\004\001\000@\033 w\0323\rg(|4|)}{xbp2+/TH\017|%+\005f*\021\002/>\006\036GDg33cMn<6H\025{QXL:5/\024`\014Z_'\016-\0112u1b1`\007PO!#\0064+\r'~\033]$1 \025\016;j\016v\020]w~:*/\024E{`6u&S\0049<C9|H\036NUUcY\"'%1dpo\003\017\021\006JlTMbijKC2\023LM~'LW\027{\011zDGI\023b-Vn\035\ri\032\021CQFqhk\023T\035\006t\0061-+5YU<\005RZ\027'\020\n\034:~\" M\036s*$b8)h7<\017\r\026XX\026\0319;bv\035X|A\021UB*6tC\034{\033]\027\027\002\036\"\"(XbgM:c. IA\014@dWQ#*I\r3\020UWAM\037ra+\002l\014Pi <\027OS>=D\026G?Ur)'oy\034C\036\002\001@ \000\011B\004\001\\L\020\032AD\0260\004A@5(\020\014\023\001\020h\023\010,`\011\003\000jP  &\002'SF\021\001@\034\006\001U @8L\016T7\\MvsQ^1\014\014\002`0\r*\004\005\004atk\005Rl\"[LvK9J $[L2qDR0\023A@5(\020\026\023\020\020lW\023QRf4Xl\027#%^n\020\020.W#!^r4]\017\022\002\021Rv4\\m\026{8b\023\030\004 `\032T\010\003\011BMV\013%Xe7\031m\026s\024b \030\007@`I*\014HC=aP\010$\002\026\010Xl\024\0035Bi6\031-f;%\\e\027\030mviB\004\001\005\000P \010\004\001)<gv\024}\027\017c\"fOji]=Q&;\023'.GT.=?{kf\020\031\014I}&7uQ>S\rn\034b]e\022&\\>-+!^:1-\013\013pMc!v)W\037w\005Oakz5\1775Z\023=}a\r(\r\0246Q,dP\034%\031)nL'H&\014\031O\033v('h&`h\006aB[\r,YcBE\000k%\013q{\rY~\025X\027\177Lc 2b#nseLTV?blJ\014*9fhPtX\020\002\006E;i\024\011=U*K4V6h5k\036EW\036/0\016\021\023G\036aQ Vo\014AE$'~%*\\M28S]g[(\013>\020;eMS\021+\027\010{\001z\0342\016H]\030sN*R\013S\027<]x8@\027\026\030$#Z12]T\002`\031.FB1^k/a8\031pmC\032\005S\032z\031:>\001V\025v6Ua(G_\016q\0076O1o\020\020\014\002\000\000L\020 \n,a\001^\014!3\000$\014\003*A\000a\030\011\010E\030D\006\000p\030\006U\002\002\0020:!Bm1\035.&9D 0\007\001@5(\020\016\023\003R\014\026k\011jr3L'#\001`\014\003*A\001!\031E(C\020\025\016'+MhC2[NF+H@f7\\D\005\033\025Fu9\032.GI\001Rn\020\021\014\027#\004@N2]\016v{IVs\020\021mV\022 b\"\030\010\000`\032T\010\013\011F*D\031\001(r:\\nD\033\025\\t2\\D\004\0331Bs9H\006\002\002\r\0021\024L\004p0$U\006$!^ph\004\022\001\013\006L6+Ihi3\032,6\013QJ@:\034NW\033QFe7\035\014W\0219He\030 1\020\024\006\002\000o_<ku\177+p\027[)`vGA\r\005_g5'\"\025bX'e\014,+\r9YLd\177)\037\024\032&\025\002&]RdFYG);\037PB\013%@Ej\016\010i\034Bh\030G@G7[5Ie0I(0N 3\023w\010eO\031:(OC~\0071\013\021r\0143\\(C+.7Co$794\0140`W\037QU4P~@\020A,\002\0176Mk:Qb\014g\034u|U\177kH~f(` \030\004\000\001\030 @\024YB\003<\030Bf\000H\030\006U\002\001B0\022\021\n1\010\014\001`0\r*\004\004\004`tC\005Zb:\\Ls\010@`\016\003\000jP \034&\007$\030-V\023Udg\030NF\003@\030\006U\002\002B3\nQ\006 *\034NW\033Q\006e7\035\014W\021\001Lo9\010\n6+\rjr4]\017\022\003%\\ \"\030.F\011\001\034e:\035mw\023-f #[,$ADD0\020\001@5(\020\026\023\014U\0102\002Qdu9]\0106+9he9\010\0106c\005fs\020\014$\004\032\004b)\030\011``I*\014HC=aP\010$\002\026\r\030lW\023QRf4Xl\027#\025\000t9\035.7#\rJn:\031.\"s\021J0@b (\014\004\0010\024zvG5N]W[\026vEw\036{cXg\011\020\"]7!Uv/q\030o{:0j{\016;G>-\000%\013U\n!z#w],($@x\n\017V\"\027!>\035\000R\177&\000\021tRRf\\C$I\0069<eTQdE\005G\026d\004\020S\003%.t\"p\013(6\033*=p\032\nwiET$FQ2sqE|h3\014Mb#7X2\0332(\034W@bDd(l\034Pn@6\017@@0\010\000\0020A\000)3\004\006x1\005L\001\0200\r*\004\003\004`$\"\024b\020\030\003@`\032T\010\010\011Ai\006\0135Du9\031f\021\001@\034\006\001U @8L\016H0[,'+IN1\035\014\007\0000\r*\004\005\004f\025\"\014@T9\035.7\"\rJn:\031.\"\003\031^r\020\024lV\033Udi:\036$\006K8@D0]\014\022\0029Jt;[n&[L@G6XI\003\011\010` \003\000jP ,&\031*\020d\005#Ijs:\020lVsQJr\020\020mF\013Mf \031\010\0104\011DR0\023AA\022T\031\021\006{C \020H\004,\0321Y.'#%Li1X.F*\001hr:\\nF\033\025\\t2\\Ef#\024a\001D@P\030\010\00348t;& \001%c\003\000C7x`\0079Zc+'\032%&\024/jbkFB}!F1=,kn*\"\"v*CU\016\\{3(lP4rw\026IX<\011E/\025V-ca!3\000r$NA5\031 \0277no_7\034\016\030Rp\005)|S/\"Z\026ZO!2=\rR\004VW\0237:B-.\026^?_\005D{p)Fl\017<kc\022OV\"lpgF9{~\025s5:q\036\r\001\000`\020\000\004a\002\000Rf\010\rpb\013\030\002 `\032T\010\006\011@HD)D 0\007\001@5(\020\020\023\003R\014\026k\011jr3L\"\003\0008\014\003*A\000q\030\035\020a6XNW\023\034b:\030\016\000`\032T\010\n\011L*D\031\001(r:\\nD\033\025\\t2\\D\0063=d )Y,7+IRt<H\r\026q\001\010a:\030$\004s\025hw7\\M7\031\001\016m1\022\006\022\021@@\006\001U @XL2T!H\nG\023Uft!Y-g#\025d ![\014\027\033L@3\020\020h\023\011$`'\003\002%(2\"\rw\006@!\020\010X4c2\\NFK\031Rc0]\014T\003Qdu9]\0146+9he9\013LF)B\003\011\001 0\020\005ZiA\032A%`l7Y  \032C@q\036LPI\032j\001X\037<.s]YN\006ky\004T\027QF\033(VMlS@'0G\002\013y#/\034P\002mqX\003Z\177]\020.=Wjm\027TXO?WLt\031Q)3*b-&pGH%%\030mH?)J,q\024\n\0258i\"\r_]{\\0ctaVaTU8ztO\0345p\024>8\025VW$Q\0266w)IOi#O%\003]n\002\001@ \000\011B\004\001%L\020\033aD\0260\004A@5(\020\014\023\001\021\010S\010@`\016\003\000jP  &\007$\030-V\023Udg\030D\006\000p\030\006U\002\001b0:!Bm1\035.&9Dt0\034\001@5(\020\024\023\030U\0102\002Qdu9]\0106+9he9\010\014f{H@S2XnW\023%hy\020\032-b\002\021Bt0H\011f+Qno9\032n2\002\035Zb$\014$#\001\000\014\003*A\0011\030e(C\020\025\016'+MhC2[NF+H@C6\030.7\031\000h !P&\022I@N\006\004JPdD\033n\r\000B \0210iFe9\035\r\0263%Fa:\031(\007#Ijs:\030lVsQJr\027\031\014S\004\006\022\002@` \013y=GV\033\036v nM+u2\033\034b*w\r4d\005\027\")b\007k+\030TU-%K#z\010s\034\022.sPfU\014z5\016A#TLe77\022{-;l]U`IiCbmAu\024ie\023!d\014&0T\036ERw<\rma^@7\025x\027KJF`U.NahJ\022S-?\000+w\004\022\023bRE}av\026\031Vuq2\"\027vLz3+C(tRL(|~&bT\004\003\000@\000\023\004\010\002Z\030 93\010,`\011\003\000jP \030&\002-\020&\021)@&\006\001U @@L\030W2\\nF+I\\ !X.\006)D$0\010\001@5(\020\016\023\004Pl\027\003\024@T7]mc\010h`\030\003\000jP (&\021*\032\014\027;QJ ![mg\033UXt4[Ls\011 `&\003\000jP ,&\037!Y.'#%Li1X.FK=\\ )Y.'3%Fe9H\010FKYRs4[mc\011\004`\037\003\000jP \014&\030*\032\014\027;QJ (\031.'\033=\\a6\010\010&\013MRc\020\020h\023\011 `&\003\002%(2\"\rw\006@!\020\010X2p2\\N6{9Bl\026XL\027\033%F@:\032\014\027;QJ.1[mS\004\006\022\002@` \013er&S6p\n\004|\010+f$%\006Z2j|o!>At?9nu971TLn,WP\036\032LQ}#34Br\0270\\D\007KZXE\014M\027`F{fy-\004\030Mm\r\022\001h^\023\027p\r'\005:+\001t\004\034\035\023b\021vP?\0303)\007\014GSD\004(b?T\026\007\007.{]\013|@\nD.*`Y89\000m<<9q'^\024^BHOXm6\030hod9\031\004\004\003\000@\000\023\004\010\002`\030 :\023\010,`\011\003\000jP \030&\002-\020&\021)@&\006\001U @@L\030W2\\nF+I\\ !X.\006)D$0\010\001@5(\020\016\023\004Pl\027\003\024@T7]mc\010h`\030\003\000jP (&\021*\032\014\027;QJ ![mg\033UXt4[Ls\011 `&\003\000jP ,&\037!Y.'#%Li1X.FK=\\ )Y.'3%Fe9H\010FKYRs4[mc\011\020`\"\003\000jP \014&\033*\032\014\027;QJ (\031.'\033=\\a6\010\010g\023\025Jm0Z-B\002\r\0021\025L\005\0200$U\006$!^ph\004\022\001\013\007\016\006+Ifo7\030-Bk\031de2[,\026K1\000t4\030.w#\024\\c7[&\010\014$\005\001@@\032FN_)0J\031\0137\017%\017X\006\0246nSJ#0B\027ORh6\036{\0117pR+TPt\035\020EF\031\036?\025=R}wpf\016\035C:T=mg\035\0262\006X!#9\011,>9Q~B4\036q\017P\007\n0\002G\007<=_\031$\031=-u0\013g7/2\024QW-gSp\031%%U/p0dR\177O&Dm+*v8\022\002\r)F\036cZQf\022\037kg7e-1\003KH\010\006\001\000\000&\010\020\005<0@sf\020Y@\022\006\001U @0L\004Z L\"S\000L\014\003*A\001\001\0301.e9]\014W\0238@C0\\\014S\010H`\020\003\000jP \034&\011!X.\006)\001(o;[F\021Q@0\006\001U @PL\"T4\030.w#\024@C7[N7+1hi7\031f\022A@L\006\001U @XL>C2\\NFK\031Rc0]\r\026{8@S2\\NfK\rJs\020\021\r\0273%fi7[F\022\031@B\006\001U @\030L4T4\030.w#\024@P2\\N6{9Bl\020\024\016&+5Ru6H\0104\011DT0\024\001A\022T\031\021\006{C \020H\004,\0338\031.'\033=\\a6\013.\007\023\025Zi:[(\007#!Bw:\031%f\033=Z0@b (\014\004\001I36?\000:\023\0379F\013^\n\017<&E6\001;}q\034,Q\033\020\"\026c0wm\177\004\017Q\024{K\033!&_f\001G\006f[\\g$E9\035P\031\rrHET\0336l|~$&g+\010\0117.doH5|7HcgWG1\030\"S@q\007<,Bh\020nVj+=bU2&\037x|\000p>\031Yq\001\024\021:};@\016J\030\006f\023D\"S])7rL7&d\025K5\010:@@0\010\000\0020A\000+S\004\007\0341\005L\001\0200\r*\004\003\004`%R\004b\025\030\004``\032T\010\010\011C\nv+Mhe9\033D\004\033\005`e\030DF\001\000\030\006U\002\001b0J\rBp2H\nF{]\\1\016L\00300\r*\004\005\004bE#!Bw:\031$\004\033=\\s:[\016FK9N 1Xf\022A@L\006\001U @XL>C2\\NFK\031Rc0]\r\026{8@S2\\NfK\rJs\020\021\r\0273%fi7[F\022\011@>\006\001U @\030L0T4\030.w#\024@P9\031-VKUZ )Y.'3\025d !P&\022A@L\006\004JPdD\033n\r\000B \0210e`r2[-\027+4Zs2\\Nf+I\000t4\030.w#\024\\c7[&\010\014$\005\001@@\032#1YU\013kpK9vj\002A1#g\016r$\010Uk4\035q`n*\026#{c\004ATtRz\nm 4<v/u\025\\:|\032\033\036\013}sk#\025j\002&{y0M\010BQl&z\006>Bt\rI\001BG\036R'KKJ@\011bq\034\014^>BU\027sdD76B\024S8\021\037\027K<?M(u\0069mHe\032c\021\011\002o01\raf?U\001q_\"\011\033g '#C8\010\006\001\000\000&\010\020\005&0@q\006\020Y@\022\006\001U @0L\004Z L\"S\000L\014\003*A\001\001\0301.e9]\014W\0238@C0\\\014S\010H`\020\003\000jP \034&\011!X.\006)\001(o;[F\021i@6\006\001U @PL(T4\030.w#\024@C7[N7+1hi7\031d\006\033\014b(\030\011@`\032T\010\013\011Gh6+Ihi3\032,6\013QRo7\010\n6+Ili1Y.2\002\021Rv4\\m\026{8b\031\030\005``\032T\010\003\011D\nFC\005nt2H\n6+Ile9\010\0104\011DL0\022\001A\022T\031\021\006{C \020H\004,\0279Y.'3\025d-1Y.'#M\000t4\030.w#\024\\c7[&\010\014$\005\001@@\032:\"A]H\177UM>6=;6u\003\r\007*\036E*a6PB/rQt#T;(-T@tJ!C`{W\023i\004\030>P34`n\nF .JK\000bmS3\031w\011T\014\"\016\031_u{Fd\004\\\030_uEV)[\013i\034Ao('\002\011\"\0119?O\0206p\005\004\024g.L!wX?)\005ZTOW85G\007\001dlVv\013Frh{oMG,\025UL\"\0115Pph\010\006\001\000\000&\010\020\00440@bf\020Y@\022\006\001U @0L\004Z L\"S\000L\014\003*A\001\001\0301.e9]\014W\0238@C0\\\014S\010P`\022\003\000jP \034&\013\"\035.&\023\005\\v4[\rF)D\0360\006A@5(\020\024\023\003\025\r\006\013]he\030G&\001X\030\006U\002\002b1\"QPa;]\014R\002\rJr:\032,fK\rBt4[mc\010|`\035\003\000jP \014&\026*\032\014\027;QJ *\032-V+Mha6\\\r\026s\034@C L\020\030H\n\003\001\0005E5CaBEC\024}##m#\034vl\034bp`\035~p\027u\002>NiIp\037\013\024pX\034s*\030\030\027\177Z>.tNPR Ty[#A\014<\034{\011\024\r\026[tckgY!G'A\003ir%md\037o\002GN0k\020 \017l|Q_<oRK\\vl\024qHp]=%\003`&)\017\033\001,5\013y>\0078Qy\013,8d@\013$A\003\030}W}_U\\]\n|\"\006p\020\014\002\000\000L\020 C\034`W\030Cf\000h\030\006U\002\002B02QPa;]\014S\011\004`\037\003\000jP ,&\030*\032\014\027;QJ *[M\0273\025ds0[\004\004\032\004@R7[nC\011\004`\037\003\000jP \014&\030*\032\014\027;QJ *[M\0273\025ds0[\004\004\032\004@R7[nC\004\010\020\n\001 A\000\010\003E\011\002[87}6M\011\035?w<>6:7Xx:\"\010z6a\025\005<wZ]\036U\0364\027?Ndz>S/\035K%5'\032\013\000]0[K{\ny#h@.\027WSro6d!gM{#om)p**\030q\032\034-4[,!Vb\037_(_kSm\020TY\0074S\025K\035'-T\036CTztp}p\025E&qYNI\026>K<]wm\017{EjV V&^YM4f(|Z*\030+\003\014g\034kA\013<[\014Jc\022\033\017w\037eVUR\\d\026%\003H\025(\034N\011om|hnD\020)P\010yt\032\026/uN,\032?dG\177\035sH\003NdU>vH\014L\0177n\00602em|JJ\025=\005TNxUh!\014J\011\031DVVPymDEv)\020\0031=:\017|C=S\037\024'U(hB\030n\007\002g<U3\0375)$n255K\027\"8\0070'a[\036\037V:@<\005)\013:v;{\021moS\036y\021\0337\0258\017k\031\004)gCqSwD\013kD5F4Is\021rM \021\"(\001@M\026Fc.]\013\r0t=\020$x\026*=&ey\023G\037%(<&&\030-CS /\"!Y\017\016`WAo_d*x\0025AeNf:X3\030Z)!$d2d\036\027\0267ZjVp[\030a\".,R,d \"#)*GkOvb\030i@wKK\\$\005><\004+gUQ\016\027\022C8;i\013\"zX\0344KEh\026U7\013_ WaHQ=g\006HXu\010o~\036M|&\010{Db\006YM\004xz}tfA\023q\"hNVBgH*it^\034f\033\003ri_\024Wt\001*%&T0YDan\016\002a4R\036\037T\016qs4TTr\025!)\011bCEZYT'2k\\\017_m\014~\011!\\\017pMT\030\026F\177T;x8F9J&xd9jE\037xFys\032\031B4Cl\0201W%&|D[$9LJ\022\017Jv\025ojD@B \r^PgDk}j\007?>)\031\n\0042{R\177o\020FI\034&$\0141\010QA\014L^\014\005\031\"t\"\016bQT|b\r^q\005=fP[XTLr|.>vSP\036I\037dWjH\026o\031\023owpH]\027\031&+\"\021\003s>t\030}Qr2~U\010W\016\n|BT[S}v\0035\014f|%\rNW,\003t7mg4I\033N?gE>b2\010\016aRH\020\004\024?G>$Q\014\014Q1\010c\000?\ra*lr_\023rA\031\030mx\010\022.%\004%{\011\035Z7)<\036\0013\007bgFwpw\025>\017Zg~j\011#;)\024Bzq\"g(CuK\022HM/\003\034j:\021\011]\000\027'\007\n{&m\005\022\026f*\\\022>r\034\rA?\013TQCeOs\024!>\027\007\\\035\003R\037JIril2eY#;F7wH\024\000z%$G#'ba(0@]m%s\013lpFbC\"A\013!OF\006^cj\024\016vk-\014J a:Y\002}r-b;\032q\014\035\001\npZ\034&'a*2}[r2fioY\020p\"~)XXN?$\017zdPV23oG\005\003Zq. n:r\016\024\022L02\0245\016\020i\033+M{|^$fWEz\17774|2MbZCrR\026\\+vKqZ=\024\001K\002>DV\0219hH\rrE(ek76?=W0\023rSCmV\017\n\r\177a~\r\004\nQ\016;Pi'%L\\0\\\007V\003Z\021E$\n\\\034\021\025'\177\017P\023\027\0240\010o:8\026%\016}`}8$::\014\025g\003_ f\006sco\0040y7u\003-]KE\030\033q]\004i=0`A]4Li#\030V]8d&\021\"92'<\026~}c\035}Mf&nViX\031*`KRwD&5}tPv\025\"~\000\004(\020EL'Fl\020Ty?\036C'\017\r\017\016\020j|t@4Kn\013G2DF\022?=6FQl8Yn${\036C\0357\022ST#\023p\"L|$\016\024Y\021\027eDWQo\035bg-\000|\020\010n\002\\Wrs\013bZ\034\010qS&[N\023&?]`\035=\026AD\006=D\017BO\030 \0229}5{1%\"L\022f\037\033J\\\032SI\005DvZc(|H8]_4>%_JW*Tt^[E\021\002+\025d-a\022#\025\030l\rq\\G4\0000Zm@Dsz9ZB;\030\017SoJ\035D)\n45B)d.\006t\022)0\036H)\035rpK3X[\014\014p0\027\026\004~fa$\023\000Gz''s|Aw0\177%+[\035\022Q@2*D986IbVo\034\\/x'\005\003Cps\005(I\001$.ACmCI}\026-\013+\005_\001\022X\0009}\023;\030\030~\005\\\005\020Q}.<\\\036'L)h9Z;@\002?@\027*E\027:2X\177O\r-aarTZ4k\001\020p\011\002%\036K\005\013m/]P\022\r<gpb3\007O;\027*e0c=g\036JFR_\r14\036lZ\0245{29q=%^mJ\035h}\007O\035IY\003T4Ja`R>C`o\022Du+cL\021.(\001\025\003F\r\nn\026+#y8=\010\020\007\033\007\016%M1\037)f8\026[\027.<UXd@\000^ N\021laN?8;\004`6!@y\011trD\006a\013x_gB\000cXU\000J\0022R.c=.gVc!dj%\002\036(Vjx\0037\027\010\004>3)\020\014gQ\004\025\030e\004rGeByA\023M*L%n\001\"\006\016\027,\n\00068K!}Tq1\006I\007U<X\022w:$0\\'[}x@\003\013C\002.\rC2Q7(\007Bi5Sng~M'\"\014@T2c@\0174h\034 \011\\Kn=@a|gLA\011p7q!GBfsT\004vg\026\033~T]eIdNwSA\022gv#}&}w:5\004}+=h@4\005\032RU\023x_/Hg\035\007:j^\027)[gs\\$?\011\016\016\026u\011cIF,h,959&NCj,Y?M6\000\007u6i~\020doWTPn\177!{\027q\023w4P Me%\013\177._XVO#H\003Bef\010yG\005\0315\013`\020\014t>L(w\007HVWo?q\016\177\013#^[Ut6\007,$J\\w\nGa]/\002L\011NN\005M\017}js|D\003h\1778\011\010r .\031#Y5'\035n\017\nhbevh\r\013\021W\rmX\000cFYfz\002%1QKa}J\023e#8\013Snp:\\2h\016ghX\037Uf<lkBO\011zkT\027_\025QGP\010K(Q@\034a\rq\\\0372\005!\033Zv1?SnLi\\^dR8uaQ&)*6=N\"\033C\000\035];\035\177msUC|7)w,3N&\024N>2n\017.\022Sg\027N3\r8|D\017>gB6qR\0014\r\031'&N?G~Bi!qL*e/1tD_L+\006\0168]K7<4A|m\006a\037mQ?k\010-\r[`%\024vv;v\032\014.\026o79 \0045\"\036@M\031!\007H5L\002uiJp)\032nNmQl(J;\006\013\n'b$<O\023&6z\031V\010lL)\006Fwi{\022\025FK\026=Rf_\022\032(S\030EMy\0329\\\022L&E\024P$-2v0\037[)\026*\036\013\\\002\027T#=d\016Il8\0115\r !B27y\024\030\0119xc9>E\026-q`DgW  \030\004\000\001\030 @\033yB\003.\030Bf\000H\030\006U\002\001B0\022\r\0021\005L\001\0200\r*\004\004\004`$z8b\020\030\003@`\032T\010\007\011AjF{I^n:\033f\021Q@0\006\001U @PL\"T9\030,F+I\nn3Z-f)\001\022n1KF\022I@N\006\001U @XL@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\010FKYRs4[mc\010T`\023\003\000jP \014&\014:\034L\026#\025de7\031m\026s\024b\"\030\010\000`I*\014HC=aP\010$\002\026\011Xl\024\003Qda2\031.&+9Ni7\031%f\033=Z0A\000! \024\010\002\001\0003d_J\001\0379$7v8\006gk?>:>GL?D\024\007\026-q5a\nHZe)\177-m\177F\037\023/\011;V&#e\177%*8]U\0078/=\017}xWP3.<Z\024\036<,\005\030@A\034Z<D\026\031z\016=< Aq_8M\020\036jEo\022Z#n0FYdd\027n\014*\034miD?b^(\007uV\013>Q)I;%+dN2$sj\004pM\020\n\010b\020LY`\021+M\002yd\037~1et\007#=2&!v\007Qpv\004\016w\"z]O)*\024W8\035i|t\027\004\024\036\020P$X_\006\013|f(\036<:W})Q>%I[I\033\021\026=;/\006amoxDjPw\020&Q\r\037MGXLA*\021\0047n2p\022\003\026qx\007(\007\000\006\0273G\ns\034|e\007qR\011U|$*u|[^\034\037j%&ya\007;\0002k\032\033\0024Vd\010I)<\004\003\000@\000\023\004\007x07\014!3\000$\014\003*A\000a\030\011*S\030I&\002\030\030\006U\002\002B1bU\\i:\031,B\002Mha:\031.2\002A^s:\030-B\002MJr;\032,6)D20\013A@5(\020\026\023\010\035nw99js8\034ef\033=Z/!T\n3\010t`\033\003\000jP \014&\024*Tj\005\031\001 r7Y\016V\033QRo7\010\0104\011\000b0@b (\014\004\001Fk.={\022LqJi\035aFaXP0a4\005\000\023abN\006b(,:dO3H\002\004}$]4\036[\036\010D\003-iFFjj\030_\"Mm(iZg(_Xz*\027Jh\037\037`mb\022>A=t\014\013\0111J^\177&Qa\024\013t\004\034=kt\177v;GozUT<<sI\036\0263Z1\021S?+XHT\004BE\036XQ\nB\005\177aW0\014?'2b\024*#}_P'@@0\010\000\0020@}\006\0061D\0260\004A@5(\020\014\023\001\025*3\011\024`#\003\000jP (&\034*[M\027#\025H )]\014\027#\025f (\033n7#\005X )Y.'3%Fe\030F&\0018\030\006U\002\002b1\003]nw\027\035.7\003L\\c7[%t\032A&1\nL\00200\r*\004\001DaE*M S\020\024Mv{P@C L\020\030H\n\003\001\000-u\022-1GZX$Yy!Z`\004\177EMg0\0217uc\017\023|5e\004&*~r7\014\024\"edX$xF\021=\033\177\nO\004RITEOj\0379\rSF&.}(1!\032s^\036\033%F7U&}o9\ne=JDyzx6MS+n$rle\017tyo\026q\003Xp(\017\031i(}Ro`G\001\026\026\\f_zaf_y\022\006^*\021\027P?5 \001t\021[X\022v\032\020\020\014\002\000\000L\020 \n(a\001]L$C\001\010\014\003*A\000q\030m,a6\032(6+Ih +\030-FK\021Bt4[mb\0029Jt;[n&YD.0\nA@5(\020\024\023\007\025L\026c%\006e9\035\005B\002%\\c\027\014&S\001L\014\003*A\0011\0311,a6\032(6+Ih ![\014\027\033L@1\020\024\rvc%Fy\020\025L\026c%Ha:\032-vq\001\002u:\032\rw\023%hy\030H&\001x\030\006U\002\000b1C!ht8\016Er{]nw\027\035L\026c%Fe9\035\005f\033=Z/\030H\006\001p\030\022*C\022\020o84\002\011\000EB\026K9Lo \035L\026c%Fe9\035\005f\033=Z0@b (\014\004\001X,`O(Mb-:S\013m\006z`]'*\007\000fwSU\r$/\006\031 _as'/\026+AV$vX4\024Z(\007.\000\001DD!H#q\177\010Hs<p\037k?4FDor;SQ?g%D\000u2h7)_\005EB:\032Gtg\177\016p2\006@j\001n\001k;H)Q!\0207\030\036pa~H\n0;DV\002Cc\004opA\002h\\jW$5lrP\0073Qn\003:?8@@0\010\000\0020A\000)#\004\006v1\022\014\004 0\r*\004\003Dc53\005Xi!Y.'!\001,a6\032,F\013QRo7\010\011f+Qno9\032f\0219@*\006\001U @PL\034V0[\r\024\033\025dt\026\010\011\026s\014\\1\032L\00600\r*\004\005DeE3\005Xi!Y.'!\001\006l0\\n2\001H@P7[\r\026\033d@V0[\r\026#\005hi7[D\004\013Uhh7\\M\027#db!\030\007``\032T\010\003\011F\r\007#Q`:\027Knw;\\\\v0[\r\026\033\025dt\027\030mvi<b \030\007@`I*\014HC=aP\010$\002\026\010Z-f3=\000v0[\r\026\033\025dt\027\030mviB\003\011\001 0\020\0068tqe95<Bf$Ukj{\007 ;snl}JT:eJG\007\001*]g.06\036\027\n5nLaO\034;\027T\014'Z%!\002$FX)=3>7*\"j3MTk\037+%M%KT$DeR\"48P7m8\030*Pw~8y\0325b\013s\000p$# Rlr63|gu+p6?Z\027lG\031SG4\011/pv'c4\022\177Md|\rM\007;w^mbs'n\002\001@ \000\011B\004\001%\014\020\033YDH0\021\001@5(\020\016\023\rUL\026c%\006e9\035\004\0053\005Xi2\030.FK=\\ '\031.G;=dk\030Ef\001(\030\006U\002\002B0rYBl4PlW\023PX $[L2qDj0\031A@5(\020\026\023\026\025L\026c%\006e9\035\004\004\0331Bs9H\0062\002A^l4Xo\022\002YBl4Y\014\027#%^n\020\020.W#!^r4]\017\023\011\004`\037\003\000jP \014&\0304\035\016G\001h^/;]nrsYBl4XlW\023P\\c7[%s\011\000`\036\003\002%(2\"\rw\006@!\020\010X\"i7\031Mt\003YBl4XlW\023P\\c7[&\010\014$\005\001@@\0349BF,\034t56\0204\005TWa\\NY\035/\037\036S?\03612K,-&gfT% \\\004&Ai\030Q`Su;M|{=-;_\033\034\"IL?9BI<<v\004J/ll\022\033K~\004\004 c\011\024BB0`Z;\0336\025gO;^O\004\016\032\014#\016[MP-\\UBq\016\n{US\031/\036G\002\027\016W\010*0$L\n4tJfK]|-h6\023\007gSq4\nSx\010\006\001\000\000&\010\020\005\0020@lF\022!@D\006\001U @8L6V0[\r\024\033\025dt\020\025L\026c%Ha:\032-vq\001\034e:\035mw\023,b\027\030\005 `\032T\010\n\011CJf\0131RC2\\NBa\001\022n1KF\022a@T\006\001U @XLFC6\030.7\031\000b +\030-FK\021Bt4[mb\002\005jt4\033n&KQr \026H\011t\032M 1\020L\003p0\r*\004\001Dc\006CQhp\035\013ew;]n.;\030-FK\rJr:\013Mf+P^1\020\014\003`0$U\006$!^ph\004\022\001\013\004-\026s\031^@;\030-FK\rJr:\013L6{4a\001D@P\030\010\003\017\014\027ix4\004\034v=kq\023%@QH\naB\007\026\020k\037Ruj>\026KR\025J\007\026Nle\011$Nh<xGUWq&\016.t:=\021'\007-c8\000\005o*f\0229nL0[\021/d\000l-)J\017\")$(I$VPG![4TDslL:u)v\027\037\023\177=}\004He\036x(;-&*\001\025g7#Ko\017B\033s\007\n<\016\177`)oh'\1771A\177iEY\001\000`\020\000\004a\001vL\013s\010,`\011\003\000jP \030&\002*Tf\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\033L\006P0\r*\004\005Ded\0331Bs9H\006B\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\030 1\020\024\006\002\000h,N_3c!.-\024\036NJBS\037F5}y\014Qahi\011\022\0074&\013Vok\034`\010\\e\000x'24=r4eNGrzu\177S\006:Xd\010Mv\000XNA\001Im#\002$tB|S\013b{|\026C\006vTyq\000tQN_O6G{\011^y\014\n3%#w}'K\003\n\036J.N{Y+\036\036\023\\p'M5\034M\033v0g7Ve\033<6f}\001(\007Gp#j  \030\004\000\001\030 =S\002|b\013\030\002 `\032T\010\006\011@JU\031D.0\nA@5(\020\024\023\007\025LW\023%&i3[EB\002%\\c\027\014&s\001T\014\003*A\0011\0319\006l0\\n2\001D@P:XMFK\014@P9\032-V\013Ir !Y.'#%Li1X.FK=\\  ].FC=di:\036&\010\014$\005\001@@\034QM}[#+\030%YJ!cv3wW\030o.o\036C \001)\010;t8\022khhD\013JsT(\0232\"t\032\037f\031-`eC VB\006\020yP\0326\020P\\{{\"`rk70>a.VQ(\037jB 44c,?l\006M<<hgD\0029Q GDN\"UM\021{`\005\000m7\010y\011&v6dXkL/\003.-C^t\0339J`{\030.E\"yFUnQY{-X\010\006\001\000\000&\010\020\005 0@p&\020Y@\022\006\001U @0L\004U)L\"s\000T\014\003*A\001!\0309,e9\032*6K\035\\,\020\022-f\0318b<\030\016@`\032T\010\013\011Lh6c\005fs\020\014$\005\003UDl4Xd\005\003IRm0\\O\022\002\rJr:\032,fK\rBt4[mb\002\005jt4\033n&KQr \026H\010s\021Dt0\034\001@5(\020\026\023\030J\0142I\000b9\034N\004\0053\025di)Z,vq0@I7\030eb\0014@F7\\D\006\013Uhh7\\M\027S\025H :\\lR\003=\\l<L#s\000t\014\003*A\0011\030Y,e9\032*6K\035\\ *\034NW\033P@N2]\016v{IV0@b (\014\004\001*h.Wa16q\003j2Z }ql1e%\033\001lN\030V\001/\033\026xi^R\033\033NU0)+SoPpr\010EK\n?#wR\016yV2\037FpC$T\013\035 M=9\027.-]U\026'p\nM[\031'{<^\021)5\020`n8J0W\037H\"ztel:8>x\031\004G5\027\033+\r\033vmCm\"a7)Ox>#E7rM\033D\014#T\011 /N9\021uWg:@@0\010\000\0020A\000;3\004\007\0241\005L\001\0200\r*\004\003\004`%*Lb\027\030\005 `\032T\010\n\011CJf+IRS4Ymba\001\022n1KF\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030NF\003@\030\006U\002\002b3\011!F)\020\014'\023Id@V2\\M\025\033%Nn\026\010\011\026s\014\\ \026H\010f{H@a:]\r\006{IRz2Y\004\007+MJ 7[MGIE\n0!A@5(\020\006\023\036\025LW\023%&i3[D\004\0331Bs9H\006\022\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\013$\0049La\002\000B@(\020\004\002\000na\032KMSs'l<`GDs<=n\033\00216eu]\022\024,l\006\034LY\006k\000`F\n)Q\031G~\010\031T>n\rr\033jS8*N*\011}|#45l\005xao\002\022JWcP\013\001u\r\016\0378{\014\01736)H\014\016=_r\0100Voy\011DHApN\000]FV\030Hm]3/\000\020!ZFU454#0&Y+\020IJ@54\177J\n8\025LU4\014\035Jx_\011oG@`\177pOw)-\031Lm?PyI\007U:\177\017JM>I2xmO\rl}\000&\000\r.\004z\017\022|gK2T\014-N9]d]3nYB4_Qs;\032s`2?\021z+MY&{-*r\0035$1Gvt)],9\\$\\QJ#`\026g6\037\035m\032pzY\017\001\nA\011*|\014OQbV\021\014\016wm*Shc\rS\"Tm\010T<\033{\025W\037K\035Z\023h\010\006\001\000\000&\010\020\004l0@if\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\017L\003P0\r*\004\005Dbe3\025di)Z,vq\001(r:\\nB\0029Jt;[n&YDv0\034A@5(\020\026\023\031\025\014W\0235f 7YD\007+MJ 0]\004\006CQhp9NEr{]nw\027\035LW\023%fi3[Ef\033=Z/)\024\010\022\001!F)\030\014\006\022q@X\006\001U @\030LJC6\030.7\031\000b (\035,&c%F (\034M\026k\005dy\020\023h5\032@@R2\\n\006{9He9\014\020\030H\n\003\001\000.=Ushtw/sKsRKyM2=n\033+=U\026c\0262%,Q:/-KX\021\017(M\neip\023gY4Do\036B2\177u4Ql^fr2+\000'\037A\0006R[\003\003\0268-u]%(P\022\022Xbsi\031!-MjB!\004b\037P^\003\0075\036bpm\010Z\006Wx\016b 1^\1774mz\014\003.\011<9#Hf\021a\n\036z\032o\023l &<_\024m,c:\000P\020\014\002\000\000L\020\036iA>1\005L\001\0200\r*\004\003\004`%*Lb\027\030\005 `\032T\010\n\011CJf+IRS4Ymba\001\022n1KF\0239@j\006\001U @XL\\C6\030.7\031\000d (\035,&c%F (\034M\026k\005dy\020\020lW\023QRf4Xl\027#%^n\020\020.W#!^r4]\017\023\004\006\022\002@` \0132j\027#\006ZD8\034\001WO\034a~B\010Lf\006&\0114.jT%\027bip\013Oj\007A\020(\037\"xT\032|PX\r7sdYz\003\003g*wX6oXt_ry!$_A_)<#jox3\007p\005'roBG\026)!\"]\rQM$wd\014D\007;\n`\0225g/OL\004\033\007suM\025|\177RmB\036U!\002\023\021\003\030q\017\006qu\006$D8\022<u_r\024`\000|\004\003\000@\000\023\004\010\002P\030 8\023\010,`\011\003\000jP \030&\002*Tf\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\036\014\007 0\r*\004\005Df4\0331Bs9H\006\"\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\013$\0049Hb:\030\016\000`\032T\010\013\011L%\006\031$@1\034N'\002\002YJr4Tm\026;8X $[L2q\000Z #\033n\"\003\005jt4\033n&KiJd\020\035.6)\001^n6\036&\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030 1\020\024\006\002\000Sb\000\022\013PYg\r\000~\011G\006.<\007H!\017\014s7\027tf_L\020\020\014\023_\027j,F0<,\011\025EK@\005R,f&#zmB-.<A\036!\031g\002{L.A\002g#\005\004\011K\025&O$\023tcj *\"\013\004#'R[\017\000:E{\030[\031\0363>2'\003}<o\"1q\0366zhh7js\006dU\036+\026\022_T#\007\013,HTa\177\006[\036Rh9[N?]` \030\004\000\001\030 @\035YB\003J\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ae3\025di)Z,vq0@I7\030ec\010|`\035\003\000jP ,&\026+\031.&JMRg7\010\nG\023Uft\020\023LW#]^r5L'#\001`\014\003*A\0011\031DPc\024H\006\023Idr +\031.&JMRg7\013\004\004K9F.\020\013$\0043=d 0].FC=di=\031,B\003Ufe\020\033mfcdbE\030\020``\032T\010\003\011O\nf+IRS4Ymb\002\rXa9\\d\003\021\001 u1\033\r\026\031\001 r4[,\027\023d@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\005R\002\034f0A\000! \024\010\002\001\000+a n\013*,mYw\022o\026('ni7n\005A\033\017YX*cfYyCz3'h6.E\010q8;\n#'\0135q/x\0322\035 ^#\0161=,Zu57E\027q\0068N\023O\001(yYEt\023l\007{\035\030\010o\013VK\010\177\004:\002\006SC&\000g/n<\007H\003]cI\rnR@Y\005^\017\022V4S\030QF\006\"{\005u\"0\004nyoaR\007d3\000A\005\02552\01366\027 f\014[[?u\000UY\024\003E5;\031\r;S8r\0026N1;;m\011\024* \036\004 *k\0255S#)4\0311f\020F=\017f?dg ,cG1A\010wXcvi>\\W6vj\034I(i\034n4\003M435\026MjGk\016C3J!\002MAP1:\02420.mi+\014c|Z\031`B5\006oy\0113E|D,\nB|\010}y\006^b*\011B\017b\022W\003t$\004\003\000@\000\023\004\010\0026\030 4s\010\\`\025\003\000jP (&\016+\031.&JMRg7\013\004\004K9F.\030Gf\001h\030\006U\002\002b12YJr4Tm\026;8@T9\035.7!\001\034e:\035mw\023,b;\030\016 `\032T\010\013\011LJF+IZs\020\033lb\003Ufe\020\030.B\003!ht8\034g\"y=nw;KNf+IRs4Ymbs\r^m\027TJ\004\011\000Pc\024L\006\003\0118`,\003\000jP \014&%![\014\027\033L@2\020\024\016V\0231Rc\020\024\016&K5Br<H\011t\032M  )\031.7\003=\\d2\\F\010\014$\005\001@@\032\014S\014ba?Q\006G`\025z\013\036ZR\014[e\026w\005\017i<9\017K@1\013/icx}\010Cd:\ng!\032IChRi\004+:\004R@GxdoS\011\177\030T\016\022j{Hnm\017\0165\025\005\023\004\031`\034\001\001\033W.=\013]UOF7S\024C\"b1JME!{\032E\017bI*.gEd\001\"hc>i\037x-++\nw?9V\006r\035:\0036(b\021;\011~'\177\030\030\010\006\001\000\000&\010\0174`_\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ae3\025di)Z,vq0@I7\030ec\011\\`5\003\000jP ,&.![\014\027\033L@3\020\024\016V\0231Rc\020\024\016&K5Br<H\0106+Ihi3\032,6\013QRo7\010\010\027+QPo9\032.GIB\003\011\001 0\020\006%8YO<C8P\004)4\0107`D\006oFWWZHT\004>\010\014\005t&=Nd#Ow\000K\001y\027n*T\021\000ZW0\006\037<\037si\035f4\000U\010o]52\013\"1Q8w\021\037\031t&1NW\016Hso'P^\007.|\025\020c#D\006|`\037xV\010kw\001$m$da\\{\014hAK)i0^9v|}M?DD)O8v\n{!z\023EHL2KP\026B\026N\002\001@ \000\011B\004\001(\014\020\034\011D\0260\004A@5(\020\014\023\001\025*3\010\\`\025\003\000jP (&\016+\031.&JMRg7\013\004\004K9F.\030O\006\003P\030\006U\002\002b3\032\rXa9\\d\003\031\001 u1\033\r\026\031\001 r4[,\027\023d@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\005R\002\034d1\035\014\007\0000\r*\004\005Df\022C\014R \030N'\023A\001,e9\032*6K\035\\,\020\022-f\0318@-\020\021Mw\021\001Bu:\032\rw\023%te2\010\016W\033\024@o7\033\017\023\010|`\035\003\000jP ,&\026+\031.&JMRg7\010\nG\023Uft\020\023LW#]^r5L\020\030H\n\003\001\0003\013m\010E:\\4t\025=\035eTLLGk\031AB\034\026BH\010fj\034\177TBH\020N\0136gxR;!O\010\\\036;|i\177\022._\003OB\030~'c\017\037\"#|XeYN\034d \001\r\014\014\002rd\016\021.|>a]uJJ'E\007 iW<\007u\013S5\007\021JchU:y}E}rT@'/U\027\033U\006\006}l\002G\031\014y]b^6d4X?\011Xt9\011'W\014p\020\014\002\000\000L\020 \016la\001e\014!3\000$\014\003*A\000a\030\011*S\030Ef\001(\030\006U\002\002B0rYJr4Tm\026;8X $[L2qD>0\016A@5(\020\026\023\013\025LW\023%&i3[D\005#Ijs:\010\011f+Qno9\032f\023Q@p\006\001U @XLb(1J$\003\011dr9\020\025LW\023%&i3[EB\002%\\c\027\010\005R\002\031^r\020\030.W#!^r4^LV!\001js2H\rvs1r1\"L\01000\r*\004\001DgE3\025di)Z,vq\001\006l0\\n2\001L@P:XMFK\014@P9\032-V\013Ir !Y.'#%Li1X.FK=\\  ].FC=di:\036$\002i\001\0163\030 @\020P\n\004\001\000@\031;Tq%|<\007c!s<679o?\014K.(\022\030\023~\0032\037kPHB^Q>\"Ja`EH\004on\024aH9.b\006\004\"\006>jeFu\033j\021 c_\"m4Ta,i\014r23!h^\024K7\001\000\010Xh^Y\032#&y\003\013Y\025P,.yP,3QXgWWp!\022!9l\\Ng\031\033\\\032tL*\0348/\004\004i<1^I\"\035\006d\025.\021\r:/n\031\030\"TQ\0212e,\017\0240Dz\033ME\017Z*@\017owK\025.>\nH\014`A>+\023_jHr}!\r\027x\004\\/v\010\024+(yNn5]\r7q\0034le#\006L,U1\0367!&\\\016:S_\003\010,\013Sr+pgC=B;3U\177;+ez iT#\030S\023e=\030z9s\010oUBY3`w\031&$:\006kahI&[cK\034x\032$v\025W\"M\013J^.\002\001@ \000\011B\004\001\033\014\020\0329D.0\nA@5(\020\024\023\007\025LW\023%&i3[EB\002%\\c\027\014#s\000t\014\003*A\0011\030Y,e9\032*6K\035\\ *\034NW\033P@N2]\016v{IV1\035L\007\0200\r*\004\005Df%#\025dm9H\rv1\001js2H\014\027!\001Pt:\034\0163Q<^w;]eg3\025di9Z,vq9Fo6Kj%\002\004@(1J&\003\001D\\0\026\001@5(\020\006\023\022PmF\013Mf \031H\n\007+\011Xi1H\n\007\023%Za9\036$\004z\r&P\020\024LW\033A^n2\031.#\004\006\022\002@` \017\017\020\020\016Ann^\032#K8mi^\013M/R<11kc*o \002*\004;\014NE-9;\022w\032[kMM]=A@&Y}VX\002LZb8scx}eZ\031\024soX\"y{vl\030]7\034\036@>5aw\0350\007c([ZxF\020y|\021\030\\Gk!OYgF}V3C\004\"-\023\024es\007o'A ^?\002v`B\r\177BE3?GK<\013ZZ\\\005B[JT\004\003\000@\000\023\004\010\002P\030 8\023\010,`\011\003\000jP \030&\002*Tf\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\036\014\007 0\r*\004\005Df4\0331Bs9H\006B\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\013$\0049Hb:\030\016\000`\032T\010\013\011L%\006\031$@1\034N'\002\002YJr4Tm\026;8X $[L2q\000Z #\033n\"\003\005jt4\033n&KiJd\020\035.6)\001^n6\036&\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030 1\020\024\006\002\000]<\034L\177g\011.BU\027\020:_s\017b_m\001\017c\010\027X\021\033N\031AgU\025\030E+FC\030\034vJ\0137uuU\\Yd$LR\005D<~\000@\033xp,1J\0012w3:E-^X\"vb8a\006x\024&rRC\017(1 ;EZ*UAP-\rnY?JWbl%4\003C6Z&h1a}t\006\037l\000zHz22q^8P,bcQ\030\035!Z81cf\000\024G` \030\004\000\001\030 @\035YB\003J\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ae3\025di)Z,vq0@I7\030ec\010|`\035\003\000jP ,&\026+\031.&JMRg7\010\nG\023Uft\020\023LW#]^r5L'#\001`\014\003*A\0011\031DPc\024H\006\023Idr +\031.&JMRg7\013\004\004K9F.\020\013$\0043=d 0].FC=di=\031,B\003Ufe\020\033mfcdbE\030\020``\032T\010\003\011O\nf+IRS4Ymb\002\rXa9\\d\003!\001 u1\033\r\026\031\001 r4[,\027\023d@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\005R\002\034f0A\000! \024\010\002\001\000+9:(ESF,j~\030}T2\017+3YK(|AdO\011DT_\001feDV;m\004\017Iu\007m7:oEyh\020\177\034N@3\\|\"HC\0274Jh\023[H\0130OiC.T<TXl\027\004*k7Lc6J6\002z*\022&\003r8iZ#dAvB\014R{\014SD\n`<\"^s(V\024T\020nh\031[U\035\013\031p\0107\nG\034,\011!#\014f5`]\0019O\023:?\035y+\003t,1\030riy\032K\010R\003\\ Kri\024q\000\0200\026xy9Fq:,`F\003y\020\006m\0331\026\027:\005O@Ff8\006YTi_+\022#-vqn\027L'\016\r\026%ZP\013alR!lmf\004\177ul.>Nd\013\rR\036e#^.\001\037\004dv44! \014jkQ5O\003-Uo'\027\177\001\014\010<81M\014e\006P}\0239~F\014\033\032[\177IK2~x\014\004\003\000@\000\023\004\007R0/L!3\000$\014\003*A\000a\030\011*S\030H\006\001p\030\006U\002\002B1:I&A\020\021\014\027#\004@S2XnW\023%hy\026\010\011\026s\014\\1\027\014\005@0\r*\004\005DdU\033\025Fu9\031$\005\033\025dv2\\D\004\033\025dt4YM\026\033\005hi7[D\004\013Uhh7\\M\027#da\001B@O`\004K\034z`kP3rjU\011AUuB(\005l\014VkQba_\035k\032^\014E \017K\004 \0249\033|<\021bE A\r\020Z\0147*z6\022\010\nZv4 3 -\011\027I%I,b\022YY\010\003c~x\ne[\004\003Y.\001\033El>M]iN\032B\022VL\022\027\021m\034R\032\011KI!\nf8\036\nu)\025!1f:4`V\0319f8m8\031i\016.t[Vd\007O0\020\014\002\000\000L\020 \0114a\001O\014\"s\000T\014\003*A\001!\0309,e9\032*6K\035\\,\020\022-f\0318b\037\030\007 `\032T\010\013\011EJf+IRS4Ymb\002Qdu9]\004\004s\025hw7\\M3\011l`9\003\000jP ,&2*\031.&kL@o3\010\016W\033\024@a:\010\r\007#Q`s\035\013ew;]n.;\031.&KMRg7\013L6{4^R(\020$\002C\014R0\030\014$S\001\014\014\003*A\0001\030q&e1].&)\001&e9\035LW\021\001\036C)T\004\005\023\025fp7[LF+Ha\001D@P\030\010\002pQLY\020Pw:f\n4<\027v\033X:Sz\177\024\027D0gnO}\027cNj6\017&Qu\030y\003PK\"/9lkn!Q\030:\022\014!\025w\011\0247W_4L;\177\\\177r+-&\033dW3\034,\030\036\006jQ\\B\000\011\035D\"S\r$cI6=O0\003\037D=\023/P!\036\024qk3!K'E4rH*i\025\"q\026\036:h\023W\034e;\001iV=B^lk\\\0101\026\037\001\000`\020\000\004a\002\000M\006\010\r\024b\027\030\005 `\032T\010\n\011CJf+IRS4Ymba\001\022n1KF\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030Nf\003H\030\006U\002\002b3\022QJr6\\d\006{\030@u9Y$\006\013P@h:\035\016\007\031h^/;]nrsYJr4\\m\026;8\\c7[%w\023AB \024\030e\023\001@b,\030\n@`\032T\010\003\011Hjf+IRS4Ymb\002QRm2H\n7#\005Zp4[Lr\002\005jt4\033n&KQr !P&\010\014$\005\001@@\032!LuOB\000\010+\026\026:h\011\021\021\r\030W`JZm{![9Y|Np.rCt@K\007a\030(rNfzT\\\030yBcuS4\031M^C8\0365AnP\nOg\001q\035P$w\020ItFQ?Q\030!#S6\n_2y\023\001Q\001\030\0374\032r(B\003\024^AiyfY('oKU\013~.!\014F]);g\013PDCs<d\010(Jnt=\004@\026\025$\0177;\023\007(\010\006\001\000\000&\010\020\005:0&L!3\000$\014\003*A\000a\030\011*S\030C&\000X\030\006U\002\002B0\"Y\022S L%s\0014\014\003*A\0011\031\031,i9X$\004K9he9\033L\027#%^n0[\004\005\033\025dv4XlR\002\005fs7Xm\026\013QRo7\014\020 \010(\005\002\000@ \014(u\032s e<\022\005QXlg\031}'(\032YD\0020L\002x\"%O\020;-jN%b&+(_]Ul\031xJB9\037OH;O\"%=S\n+4mp/?G(Z-BwBO f\036q4H\021EjH\\\025`#Q\020G`pz #\001H4\034\025ek.x ;aJ5Kw\0028e8Vf.m\014L\n8J1\022Mty\"\032\n`#{T\r\024t26hPMf\011\026$B/4\"T\r4\022RX&C\0355)vt\n#\022\037,\025zr\007`;\027Y\031Qr9\036ms#%\000\030=Q\177s('\033u`\037jJH \004fJBqU\001\"x+AkX\032_\003%pi2\036\032q'8'XQ|_w+\004plj\011V-;\"\020\0313C]>\r~y\016M:Y\011'&mL|\0050Y\0335Lw\025l\"p\\ Ll#([|r\016Jn{\177#4;91w\001\000`\020\000\004a\002\000\\&\006\011D\0260\004A@5(\020\014\023\001\025*3\0104`\013\003\000jP (&\004+\022*4\011D^0\026A@5(\020\026\023\023\025M\027\033\004@I7\035\014W\0239Bt4[mf\0130@S2\\NfK\rJ  \\n6{\rRa:\032-vqD$0\010\001@5(\020\006\023\004Qj\002\002I^o:\010\006#\004\010\002\n\001 @\020\010\002R\0018-5,\"\003a+5\011L\027Hd\001|_ffuH2^o2\006\177\rTV($4Lb\027\006+FV:(Bu;\0218 \0038:n{Fn;{jx\026NA\023$XA\032\177\"]E\011.,\016Rh\\HiqPL\016'9iVU`\nmD Qa}[$/i\rxF9Soe#L=(\026\025+\007-]\031s-\0214P\020kuZNph\\\031\011=sE|,\002NK\016_Z\003\007%\014\017^0|5\034|?Ku\031QHJ\013wd\n7Qk=YV\017MlD\006vaI\03468E`\011^eg\017EDr\177AQKZ#x- \025Ggm\017p!5\024`%d9\0116v?.=\034b26XaHTtc\016z\"u-\005\030\"\036\r\006$7aJW]\n}s41Uzlv(O%+;\004kC#K\022RX2Bm\014@ny\003;XM\030`\014\030ddjg` \030\004\000\001\030 @\027\011AB1\005L\001\0200\r*\004\003\004`%*Lb\r\030\002``\032T\010\n\011A\ndJM\0021\027L\005P0\r*\004\005Dde3%fa\020\022-g#\025dn0]\r\026{9Bl\020\024lW\023YRc2H\010\027\033M^c4X.FK=\\1\011\014\002\0000\r*\004\001Da\024:@@R7[nB\001La\002\000B@(\020\004\002\000];\010;ASU#3wnpH|4\020Q\007U\024tU\030tsC\033Ff\0321PU~Br$iO#$E\014HL>&\022\027{q}F8 \004Ea8\ra>x)L+sD\026\027\027RK3~J.\024Zn&c\007\010uIT\010Lu2\021]#Z3IR+\\_\034*C6T^\034G#/Z\0308\023\002U%7#at \020\034\005:~[\0022^Fldn~NX;,z7},F$\013\031\017\001b5;HI4\003^h\004P\022L\025\\fIAy9\032q4@7H\006\007R\001[4y\034kw\005<}uo0\nD\030'c\177 \034H:=C5)GaZGLBp>.#\\BFbU\026\011\00331l+,\027g\003Qg'lI>}\007l\013C\032^\007\003\037GPJCf!\037KSD-cTEH7\013zm\006-ma\006\025r~\011\032\036)B\024~.,:'J%bIC(\010\006\001\000\000&\010\017<`a\030Bf\000H\030\006U\002\001B0\022U&1\006L\00100\r*\004\005\004`E2%&A\030Kf\002h\030\006U\002\002b22YRs0H\011\026sQJr7\030.FK=\\a6\010\n6+Ili1Y$\004\013Mfo1Z,\027#%^n\030DF\001\000\030\006U\002\000b0J\035  )\033mw!\000h0@b (\014\004\0018u|\021z\007\033cc\000\017kg\024z\\\004\007}\011|v+4b\031z]eV\013\003v\027\016\021\033 7\037!W.&\033\037vMG[1\rH\0302\000a\034\016A+pp\003 \014F|\177[I[\0221ftjyOi4-F]\002Fy\031g\033|\"O\017\000/`\n\022\035D us%'*\\\032$\021o=eS6nSA|_U\005eDZnajBu\r\032@GR+\033G7:0\023]\033 @@0\010\000\0020@{f\006\011D\0260\004A@5(\020\014\023\001\025*3\0104`\013\003\000jP (&\004+\022*4\011D^0\026A@5(\020\026\023\023\025M\027\033\004@I7\035\014W\0239Bt4[mf\0130@S2\\NfK\rJ  \\n6{\rRa:\032-vqD$0\010\001@5(\020\006\023\004Qj\002\002I^o:\010\006S\004\006\022\002@` \nh\001]rP\037\006\021\010q\0030\033cp:\022\017\027\027/@D\010H5]<\025,>\032+\023_XG\022Zg\024v<n\017fU\017L\024\007,`Im('\025LH8fKd\020>\025bO}P\000y\016XSap3p\026\023pX#:^JL\n^m\003QPo\0117x\006\\\007J])eC\022B\"~\035D(fN\036\004v]3Gxk\037-\003GP.\017U\032YFL\033Ldc,7b&Y\014\004\003\000@\000\023\004\010\003\035\030 1C\010,`\011\003\000jP \030&\002*Tf\020i@\026\006\001U @@L\010U:\030-\003\010\\`\025\003\000jP \034&\016)X-G!\001\030a5Y$\004\033%hy\030F\006\0010\030\006U\002\002B0zaFe9\035\004\004*h@b<H\010E\032Pb\030\030\005@`\032T\010\003\011Ck\006\033\025dt\020\021+\"\003\011r \"\024jC\011\004`\037\003\002%(2\"\rw\006@!\020\010X$c0P\014FK\035fi3]\016'+Mh.1[mS\004\010\002\n\001 @\020\010\002ZT\0147VK\177^[h:*]X[r\037Bj\035#-,\022s61?\021\036\177\022.aI>c[G\0054G\032'S`1\013wSu\016\031;D,\017w\r(\002w8\03540\0165\005\023A\003.' 6\n\011\032\016\177R\014(E\0270\025e*5mM\031E-r\036\016\031>VT/yE\013*T'\026iAm'\033C\022+h\024\035\0308j\011Z\010xDuh6\002\000{6\002??GQ}\177 \000E6h\0075\0301%\nij{2K\004\001\013f\016x|*\003F\r-\r\"W\032_)k\000\025L~`*I>6c:\017z\003zC~:9\006\004\005@|t\010.LEP%/qWx9gS\025\000\030\005\013|\014Y@sWVm9X-g0!nnG\034O2\022C17W\026T\035rV9\\p,\034oc2\023N\030C3\005\034tvy_k\r:>\035\032%kU-+:)\024%\r}$|w\034  \030\004\000\001\030 @\024Y@v1\020L\003p0\r*\004\005\004c\005C\rJr:\010\011\026sQJr7\030.FK=\\a6\010\011\026s\014\\1\013\014\002@0\r*\004\005DaUC\rJr:\010\n&{=h !P&\010\020\004\024\002A\000 \020\005\"haEG#CtAvp\031\020\rXh[\02450X6^\027l+Iz\010+h\010o\036\"N+\025;[\003! \031wB\025\030h\022\017\035FB:NR\017L,=eU\025&EBTN]\\yR;!\001;w\017\025`VWD\004\022;-$jc]A($\031\011\177?8\027Z2E\025*(\020\022r4L>O?\036P\005\000hF^r\023\002 S '\013+\000djz\r1LTL\010SB\037.t\0142'\026cooEFK0YpZ?UH\030>Q\"^(8\021K\006E\020\0043Vrj\024(ZLun jDW;/I~\006\034 IWlH=hj~Y\002J\035R\032\nD1J}\030YA\024=\r\025[&=d\036\004}l\005\005Aj ox&\022-[\"\033a\007#wN`2W\"M6`Of:\020BO92`f)/\033U\014S&E>G\001HUoEL9*RCEQ\022bKh@@0\010\000\0020@sF\004\001DB0\017A@5(\020\024\023\014\026\0146+Ih $[NF+I\\a:\032-vs\005X $[L2qD60\014A@5(\020\026\023\011\026\0146+Ih )\033mw!\001\006A\020\014&\003\021Pa\001D@P\030\010\003->\033b\"\032M\013nG\026\nYvP\000Le\024\021\024HW\023= !U3\024#.xn\\1yl3\016mSt\033xYA,I\021\\'T+SE\021^\032\010\004\027V[%EDLTXN\0339\005B\025\036)r#[L\"-@o|;\011N,k3vg$DX`Ob@R\016\001\007\014TJ\016\031 \017HV\006\034+\010jU#q\030\026w2D\016)\034WI\016K\031a\001\027\016\023+he{k\001\000`\020\000\004a\002\000SF\003qDB0\017A@5(\020\024\023\014\026\0146+Ih $[NF+I\\a:\032-vs\005X $[L2qD20\013A@5(\020\026\023\010\026\0146+Ih )\033mw!\001\006A\020\035F\023\004\010\002\n\001 @\020\010\003\003\022U|Vc)X\004H\007a>Dq>\004efR\027k\r\\{3=kW#\021R\014<L/\177\013\005wwBf=A\0319a9\rRHin\016\"\011fH\031nC]\017lnLJq|\030\037%\027(Aip&.=2|\017\036sG\032,J\035:bV\177\035Ef!L`{\02055OJJ'\026< &#j#\rU|8C`\030|v]dg\013Dva\"\007tK)\"\016O\003p]LGf`2dI[0!&fE\032j\034u'\017{GH\031UX6\035\004\027\036sJ\007\006\036o\023\004j\033\001x.\011ar\026f_\004#\027yoQH\177\032[u&\030[J\031z5#9\0178Z+3\023p\001U<\0061\025}mvA3\001~p\\p\001b:F\024a|^!^jU|\034c\027ci\027\020C#\036B~(\036j xx\006?4\002P\0307/iw,r\1771\020/(R&b\025]\021M${` \030\004\000\001\030 :\023\002\014b!\030\007``\032T\010\n\011F\013\006\033\025dt\020\022-g#\025dn0]\r\026{9Bl\020\022-f\0318b\036\030\007\000`\032T\010\013\011E+\006\033\025dt\020\024Mv{P@C H\016c\011\000b0\031\r\006\010\014$\005\001@@\024pN\017%)S\006.\016a'RE=M\\\016Q{\023\0318\020\032\0333\003i]\021qk\027Lt=%_\r,0\007\033\000.6\020\n>6ElFxh\0318\032\025)\030\014so9Qcpt\031LgzI\024@(\023\027%\007\n\032\014 \036L\005:_\031\033z\037zHD\0023vsj7\022g'Q\035d5\007#9=\001x0pp\016;06Dw=<#\017B)bqO>\025\007/yExU\0179wh\010\006\001\000\000&\010\020\005T0-\014!3\000$\014\003*A\000a\030\011.W\030DF\001\000\030\006U\002\002B0K\011JT)\025*5#\025H1\rL\003\0200\r*\004\001Db&\023\025(R*TjF+\020@R7[nB\002\r\002s\030FF\001@\030\006U\002\000b1\013\011JT)\025*5#\025H )\033mw!\001\006A\030 @\020P\n\004\001\000@\032K#Mt\023\005\016\nP\rz\022Vpe\023m%y5k%\r\016Q[\004SDpk!\006\001\005pH\177m\032\017Ry\003\r0Q\020~G7\022X}?\0229V}\037j\037\r/_AMufxuyVz%\026='K-`t\014t\030<\035t<\177\037hM9v\023#Xh;>JTyr\004_\005O\037\011\n&`2\034e,q.\037{\010\023\017U11|c\002@s%5g\003xUe?Q%vw\007\"_b?\005@dgVTd\023\034@r-4k|\014,$m>c~\031\007 c8fqpE3M\007_%<9\rr\033->i\002fgM-\014\034X]_\011\032\177|tv\000d\022s{]M\177~.0:;1T<;W4aQ\034j:1~V!z\027\013eZ}zAe|k_o\0116IoC\021Az\031\001\\\\q\0017R,CN\031n1<C0\0117\030uDUXGD\000h5Z'\023\n\002\001@ \000\017\177\177\177";
-    static {
-        try {
-            org.ibex.net.SSL.addCompactCAKeys(new java.io.ByteArrayInputStream(unpack(DATA)));
-        } catch(Exception e) {
-            System.err.println("Error loading root CA keys: " + e.getMessage());
-        }
-    }
-    public static void load() { /* force clinit  */ }
-    private static byte[] unpack(String s) {
-        int len = s.length();
-        if(len % 8 != 0) throw new IllegalArgumentException("not a multiple of 8");
-        byte[] ret = new byte[(len / 8) * 7];
-        for(int i=0; i<len; i += 8) {
-            long l = 0;
-            for(int j=0;j<8;j++) {
-                l <<= 7;
-                l |= (s.charAt(i + j) & 0x7fL);
-            }
-            int base = (i / 8) * 7;
-            for(int j=6; j>=0; j--) {
-                ret[base + j] = (byte)(l & 0xff);
-                l >>>= 8;
-            }
-        }
-        return ret;
-    }}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/SwingVerifyCallback.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/SwingVerifyCallback.java
deleted file mode 100644 (file)
index 832ef2f..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.ibex.net.ssl;
-
-import javax.swing.*;
-
-import java.awt.*;
-
-import org.ibex.net.SSL;
-import org.ibex.crypto.*;
-
-public class SwingVerifyCallback extends JDialog implements SSL.VerifyCallback {
-    private Component owner;
-    
-    public SwingVerifyCallback(Component owner) {
-        this.owner = owner;
-    }
-    /*
-        super(owner,"Certificate Verification",true);
-        setModal(true);
-        
-        JTextPane tp = new JTextPane();
-        doc = tp.getStyledDocument();
-        JScrollPane sp = new JScrollPane();
-        sp.setPreferredSize(new Dimension(400,300));
-        sp.setViewportView(tp);
-        sp.setAutoscrolls(false);
-
-        this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
-        JComponent bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT));
-        JButton accept = new JButton("Accept");
-        JButton reject = new JButton("Reject");
-        accept.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
-            accepted = true; 
-            hide();
-        }});
-        reject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
-            accepted = false; 
-            hide();
-        }});
-        bottom.add(accept);
-        bottom.add(reject);
-        getContentPane().add(BorderLayout.CENTER,sp);
-        getContentPane().add(BorderLayout.SOUTH,bottom);
-        pack();
-    }*/
-    
-    public static String prettyFingerprint(byte[] fp) {
-        StringBuffer sb = new StringBuffer(fp.length*3);
-        for(int i=0;i<fp.length;i++) {
-            if(i>0) sb.append(":");
-            sb.append("0123456789abcdef".charAt((fp[i] & 0xf0) >>> 4));
-            sb.append("0123456789abcdef".charAt((fp[i] & 0x0f) >>> 0));
-        }
-        return sb.toString();
-    }
-    
-    public synchronized boolean checkCerts(X509.Certificate[] certs, String hostname, SSL.Exn exn) {
-        final boolean[] ret = new boolean[1];
-        JTextArea ta = new JTextArea();
-        ta.append("Subject: " + certs[0].subject + "\n");
-        ta.append("Issuer: " + certs[0].issuer + "\n");
-        ta.append("Start Date: " + certs[0].startDate + "\n");
-        ta.append("End Date: " + certs[0].endDate + "\n");
-        ta.append("MD5: " + prettyFingerprint(certs[0].getMD5Fingerprint()) + "\n");
-        ta.append("SHA1: " + prettyFingerprint(certs[0].getSHA1Fingerprint()) + "\n");
-        ta.setEditable(false);
-        ta.setOpaque(false);
-        JScrollPane sp = new JScrollPane(ta);
-        sp.setPreferredSize(new Dimension(300,150));
-        final Object[] messages = new Object[] {
-                "The SSL Certificate the server presented could not be verified.",
-                exn.getMessage(),
-                sp,
-        };
-        Runnable r = new Runnable() { public void run() {
-            int n = JOptionPane.showOptionDialog(
-                    owner,
-                    messages,
-                    "Confirm Server Certificate",
-                    0,
-                    JOptionPane.WARNING_MESSAGE,
-                    null, 
-                    new Object[] { "Accept", "Reject" },
-                    "Accept");
-            ret[0] = n == 0;
-                    
-        } };
-        if(SwingUtilities.isEventDispatchThread()) {
-            r.run();
-        } else {
-            try {
-                SwingUtilities.invokeAndWait(r);
-            } catch(Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return ret[0];
-    }
-
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/Test.java b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/Test.java
deleted file mode 100644 (file)
index aa43ccb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.ibex.net.ssl;
-
-import org.ibex.net.SSL;
-import java.io.*;
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        SSL.debugOn = true;
-        if(args.length < 2) { System.err.println("Usage: SSL host port"); }
-        String host = args[0];
-        int port = Integer.parseInt(args[1]);
-        SSL ssl = new SSL(host,port);
-        //ssl.setTLS(false);
-        ssl.getOutputStream().write(SSL.getBytes("GET / HTTP/1.0\r\nHost: " + host + "\r\n\r\n"));
-        cat(ssl.getInputStream());
-        ssl.close();
-        
-        // try to resume
-        ssl = new SSL(host,port,ssl.getSessionState());
-        ssl.getOutputStream().write(SSL.getBytes("GET / HTTP/1.0\r\nHost: " + host + "\r\n\r\n"));
-        cat(ssl.getInputStream());
-        ssl.close();
-    }
-    private static void cat(InputStream is) throws IOException {
-        BufferedReader br = new BufferedReader(new InputStreamReader(is));
-        String line;
-        int count = 100;
-        try {
-            while((line = br.readLine()) != null && --count >= 0) System.out.println(line);
-        } catch(SSL.PrematureCloseExn e) { /* ignore */ }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat b/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat
deleted file mode 100644 (file)
index c97bfab..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/Makefile b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/Makefile
deleted file mode 100644 (file)
index 91e2141..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-.SECONDARY:
-
-# 
-# What to build
-#
-
-# Java sources that are part of the compiler/interpreter
-java_sources = $(wildcard src/org/ibex/nestedvm/*.java) $(wildcard src/org/ibex/nestedvm/util/*.java)
-
-# C sources that are part of the compiler/interpreter
-mips_sources = crt0.c support_aux.c
-mips_asm_sources = support.s
-
-mips2java_root = $(shell pwd)
-build = $(mips2java_root)/build
-tasks = upstream/tasks
-
-#
-# MIPS Settings (don't change these)
-#
-flags = -march=mips1
-MIPS_CC = mips-unknown-elf-gcc
-MIPS_CXX = mips-unknown-elf-g++
-
-# Be VERY careful about changing any of these as they can break binary 
-# compatibility and create hard to find bugs
-mips_optflags = -O3 -g \
-       -mmemcpy \
-       -ffunction-sections -fdata-sections \
-       -falign-functions=512 \
-       -fno-rename-registers \
-       -fno-schedule-insns \
-       -fno-delayed-branch \
-       -freduce-all-givs
-
-MIPS_CFLAGS = $(mips_optflags) $(flags) -I. -Wall -Wno-unused -Werror
-MIPS_LD = mips-unknown-elf-gcc
-MIPS_LDFLAGS= $(flags) --static -Wl,--gc-sections
-MIPS_STRIP = mips-unknown-elf-strip
-
-# Java compiler/VM settings
-JAVAC = javac
-JAVA = java
-ifeq ($(firstword $(JAVAC)),gcj)
-       JAVAC_NODEBUG_FLAGS = -g0
-else
-       JAVAC_NODEBUG_FLAGS = -g:none
-endif
-
-bcel_jar = upstream/build/bcel-5.1/bcel-5.1.jar
-classpath = build:$(bcel_jar)
-
-GCJ = gcj
-EXE_EXT = 
-
-#####
-
-java_classes = $(java_sources:src/%.java=build/%.class)
-mips_objects = $(mips_sources:%.c=build/org/ibex/nestedvm/%.o) $(mips_asm_sources:%.s=build/org/ibex/nestedvm/%.o)
-
-usr = $(mips2java_root)/upstream/install
-PATH := $(usr)/bin:$(PATH)
-export PATH
-
-#
-# General Build Stuff
-#
-all: $(java_classes) $(mips_objects)
-ifdef NATIVE_MIPS2JAVA_COMPILER
-all: build/mips2java$(EXE_EXT) $(mips_objects)
-endif
-
-# FIXME: this is why I use 'include Makefile.upstream' in ibex....
-$(tasks)/full_toolchain: $(mips_objects)
-$(tasks)/build_gcc_step2: $(mips_objects)
-$(tasks)/%:
-       $(MAKE) -C upstream tasks/$* usr="$(usr)" MIPS_LDFLAGS="$(MIPS_LDFLAGS)" MIPS_CFLAGS="$(flags) $(mips_optflags)"
-
-upstream_clean_%:
-       $(MAKE) -C upstream clean_$* usr="$(usr)"
-
-#
-# Interpreter/Compiler/Runtime Java Compilation
-#
-
-# This works around a gcj -C bug
-ifeq ($(firstword $(JAVAC)),gcj)
-build/org/ibex/nestedvm/util/.Dummy.class:
-       mkdir -p `dirname $@`
-       touch $@
-$(java_classes): build/org/ibex/nestedvm/util/.Dummy.class
-endif
-
-$(java_classes): $(java_sources) $(bcel_jar)
-       $(JAVAC) -classpath $(classpath) -d build $(java_sources)
-
-$(bcel_jar): upstream/tasks/extract_bcel
-       @true
-
-# GCJ Stuff
-# FIXME: We're cramming more than we need into the binary here
-build/mips2java$(EXE_EXT): $(java_sources) $(java_gen_sources)
-       @mkdir -p `dirname $@`
-       $(GCJ) -s -o $@ --main=org.ibex.nestedvm.Compiler $(java_sources) $(java_gen_sources)
-
-#
-# MIPS Binary compilation
-#
-build/%.o: src/%.c $(tasks)/build_newlib
-       @mkdir -p `dirname $@`
-       $(MIPS_CC) $(MIPS_CFLAGS) $($(notdir $*)_CFLAGS) -c -o $@ $<
-
-build/%.o: src/%.s $(tasks)/build_newlib
-       @mkdir -p `dirname $@`
-       $(MIPS_CC) -x assembler-with-cpp -c -o $@ $<
-
-%.s: %.c $(tasks)/full_toolchain
-       $(MIPS_CC) $(MIPS_CFLAGS) $($(notdir $*)_CFLAGS) -c -S -o $@ $<
-
-build/%.mips: build/%.o $(mips_objects)
-       $(MIPS_LD) -o $@ $< $(MIPS_LDFLAGS) $($(notdir $*)_LDFLAGS)
-
-build/%.mips: src/%.cc $(tasks)/full_toolchain $(mips_objects)
-       @mkdir -p `dirname $@`
-       $(MIPS_CXX) $(MIPS_CFLAGS) $($(notdir $*)_CFLAGS) $(MIPS_LDFLAGS) $($(notdir $*)_LDFLAGS) -o $@ $<
-
-build/%.mips.stripped: build/%.mips
-       cp $< $@
-       $(MIPS_STRIP) -s $@
-
-# MIPS Compiler generated class compilation
-ifdef DO_JAVASOURCE
-
-build/%.java: build/%.mips build/org/ibex/nestedvm/JavaSourceCompiler.class 
-       $(JAVA) -cp $(classpath) org.ibex.nestedvm.Compiler -outformat javasource $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< > build/$*.java
-
-build/%.class: build/%.java build/org/ibex/nestedvm/Runtime.class
-       $(JAVAC) $(JAVAC_NODEBUG_FLAGS) -classpath build -d build $<
-else
-
-build/%.class: build/%.mips build/org/ibex/nestedvm/ClassFileCompiler.class
-       $(JAVA) -cp $(classpath) org.ibex.nestedvm.Compiler -outformat class -outfile $@ $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $<
-
-
-endif
-
-# General Java Class compilation
-build/%.class: src/%.java
-       $(JAVAC) -classpath build -d build $<
-
-clean:
-       rm -rf build/tests build/org/ibex/nestedvm *.jar build/mips2java$(EXE_EXT)
-
-#
-# env.sh
-#
-env.sh: Makefile $(tasks)/full_toolchain build/org/ibex/nestedvm/Compiler.class
-       @rm -f "$@~"
-       @echo 'PATH="$(mips2java_root)/build:$(usr)/bin:$$PATH"; export PATH' >> $@~
-       @echo 'CC=mips-unknown-elf-gcc; export CC' >> $@~
-       @echo 'CXX=mips-unknown-elf-g++; export CXX' >> $@~
-       @echo 'AS=mips-unknown-elf-as; export AS' >> $@~
-       @echo 'AR=mips-unknown-elf-ar; export AR' >> $@~
-       @echo 'LD=mips-unknown-elf-ld; export LD' >> $@~
-       @echo 'RANLIB=mips-unknown-elf-ranlib; export RANLIB' >> $@~
-       @echo 'CFLAGS="$(mips_optflags)"; export CFLAGS' >> $@~
-       @echo 'CXXFLAGS="$(mips_optflags)"; export CXXFLAGS' >> $@~
-       @echo 'LDFLAGS="$(MIPS_LDFLAGS)"; export LDFLAGS' >> $@~
-       @echo 'CLASSPATH=$(mips2java_root)/build:$(mips2java_root)/$(bcel_jar):.; export CLASSPATH' >> $@~
-       @mv "$@~" "$@"
-       @echo "$@ created successfully"
-
-#
-# Runtime.jar
-#
-
-runtime_classes = Runtime Registers UsermodeConstants util/Seekable
-
-tex.jar: $(mips_objects) $(runtime_classes:%=build/org/ibex/nestedvm/%.class) upstream/tasks/build_tex
-       echo -e "Manifest-Version: 1.0\nMain-Class: TeX\n" > .manifest
-       cp upstream/build/tex/TeX.class build
-       cd build && jar cfm ../$@ ../.manifest \
-               TeX.class \
-               $(runtime_classes:%=org/ibex/nestedvm/%.class) \
-               org/ibex/nestedvm/*.class \
-               org/ibex/nestedvm/util/*.class
-
-runtime.jar: $(runtime_classes:%=build/org/ibex/nestedvm/%.class)
-       cd build && jar cf ../$@ \
-               $(runtime_classes:%=org/ibex/nestedvm/%.class) \
-               org/ibex/nestedvm/Runtime\$$*.class \
-               org/ibex/nestedvm/util/Seekable\$$*.class
-
-.manifest:
-       echo -ne "Manifest-Version: 1.0\nMain-Class: org.ibex.nestedvm.RuntimeCompiler\n" > $@
-
-nestedvm.jar: $(java_classes) .manifest
-       cd build && jar cfm ../$@ ../.manifest $(java_classes:build/%.class=%*.class)
-
-compact_runtime_compiler.jar: $(java_classes) .manifest $(tasks)/build_gcclass
-       mkdir -p tmp/pruned
-       java -cp upstream/build/gcclass/build:$(bcel_jar) com.brian_web.gcclass.GCClass \
-               build tmp/pruned \
-               org.ibex.nestedvm.RuntimeCompiler.main 'org.ibex.nestedvm.Runtime.decodeData' \
-               'org.ibex.nestedvm.UnixRuntime.<init>' 'org.ibex.nestedvm.Runtime.initPages' \
-               'org.ibex.nestedvm.Runtime.clearPages' 'org.ibex.nestedvm.Runtime.syscall' \
-               'org.ibex.nestedvm.Runtime$$CPUState.dup'
-       cd tmp/pruned && jar cfm ../../$@ ../../.manifest .
-
-# This is only for Brian to use... don't mess with it
-rebuild-constants: $(tasks)/build_newlib
-       @mkdir -p `dirname $@`
-       ( \
-               cat \
-                       src/org/ibex/nestedvm/syscalls.h \
-                       $(usr)/mips-unknown-elf/include/sys/{errno.h,unistd.h,syslimits.h}; \
-               $(MIPS_CC) -E -dM $(usr)/mips-unknown-elf/include/sys/fcntl.h | awk '$$2 ~ /^[OF]_/ { print; }'; \
-       ) | ( \
-               echo "// THIS FILE IS AUTOGENERATED! DO NOT EDIT!"; \
-               echo "// run \"make rebuild-constants\" if it needs to be updated"; \
-               echo ""; \
-               echo "package org.ibex.nestedvm;"; \
-               echo "public interface UsermodeConstants {"; \
-               tr '\t' ' ' | sed -n ' \
-                       s/  */ /g; \
-                       s/ *# *define \([A-Z_][A-Za-z0-9_]*\) \([0-9][0-9x]*\)/    public static final int \1 = \2;/p'; \
-               echo "}"; \
-       ) > src/org/ibex/nestedvm/UsermodeConstants.java
-
-#
-# Tests
-# These are simply here for convenience. They aren't required 
-# to build or run mips2java
-#
-
-build/tests/Env.class: build/org/ibex/nestedvm/Runtime.class build/org/ibex/nestedvm/Interpreter.class
-
-# Generic Hello Worldish test
-test: build/tests/Test.class
-       $(JAVA) -cp build tests.Test "arg 1" "arg 2" "arg 3"
-inttest: build/tests/Test.mips build/org/ibex/nestedvm/Interpreter.class
-       $(JAVA) -cp build org.ibex.nestedvm.Interpreter build/tests/Test.mips "arg 1" "arg 2" "arg 3"
-cxxtest: build/tests/CXXTest.class
-       $(JAVA) -cp build tests.CXXTest
-
-# CallTest
-build/tests/CallTest.class: build/tests/Test.class
-calltest: build/tests/CallTest.class
-       $(JAVA) -cp build tests.CallTest `date|perl -pe 's/\D+/ /g;'` `id -u`
-
-# FDTest
-build/tests/FDTest.class: build/tests/Test.class
-fdtest: build/tests/FDTest.class
-       $(JAVA) -cp build tests.FDTest
-
-
-# Simple
-Simple_LDFLAGS = -nostdlib
-simpletest: build/tests/Simple.class
-       $(JAVA) -cp build tests.Simple
-
-# Paranoia
-Paranoia_CFLAGS = "-Wno-error"
-Paranoia_LDFLAGS = -lm
-paranoiatest: build/tests/Paranoia.class
-       $(JAVA) -cp build tests.Paranoia
-
-#
-# Freetype Stuff
-#
-FreeType_CFLAGS = -Iupstream/build/freetype/include
-FreeType_LDFLAGS =  -Lupstream/build/freetype/objs -lfreetype
-
-FreeTypeDemoHelper_CFLAGS = $(FreeType_CFLAGS)
-FreeTypeDemoHelper_LDFLAGS = $(FreeType_LDFLAGS)
-build/tests/FreeTypeDemoHelper.o: $(mips_objects) $(tasks)/build_freetype
-build/tests/FreeTypeDemoHelper.mips: 
-build/tests/FreeTypeDemo.class: build/tests/FreeTypeDemoHelper.class
-
-FTBench_CFLAGS =  $(FreeType_CFLAGS)
-FTBench_LDFLAGS = $(FreeType_LDFLAGS)
-build/tests/FTBench.o: $(tasks)/build_freetype
-
-#
-# MSPack Stuff
-#
-MSPackHelper_CFLAGS = -Iupstream/build/libmspack/mspack
-MSPackHelper_LDFLAGS = -Lupstream/build/libmspack/mspack -lmspack
-build/tests/MSPackHelper.o: $(mips_objects) $(tasks)/build_libmspack
-build/tests/MSPack.class: build/tests/MSPackHelper.class
-
-MSPackBench_CFLAGS = -Iupstream/build/libmspack/mspack
-MSPackBench_LDFLAGS = -Lupstream/build/libmspack/mspack -lmspack
-build/tests/MSPackBench.o: $(tasks)/build_libmspack
-
-#
-# Echo
-#
-build/tests/Echo.class: build/tests/EchoHelper.class
-
-#
-# Libjpeg
-#
-DJpeg_COMPILERFLAGS = -o onepage,pagesize=8m
-build/tests/DJpeg.mips: $(mips_objects) $(tasks)/build_libjpeg
-       @mkdir -p `dirname $@`
-       cp upstream/build/libjpeg/djpeg $@
-
-#
-# Busybox
-#
-BusyBox_COMPILERFLAGS = -o unixruntime
-build/tests/BusyBox.mips: $(mips_objects) $(tasks)/build_busybox
-       @mkdir -p `dirname $@`
-       cp upstream/build/busybox/busybox $@
-
-busyboxtest: build/tests/BusyBox.class
-       $(JAVA) -cp $(classpath) tests.BusyBox ash
-
-#
-# Boehm GC
-#
-build/tests/GCTest.mips: $(mips_objects) $(tasks)/build_boehmgc
-       @mkdir -p `dirname $@`
-       cp upstream/build/boehmgc/gctest $@
-
-boehmgctest: build/tests/Env.class build/tests/GCTest.class
-       $(JAVA) -cp build tests.Env GC_PRINT_STATS=1  tests.GCTest
-
-
-#
-# Speed tests
-#
-
-build/tests/SpeedTest.class: build/org/ibex/nestedvm/Runtime.class
-
-tmp/thebride_1280.jpg:
-       @mkdir -p tmp
-       cd tmp && wget http://www.kill-bill.com/images/wallpaper/thebride_1280.jpg
-
-oldspeedtest: build/tests/DJpeg.class tmp/thebride_1280.jpg
-       bash -c "time $(JAVA) -cp build tests.DJpeg -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg"
-       @echo "e90f6b915aee2fc0d2eb9fc60ace6203  tmp/thebride_1280.tga" | md5sum -c && echo "MD5 is OK"
-
-djpegspeedtest: build/tests/SpeedTest.class build/tests/DJpeg.class tmp/thebride_1280.jpg
-       @echo "Running DJpeg test..."
-       @$(JAVA) -cp build tests.SpeedTest tests.DJpeg 8 -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg
-
-mspackspeedtest: build/tests/SpeedTest.class build/tests/MSPackBench.class
-       @if [ -e tmp/mspack/comic32.exe ]; then \
-               echo "Running MSPackBench test..."; \
-               cd tmp/mspack && $(JAVA) -cp ../../build tests.SpeedTest tests.MSPackBench 20 *32.exe; \
-       else \
-               echo "Run \"make check\" to get the MS True Type fonts for the MSPackBench test"; \
-       fi
-
-speedtest: build/tests/SpeedTest.class build/tests/DJpeg.class build/tests/FTBench.class tmp/thebride_1280.jpg build/tests/MSPackBench.class
-       @echo "Running DJpeg test..."
-       @$(JAVA) -cp build tests.SpeedTest tests.DJpeg 10 -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg
-       @if [ -e tmp/mspack/Comic.TTF ]; then \
-               echo "Running FTBench test..."; \
-               $(JAVA) -cp build tests.SpeedTest tests.FTBench 10 tmp/mspack/Comic.TTF tmp/mspack/Comic.TTF.render; \
-       else \
-               echo "Run \"make check\" to get Arial.TTF for the FTBench test"; \
-       fi
-       @if false && [ -e tmp/mspack/comic32.exe ]; then \
-               echo "Running MSPackBench test..."; \
-               cd tmp/mspack && $(JAVA) -cp ../../build tests.SpeedTest tests.MSPackBench 10 *32.exe; \
-       else \
-               echo "Run \"make check\" to get the MS True Type fonts for the MSPackBench test"; \
-       fi
-
-intspeed: build/tests/DJpeg.mips  build/org/ibex/nestedvm/Interpreter.class tmp/thebride_1280.jpg
-       time $(JAVA) -cp build org.ibex.nestedvm.Interpreter build/tests/DJpeg.mips -targa  -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg
-       @echo "e90f6b915aee2fc0d2eb9fc60ace6203  tmp/thebride_1280.tga" | md5sum -c && echo "MD5 is OK"
-
-#
-# Verification checks
-#
-
-check: $(patsubst %,build/tests/%.class, FTBench MSPackBench DJpeg GCTest) tmp/thebride_1280.jpg
-       @/bin/bash ./src/tests/check.sh running_from_make
-
-compiletests: $(patsubst %,build/tests/%.class,FTBench MSPackBench DJpeg Test FreeTypeDemoHelper MSPackHelper EchoHelper BusyBox GCTest Fork)
-       @true
-
-
-charts := $(shell find doc/charts -name \*.dat)
-
-# IVME Paper
-doc/charts/%.pdf: doc/charts/%.dat doc/charts/%.gnuplot
-       cd doc/charts; gnuplot $*.gnuplot
-       cd doc/charts; chmod +x boxfill.pl; ./boxfill.pl -g -o unfilled.eps $*.eps
-       cd doc/charts; ps2pdf $*.eps
-
-tex := java -cp $(usr)/../../build:.. TeX
-
-#tex := java -cp $(usr)/../../build:.. org.ibex.nestedvm.Interpreter ../tex.mips
-doc/ivme04.pdf: doc/ivme04.tex doc/acmconf.cls $(charts:%.dat=%.pdf) tex.jar upstream/tasks/extract_texinputs
-       cp upstream/build/tex/tex.pool upstream/build/tex/texinputs/tex.pool
-       cd upstream/build/tex/texinputs; echo '\latex.ltx' | $(tex)
-       cd upstream/build/tex/texinputs; ln -fs ../../../../doc/* .; rm -f ivme04.aux; touch ivme04.aux; touch ivme04.bbl
-       cd upstream/build/tex/texinputs; echo '\&latex \input ivme04.tex' | $(tex)
-       cd upstream/build/tex/texinputs; dvipdf ivme04.dvi
-
-pdf: doc/ivme04.pdf
-       open doc/ivme04.pdf
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/COPYING b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/COPYING
deleted file mode 100644 (file)
index b1e3f5a..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/ChangeLog b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/ChangeLog
deleted file mode 100644 (file)
index e3eaaaf..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-January 11, 2003
-    * [brian] Added Unistd.h as an interface so we can use its constants in
-              Runtime
-    * [brian] -o lessconstants option to compiler to emit all constants as
-              an addition of a field value and a small constant. This
-              prevents the classfile constant pool from overflowing on large
-              applications. This has a small performance impact. 
-    * [brian] Added stubs for the rmdir syscall and a minimal implementation
-              of sysconf
-    * [brian] Emit data segments as a series of <32k strings to avoid
-              hitting classfile limits
-January 10, 2003
-    * [brian] The compiler now outputs data segments as Strings rather than
-              huge int arrays.
-    * [brian] Cleaned up Makefile and upstream/Makefile to separate the 
-              required mips2java stuff from the tests. Ideally the tests
-              should be completelly separate from the main makefile but
-              keeping them integrated allows for better dependency checking
-              and faster builds.
-January 8, 2003
-    * Much thanks goes to Mohan Embar for discovering and fixing most
-      of the issues below.
-    * [brian] Updated Makefile to allow bulding with gcj
-              (make JAVAC="gcj -C" JAVA="gij")
-    * [brian] Updated Runtime.java to silently ignore SecurityExceptions
-              thrown from System.getProperty()
-    * [brian] Compiler now uses a PrintWriter for output rather than
-              PrintStream and properly closes the file on exit
-    * [brian] Made the htojava script a bourne shell script rather than a
-              perl script to remove the dependency on perl.
-December 29, 2003
-    * [brian] Changed build process to use -ffunction-sections, 
-              -fdata-sections, and --gc-sections
-    * [brian] Update support.s to use function sections
-    * [brian] Make the interpreter report the pc/sourceline of 
-              exceptions.
-    * [brian] Remove stdio calls from FreeTypeHelper
-    * [brian] Added gcc patch to fix -fdata-sections bug
-    * [brian] Added freetype patch to avoid stdio
-December 2, 2003
-    * [brian] Cleaned up a bunch of //FEATUREs and //FIXMEs. No major
-              changes, just cleanup.
-November 30, 2003
-    * [brian] Added crude support for O_APPEND and O_TRUNC
-
-November 29, 2003
-    * [brian] Moved all sources under org/xwt/mips - modified Makefiles
-              accordingly.
-    * [brian] Added org.xwt.mips.util tree containing SeekableData, 
-              SeekableByteArray, SeekableFile, and SeekableInputStream. 
-    * [brian] Made ELF.java use SeekableData rather than RandomAccessFile
-    * [brian] Made Runtime.java use org.xwt.mips.util.Seekable* for most
-              file operations.
-    * [brian] Added construtors to Interpreter.java that accept an InputStream
-              or SeekableData.
-    * [brian] Added support for the /dev/fd/n namespace and /dev/{null,zero}
-    * [brian] Added test/FDTest.java example and updated tests/Test.c
-    * [brian] Fixed absolute pathame bug on Win32
-    
\ No newline at end of file
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME.xls b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME.xls
deleted file mode 100644 (file)
index 9a1d740..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME.xls and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME04 Submission Report.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME04 Submission Report.pdf
deleted file mode 100644 (file)
index 5091df0..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME04 Submission Report.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME2.xls b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME2.xls
deleted file mode 100644 (file)
index b986c72..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/IVME2.xls and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/acmconf.cls b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/acmconf.cls
deleted file mode 100644 (file)
index 7df77f9..0000000
+++ /dev/null
@@ -1,442 +0,0 @@
-% ACMCONF DOCUMENT CLASS
-%    adapted from ARTICLE document style by Ken Traub
-%    Hacked for [preprint] option by Olin Shivers 4/91
-%    Fixed up for LaTeX version 2e [compatibility mode] by Peter Lee 10/9
-%       (with help from Simon Peyton Jones)
-%    Converted to a LaTeX2e document class by David A. Berson 11/94
-%
-% ARTICLE DOCUMENT STYLE -- Released 16 March 1988
-%    for LaTeX version 2.09
-% Copyright (C) 1988 by Leslie Lamport
-
-% To do:
-%  - Possibly move the commands related to 9pt size to a file size9.clo
-%    and write the stuff to unpack both acmconf.cls and size9.clo files
-%    from a single distribution file.
-
-%%% ACMCONF is a document class for producing two-column camera-ready pages for
-%%% ACM conferences, according to ACM specifications.  The main features of
-%%% this class are:
-%%%
-%%% 1)  Two columns.
-%%% 2)  Side and top margins of 4.5pc, bottom margin of 7.5pc, column gutter of
-%%%     2pc, hence columns are 20pc wide and 54pc tall.  (6pc = 1in, approx)
-%%% 3)  First page has title information, and an extra 4.5pc of space at the
-%%%     bottom of the first column for the ACM copyright notice. (You must
-%%%     use one of the commands \copyrightspace or \toappear{} to obtain this
-%%%     space.)
-%%% 4)  Text is 9pt on 10pt baselines; titles are 9pt bold sans-serif.
-%%%     (The acmconf.sty from which acmconf.cls was derived actually uses
-%%%     9pt bold roman for section titles.  Functionally, I have left this
-%%%     as is.  I have added a commented out alternate defination of
-%%%     \acmtitlestyle that uses sans-serif)  --DAB
-%%%
-%%% This document class supports a [preprint] class option that allows you
-%%% to run off a copy for a preprint -- with page numbers, "to appear"
-%%% information, and so forth. This is documented below.
-
-%%% There are a few restrictions you must observe:
-%%%
-%%% 1)  You cannot change the font size; ACM wants you to use 9pt.
-%%% 3)  You must start your paper with the \maketitle command.  Prior to the
-%%%     \maketitle you must have \title and \author commands.  If you have a
-%%%     \date command it will be ignored; no date appears on the paper, since
-%%%     the proceedings will have a date on the front cover.
-%%%     Optionally, you may have an \affiliation command with text, such
-%%%     as company or university name and address, that will be centered
-%%%     just below the author(s).
-%%% 4)  Marginal paragraphs, tables of contents, lists of figures and tables,
-%%%     and page headings are all forbidden.
-%%% 5)  The `figure' environment will produce a figure one column wide; if you
-%%%     want one that is two columns wide, use `figure*'.  Ditto for the
-%%%     `table' and `table*' environments.
-%%%
-%%% Page Headings:
-%%% Normally, \pagestyle commands are ignored --- pages have no headings or
-%%% numbers. ACM will number the pages for you when they are inserted into the
-%%% proceedings (you should put page numbers on the BACK of each page, though,
-%%% in case someone drops your paper on the floor).
-%%%
-%%% If the [preprint] option is present, then \pagestyle commands are obeyed,
-%%% and the default is \pagestyle{plain}. The [twoside] option is also
-%%% useful when using headers.
-%%%
-%%% The [draft] and [final] options as used in the article class are also
-%%% supported.
-%%%
-%%%
-%%% Copyright Space:
-%%% You leave space at the bottom of page 1/column 1 one with the
-%%% \copyrightspace command.  Alternatively, you can use the
-%%% \toappear{...} command.  Normally, this turns into an unnumbered
-%%% footnote 4.5pc high.  If [preprint] is on, then this space is
-%%% filled with the {...} text; otherwise, it's blank. You must put
-%%% one of these commands in the text of page 1/column 1 *after* all the
-%%% other footnotes that go on page1/column 1, of course.
-%%%
-%%% A typical usage looks like this:
-%%%     \toappear{To appear in the Ninth AES Conference on Midevil Lithuanian
-%%%               Embalming Technique, June 1991, Alfaretta, Georgia.
-%%%               Also available as Technical Report CMU-CS-91-119,
-%%%               Cranberry Melon School of Cucumber Science.}
-%%% This will be included in the preprint, and left out of the conference
-%%% version.
-%%%
-%%% Acmconf defines two useful conditionals.
-%%% - \ifacmconf{true-stuff}{false-stuff}
-%%%   expands to true-stuff.
-%%% - \ifpreprint true-stuff \else else-stuff \fi
-%%%   expands to true-stuff if the [preprint] option is being used,
-%%%   otherwise it expands to else-stuff.
-%%% \ifacmconf is a latex command; \ifpreprint is a real latex conditional.
-%%%
-%%% WARNING:
-%%% Some dvi-ps converters heuristically allow chars to drift from their
-%%% true positions a few pixels. This loses noticeably with the 9pt sans-serif
-%%% bold font used for section headers. You turn this hackery off in our
-%%% dvi-ps converters with the -e option:
-%%%     dvips -e 0 foo.dvi >foo.ps
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{acmconf}[1994/11/27 Alternative LaTeX document class]
-\typeout{Bugs to berson@cs.pitt.edu}
-
-%
-% Define the conditionals and command for the options.
-%
-\newif\if@acmconf\@acmconftrue
-\long\def\ifacmconf#1#2{\if@acmconf#1\else#2\fi}
-\newif\ifpreprint
-
-%
-% Declare and process the options
-%
-\DeclareOption{draft}{\PassOptionsToClass{draft}{article}}
-\DeclareOption{final}{\PassOptionsToClass{final}{article}}
-\DeclareOption{twocolumn}{\PassOptionsToClass{twocolumn}{article}}
-\DeclareOption{twoside}{\PassOptionsToClass{twoside}{article}}
-\DeclareOption{preprint}{\preprintfalse}
-%\DeclareOption{preprint}{\preprinttrue}
-%
-% Let them off with just a warning for any other option
-%
-\DeclareOption*{\ClassWarningNoLine{acmconf}{Unknown option `\CurrentOption'}}
-%\DeclareOption*{\ClassError{acmconf}
-%   {The `\CurrentOption' option is not supported}
-%   {Remove the `\CurrentOption' option from the
-%    \protect\documentclass\space line.}}
-
-\ExecuteOptions{twocolumn}
-\ProcessOptions
-
-%
-% This class simply modifies a few behaviors of the article class,
-% so load it now
-%
-\LoadClass{article}
-
-
-%**********************************************************************
-%
-% The following commands would normally be in a file such as
-% size9.clo for the article class.  Since the size isn't really an
-% option, I include them here.  I have followed the order of the commands
-% as found in size10.clo.
-%
-% I could test for the presence of % the file size9.clo and load it when
-% availale, instead of executing these commands.
-%
-
-%
-% Set the font sizes and spacing
-%
-\renewcommand\baselinestretch{1}
-
-\renewcommand\normalsize{%
-   \@setfontsize\normalsize\@ixpt\@xpt 
-   \abovedisplayskip 9\p@ \@plus2\p@ \@minus4.5\p@%
-   \abovedisplayshortskip  \z@ \@plus3\p@%
-   \belowdisplayshortskip  5.4\p@ \@plus3\p@ \@minus3\p@%
-   \belowdisplayskip \abovedisplayskip
-   \let\@listi\@listI}
-\normalsize
-\renewcommand\small{%
-   \@setfontsize\small\@viiipt{9}%
-   \abovedisplayskip 7.6\p@ \@plus 3\p@ \@minus 4\p@%
-   \abovedisplayshortskip \z@ \@plus2\p@%
-   \belowdisplayshortskip 3.6\p@ \@plus2\p@ \@minus 2\p@
-   \def\@listi{\leftmargin\leftmargini
-                \topsep 4\p@ \@plus 2\p@ \@minus 2\p@
-                \parsep 2\p@ \@plus 1\p@ \@minus 1\p@
-                \itemsep \parsep}
-   \belowdisplayskip \abovedisplayskip
-}
-\renewcommand\footnotesize{%
-   \@setfontsize\footnotesize\@viipt{8}
-   \abovedisplayskip 6.4\p@ \@plus 2\p@ \@minus 4\p@%
-   \abovedisplayshortskip \z@ \@plus 1\p@%
-   \belowdisplayshortskip 2.7\p@ \@plus 1\p@ \@minus 2\p@
-   \def\@listi{\leftmargin\leftmargini
-               \topsep 3\p@ \@plus 1\p@ \@minus 1\p@
-               \parsep 2\p@ \@plus 1\p@ \@minus 1\p@
-               \itemsep \parsep}%
-   \belowdisplayskip \abovedisplayskip
-}
-\renewcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8pt}}
-\renewcommand\tiny{\@setfontsize\tiny\@vpt{6pt}}
-\renewcommand\large{\@setfontsize\large\@xipt{13.6\p@}}
-\renewcommand\Large{\@setfontsize\Large\@xiipt{14\p@}}
-\renewcommand\LARGE{\@setfontsize\LARGE\@xivpt{18\p@}}
-\renewcommand\huge{\@setfontsize\huge\@xviipt{22\p@}}
-\renewcommand\Huge{\@setfontsize\Huge\@xxpt{25\p@}}
-
-\setlength\parindent{13.5\p@}    % This is what normally used for one
-                                 % column.  Should it be 1em for us?
-\setlength\headheight{0\p@}
-\setlength\headsep{0\p@}
-\setlength\headheight{0\p@}
-\setlength\headsep{0\p@}
-\setlength\footskip{30\p@}
-%
-% There was no \topskip or \@maxdepth in the original acmconf.sty.
-% Thus, we inherit 
-%\topskip 10pt 
-%\maxdepth .5\topskip
-% from size10.clo loaded via article.cls
-%
-\setlength\textwidth{39pc}
-\setlength\textheight{650\p@}
-\setlength\oddsidemargin{5.5pc}
-\addtolength\oddsidemargin{-1in}    % Correct for LaTeX gratuittousness
-\setlength\evensidemargin{5.5pc}
-\addtolength\evensidemargin{-1in}   % Correct for LaTeX gratuittousness
-\setlength\marginparwidth{0\p@}     % Margin pars are not allowed.
-\setlength\marginparsep{11\p@}
-\setlength\marginparpush{5\p@}
-\setlength\topmargin{5.5pc}
-\addtolength\topmargin{-1in}         % Correct for LaTeX gratuitousness
-%
-% I wonder if these next three lines should only be executed if
-% the preprint option is in effect?  -- DAB
-%
-%% Must redefine the top margin so there's room for headers and
-%% page numbers if you are using the preprint option. Footers
-%% are OK as is. Olin.
-\addtolength\topmargin{-37\p@} % Leave 37pt above text for headers
-\setlength\headheight{12\p@}
-\setlength\headsep{25\p@}
-
-\setlength\footnotesep{5.6\p@}
-\setlength{\skip\footins}{8.1\p@ \@plus 4\p@ \@minus 2\p@}
-\setlength\floatsep{11\p@ \@plus 2\p@ \@minus 2\p@}
-\setlength\textfloatsep{18\p@ \@plus 2\p@ \@minus 4\p@}
-\setlength\intextsep{11\p@ \@plus 2\p@ \@minus 2\p@}
-\setlength\dblfloatsep{11\p@ \@plus 2\p@ \@minus 2\p@}
-\setlength\dbltextfloatsep{18\p@ \@plus 2\p@ \@minus 4\p@}
-%
-% These values will be inherited from the default size10.clo file
-% included when we load the base article class.  I include them
-% here for completeness in case we split out the size9.clo file someday.
-%   --DAB
-\setlength\@fptop{0\p@ \@plus 1fil}
-\setlength\@fpsep{8\p@ \@plus 2fil}
-\setlength\@fpbot{0\p@ \@plus 1fil}
-\setlength\@dblfptop{0\p@ \@plus 1fil}
-\setlength\@dblfpsep{8\p@ \@plus 2fil}
-\setlength\@dblfpbot{0\p@ \@plus 1fil}
-\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@}
-%
-% I think that all of these should be renewcommands.  I also think
-% that \setlength should be used.  But, they are not in the size10.clo
-% file that I am following.   --DAB
-%
-\renewcommand\@listI{\leftmargin\leftmargini 
-                     \parsep 3.6\p@ \@plus 2\p@ \@minus 1\p@%
-                     \topsep 7.2\p@ \@plus 2\p@ \@minus 4\p@%
-                     \itemsep 3.6\p@ \@plus 2\p@ \@minus 1\p@}
-\let\@listi\@listI
-\@listi
-\def\@listii {\leftmargin\leftmarginii
-              \labelwidth\leftmarginii
-              \advance\labelwidth-\labelsep
-              \topsep 3.6\p@ \@plus 2\p@ \@minus 1\p@
-              \parsep 1.8\p@ \@plus 0.9\p@ \@minus 0.9\p@
-              \itemsep \parsep}
-\def\@listiii{\leftmargin\leftmarginiii
-              \labelwidth\leftmarginiii
-              \advance\labelwidth-\labelsep
-              \topsep 1.8\p@ plus 0.9\p@ minus 0.9\p@
-              \parsep \z@
-              \partopsep 1\p@ plus 0\p@ minus 1\p@
-              \itemsep \topsep}
-\def\@listiv {\leftmargin\leftmarginiv
-              \labelwidth\leftmarginiv
-              \advance\labelwidth-\labelsep}
-\def\@listv  {\leftmargin\leftmarginv
-              \labelwidth\leftmarginv
-              \advance\labelwidth-\labelsep}
-\def\@listvi {\leftmargin\leftmarginvi
-              \labelwidth\leftmarginvi
-              \advance\labelwidth-\labelsep}
-%
-% End of the "size9.clo" commands
-%**********************************************************************
-
-%
-% here's a few things that I didn't find in either article.cls or
-% size10.clo, so I left them here.  --DAB
-%
-\setlength\columnsep{3pc}          %    Space between columns
-\setlength\columnseprule{0\p@}     %    Width of rule between columns.
-\hfuzz 1pt               % Allow some variation in column width, otherwise it's
-                         % too hard to typeset in narrow columns.
-
-
-%**********************************************************************
-%
-% Now we get on with overriding things found in article.cls
-%
-\setlength\parindent{13.5\p@}
-
-%
-% This command is used to format section headings.  The format is the only
-% thing that differs between these section commands and the ones in
-% article.cls.
-%
-% Although the original documentation says that sans-serif is supposed to be
-% used for section titles, the file as I received uses roman.  The
-% commented out line implements sans-serif.  Be sure to comment out the
-% \bfseries line if you switch.
-%   --DAB
-%
-\newcommand\@acmtitlestyle{\normalsize\sffamily\bfseries}
-%\newcommand\@acmtitlestyle{\normalsize\sffamily}
-
-\renewcommand\section{\@startsection {section}{1}{\z@}% 
-                                    {-3.5ex \@plus -1ex \@minus -.2ex}%
-                                     {2.3ex \@plus .2ex}%
-                                     {\@acmtitlestyle\Large}}
-\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
-                                       {-3.25ex \@plus -1ex \@minus -.2ex}%
-                                       {1.5ex \@plus .2ex}%
-                                       {\@acmtitlestyle}}
-\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
-                                          {-3.25ex \@plus -1ex \@minus -.2ex}%
-                                          {1.5ex \@plus .2ex}%
-                                          {\@acmtitlestyle}}
-\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
-                                      {3.25ex \@plus 1ex \@minus .2ex}%
-                                      {-1em}%
-                                      {\@acmtitlestyle}}
-\renewcommand\subparagraph{\@startsection{subparagraph}{4}{\parindent}%
-                                         {3.25ex \@plus 1ex \@minus .2ex}%
-                                         {-1em}%
-                                         {\@acmtitlestyle}}
-
-\setcounter{secnumdepth}{3}
-
-\setlength\arraycolsep{4.5\p@}
-\setlength\tabcolsep{5.4\p@}
-\setlength\doublerulesep{1.8\p@}
-
-\setlength\fboxsep{2.7\p@}
-\setlength\fboxrule{.4\p@}
-
-\def\tableofcontents{\ClassError{acmconf}%
-  {\protect\tableofcontents: Tables of contents are not allowed in the `acmconf' document class}%
-  {Remove the \protect\tableofcontents\space command from the file}}
-
-\def\listoffigures{\ClassError{acmconf}%
-  {\protect\listoffigures: Lists of figures are not allowed in the `acmconf' document class}%
-  {Remove the \protect\listoffigures\space command from the file}}
-
-\def\listoftables{\ClassError{acmconf}%
-   {\protect\listoftables: Lists of tables are not allowed in the `acmconf' document class}%
-   {Remove the \protect\listoftables\space command from the file}}
-\let\l@table\l@figure
-
-%
-% Added \@makefntext definition so that the mark would not over print
-% the beginning of the \thanks text.  --DAB
-%
-\def\maketitle{\par
- \begingroup
-   \def\thefootnote{\fnsymbol{footnote}}%
-   \def\@makefnmark{\hbox to 0pt{$\m@th^{\@thefnmark}$\hss}}%
-   \long\def\@makefntext##1{\parindent 1em\noindent
-               \hbox to1.8em{\hss$\m@th^{\@thefnmark}$}##1}%
-   \if@twocolumn
-     \twocolumn[\@maketitle]
-     \else \newpage
-     \global\@topnum\z@        % Prevents figures from going at top of page.
-     \@maketitle \fi
-   \thispagestyle{plain}\@thanks  % UE: Changed {empty} to {plain}
- \endgroup
- \setcounter{footnote}{0}
- \let\maketitle\relax
- \let\@maketitle\relax
- \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@affili{}\let\thanks\relax}
-
-%
-% extra declarations needed for our version of @maketitle
-%
-\newbox\@acmtitlebox
-\gdef\affili{}
-\def\affiliation#1{\gdef\affili{#1}}
-
-%
-% The modified @maketitle
-%
-\def\@maketitle{\newpage
- \null
- \setbox\@acmtitlebox\vbox{%
-   \vskip 2em                 % Vertical space above title.
-   \begin{center}
-    {\LARGE \@title \par}     % Title set in \LARGE size.
-    \vskip 1.5em                % Vertical space after title.
-    {\large                        % each author set in \large, in a
-     \lineskip .5em           % tabular environment
-     \begin{tabular}[t]{c}\@author
-     \end{tabular}\par}
-     \vskip 1em
-     \begin{center}
-       {\large \affili}
-     \end{center}
-     \vskip 1.5em              % Vertical space after author.
-   \end{center}}
- \dimen0=\ht\@acmtitlebox
- \advance\dimen0 by -13.5pc\relax
- \unvbox\@acmtitlebox
- \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi}
-
-\long\def\unmarkedfootnote#1{{\long\def\@makefntext##1{##1}\footnotetext{#1}}}
-
-%% Use one of \copyrightspace or \toappear{To appear in the ACM ...}
-\def\copyrightspace{\unmarkedfootnote{\vrule height 4.5pc
-                                             width  0in depth 0in}}
-
-%% \small is bigger than \footnotesize.
-\def\toappear#1%
-    {\ifpreprint \unmarkedfootnote{\vrule height 2.25pc%
-                                          depth  2.25pc width 0in%
-                                   \parbox{2.8in}{\small #1}}%
-     \else \copyrightspace \fi}
-
-\def\marginpar{\ClassError{acmconf}%
-   {The \protect\marginpar command is not allowed in the `acmconf' document class}%
-   {Remove the \protect\marginpar\space command from the file}}
-
-\mark{{}{}}   % Initializes TeX's marks
-
-%% Headings are ignored unless the [preprint] option is in force.
-\ifpreprint\else % preprint off -- all \pagestyle commands ==> \pagestyle{empty}.
-%  \let\ps@plain\ps@empty  % UE: Commented this line out
-  \let\ps@headings\ps@empty
-  \let\ps@myheadings\ps@empty
-\fi
-
-\raggedbottom               % Ragged bottom
-
-\endinput
-%%
-%% End of file `acmconf.cls'.
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart1.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart1.pdf
deleted file mode 100644 (file)
index 836d8e7..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart1.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart2.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart2.pdf
deleted file mode 100644 (file)
index da4dd71..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart2.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart3.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart3.pdf
deleted file mode 100644 (file)
index 747e458..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart3.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart4.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart4.pdf
deleted file mode 100644 (file)
index 2d44721..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart4.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart5.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart5.pdf
deleted file mode 100644 (file)
index c56e293..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart5.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart6.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart6.pdf
deleted file mode 100644 (file)
index 36ec3f8..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart6.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart7.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart7.pdf
deleted file mode 100644 (file)
index e31c1d5..0000000
Binary files a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/chart7.pdf and /dev/null differ
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/max_per_method.pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/max_per_method.pdf
deleted file mode 100644 (file)
index f9dd4f7..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-%PDF-1.3\r%âãÏÓ\r
-4 0 obj<</Contents 80 0 R/Type/Page/Parent 5 0 R/MediaBox[0.0 0.0 520.0 300.11914]/BleedBox[0.0 0.0 520.0 300.0]/TrimBox[0.0 0.0 520.0 300.0]/ArtBox[0.88965 0.60059 519.97266 300.11914]/Resources<</ExtGState<</GS0 24 0 R>>/Properties<</MC0<</Color[20224.0 32768.0 32768.0]/Title(Layer 1)/Visible true/Preview true/Editable true/Printed true/Dimmed true>>>>>>>>\rendobj\r5 0 obj<</Count 1/Kids[4 0 R]/Type/Pages>>\rendobj\r19 0 obj<</Pages 5 0 R/Type/Catalog/Metadata 81 0 R>>\rendobj\r20 0 obj<</ModDate(D:20040320030520-08'00')/CreationDate(D:20040320030043-08'00')/Creator(Excel)/Producer(Mac OS X 10.3.3 Quartz PDFContext)>>\rendobj\r22 0 obj null\rendobj\r24 0 obj<</Type/ExtGState/SA true/OP false/op false/OPM 0/ca 1.0/CA 1.0/BM/Normal/SMask/None/AIS false>>\rendobj\r79 0 obj 178184\rendobj\r80 0 obj<</Length 79 0 R>>stream\r
-/Layer /MC0 BDC \rq\r1 0 0 -1 0 0 cm\r1 -0.71973 m\r1 -0.71973 519.86133 -0.71973 519.86133 -0.71973 c\r519.86133 -0.71973 519.86133 -300 519.86133 -300 c\r519.86133 -300 1 -300 1 -300 c\r1 -300 1 -0.71973 1 -0.71973 c\rh\rW n\r1 1 1 rg\r0 i \r/GS0 gs\r1.38965 -299.61914 m\r1.38965 -299.61914 519.47266 -299.61914 519.47266 -299.61914 c\r519.47266 -299.61914 519.47266 -1.10059 519.47266 -1.10059 c\r519.47266 -1.10059 1.38965 -1.10059 1.38965 -1.10059 c\r1.38965 -1.10059 1.38965 -299.61914 1.38965 -299.61914 c\rh\rf\r0 0 0 RG\r1 w 10 M 0 j 0 J []0 d \r1.38965 -299.61914 m\r1.38965 -299.61914 519.47266 -299.61914 519.47266 -299.61914 c\r519.47266 -299.61914 519.47266 -1.10059 519.47266 -1.10059 c\r519.47266 -1.10059 1.38965 -1.10059 1.38965 -1.10059 c\r1.38965 -1.10059 1.38965 -299.61914 1.38965 -299.61914 c\rh\rS\r0.75294 0.75294 0.75294 rg\r43.65576 -245.04297 m\r43.65576 -245.04297 442.20117 -245.04297 442.20117 -245.04297 c\r442.20117 -245.04297 442.20117 -48.82324 442.20117 -48.82324 c\r442.20117 -48.82324 43.65576 -48.82324 43.65576 -48.82324 c\r43.65576 -48.82324 43.65576 -245.04297 43.65576 -245.04297 c\rf\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -47.93457 m\r43.52539 -47.93457 442.07129 -47.93457 442.07129 -47.93457 c\r442.07129 -47.93457 442.07129 -246.18555 442.07129 -246.18555 c\r442.07129 -246.18555 43.52539 -246.18555 43.52539 -246.18555 c\r43.52539 -246.18555 43.52539 -47.93457 43.52539 -47.93457 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -81.56738 m\r43.65576 -81.56738 442.20117 -81.56738 442.20117 -81.56738 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -47.93457 m\r43.52539 -47.93457 442.07129 -47.93457 442.07129 -47.93457 c\r442.07129 -47.93457 442.07129 -246.18555 442.07129 -246.18555 c\r442.07129 -246.18555 43.52539 -246.18555 43.52539 -246.18555 c\r43.52539 -246.18555 43.52539 -47.93457 43.52539 -47.93457 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -114.31348 m\r43.65576 -114.31348 442.20117 -114.31348 442.20117 -114.31348 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -47.93457 m\r43.52539 -47.93457 442.07129 -47.93457 442.07129 -47.93457 c\r442.07129 -47.93457 442.07129 -246.18555 442.07129 -246.18555 c\r442.07129 -246.18555 43.52539 -246.18555 43.52539 -246.18555 c\r43.52539 -246.18555 43.52539 -47.93457 43.52539 -47.93457 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -146.80566 m\r43.65576 -146.80566 442.20117 -146.80566 442.20117 -146.80566 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -47.93457 m\r43.52539 -47.93457 442.07129 -47.93457 442.07129 -47.93457 c\r442.07129 -47.93457 442.07129 -246.18555 442.07129 -246.18555 c\r442.07129 -246.18555 43.52539 -246.18555 43.52539 -246.18555 c\r43.52539 -246.18555 43.52539 -47.93457 43.52539 -47.93457 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -179.55176 m\r43.65576 -179.55176 442.20117 -179.55176 442.20117 -179.55176 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -47.93457 m\r43.52539 -47.93457 442.07129 -47.93457 442.07129 -47.93457 c\r442.07129 -47.93457 442.07129 -246.18555 442.07129 -246.18555 c\r442.07129 -246.18555 43.52539 -246.18555 43.52539 -246.18555 c\r43.52539 -246.18555 43.52539 -47.93457 43.52539 -47.93457 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -212.29736 m\r43.65576 -212.29736 442.20117 -212.29736 442.20117 -212.29736 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -47.93457 m\r43.52539 -47.93457 442.07129 -47.93457 442.07129 -47.93457 c\r442.07129 -47.93457 442.07129 -246.18555 442.07129 -246.18555 c\r442.07129 -246.18555 43.52539 -246.18555 43.52539 -246.18555 c\r43.52539 -246.18555 43.52539 -47.93457 43.52539 -47.93457 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -245.04297 m\r43.65576 -245.04297 442.20117 -245.04297 442.20117 -245.04297 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r1 -0.71973 m\r1 -0.71973 519.86133 -0.71973 519.86133 -0.71973 c\r519.86133 -0.71973 519.86133 -300 519.86133 -300 c\r519.86133 -300 1 -300 1 -300 c\r1 -300 1 -0.71973 1 -0.71973 c\rh\rW n\r0.50197 0.50197 0.50197 RG\r0 i 4 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -245.04297 m\r43.65576 -245.04297 442.20117 -245.04297 442.20117 -245.04297 c\r442.20117 -245.04297 442.20117 -48.82324 442.20117 -48.82324 c\r442.20117 -48.82324 43.65576 -48.82324 43.65576 -48.82324 c\r43.65576 -48.82324 43.65576 -245.04297 43.65576 -245.04297 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.60001 1 rg\r0 i \r/GS0 gs\r60.25049 -134.11426 m\r60.25049 -134.11426 82.03125 -134.11426 82.03125 -134.11426 c\r82.03125 -134.11426 82.03125 -48.82324 82.03125 -48.82324 c\r82.03125 -48.82324 60.25049 -48.82324 60.25049 -48.82324 c\r60.25049 -48.82324 60.25049 -134.11426 60.25049 -134.11426 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r60.25049 -134.11426 m\r60.25049 -134.11426 82.03125 -134.11426 82.03125 -134.11426 c\r82.03125 -134.11426 82.03125 -48.82324 82.03125 -48.82324 c\r82.03125 -48.82324 60.25049 -48.82324 60.25049 -48.82324 c\r60.25049 -48.82324 60.25049 -134.11426 60.25049 -134.11426 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.60001 1 rg\r0 i \r/GS0 gs\r159.82178 -130.81348 m\r159.82178 -130.81348 181.86279 -130.81348 181.86279 -130.81348 c\r181.86279 -130.81348 181.86279 -48.82324 181.86279 -48.82324 c\r181.86279 -48.82324 159.82178 -48.82324 159.82178 -48.82324 c\r159.82178 -48.82324 159.82178 -130.81348 159.82178 -130.81348 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r159.82178 -130.81348 m\r159.82178 -130.81348 181.86279 -130.81348 181.86279 -130.81348 c\r181.86279 -130.81348 181.86279 -48.82324 181.86279 -48.82324 c\r181.86279 -48.82324 159.82178 -48.82324 159.82178 -48.82324 c\r159.82178 -48.82324 159.82178 -130.81348 159.82178 -130.81348 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.60001 1 rg\r0 i \r/GS0 gs\r259.65332 -137.66699 m\r259.65332 -137.66699 281.43457 -137.66699 281.43457 -137.66699 c\r281.43457 -137.66699 281.43457 -48.82324 281.43457 -48.82324 c\r281.43457 -48.82324 259.65332 -48.82324 259.65332 -48.82324 c\r259.65332 -48.82324 259.65332 -137.66699 259.65332 -137.66699 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r259.65332 -137.66699 m\r259.65332 -137.66699 281.43457 -137.66699 281.43457 -137.66699 c\r281.43457 -137.66699 281.43457 -48.82324 281.43457 -48.82324 c\r281.43457 -48.82324 259.65332 -48.82324 259.65332 -48.82324 c\r259.65332 -48.82324 259.65332 -137.66699 259.65332 -137.66699 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.60001 1 rg\r0 i \r/GS0 gs\r359.22559 -144.01367 m\r359.22559 -144.01367 381.00586 -144.01367 381.00586 -144.01367 c\r381.00586 -144.01367 381.00586 -48.82324 381.00586 -48.82324 c\r381.00586 -48.82324 359.22559 -48.82324 359.22559 -48.82324 c\r359.22559 -48.82324 359.22559 -144.01367 359.22559 -144.01367 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r359.22559 -144.01367 m\r359.22559 -144.01367 381.00586 -144.01367 381.00586 -144.01367 c\r381.00586 -144.01367 381.00586 -48.82324 381.00586 -48.82324 c\r381.00586 -48.82324 359.22559 -48.82324 359.22559 -48.82324 c\r359.22559 -48.82324 359.22559 -144.01367 359.22559 -144.01367 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.2 0.39999 rg\r0 i \r/GS0 gs\r82.29102 -115.33008 m\r82.29102 -115.33008 104.33154 -115.33008 104.33154 -115.33008 c\r104.33154 -115.33008 104.33154 -48.82324 104.33154 -48.82324 c\r104.33154 -48.82324 82.29102 -48.82324 82.29102 -48.82324 c\r82.29102 -48.82324 82.29102 -115.33008 82.29102 -115.33008 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r82.29102 -115.33008 m\r82.29102 -115.33008 104.33154 -115.33008 104.33154 -115.33008 c\r104.33154 -115.33008 104.33154 -48.82324 104.33154 -48.82324 c\r104.33154 -48.82324 82.29102 -48.82324 82.29102 -48.82324 c\r82.29102 -48.82324 82.29102 -115.33008 82.29102 -115.33008 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.2 0.39999 rg\r0 i \r/GS0 gs\r182.12158 -109.74512 m\r182.12158 -109.74512 203.90332 -109.74512 203.90332 -109.74512 c\r203.90332 -109.74512 203.90332 -48.82324 203.90332 -48.82324 c\r203.90332 -48.82324 182.12158 -48.82324 182.12158 -48.82324 c\r182.12158 -48.82324 182.12158 -109.74512 182.12158 -109.74512 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r182.12158 -109.74512 m\r182.12158 -109.74512 203.90332 -109.74512 203.90332 -109.74512 c\r203.90332 -109.74512 203.90332 -48.82324 203.90332 -48.82324 c\r203.90332 -48.82324 182.12158 -48.82324 182.12158 -48.82324 c\r182.12158 -48.82324 182.12158 -109.74512 182.12158 -109.74512 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.2 0.39999 rg\r0 i \r/GS0 gs\r281.69336 -107.20703 m\r281.69336 -107.20703 303.7334 -107.20703 303.7334 -107.20703 c\r303.7334 -107.20703 303.7334 -48.82324 303.7334 -48.82324 c\r303.7334 -48.82324 281.69336 -48.82324 281.69336 -48.82324 c\r281.69336 -48.82324 281.69336 -107.20703 281.69336 -107.20703 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r281.69336 -107.20703 m\r281.69336 -107.20703 303.7334 -107.20703 303.7334 -107.20703 c\r303.7334 -107.20703 303.7334 -48.82324 303.7334 -48.82324 c\r303.7334 -48.82324 281.69336 -48.82324 281.69336 -48.82324 c\r281.69336 -48.82324 281.69336 -107.20703 281.69336 -107.20703 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r0.60001 0.2 0.39999 rg\r0 i \r/GS0 gs\r381.26465 -110.76074 m\r381.26465 -110.76074 403.30566 -110.76074 403.30566 -110.76074 c\r403.30566 -110.76074 403.30566 -48.82324 403.30566 -48.82324 c\r403.30566 -48.82324 381.26465 -48.82324 381.26465 -48.82324 c\r381.26465 -48.82324 381.26465 -110.76074 381.26465 -110.76074 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r381.26465 -110.76074 m\r381.26465 -110.76074 403.30566 -110.76074 403.30566 -110.76074 c\r403.30566 -110.76074 403.30566 -48.82324 403.30566 -48.82324 c\r403.30566 -48.82324 381.26465 -48.82324 381.26465 -48.82324 c\r381.26465 -48.82324 381.26465 -110.76074 381.26465 -110.76074 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r1 1 0.8 rg\r0 i \r/GS0 gs\r104.59131 -208.23633 m\r104.59131 -208.23633 126.37207 -208.23633 126.37207 -208.23633 c\r126.37207 -208.23633 126.37207 -48.82324 126.37207 -48.82324 c\r126.37207 -48.82324 104.59131 -48.82324 104.59131 -48.82324 c\r104.59131 -48.82324 104.59131 -208.23633 104.59131 -208.23633 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r104.59131 -208.23633 m\r104.59131 -208.23633 126.37207 -208.23633 126.37207 -208.23633 c\r126.37207 -208.23633 126.37207 -48.82324 126.37207 -48.82324 c\r126.37207 -48.82324 104.59131 -48.82324 104.59131 -48.82324 c\r104.59131 -48.82324 104.59131 -208.23633 104.59131 -208.23633 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r1 1 0.8 rg\r0 i \r/GS0 gs\r204.16211 -187.16699 m\r204.16211 -187.16699 226.20313 -187.16699 226.20313 -187.16699 c\r226.20313 -187.16699 226.20313 -48.82324 226.20313 -48.82324 c\r226.20313 -48.82324 204.16211 -48.82324 204.16211 -48.82324 c\r204.16211 -48.82324 204.16211 -187.16699 204.16211 -187.16699 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r204.16211 -187.16699 m\r204.16211 -187.16699 226.20313 -187.16699 226.20313 -187.16699 c\r226.20313 -187.16699 226.20313 -48.82324 226.20313 -48.82324 c\r226.20313 -48.82324 204.16211 -48.82324 204.16211 -48.82324 c\r204.16211 -48.82324 204.16211 -187.16699 204.16211 -187.16699 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r1 1 0.8 rg\r0 i \r/GS0 gs\r303.99316 -178.02881 m\r303.99316 -178.02881 325.77539 -178.02881 325.77539 -178.02881 c\r325.77539 -178.02881 325.77539 -48.82324 325.77539 -48.82324 c\r325.77539 -48.82324 303.99316 -48.82324 303.99316 -48.82324 c\r303.99316 -48.82324 303.99316 -178.02881 303.99316 -178.02881 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r303.99316 -178.02881 m\r303.99316 -178.02881 325.77539 -178.02881 325.77539 -178.02881 c\r325.77539 -178.02881 325.77539 -48.82324 325.77539 -48.82324 c\r325.77539 -48.82324 303.99316 -48.82324 303.99316 -48.82324 c\r303.99316 -48.82324 303.99316 -178.02881 303.99316 -178.02881 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r43.52539 -48.94922 m\r43.52539 -48.94922 442.33105 -48.94922 442.33105 -48.94922 c\r442.33105 -48.94922 442.33105 -245.16992 442.33105 -245.16992 c\r442.33105 -245.16992 43.52539 -245.16992 43.52539 -245.16992 c\r43.52539 -245.16992 43.52539 -48.94922 43.52539 -48.94922 c\rh\rW n\r1 1 0.8 rg\r0 i \r/GS0 gs\r403.56543 -207.2207 m\r403.56543 -207.2207 425.3457 -207.2207 425.3457 -207.2207 c\r425.3457 -207.2207 425.3457 -48.82324 425.3457 -48.82324 c\r425.3457 -48.82324 403.56543 -48.82324 403.56543 -48.82324 c\r403.56543 -48.82324 403.56543 -207.2207 403.56543 -207.2207 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r403.56543 -207.2207 m\r403.56543 -207.2207 425.3457 -207.2207 425.3457 -207.2207 c\r425.3457 -207.2207 425.3457 -48.82324 425.3457 -48.82324 c\r425.3457 -48.82324 403.56543 -48.82324 403.56543 -48.82324 c\r403.56543 -48.82324 403.56543 -207.2207 403.56543 -207.2207 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r1 -0.71973 m\r1 -0.71973 519.86133 -0.71973 519.86133 -0.71973 c\r519.86133 -0.71973 519.86133 -300 519.86133 -300 c\r519.86133 -300 1 -300 1 -300 c\r1 -300 1 -0.71973 1 -0.71973 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r43.65576 -245.04297 m\r43.65576 -245.04297 43.65576 -48.82324 43.65576 -48.82324 c\rS\r40.80322 -48.82324 m\r40.80322 -48.82324 43.65576 -48.82324 43.65576 -48.82324 c\rS\r40.80322 -81.56738 m\r40.80322 -81.56738 43.65576 -81.56738 43.65576 -81.56738 c\rS\r40.80322 -114.31348 m\r40.80322 -114.31348 43.65576 -114.31348 43.65576 -114.31348 c\rS\r40.80322 -146.80566 m\r40.80322 -146.80566 43.65576 -146.80566 43.65576 -146.80566 c\rS\r40.80322 -179.55176 m\r40.80322 -179.55176 43.65576 -179.55176 43.65576 -179.55176 c\rS\r40.80322 -212.29736 m\r40.80322 -212.29736 43.65576 -212.29736 43.65576 -212.29736 c\rS\r40.80322 -245.04297 m\r40.80322 -245.04297 43.65576 -245.04297 43.65576 -245.04297 c\rS\r43.65576 -48.82324 m\r43.65576 -48.82324 442.20117 -48.82324 442.20117 -48.82324 c\rS\r43.65576 -46.03027 m\r43.65576 -46.03027 43.65576 -48.82324 43.65576 -48.82324 c\rS\r143.22656 -46.03027 m\r143.22656 -46.03027 143.22656 -48.82324 143.22656 -48.82324 c\rS\r243.05762 -46.03027 m\r243.05762 -46.03027 243.05762 -48.82324 243.05762 -48.82324 c\rS\r342.62891 -46.03027 m\r342.62891 -46.03027 342.62891 -48.82324 342.62891 -48.82324 c\rS\r442.20117 -46.03027 m\r442.20117 -46.03027 442.20117 -48.82324 442.20117 -48.82324 c\rS\rQ\rq\r1 0 0 -1 0 0 cm\r76.97559 -267.00098 m\r76.97559 -267.00098 443.62793 -267.00098 443.62793 -267.00098 c\r443.62793 -267.00098 443.62793 -289.59277 443.62793 -289.59277 c\r443.62793 -289.59277 76.97559 -289.59277 76.97559 -289.59277 c\r76.97559 -289.59277 76.97559 -267.00098 76.97559 -267.00098 c\rh\rW n\r0 0 0 rg\r0 i \r/GS0 gs\r437.80469 -275.5166 m\r437.80469 -275.5166 437.80469 -278.94287 437.80469 -278.94287 c\r437.64551 -279.00977 437.47559 -279.05713 437.2998 -279.08594 c\r437.12305 -279.11523 436.95996 -279.12939 436.8125 -279.12939 c\r436.21387 -279.12939 435.76563 -278.94629 435.46582 -278.57959 c\r435.16699 -278.2124 435.01758 -277.70361 435.01758 -277.05273 c\r435.01758 -276.36865 435.13867 -275.87207 435.37793 -275.56348 c\r435.61816 -275.25439 436.00293 -275.09961 436.53516 -275.09961 c\r436.74023 -275.09961 436.95996 -275.13818 437.19238 -275.21484 c\r437.42285 -275.29199 437.62891 -275.39209 437.80469 -275.5166 c\rh\r440.09082 -273.60107 m\r440.09082 -273.60107 437.80469 -273.60107 437.80469 -273.60107 c\r437.80469 -273.60107 437.80469 -274.32617 437.80469 -274.32617 c\r437.41309 -274.01172 437.0459 -273.78076 436.7041 -273.63232 c\r436.36328 -273.48438 435.96875 -273.41016 435.52051 -273.41016 c\r434.65625 -273.41016 433.96484 -273.73682 433.44531 -274.38965 c\r432.92676 -275.04297 432.66895 -275.92285 432.66895 -277.03027 c\r432.66895 -277.62158 432.75488 -278.14502 432.93066 -278.60156 c\r433.10449 -279.05811 433.34375 -279.4502 433.64844 -279.77637 c\r433.93555 -280.08643 434.2832 -280.32715 434.69141 -280.49854 c\r435.10059 -280.66992 435.51074 -280.75586 435.91992 -280.75586 c\r436.34668 -280.75586 436.69434 -280.71143 436.96582 -280.62256 c\r437.23828 -280.53369 437.51855 -280.4209 437.80469 -280.28467 c\r437.80469 -280.28467 437.80469 -283.24658 437.80469 -283.24658 c\r437.80469 -283.24658 440.09082 -283.24658 440.09082 -283.24658 c\r440.09082 -283.24658 440.09082 -273.60107 440.09082 -273.60107 c\rh\r428.73047 -275.38672 m\r428.87793 -275.56396 428.98828 -275.77783 429.0625 -276.02734 c\r429.13574 -276.27637 429.17285 -276.62207 429.17285 -277.06348 c\r429.17285 -277.47168 429.13477 -277.81396 429.05957 -278.09082 c\r428.9834 -278.36719 428.87793 -278.58789 428.74316 -278.75293 c\r428.6084 -278.92188 428.44629 -279.0415 428.25488 -279.11182 c\r428.06543 -279.18164 427.86133 -279.2168 427.64258 -279.2168 c\r427.42383 -279.2168 427.22754 -279.18799 427.05762 -279.13037 c\r426.88574 -279.07275 426.72266 -278.95703 426.56641 -278.78418 c\r426.42676 -278.62305 426.31641 -278.40234 426.23438 -278.12207 c\r426.15137 -277.84082 426.11035 -277.48877 426.11035 -277.06348 c\r426.11035 -276.68408 426.14648 -276.35498 426.21875 -276.07666 c\r426.29004 -275.79834 426.39551 -275.57422 426.53418 -275.40527 c\r426.66992 -275.24414 426.83105 -275.12695 427.01953 -275.05273 c\r427.20703 -274.97852 427.4209 -274.94092 427.66211 -274.94092 c\r427.86719 -274.94092 428.06445 -274.9751 428.25195 -275.04346 c\r428.43945 -275.11133 428.59961 -275.22559 428.73047 -275.38672 c\rh\r431.53125 -277.07617 m\r431.53125 -275.93262 431.19141 -275.03223 430.51074 -274.37402 c\r429.8291 -273.71582 428.87402 -273.38672 427.64258 -273.38672 c\r426.41113 -273.38672 425.45508 -273.71582 424.77344 -274.37402 c\r424.09375 -275.03223 423.75195 -275.93262 423.75195 -277.07617 c\r423.75195 -278.22705 424.0957 -279.13086 424.78027 -279.7876 c\r425.46582 -280.44385 426.41992 -280.77148 427.64258 -280.77148 c\r428.88184 -280.77148 429.84082 -280.44189 430.5166 -279.78125 c\r431.19336 -279.12061 431.53125 -278.21875 431.53125 -277.07617 c\rh\r422.17969 -273.60107 m\r422.17969 -273.60107 419.89355 -273.60107 419.89355 -273.60107 c\r419.89355 -273.60107 419.89355 -277.05664 419.89355 -277.05664 c\r419.89355 -277.33789 419.87891 -277.61768 419.84961 -277.89746 c\r419.82031 -278.17676 419.76953 -278.38232 419.69727 -278.51416 c\r419.61328 -278.66797 419.49023 -278.7793 419.32715 -278.84961 c\r419.16406 -278.91992 418.93848 -278.95557 418.64746 -278.95557 c\r418.44141 -278.95557 418.23047 -278.92188 418.01855 -278.85547 c\r417.80469 -278.78955 417.57324 -278.68408 417.3252 -278.53906 c\r417.3252 -278.53906 417.3252 -273.60107 417.3252 -273.60107 c\r417.3252 -273.60107 415.04102 -273.60107 415.04102 -273.60107 c\r415.04102 -273.60107 415.04102 -283.24658 415.04102 -283.24658 c\r415.04102 -283.24658 417.3252 -283.24658 417.3252 -283.24658 c\r417.3252 -283.24658 417.3252 -279.79443 417.3252 -279.79443 c\r417.73047 -280.10498 418.11816 -280.34277 418.49121 -280.50781 c\r418.86426 -280.67285 419.27734 -280.75586 419.7334 -280.75586 c\r420.49902 -280.75586 421.09863 -280.53662 421.53223 -280.09863 c\r421.96289 -279.66016 422.17969 -279.00488 422.17969 -278.1333 c\r422.17969 -278.1333 422.17969 -273.60107 422.17969 -273.60107 c\rh\r413.67383 -273.66406 m\r413.42969 -273.60205 413.16895 -273.55322 412.89453 -273.51807 c\r412.62012 -273.4834 412.28418 -273.46582 411.88672 -273.46582 c\r411.00098 -273.46582 410.33984 -273.64111 409.90723 -273.9917 c\r409.47461 -274.34277 409.25781 -274.94336 409.25781 -275.79297 c\r409.25781 -275.79297 409.25781 -279.04199 409.25781 -279.04199 c\r409.25781 -279.04199 408.31738 -279.04199 408.31738 -279.04199 c\r408.31738 -279.04199 408.31738 -280.55762 408.31738 -280.55762 c\r408.31738 -280.55762 409.25781 -280.55762 409.25781 -280.55762 c\r409.25781 -280.55762 409.25781 -282.54883 409.25781 -282.54883 c\r409.25781 -282.54883 411.54297 -282.54883 411.54297 -282.54883 c\r411.54297 -282.54883 411.54297 -280.55762 411.54297 -280.55762 c\r411.54297 -280.55762 413.67383 -280.55762 413.67383 -280.55762 c\r413.67383 -280.55762 413.67383 -279.04199 413.67383 -279.04199 c\r413.67383 -279.04199 411.54297 -279.04199 411.54297 -279.04199 c\r411.54297 -279.04199 411.54297 -276.57813 411.54297 -276.57813 c\r411.54297 -276.33447 411.54492 -276.12207 411.54883 -275.94043 c\r411.55273 -275.75928 411.58691 -275.5957 411.65137 -275.45117 c\r411.70996 -275.30664 411.81348 -275.19238 411.96387 -275.10791 c\r412.11328 -275.02344 412.33105 -274.98096 412.61719 -274.98096 c\r412.73633 -274.98096 412.89063 -275.00635 413.08203 -275.05615 c\r413.27441 -275.10693 413.4082 -275.15332 413.48438 -275.19531 c\r413.48438 -275.19531 413.67383 -275.19531 413.67383 -275.19531 c\r413.67383 -275.19531 413.67383 -273.66406 413.67383 -273.66406 c\rh\r405.25195 -277.97168 m\r405.23828 -278.4375 405.12109 -278.78809 404.89648 -279.02295 c\r404.67285 -279.25781 404.3252 -279.37598 403.85156 -279.37598 c\r403.41406 -279.37598 403.05371 -279.26416 402.77051 -279.0415 c\r402.48828 -278.81885 402.33008 -278.4624 402.2959 -277.97168 c\r402.2959 -277.97168 405.25195 -277.97168 405.25195 -277.97168 c\rh\r407.52148 -276.6626 m\r407.52148 -276.6626 402.30273 -276.6626 402.30273 -276.6626 c\r402.33594 -276.12109 402.54785 -275.70703 402.93848 -275.41992 c\r403.33008 -275.13232 403.90527 -274.98926 404.66602 -274.98926 c\r405.14648 -274.98926 405.61426 -275.07275 406.06543 -275.24121 c\r406.51855 -275.40918 406.87598 -275.58936 407.1377 -275.78223 c\r407.1377 -275.78223 407.3916 -275.78223 407.3916 -275.78223 c\r407.3916 -275.78223 407.3916 -273.99316 407.3916 -273.99316 c\r406.87695 -273.7915 406.38965 -273.64453 405.93359 -273.55469 c\r405.47852 -273.46338 404.97461 -273.41797 404.4209 -273.41797 c\r402.99414 -273.41797 401.90039 -273.73145 401.14063 -274.35889 c\r400.38184 -274.98584 400.00098 -275.87939 400.00098 -277.03955 c\r400.00098 -278.18652 400.36035 -279.09521 401.08008 -279.76563 c\r401.79883 -280.43652 402.78516 -280.77148 404.03809 -280.77148 c\r405.19531 -280.77148 406.06445 -280.48535 406.64746 -279.91357 c\r407.22949 -279.34131 407.52148 -278.51758 407.52148 -277.44336 c\r407.52148 -277.44336 407.52148 -276.6626 407.52148 -276.6626 c\rh\r398.23535 -273.60107 m\r398.23535 -273.60107 395.82031 -273.60107 395.82031 -273.60107 c\r395.82031 -273.60107 395.82031 -279.77637 395.82031 -279.77637 c\r395.82031 -279.77637 394.07227 -275.7666 394.07227 -275.7666 c\r394.07227 -275.7666 392.39258 -275.7666 392.39258 -275.7666 c\r392.39258 -275.7666 390.64355 -279.77637 390.64355 -279.77637 c\r390.64355 -279.77637 390.64355 -273.60107 390.64355 -273.60107 c\r390.64355 -273.60107 388.34961 -273.60107 388.34961 -273.60107 c\r388.34961 -273.60107 388.34961 -282.82617 388.34961 -282.82617 c\r388.34961 -282.82617 391.1748 -282.82617 391.1748 -282.82617 c\r391.1748 -282.82617 393.29883 -278.19629 393.29883 -278.19629 c\r393.29883 -278.19629 395.41602 -282.82617 395.41602 -282.82617 c\r395.41602 -282.82617 398.23535 -282.82617 398.23535 -282.82617 c\r398.23535 -282.82617 398.23535 -273.60107 398.23535 -273.60107 c\rh\r382.49609 -278.43164 m\r382.49609 -278.43164 382.29492 -278.43164 382.29492 -278.43164 c\r382.19922 -278.46338 382.04199 -278.48682 381.82813 -278.50293 c\r381.61426 -278.51904 381.43555 -278.52686 381.29297 -278.52686 c\r380.96875 -278.52686 380.68457 -278.50586 380.43652 -278.46484 c\r380.18848 -278.42334 379.92188 -278.35303 379.63477 -278.25439 c\r379.63477 -278.25439 379.63477 -273.60107 379.63477 -273.60107 c\r379.63477 -273.60107 377.35156 -273.60107 377.35156 -273.60107 c\r377.35156 -273.60107 377.35156 -280.55762 377.35156 -280.55762 c\r377.35156 -280.55762 379.63477 -280.55762 379.63477 -280.55762 c\r379.63477 -280.55762 379.63477 -279.53467 379.63477 -279.53467 c\r380.13574 -279.95605 380.57129 -280.23633 380.94141 -280.37402 c\r381.31055 -280.5127 381.65039 -280.58105 381.96191 -280.58105 c\r382.04004 -280.58105 382.13086 -280.5791 382.23145 -280.5752 c\r382.33301 -280.5708 382.42188 -280.56445 382.49609 -280.55664 c\r382.49609 -280.55664 382.49609 -278.43164 382.49609 -278.43164 c\rh\r373.47559 -277.97168 m\r373.46191 -278.4375 373.34277 -278.78809 373.12012 -279.02295 c\r372.89648 -279.25781 372.54883 -279.37598 372.07617 -279.37598 c\r371.63672 -279.37598 371.27539 -279.26416 370.99316 -279.0415 c\r370.71094 -278.81885 370.55273 -278.4624 370.51855 -277.97168 c\r370.51855 -277.97168 373.47559 -277.97168 373.47559 -277.97168 c\rh\r375.74414 -276.6626 m\r375.74414 -276.6626 370.52441 -276.6626 370.52441 -276.6626 c\r370.55859 -276.12109 370.77051 -275.70703 371.16211 -275.41992 c\r371.55273 -275.13232 372.12891 -274.98926 372.88867 -274.98926 c\r373.37012 -274.98926 373.83594 -275.07275 374.28906 -275.24121 c\r374.74121 -275.40918 375.09766 -275.58936 375.36035 -275.78223 c\r375.36035 -275.78223 375.61426 -275.78223 375.61426 -275.78223 c\r375.61426 -275.78223 375.61426 -273.99316 375.61426 -273.99316 c\r375.09863 -273.7915 374.61328 -273.64453 374.15723 -273.55469 c\r373.70117 -273.46338 373.19629 -273.41797 372.64355 -273.41797 c\r371.2168 -273.41797 370.12207 -273.73145 369.36328 -274.35889 c\r368.60352 -274.98584 368.22461 -275.87939 368.22461 -277.03955 c\r368.22461 -278.18652 368.58301 -279.09521 369.30371 -279.76563 c\r370.02246 -280.43652 371.00781 -280.77148 372.26172 -280.77148 c\r373.41797 -280.77148 374.28711 -280.48535 374.87012 -279.91357 c\r375.45215 -279.34131 375.74414 -278.51758 375.74414 -277.44336 c\r375.74414 -277.44336 375.74414 -276.6626 375.74414 -276.6626 c\rh\r364.75293 -277.13428 m\r364.75293 -277.81152 364.63379 -278.30273 364.39746 -278.60791 c\r364.16309 -278.91357 363.78906 -279.06592 363.2793 -279.06592 c\r363.06445 -279.06592 362.8418 -279.03369 362.61621 -278.96973 c\r362.38867 -278.90625 362.1709 -278.81445 361.96484 -278.69434 c\r361.96484 -278.69434 361.96484 -275.19678 361.96484 -275.19678 c\r362.11719 -275.13867 362.27832 -275.10156 362.45117 -275.08496 c\r362.62402 -275.06885 362.79492 -275.06055 362.96289 -275.06055 c\r363.56543 -275.06055 364.01563 -275.23242 364.30957 -275.57715 c\r364.60449 -275.92188 364.75293 -276.44092 364.75293 -277.13428 c\rh\r367.10156 -277.17871 m\r367.10156 -276.60449 367.01172 -276.08203 366.83398 -275.61035 c\r366.6543 -275.13965 366.41895 -274.75098 366.12695 -274.44531 c\r365.82422 -274.12305 365.48047 -273.87891 365.09668 -273.71338 c\r364.71289 -273.54834 364.30078 -273.46582 363.8623 -273.46582 c\r363.45801 -273.46582 363.11328 -273.50781 362.83105 -273.59277 c\r362.54785 -273.67725 362.26074 -273.7959 361.96484 -273.94922 c\r361.96484 -273.94922 361.96484 -271.04639 361.96484 -271.04639 c\r361.96484 -271.04639 359.67969 -271.04639 359.67969 -271.04639 c\r359.67969 -271.04639 359.67969 -280.55762 359.67969 -280.55762 c\r359.67969 -280.55762 361.96484 -280.55762 361.96484 -280.55762 c\r361.96484 -280.55762 361.96484 -279.83252 361.96484 -279.83252 c\r362.31543 -280.10498 362.67188 -280.32715 363.03711 -280.49854 c\r363.40234 -280.66992 363.82324 -280.75586 364.29883 -280.75586 c\r365.18457 -280.75586 365.87402 -280.4375 366.36426 -279.80127 c\r366.85645 -279.16455 367.10156 -278.29053 367.10156 -277.17871 c\rh\r353.73145 -275.80908 m\r353.73145 -275.09033 353.40234 -274.51025 352.74414 -274.07031 c\r352.08594 -273.63037 351.18457 -273.41016 350.04199 -273.41016 c\r349.4082 -273.41016 348.83496 -273.46826 348.32031 -273.58398 c\r347.80469 -273.7002 347.3916 -273.82813 347.08008 -273.96875 c\r347.08008 -273.96875 347.08008 -275.80615 347.08008 -275.80615 c\r347.08008 -275.80615 347.28711 -275.80615 347.28711 -275.80615 c\r347.40137 -275.72754 347.5332 -275.64209 347.68359 -275.54883 c\r347.83301 -275.45605 348.0459 -275.35596 348.31738 -275.24854 c\r348.55469 -275.15332 348.82227 -275.07178 349.12109 -275.00342 c\r349.4209 -274.93555 349.74121 -274.90137 350.08301 -274.90137 c\r350.5293 -274.90137 350.86035 -274.94971 351.0752 -275.04639 c\r351.29102 -275.14307 351.39844 -275.28564 351.39844 -275.47461 c\r351.39844 -275.64404 351.33398 -275.7666 351.20801 -275.84326 c\r351.08203 -275.91992 350.8418 -275.99316 350.4873 -276.06348 c\r350.31934 -276.10059 350.09082 -276.14063 349.80176 -276.18408 c\r349.5127 -276.22754 349.25 -276.28027 349.01465 -276.34229 c\r348.37012 -276.50732 347.89063 -276.76465 347.58008 -277.11377 c\r347.26758 -277.46338 347.11035 -277.89844 347.11035 -278.41895 c\r347.11035 -279.08887 347.43457 -279.64551 348.08301 -280.08936 c\r348.73047 -280.53369 349.61426 -280.75586 350.73828 -280.75586 c\r351.26953 -280.75586 351.77832 -280.70313 352.26563 -280.59766 c\r352.75293 -280.49268 353.13379 -280.38037 353.4082 -280.26025 c\r353.4082 -280.26025 353.4082 -278.50293 353.4082 -278.50293 c\r353.4082 -278.50293 353.21191 -278.50293 353.21191 -278.50293 c\r352.87598 -278.72803 352.49023 -278.91113 352.05859 -279.05273 c\r351.62695 -279.19385 351.18848 -279.26416 350.74707 -279.26416 c\r350.38086 -279.26416 350.07129 -279.21533 349.82227 -279.1167 c\r349.57031 -279.01807 349.44531 -278.87842 349.44531 -278.69775 c\r349.44531 -278.53223 349.50195 -278.40625 349.61523 -278.31982 c\r349.73047 -278.23291 349.99707 -278.146 350.41895 -278.05957 c\r350.65137 -278.01367 350.90039 -277.96973 351.16797 -277.92627 c\r351.43652 -277.88281 351.7041 -277.82813 351.97363 -277.76172 c\r352.57227 -277.60889 353.01563 -277.36768 353.30176 -277.03955 c\r353.58887 -276.71094 353.73145 -276.30078 353.73145 -275.80908 c\rh\r345.46582 -273.60107 m\r345.46582 -273.60107 343.18066 -273.60107 343.18066 -273.60107 c\r343.18066 -273.60107 343.18066 -277.05664 343.18066 -277.05664 c\r343.18066 -277.33789 343.16504 -277.61768 343.13574 -277.89746 c\r343.10645 -278.17676 343.05566 -278.38232 342.9834 -278.51416 c\r342.89941 -278.66797 342.77539 -278.7793 342.61328 -278.84961 c\r342.45117 -278.91992 342.22363 -278.95557 341.93359 -278.95557 c\r341.72656 -278.95557 341.51758 -278.92188 341.30371 -278.85547 c\r341.09082 -278.78955 340.86035 -278.68408 340.61035 -278.53906 c\r340.61035 -278.53906 340.61035 -273.60107 340.61035 -273.60107 c\r340.61035 -273.60107 338.32617 -273.60107 338.32617 -273.60107 c\r338.32617 -273.60107 338.32617 -280.55762 338.32617 -280.55762 c\r338.32617 -280.55762 340.61035 -280.55762 340.61035 -280.55762 c\r340.61035 -280.55762 340.61035 -279.79443 340.61035 -279.79443 c\r341.01563 -280.10498 341.40332 -280.34277 341.77637 -280.50781 c\r342.14941 -280.67285 342.56348 -280.75586 343.01953 -280.75586 c\r343.78613 -280.75586 344.38477 -280.53662 344.81738 -280.09863 c\r345.24902 -279.66016 345.46582 -279.00488 345.46582 -278.1333 c\r345.46582 -278.1333 345.46582 -273.60107 345.46582 -273.60107 c\rh\r333.87793 -275.38672 m\r334.02539 -275.56396 334.13672 -275.77783 334.20996 -276.02734 c\r334.28418 -276.27637 334.32129 -276.62207 334.32129 -277.06348 c\r334.32129 -277.47168 334.2832 -277.81396 334.20703 -278.09082 c\r334.13184 -278.36719 334.02539 -278.58789 333.89063 -278.75293 c\r333.75586 -278.92188 333.59277 -279.0415 333.40332 -279.11182 c\r333.21387 -279.18164 333.00977 -279.2168 332.79102 -279.2168 c\r332.57129 -279.2168 332.37598 -279.18799 332.20508 -279.13037 c\r332.0332 -279.07275 331.87012 -278.95703 331.71484 -278.78418 c\r331.57422 -278.62305 331.46387 -278.40234 331.38184 -278.12207 c\r331.2998 -277.84082 331.25879 -277.48877 331.25879 -277.06348 c\r331.25879 -276.68408 331.29395 -276.35498 331.36621 -276.07666 c\r331.43848 -275.79834 331.54297 -275.57422 331.68262 -275.40527 c\r331.81738 -275.24414 331.97852 -275.12695 332.16602 -275.05273 c\r332.35449 -274.97852 332.56934 -274.94092 332.80957 -274.94092 c\r333.0166 -274.94092 333.21289 -274.9751 333.40039 -275.04346 c\r333.58789 -275.11133 333.74707 -275.22559 333.87793 -275.38672 c\rh\r336.67969 -277.07617 m\r336.67969 -275.93262 336.33887 -275.03223 335.6582 -274.37402 c\r334.97754 -273.71582 334.02148 -273.38672 332.79102 -273.38672 c\r331.55859 -273.38672 330.60352 -273.71582 329.92188 -274.37402 c\r329.24121 -275.03223 328.90039 -275.93262 328.90039 -277.07617 c\r328.90039 -278.22705 329.24316 -279.13086 329.92773 -279.7876 c\r330.61426 -280.44385 331.56738 -280.77148 332.79102 -280.77148 c\r334.02832 -280.77148 334.98828 -280.44189 335.66504 -279.78125 c\r336.34082 -279.12061 336.67969 -278.21875 336.67969 -277.07617 c\rh\r327.27051 -273.60107 m\r327.27051 -273.60107 324.98438 -273.60107 324.98438 -273.60107 c\r324.98438 -273.60107 324.98438 -280.55762 324.98438 -280.55762 c\r324.98438 -280.55762 327.27051 -280.55762 327.27051 -280.55762 c\r327.27051 -280.55762 327.27051 -273.60107 327.27051 -273.60107 c\rh\r327.33496 -281.55713 m\r327.33496 -281.55713 324.91992 -281.55713 324.91992 -281.55713 c\r324.91992 -281.55713 324.91992 -283.24658 324.91992 -283.24658 c\r324.91992 -283.24658 327.33496 -283.24658 327.33496 -283.24658 c\r327.33496 -283.24658 327.33496 -281.55713 327.33496 -281.55713 c\rh\r323.61914 -273.66406 m\r323.37402 -273.60205 323.11426 -273.55322 322.83984 -273.51807 c\r322.56543 -273.4834 322.22852 -273.46582 321.83301 -273.46582 c\r320.94434 -273.46582 320.28516 -273.64111 319.85156 -273.9917 c\r319.41992 -274.34277 319.20313 -274.94336 319.20313 -275.79297 c\r319.20313 -275.79297 319.20313 -279.04199 319.20313 -279.04199 c\r319.20313 -279.04199 318.2627 -279.04199 318.2627 -279.04199 c\r318.2627 -279.04199 318.2627 -280.55762 318.2627 -280.55762 c\r318.2627 -280.55762 319.20313 -280.55762 319.20313 -280.55762 c\r319.20313 -280.55762 319.20313 -282.54883 319.20313 -282.54883 c\r319.20313 -282.54883 321.48828 -282.54883 321.48828 -282.54883 c\r321.48828 -282.54883 321.48828 -280.55762 321.48828 -280.55762 c\r321.48828 -280.55762 323.61914 -280.55762 323.61914 -280.55762 c\r323.61914 -280.55762 323.61914 -279.04199 323.61914 -279.04199 c\r323.61914 -279.04199 321.48828 -279.04199 321.48828 -279.04199 c\r321.48828 -279.04199 321.48828 -276.57813 321.48828 -276.57813 c\r321.48828 -276.33447 321.49023 -276.12207 321.49414 -275.94043 c\r321.49805 -275.75928 321.53223 -275.5957 321.5957 -275.45117 c\r321.65527 -275.30664 321.75879 -275.19238 321.9082 -275.10791 c\r322.05762 -275.02344 322.27637 -274.98096 322.56348 -274.98096 c\r322.68164 -274.98096 322.83496 -275.00635 323.02734 -275.05615 c\r323.21875 -275.10693 323.35352 -275.15332 323.42969 -275.19531 c\r323.42969 -275.19531 323.61914 -275.19531 323.61914 -275.19531 c\r323.61914 -275.19531 323.61914 -273.66406 323.61914 -273.66406 c\rh\r315.15039 -273.41797 m\r314.53027 -273.41797 313.96387 -273.49023 313.45215 -273.63477 c\r312.93945 -273.77979 312.49316 -274.00293 312.11426 -274.3042 c\r311.73926 -274.60596 311.44824 -274.98584 311.24121 -275.44482 c\r311.03418 -275.90332 310.93164 -276.44043 310.93164 -277.05566 c\r310.93164 -277.70459 311.04199 -278.26465 311.26367 -278.73535 c\r311.48438 -279.20654 311.79395 -279.59668 312.19141 -279.90674 c\r312.57324 -280.2002 313.01758 -280.41504 313.51855 -280.55127 c\r314.02051 -280.6875 314.54102 -280.75586 315.08203 -280.75586 c\r315.56543 -280.75586 316.0127 -280.7041 316.42285 -280.60059 c\r316.83203 -280.49756 317.21289 -280.36328 317.56738 -280.19824 c\r317.56738 -280.19824 317.56738 -278.29688 317.56738 -278.29688 c\r317.56738 -278.29688 317.24609 -278.29688 317.24609 -278.29688 c\r317.15723 -278.37061 317.0498 -278.45703 316.92578 -278.55615 c\r316.80176 -278.65479 316.64941 -278.75195 316.46777 -278.84668 c\r316.29492 -278.93701 316.10449 -279.01221 315.89941 -279.07178 c\r315.69238 -279.13135 315.45313 -279.16162 315.17871 -279.16162 c\r314.57227 -279.16162 314.10547 -278.97266 313.77832 -278.59473 c\r313.45215 -278.2168 313.28906 -277.7041 313.28906 -277.05566 c\r313.28906 -276.38721 313.45703 -275.87939 313.79102 -275.53271 c\r314.12598 -275.18604 314.60156 -275.0127 315.2168 -275.0127 c\r315.50391 -275.0127 315.76172 -275.04492 315.99121 -275.10889 c\r316.2207 -275.17236 316.41113 -275.24805 316.5625 -275.33447 c\r316.70605 -275.41699 316.83203 -275.50391 316.94141 -275.59473 c\r317.05078 -275.68555 317.15332 -275.77441 317.24609 -275.86133 c\r317.24609 -275.86133 317.56738 -275.86133 317.56738 -275.86133 c\r317.56738 -275.86133 317.56738 -273.95801 317.56738 -273.95801 c\r317.20898 -273.79199 316.83496 -273.66064 316.44434 -273.56348 c\r316.05469 -273.4668 315.62305 -273.41797 315.15039 -273.41797 c\rh\r309.30078 -273.60107 m\r309.30078 -273.60107 307.01563 -273.60107 307.01563 -273.60107 c\r307.01563 -273.60107 307.01563 -274.37061 307.01563 -274.37061 c\r306.59473 -274.05664 306.20801 -273.81787 305.8584 -273.65479 c\r305.50977 -273.49219 305.0918 -273.41016 304.60742 -273.41016 c\r303.82324 -273.41016 303.21973 -273.63086 302.79688 -274.07275 c\r302.37402 -274.51465 302.16211 -275.16748 302.16211 -276.03027 c\r302.16211 -276.03027 302.16211 -280.55762 302.16211 -280.55762 c\r302.16211 -280.55762 304.44727 -280.55762 304.44727 -280.55762 c\r304.44727 -280.55762 304.44727 -277.10645 304.44727 -277.10645 c\r304.44727 -276.75537 304.45898 -276.46289 304.48242 -276.22998 c\r304.50488 -275.99658 304.55859 -275.80371 304.64355 -275.65088 c\r304.72363 -275.49805 304.84473 -275.38623 305.00684 -275.31592 c\r305.16895 -275.24609 305.39551 -275.21094 305.6875 -275.21094 c\r305.88184 -275.21094 306.0957 -275.24609 306.33203 -275.31592 c\r306.56836 -275.38623 306.7959 -275.48975 307.01563 -275.62598 c\r307.01563 -275.62598 307.01563 -280.55762 307.01563 -280.55762 c\r307.01563 -280.55762 309.30078 -280.55762 309.30078 -280.55762 c\r309.30078 -280.55762 309.30078 -273.60107 309.30078 -273.60107 c\rh\r300.91992 -278.43164 m\r300.91992 -278.43164 300.71777 -278.43164 300.71777 -278.43164 c\r300.62207 -278.46338 300.4668 -278.48682 300.25195 -278.50293 c\r300.03809 -278.51904 299.85938 -278.52686 299.71777 -278.52686 c\r299.39355 -278.52686 299.1084 -278.50586 298.86035 -278.46484 c\r298.6123 -278.42334 298.3457 -278.35303 298.05957 -278.25439 c\r298.05957 -278.25439 298.05957 -273.60107 298.05957 -273.60107 c\r298.05957 -273.60107 295.77539 -273.60107 295.77539 -273.60107 c\r295.77539 -273.60107 295.77539 -280.55762 295.77539 -280.55762 c\r295.77539 -280.55762 298.05957 -280.55762 298.05957 -280.55762 c\r298.05957 -280.55762 298.05957 -279.53467 298.05957 -279.53467 c\r298.55957 -279.95605 298.99414 -280.23633 299.36426 -280.37402 c\r299.73438 -280.5127 300.07422 -280.58105 300.38477 -280.58105 c\r300.46387 -280.58105 300.55469 -280.5791 300.65625 -280.5752 c\r300.75586 -280.5708 300.84473 -280.56445 300.91992 -280.55664 c\r300.91992 -280.55664 300.91992 -278.43164 300.91992 -278.43164 c\rh\r294.4082 -273.66406 m\r294.16406 -273.60205 293.9043 -273.55322 293.62988 -273.51807 c\r293.35547 -273.4834 293.01953 -273.46582 292.62207 -273.46582 c\r291.73535 -273.46582 291.0752 -273.64111 290.64258 -273.9917 c\r290.20898 -274.34277 289.99219 -274.94336 289.99219 -275.79297 c\r289.99219 -275.79297 289.99219 -279.04199 289.99219 -279.04199 c\r289.99219 -279.04199 289.05273 -279.04199 289.05273 -279.04199 c\r289.05273 -279.04199 289.05273 -280.55762 289.05273 -280.55762 c\r289.05273 -280.55762 289.99219 -280.55762 289.99219 -280.55762 c\r289.99219 -280.55762 289.99219 -282.54883 289.99219 -282.54883 c\r289.99219 -282.54883 292.27734 -282.54883 292.27734 -282.54883 c\r292.27734 -282.54883 292.27734 -280.55762 292.27734 -280.55762 c\r292.27734 -280.55762 294.4082 -280.55762 294.4082 -280.55762 c\r294.4082 -280.55762 294.4082 -279.04199 294.4082 -279.04199 c\r294.4082 -279.04199 292.27734 -279.04199 292.27734 -279.04199 c\r292.27734 -279.04199 292.27734 -276.57813 292.27734 -276.57813 c\r292.27734 -276.33447 292.2793 -276.12207 292.28418 -275.94043 c\r292.28906 -275.75928 292.32129 -275.5957 292.38574 -275.45117 c\r292.44434 -275.30664 292.54883 -275.19238 292.69922 -275.10791 c\r292.84766 -275.02344 293.06543 -274.98096 293.35352 -274.98096 c\r293.4707 -274.98096 293.62695 -275.00635 293.81738 -275.05615 c\r294.00977 -275.10693 294.14355 -275.15332 294.21875 -275.19531 c\r294.21875 -275.19531 294.4082 -275.19531 294.4082 -275.19531 c\r294.4082 -275.19531 294.4082 -273.66406 294.4082 -273.66406 c\rh\r288.34961 -275.80908 m\r288.34961 -275.09033 288.02051 -274.51025 287.36133 -274.07031 c\r286.70313 -273.63037 285.80273 -273.41016 284.6582 -273.41016 c\r284.02637 -273.41016 283.45117 -273.46826 282.93652 -273.58398 c\r282.42188 -273.7002 282.00879 -273.82813 281.69531 -273.96875 c\r281.69531 -273.96875 281.69531 -275.80615 281.69531 -275.80615 c\r281.69531 -275.80615 281.90527 -275.80615 281.90527 -275.80615 c\r282.01855 -275.72754 282.15039 -275.64209 282.2998 -275.54883 c\r282.4502 -275.45605 282.66113 -275.35596 282.93555 -275.24854 c\r283.17188 -275.15332 283.44043 -275.07178 283.73828 -275.00342 c\r284.03906 -274.93555 284.35938 -274.90137 284.7002 -274.90137 c\r285.14746 -274.90137 285.47754 -274.94971 285.69336 -275.04639 c\r285.9082 -275.14307 286.01563 -275.28564 286.01563 -275.47461 c\r286.01563 -275.64404 285.95215 -275.7666 285.8252 -275.84326 c\r285.69922 -275.91992 285.45801 -275.99316 285.10547 -276.06348 c\r284.93652 -276.10059 284.70703 -276.14063 284.41895 -276.18408 c\r284.13086 -276.22754 283.86719 -276.28027 283.63184 -276.34229 c\r282.98633 -276.50732 282.50879 -276.76465 282.19727 -277.11377 c\r281.88477 -277.46338 281.72949 -277.89844 281.72949 -278.41895 c\r281.72949 -279.08887 282.05273 -279.64551 282.70117 -280.08936 c\r283.34766 -280.53369 284.23242 -280.75586 285.35547 -280.75586 c\r285.88672 -280.75586 286.39551 -280.70313 286.88281 -280.59766 c\r287.37109 -280.49268 287.75098 -280.38037 288.02441 -280.26025 c\r288.02441 -280.26025 288.02441 -278.50293 288.02441 -278.50293 c\r288.02441 -278.50293 287.83008 -278.50293 287.83008 -278.50293 c\r287.49121 -278.72803 287.10742 -278.91113 286.67676 -279.05273 c\r286.24316 -279.19385 285.80664 -279.26416 285.36426 -279.26416 c\r284.99805 -279.26416 284.68945 -279.21533 284.4375 -279.1167 c\r284.18848 -279.01807 284.0625 -278.87842 284.0625 -278.69775 c\r284.0625 -278.53223 284.12012 -278.40625 284.2334 -278.31982 c\r284.3457 -278.23291 284.61426 -278.146 285.03613 -278.05957 c\r285.26758 -278.01367 285.51758 -277.96973 285.78613 -277.92627 c\r286.05371 -277.88281 286.32129 -277.82813 286.5918 -277.76172 c\r287.19043 -277.60889 287.63184 -277.36768 287.91992 -277.03955 c\r288.20605 -276.71094 288.34961 -276.30078 288.34961 -275.80908 c\rh\r280.08398 -273.60107 m\r280.08398 -273.60107 277.79688 -273.60107 277.79688 -273.60107 c\r277.79688 -273.60107 277.79688 -277.05664 277.79688 -277.05664 c\r277.79688 -277.33789 277.7832 -277.61768 277.75293 -277.89746 c\r277.72363 -278.17676 277.67383 -278.38232 277.60156 -278.51416 c\r277.5166 -278.66797 277.39453 -278.7793 277.23047 -278.84961 c\r277.06934 -278.91992 276.8418 -278.95557 276.5498 -278.95557 c\r276.34473 -278.95557 276.13574 -278.92188 275.92188 -278.85547 c\r275.70801 -278.78955 275.47656 -278.68408 275.22852 -278.53906 c\r275.22852 -278.53906 275.22852 -273.60107 275.22852 -273.60107 c\r275.22852 -273.60107 272.94336 -273.60107 272.94336 -273.60107 c\r272.94336 -273.60107 272.94336 -280.55762 272.94336 -280.55762 c\r272.94336 -280.55762 275.22852 -280.55762 275.22852 -280.55762 c\r275.22852 -280.55762 275.22852 -279.79443 275.22852 -279.79443 c\r275.63281 -280.10498 276.02148 -280.34277 276.39453 -280.50781 c\r276.76758 -280.67285 277.18066 -280.75586 277.63574 -280.75586 c\r278.40332 -280.75586 279.00195 -280.53662 279.43457 -280.09863 c\r279.86621 -279.66016 280.08398 -279.00488 280.08398 -278.1333 c\r280.08398 -278.1333 280.08398 -273.60107 280.08398 -273.60107 c\rh\r271.08984 -273.60107 m\r271.08984 -273.60107 265.56445 -273.60107 265.56445 -273.60107 c\r265.56445 -273.60107 265.56445 -275.23486 265.56445 -275.23486 c\r265.56445 -275.23486 267.11328 -275.23486 267.11328 -275.23486 c\r267.11328 -275.23486 267.11328 -281.19238 267.11328 -281.19238 c\r267.11328 -281.19238 265.56445 -281.19238 265.56445 -281.19238 c\r265.56445 -281.19238 265.56445 -282.82617 265.56445 -282.82617 c\r265.56445 -282.82617 271.08984 -282.82617 271.08984 -282.82617 c\r271.08984 -282.82617 271.08984 -281.19238 271.08984 -281.19238 c\r271.08984 -281.19238 269.54297 -281.19238 269.54297 -281.19238 c\r269.54297 -281.19238 269.54297 -275.23486 269.54297 -275.23486 c\r269.54297 -275.23486 271.08984 -275.23486 271.08984 -275.23486 c\r271.08984 -275.23486 271.08984 -273.60107 271.08984 -273.60107 c\rh\r259.89893 -276.5 m\r259.89893 -275.5918 259.50537 -274.854 258.71826 -274.28564 c\r257.93018 -273.71777 256.86133 -273.43408 255.50977 -273.43408 c\r254.729 -273.43408 254.04834 -273.50098 253.46729 -273.63574 c\r252.88672 -273.76953 252.34326 -273.94092 251.83691 -274.14746 c\r251.83691 -274.14746 251.83691 -276.36133 251.83691 -276.36133 c\r251.83691 -276.36133 252.10303 -276.36133 252.10303 -276.36133 c\r252.60498 -275.96826 253.1665 -275.6665 253.78906 -275.45605 c\r254.41113 -275.24463 255.01025 -275.13965 255.58447 -275.13965 c\r255.73193 -275.13965 255.92676 -275.15186 256.16699 -275.17676 c\r256.40771 -275.20117 256.604 -275.24268 256.75586 -275.30078 c\r256.94141 -275.37451 257.09424 -275.46729 257.21436 -275.57813 c\r257.33545 -275.68994 257.39502 -275.85449 257.39502 -276.07324 c\r257.39502 -276.27539 257.30762 -276.4502 257.13232 -276.59619 c\r256.95703 -276.74316 256.70068 -276.85547 256.36328 -276.93408 c\r256.00879 -277.0166 255.63281 -277.09424 255.23828 -277.1665 c\r254.84375 -277.23877 254.47461 -277.33057 254.12842 -277.44238 c\r253.33496 -277.69434 252.76367 -278.03564 252.41504 -278.46729 c\r252.06689 -278.89893 251.89307 -279.43457 251.89307 -280.0752 c\r251.89307 -280.93408 252.28662 -281.63477 253.07471 -282.17822 c\r253.86279 -282.72119 254.87402 -282.99316 256.1123 -282.99316 c\r256.73291 -282.99316 257.34668 -282.93408 257.95215 -282.81641 c\r258.55762 -282.69873 259.0835 -282.55078 259.52637 -282.37305 c\r259.52637 -282.37305 259.52637 -280.24805 259.52637 -280.24805 c\r259.52637 -280.24805 259.26709 -280.24805 259.26709 -280.24805 c\r258.88672 -280.54541 258.42041 -280.79443 257.87012 -280.99463 c\r257.31934 -281.19482 256.75684 -281.29541 256.18311 -281.29541 c\r255.979 -281.29541 255.77832 -281.28125 255.57861 -281.25488 c\r255.37793 -281.22852 255.18359 -281.17773 254.99805 -281.10352 c\r254.8335 -281.0415 254.69238 -280.94727 254.57422 -280.82129 c\r254.45557 -280.69531 254.39648 -280.55176 254.39648 -280.39111 c\r254.39648 -280.14746 254.4917 -279.96045 254.68115 -279.83008 c\r254.87109 -279.7002 255.22998 -279.58154 255.75781 -279.47412 c\r256.10352 -279.40381 256.43701 -279.33545 256.75586 -279.26953 c\r257.07422 -279.20313 257.41602 -279.1123 257.78467 -278.99707 c\r258.50635 -278.76563 259.03906 -278.45068 259.38281 -278.05225 c\r259.72705 -277.65381 259.89893 -277.13672 259.89893 -276.5 c\rh\r248.11865 -279.86426 m\r248.11865 -280.12354 248.04688 -280.34668 247.90332 -280.53418 c\r247.75928 -280.72119 247.59082 -280.85156 247.40088 -280.92627 c\r247.14697 -281.02441 246.89941 -281.0791 246.6582 -281.08936 c\r246.41699 -281.09961 246.09521 -281.10498 245.69434 -281.10498 c\r245.69434 -281.10498 245.27441 -281.10498 245.27441 -281.10498 c\r245.27441 -281.10498 245.27441 -278.35205 245.27441 -278.35205 c\r245.27441 -278.35205 245.97266 -278.35205 245.97266 -278.35205 c\r246.3877 -278.35205 246.729 -278.37695 246.99805 -278.42578 c\r247.2666 -278.47559 247.4917 -278.57422 247.67334 -278.72266 c\r247.83057 -278.854 247.94385 -279.01172 248.01318 -279.19434 c\r248.08398 -279.37793 248.11865 -279.60107 248.11865 -279.86426 c\rh\r250.62988 -279.91504 m\r250.62988 -279.50195 250.55566 -279.09863 250.4082 -278.7041 c\r250.26074 -278.30957 250.0498 -277.97852 249.77539 -277.70996 c\r249.39844 -277.34619 248.97949 -277.07129 248.51611 -276.88574 c\r248.05322 -276.7002 247.47852 -276.60693 246.78955 -276.60693 c\r246.78955 -276.60693 245.27441 -276.60693 245.27441 -276.60693 c\r245.27441 -276.60693 245.27441 -273.60107 245.27441 -273.60107 c\r245.27441 -273.60107 242.84326 -273.60107 242.84326 -273.60107 c\r242.84326 -273.60107 242.84326 -282.82617 242.84326 -282.82617 c\r242.84326 -282.82617 246.84863 -282.82617 246.84863 -282.82617 c\r247.44775 -282.82617 247.9541 -282.77539 248.36572 -282.67432 c\r248.77734 -282.57324 249.14209 -282.42139 249.4585 -282.21924 c\r249.83838 -281.97559 250.12891 -281.66357 250.33057 -281.28418 c\r250.53076 -280.90381 250.62988 -280.44727 250.62988 -279.91504 c\rh\r240.87012 -273.60107 m\r240.87012 -273.60107 235.34375 -273.60107 235.34375 -273.60107 c\r235.34375 -273.60107 235.34375 -275.23486 235.34375 -275.23486 c\r235.34375 -275.23486 236.89014 -275.23486 236.89014 -275.23486 c\r236.89014 -275.23486 236.89014 -281.19238 236.89014 -281.19238 c\r236.89014 -281.19238 235.34375 -281.19238 235.34375 -281.19238 c\r235.34375 -281.19238 235.34375 -282.82617 235.34375 -282.82617 c\r235.34375 -282.82617 240.87012 -282.82617 240.87012 -282.82617 c\r240.87012 -282.82617 240.87012 -281.19238 240.87012 -281.19238 c\r240.87012 -281.19238 239.32129 -281.19238 239.32129 -281.19238 c\r239.32129 -281.19238 239.32129 -275.23486 239.32129 -275.23486 c\r239.32129 -275.23486 240.87012 -275.23486 240.87012 -275.23486 c\r240.87012 -275.23486 240.87012 -273.60107 240.87012 -273.60107 c\rh\r233.35986 -273.60107 m\r233.35986 -273.60107 230.94482 -273.60107 230.94482 -273.60107 c\r230.94482 -273.60107 230.94482 -279.77637 230.94482 -279.77637 c\r230.94482 -279.77637 229.19531 -275.7666 229.19531 -275.7666 c\r229.19531 -275.7666 227.51563 -275.7666 227.51563 -275.7666 c\r227.51563 -275.7666 225.76758 -279.77637 225.76758 -279.77637 c\r225.76758 -279.77637 225.76758 -273.60107 225.76758 -273.60107 c\r225.76758 -273.60107 223.47363 -273.60107 223.47363 -273.60107 c\r223.47363 -273.60107 223.47363 -282.82617 223.47363 -282.82617 c\r223.47363 -282.82617 226.29932 -282.82617 226.29932 -282.82617 c\r226.29932 -282.82617 228.42188 -278.19629 228.42188 -278.19629 c\r228.42188 -278.19629 230.53857 -282.82617 230.53857 -282.82617 c\r230.53857 -282.82617 233.35986 -282.82617 233.35986 -282.82617 c\r233.35986 -282.82617 233.35986 -273.60107 233.35986 -273.60107 c\rh\r218.05713 -281.60449 m\r218.05713 -281.60449 217.88721 -281.60449 217.88721 -281.60449 c\r217.78662 -281.63428 217.6543 -281.66797 217.49268 -281.70605 c\r217.33057 -281.74414 217.15723 -281.76318 216.97168 -281.76318 c\r216.52539 -281.76318 216.22363 -281.68408 216.06592 -281.52734 c\r215.9082 -281.36963 215.8291 -281.06494 215.8291 -280.61328 c\r215.8291 -280.61328 215.8291 -280.55762 215.8291 -280.55762 c\r215.8291 -280.55762 217.5874 -280.55762 217.5874 -280.55762 c\r217.5874 -280.55762 217.5874 -279.04199 217.5874 -279.04199 c\r217.5874 -279.04199 215.90234 -279.04199 215.90234 -279.04199 c\r215.90234 -279.04199 215.90234 -273.60107 215.90234 -273.60107 c\r215.90234 -273.60107 213.61719 -273.60107 213.61719 -273.60107 c\r213.61719 -273.60107 213.61719 -279.04199 213.61719 -279.04199 c\r213.61719 -279.04199 212.64453 -279.04199 212.64453 -279.04199 c\r212.64453 -279.04199 212.64453 -280.55762 212.64453 -280.55762 c\r212.64453 -280.55762 213.61719 -280.55762 213.61719 -280.55762 c\r213.61719 -280.55762 213.61719 -280.75 213.61719 -280.75 c\r213.61719 -281.60303 213.84814 -282.24365 214.31104 -282.66992 c\r214.77295 -283.09668 215.47314 -283.31006 216.41016 -283.31006 c\r216.74854 -283.31006 217.05469 -283.29883 217.3291 -283.27588 c\r217.604 -283.25342 217.84619 -283.22266 218.05713 -283.18555 c\r218.05713 -283.18555 218.05713 -281.60449 218.05713 -281.60449 c\rh\r208.99951 -275.38672 m\r209.14697 -275.56396 209.25781 -275.77783 209.33154 -276.02734 c\r209.40527 -276.27637 209.44238 -276.62207 209.44238 -277.06348 c\r209.44238 -277.47168 209.4043 -277.81396 209.32861 -278.09082 c\r209.25293 -278.36719 209.14697 -278.58789 209.01172 -278.75293 c\r208.87744 -278.92188 208.71484 -279.0415 208.52441 -279.11182 c\r208.33447 -279.18164 208.12988 -279.2168 207.91113 -279.2168 c\r207.69141 -279.2168 207.49658 -279.18799 207.32568 -279.13037 c\r207.1543 -279.07275 206.99072 -278.95703 206.83496 -278.78418 c\r206.69531 -278.62305 206.58496 -278.40234 206.50244 -278.12207 c\r206.42041 -277.84082 206.37988 -277.48877 206.37988 -277.06348 c\r206.37988 -276.68408 206.41504 -276.35498 206.48633 -276.07666 c\r206.55859 -275.79834 206.66406 -275.57422 206.80322 -275.40527 c\r206.93848 -275.24414 207.09961 -275.12695 207.2876 -275.05273 c\r207.4751 -274.97852 207.68945 -274.94092 207.93018 -274.94092 c\r208.13672 -274.94092 208.3335 -274.9751 208.52148 -275.04346 c\r208.70898 -275.11133 208.86865 -275.22559 208.99951 -275.38672 c\rh\r211.80029 -277.07617 m\r211.80029 -275.93262 211.45996 -275.03223 210.7793 -274.37402 c\r210.09814 -273.71582 209.14209 -273.38672 207.91113 -273.38672 c\r206.67969 -273.38672 205.72412 -273.71582 205.04248 -274.37402 c\r204.36182 -275.03223 204.02148 -275.93262 204.02148 -277.07617 c\r204.02148 -278.22705 204.36377 -279.13086 205.04932 -279.7876 c\r205.73438 -280.44385 206.68799 -280.77148 207.91113 -280.77148 c\r209.1499 -280.77148 210.10889 -280.44189 210.78516 -279.78125 c\r211.46191 -279.12061 211.80029 -278.21875 211.80029 -277.07617 c\rh\r198.80762 -278.43164 m\r198.80762 -278.43164 198.60645 -278.43164 198.60645 -278.43164 c\r198.50977 -278.46338 198.35449 -278.48682 198.14014 -278.50293 c\r197.92529 -278.51904 197.74756 -278.52686 197.60449 -278.52686 c\r197.28125 -278.52686 196.99561 -278.50586 196.74756 -278.46484 c\r196.49951 -278.42334 196.2334 -278.35303 195.94727 -278.25439 c\r195.94727 -278.25439 195.94727 -273.60107 195.94727 -273.60107 c\r195.94727 -273.60107 193.6626 -273.60107 193.6626 -273.60107 c\r193.6626 -273.60107 193.6626 -280.55762 193.6626 -280.55762 c\r193.6626 -280.55762 195.94727 -280.55762 195.94727 -280.55762 c\r195.94727 -280.55762 195.94727 -279.53467 195.94727 -279.53467 c\r196.44775 -279.95605 196.88184 -280.23633 197.25195 -280.37402 c\r197.62109 -280.5127 197.96143 -280.58105 198.27197 -280.58105 c\r198.35205 -280.58105 198.44287 -280.5791 198.54346 -280.5752 c\r198.64404 -280.5708 198.73193 -280.56445 198.80762 -280.55664 c\r198.80762 -280.55664 198.80762 -278.43164 198.80762 -278.43164 c\rh\r189.78613 -277.97168 m\r189.77344 -278.4375 189.65479 -278.78809 189.43164 -279.02295 c\r189.20801 -279.25781 188.85986 -279.37598 188.38672 -279.37598 c\r187.94775 -279.37598 187.5874 -279.26416 187.30469 -279.0415 c\r187.02148 -278.81885 186.86377 -278.4624 186.83008 -277.97168 c\r186.83008 -277.97168 189.78613 -277.97168 189.78613 -277.97168 c\rh\r192.0542 -276.6626 m\r192.0542 -276.6626 186.83643 -276.6626 186.83643 -276.6626 c\r186.86963 -276.12109 187.08252 -275.70703 187.47314 -275.41992 c\r187.86377 -275.13232 188.43945 -274.98926 189.19971 -274.98926 c\r189.68164 -274.98926 190.14844 -275.07275 190.60059 -275.24121 c\r191.05273 -275.40918 191.41016 -275.58936 191.67139 -275.78223 c\r191.67139 -275.78223 191.92529 -275.78223 191.92529 -275.78223 c\r191.92529 -275.78223 191.92529 -273.99316 191.92529 -273.99316 c\r191.41016 -273.7915 190.9248 -273.64453 190.46875 -273.55469 c\r190.01221 -273.46338 189.5083 -273.41797 188.95508 -273.41797 c\r187.52783 -273.41797 186.43506 -273.73145 185.6748 -274.35889 c\r184.91553 -274.98584 184.53467 -275.87939 184.53467 -277.03955 c\r184.53467 -278.18652 184.89502 -279.09521 185.61426 -279.76563 c\r186.33398 -280.43652 187.32031 -280.77148 188.57324 -280.77148 c\r189.72949 -280.77148 190.59912 -280.48535 191.18164 -279.91357 c\r191.76367 -279.34131 192.0542 -278.51758 192.0542 -277.44336 c\r192.0542 -277.44336 192.0542 -276.6626 192.0542 -276.6626 c\rh\r181.06348 -277.1333 m\r181.06348 -277.75293 180.95605 -278.22998 180.74121 -278.56445 c\r180.52588 -278.89844 180.14307 -279.06592 179.59082 -279.06592 c\r179.37598 -279.06592 179.15479 -279.03369 178.92676 -278.96973 c\r178.69971 -278.90625 178.48193 -278.81445 178.27588 -278.69434 c\r178.27588 -278.69434 178.27588 -275.20068 178.27588 -275.20068 c\r178.44043 -275.14307 178.59619 -275.10352 178.74414 -275.08301 c\r178.89111 -275.0625 179.06836 -275.05225 179.27441 -275.05225 c\r179.87695 -275.05225 180.32617 -275.22559 180.62061 -275.57275 c\r180.91602 -275.91943 181.06348 -276.43994 181.06348 -277.1333 c\rh\r183.41357 -277.17871 m\r183.41357 -276.08398 183.10449 -275.19092 182.48633 -274.50098 c\r181.86865 -273.81055 181.09766 -273.46582 180.17383 -273.46582 c\r179.77734 -273.46582 179.42969 -273.50684 179.12988 -273.58887 c\r178.83057 -273.6709 178.5459 -273.79053 178.27588 -273.94775 c\r178.27588 -273.94775 178.18115 -273.60107 178.18115 -273.60107 c\r178.18115 -273.60107 175.99121 -273.60107 175.99121 -273.60107 c\r175.99121 -273.60107 175.99121 -283.24658 175.99121 -283.24658 c\r175.99121 -283.24658 178.27588 -283.24658 178.27588 -283.24658 c\r178.27588 -283.24658 178.27588 -279.83838 178.27588 -279.83838 c\r178.62598 -280.11133 178.9834 -280.33203 179.34863 -280.50146 c\r179.71289 -280.6709 180.13379 -280.75586 180.61084 -280.75586 c\r181.50928 -280.75586 182.20117 -280.43848 182.68555 -279.80469 c\r183.1709 -279.16992 183.41357 -278.29492 183.41357 -277.17871 c\rh\r169.21875 -278.53906 m\r169.21875 -278.53906 169.21875 -273.60107 169.21875 -273.60107 c\r169.21875 -273.60107 166.93311 -273.60107 166.93311 -273.60107 c\r166.93311 -273.60107 166.93311 -277.08105 166.93311 -277.08105 c\r166.93311 -277.42041 166.9248 -277.7085 166.90771 -277.94678 c\r166.89111 -278.18506 166.84473 -278.37793 166.76855 -278.52686 c\r166.69238 -278.67578 166.57764 -278.78467 166.42285 -278.85254 c\r166.26904 -278.9209 166.05225 -278.95557 165.77344 -278.95557 c\r165.55029 -278.95557 165.33252 -278.91064 165.12109 -278.82178 c\r164.91016 -278.73291 164.72021 -278.63867 164.55078 -278.53906 c\r164.55078 -278.53906 164.55078 -273.60107 164.55078 -273.60107 c\r164.55078 -273.60107 162.26563 -273.60107 162.26563 -273.60107 c\r162.26563 -273.60107 162.26563 -280.55762 162.26563 -280.55762 c\r162.26563 -280.55762 164.55078 -280.55762 164.55078 -280.55762 c\r164.55078 -280.55762 164.55078 -279.79443 164.55078 -279.79443 c\r164.94336 -280.09619 165.31836 -280.33203 165.67627 -280.50146 c\r166.03564 -280.6709 166.43164 -280.75586 166.86572 -280.75586 c\r167.33447 -280.75586 167.74707 -280.65332 168.10547 -280.44922 c\r168.46387 -280.24463 168.74414 -279.94336 168.94678 -279.54688 c\r169.40234 -279.92285 169.84473 -280.21875 170.27441 -280.43359 c\r170.70459 -280.64844 171.12646 -280.75586 171.53955 -280.75586 c\r172.30664 -280.75586 172.88965 -280.53076 173.28809 -280.08008 c\r173.68652 -279.62939 173.88574 -278.97998 173.88574 -278.1333 c\r173.88574 -278.1333 173.88574 -273.60107 173.88574 -273.60107 c\r173.88574 -273.60107 171.60107 -273.60107 171.60107 -273.60107 c\r171.60107 -273.60107 171.60107 -277.08105 171.60107 -277.08105 c\r171.60107 -277.4248 171.59277 -277.71436 171.5791 -277.94971 c\r171.56396 -278.18604 171.51807 -278.37793 171.44238 -278.52686 c\r171.37061 -278.67578 171.25635 -278.78467 171.1001 -278.85254 c\r170.94336 -278.9209 170.72412 -278.95557 170.44141 -278.95557 c\r170.25098 -278.95557 170.06494 -278.92285 169.88379 -278.85889 c\r169.70264 -278.79492 169.47998 -278.68848 169.21875 -278.53906 c\rh\r160.125 -273.60107 m\r160.125 -273.60107 157.83984 -273.60107 157.83984 -273.60107 c\r157.83984 -273.60107 157.83984 -274.37061 157.83984 -274.37061 c\r157.41846 -274.05664 157.0332 -273.81787 156.68359 -273.65479 c\r156.3335 -273.49219 155.91602 -273.41016 155.43213 -273.41016 c\r154.64844 -273.41016 154.04492 -273.63086 153.62061 -274.07275 c\r153.19775 -274.51465 152.98584 -275.16748 152.98584 -276.03027 c\r152.98584 -276.03027 152.98584 -280.55762 152.98584 -280.55762 c\r152.98584 -280.55762 155.27148 -280.55762 155.27148 -280.55762 c\r155.27148 -280.55762 155.27148 -277.10645 155.27148 -277.10645 c\r155.27148 -276.75537 155.28271 -276.46289 155.30615 -276.22998 c\r155.3291 -275.99658 155.38281 -275.80371 155.46729 -275.65088 c\r155.54785 -275.49805 155.66895 -275.38623 155.83105 -275.31592 c\r155.99365 -275.24609 156.2207 -275.21094 156.51123 -275.21094 c\r156.70508 -275.21094 156.92041 -275.24609 157.15674 -275.31592 c\r157.39307 -275.38623 157.62061 -275.48975 157.83984 -275.62598 c\r157.83984 -275.62598 157.83984 -280.55762 157.83984 -280.55762 c\r157.83984 -280.55762 160.125 -280.55762 160.125 -280.55762 c\r160.125 -280.55762 160.125 -273.60107 160.125 -273.60107 c\rh\r150.76416 -273.60107 m\r150.76416 -273.60107 148.42139 -273.60107 148.42139 -273.60107 c\r148.42139 -273.60107 144.41113 -279.93311 144.41113 -279.93311 c\r144.41113 -279.93311 144.41113 -273.60107 144.41113 -273.60107 c\r144.41113 -273.60107 142.18311 -273.60107 142.18311 -273.60107 c\r142.18311 -273.60107 142.18311 -282.82617 142.18311 -282.82617 c\r142.18311 -282.82617 145.09082 -282.82617 145.09082 -282.82617 c\r145.09082 -282.82617 148.53564 -277.5415 148.53564 -277.5415 c\r148.53564 -277.5415 148.53564 -282.82617 148.53564 -282.82617 c\r148.53564 -282.82617 150.76416 -282.82617 150.76416 -282.82617 c\r150.76416 -282.82617 150.76416 -273.60107 150.76416 -273.60107 c\rh\r135.47852 -273.60107 m\r135.47852 -273.60107 133.19336 -273.60107 133.19336 -273.60107 c\r133.19336 -273.60107 133.19336 -283.24658 133.19336 -283.24658 c\r133.19336 -283.24658 135.47852 -283.24658 135.47852 -283.24658 c\r135.47852 -283.24658 135.47852 -273.60107 135.47852 -273.60107 c\rh\r128.83545 -275.42676 m\r128.83545 -275.42676 128.83545 -276.86914 128.83545 -276.86914 c\r128.52783 -276.84424 128.19336 -276.81006 127.83496 -276.76709 c\r127.47607 -276.72363 127.2041 -276.67383 127.01855 -276.61572 c\r126.79053 -276.54639 126.61621 -276.44434 126.49609 -276.31104 c\r126.37598 -276.17725 126.31543 -276.00195 126.31543 -275.78418 c\r126.31543 -275.63965 126.32813 -275.52295 126.35352 -275.43262 c\r126.37891 -275.34229 126.44238 -275.25586 126.54346 -275.17383 c\r126.64063 -275.09131 126.75635 -275.03076 126.8916 -274.9917 c\r127.02686 -274.95313 127.23779 -274.93359 127.52441 -274.93359 c\r127.75244 -274.93359 127.9834 -274.97852 128.21826 -275.06885 c\r128.45313 -275.15967 128.6582 -275.27832 128.83545 -275.42676 c\rh\r128.83545 -274.33838 m\r128.71338 -274.24707 128.56152 -274.1377 128.37988 -274.00977 c\r128.19824 -273.88135 128.02686 -273.78076 127.8667 -273.70605 c\r127.64307 -273.60693 127.41113 -273.53467 127.16992 -273.48828 c\r126.92969 -273.44189 126.66553 -273.41797 126.37891 -273.41797 c\r125.70313 -273.41797 125.1377 -273.62256 124.68164 -274.03174 c\r124.22607 -274.44043 123.99805 -274.96338 123.99805 -275.59961 c\r123.99805 -276.10791 124.11377 -276.52295 124.34619 -276.84521 c\r124.57813 -277.16748 124.90771 -277.42139 125.33398 -277.60742 c\r125.75635 -277.79346 126.27979 -277.92578 126.9043 -278.00391 c\r127.5293 -278.08252 128.17676 -278.14063 128.84863 -278.17773 c\r128.84863 -278.17773 128.84863 -278.21484 128.84863 -278.21484 c\r128.84863 -278.59668 128.68799 -278.86035 128.36719 -279.00586 c\r128.04688 -279.15234 127.57471 -279.2251 126.9502 -279.2251 c\r126.57422 -279.2251 126.17432 -279.16016 125.74805 -279.03125 c\r125.32227 -278.90186 125.01611 -278.80273 124.83057 -278.73291 c\r124.83057 -278.73291 124.62207 -278.73291 124.62207 -278.73291 c\r124.62207 -278.73291 124.62207 -280.40918 124.62207 -280.40918 c\r124.8623 -280.47119 125.25391 -280.54443 125.7959 -280.62939 c\r126.33789 -280.71338 126.88135 -280.75586 127.42529 -280.75586 c\r128.7207 -280.75586 129.65625 -280.56055 130.23242 -280.17041 c\r130.80811 -279.78027 131.09619 -279.16748 131.09619 -278.3335 c\r131.09619 -278.3335 131.09619 -273.60107 131.09619 -273.60107 c\r131.09619 -273.60107 128.83545 -273.60107 128.83545 -273.60107 c\r128.83545 -273.60107 128.83545 -274.33838 128.83545 -274.33838 c\rh\r117.76074 -278.53906 m\r117.76074 -278.53906 117.76074 -273.60107 117.76074 -273.60107 c\r117.76074 -273.60107 115.4751 -273.60107 115.4751 -273.60107 c\r115.4751 -273.60107 115.4751 -277.08105 115.4751 -277.08105 c\r115.4751 -277.42041 115.4668 -277.7085 115.44971 -277.94678 c\r115.43262 -278.18506 115.38623 -278.37793 115.31055 -278.52686 c\r115.23438 -278.67578 115.11963 -278.78467 114.96484 -278.85254 c\r114.81055 -278.9209 114.59424 -278.95557 114.31543 -278.95557 c\r114.0918 -278.95557 113.87451 -278.91064 113.66309 -278.82178 c\r113.45215 -278.73291 113.26221 -278.63867 113.09229 -278.53906 c\r113.09229 -278.53906 113.09229 -273.60107 113.09229 -273.60107 c\r113.09229 -273.60107 110.80762 -273.60107 110.80762 -273.60107 c\r110.80762 -273.60107 110.80762 -280.55762 110.80762 -280.55762 c\r110.80762 -280.55762 113.09229 -280.55762 113.09229 -280.55762 c\r113.09229 -280.55762 113.09229 -279.79443 113.09229 -279.79443 c\r113.48486 -280.09619 113.85986 -280.33203 114.21826 -280.50146 c\r114.57715 -280.6709 114.97314 -280.75586 115.40771 -280.75586 c\r115.87598 -280.75586 116.28906 -280.65332 116.64746 -280.44922 c\r117.00586 -280.24463 117.28613 -279.94336 117.48877 -279.54688 c\r117.94385 -279.92285 118.38672 -280.21875 118.81641 -280.43359 c\r119.24658 -280.64844 119.66846 -280.75586 120.08154 -280.75586 c\r120.84863 -280.75586 121.43164 -280.53076 121.83008 -280.08008 c\r122.22803 -279.62939 122.42773 -278.97998 122.42773 -278.1333 c\r122.42773 -278.1333 122.42773 -273.60107 122.42773 -273.60107 c\r122.42773 -273.60107 120.14258 -273.60107 120.14258 -273.60107 c\r120.14258 -273.60107 120.14258 -277.08105 120.14258 -277.08105 c\r120.14258 -277.4248 120.13477 -277.71436 120.12061 -277.94971 c\r120.10596 -278.18604 120.06006 -278.37793 119.98389 -278.52686 c\r119.91211 -278.67578 119.79785 -278.78467 119.64209 -278.85254 c\r119.48535 -278.9209 119.26563 -278.95557 118.98291 -278.95557 c\r118.79297 -278.95557 118.60693 -278.92285 118.42529 -278.85889 c\r118.24414 -278.79492 118.02197 -278.68848 117.76074 -278.53906 c\rh\r108.66699 -273.60107 m\r108.66699 -273.60107 106.38184 -273.60107 106.38184 -273.60107 c\r106.38184 -273.60107 106.38184 -280.55762 106.38184 -280.55762 c\r106.38184 -280.55762 108.66699 -280.55762 108.66699 -280.55762 c\r108.66699 -280.55762 108.66699 -273.60107 108.66699 -273.60107 c\rh\r108.73193 -281.55713 m\r108.73193 -281.55713 106.31641 -281.55713 106.31641 -281.55713 c\r106.31641 -281.55713 106.31641 -283.24658 106.31641 -283.24658 c\r106.31641 -283.24658 108.73193 -283.24658 108.73193 -283.24658 c\r108.73193 -283.24658 108.73193 -281.55713 108.73193 -281.55713 c\rh\r105.01563 -273.66406 m\r104.77051 -273.60205 104.51074 -273.55322 104.23633 -273.51807 c\r103.96191 -273.4834 103.62598 -273.46582 103.229 -273.46582 c\r102.34229 -273.46582 101.68164 -273.64111 101.24902 -273.9917 c\r100.81592 -274.34277 100.59961 -274.94336 100.59961 -275.79297 c\r100.59961 -275.79297 100.59961 -279.04199 100.59961 -279.04199 c\r100.59961 -279.04199 99.65967 -279.04199 99.65967 -279.04199 c\r99.65967 -279.04199 99.65967 -280.55762 99.65967 -280.55762 c\r99.65967 -280.55762 100.59961 -280.55762 100.59961 -280.55762 c\r100.59961 -280.55762 100.59961 -282.54883 100.59961 -282.54883 c\r100.59961 -282.54883 102.88428 -282.54883 102.88428 -282.54883 c\r102.88428 -282.54883 102.88428 -280.55762 102.88428 -280.55762 c\r102.88428 -280.55762 105.01563 -280.55762 105.01563 -280.55762 c\r105.01563 -280.55762 105.01563 -279.04199 105.01563 -279.04199 c\r105.01563 -279.04199 102.88428 -279.04199 102.88428 -279.04199 c\r102.88428 -279.04199 102.88428 -276.57813 102.88428 -276.57813 c\r102.88428 -276.33447 102.88623 -276.12207 102.89063 -275.94043 c\r102.89502 -275.75928 102.92871 -275.5957 102.99219 -275.45117 c\r103.05078 -275.30664 103.15576 -275.19238 103.30469 -275.10791 c\r103.45508 -275.02344 103.67285 -274.98096 103.95996 -274.98096 c\r104.07813 -274.98096 104.23242 -275.00635 104.4248 -275.05615 c\r104.6167 -275.10693 104.75 -275.15332 104.82568 -275.19531 c\r104.82568 -275.19531 105.01563 -275.19531 105.01563 -275.19531 c\r105.01563 -275.19531 105.01563 -273.66406 105.01563 -273.66406 c\rh\r96.47998 -277.13428 m\r96.47998 -277.81152 96.36182 -278.30273 96.12549 -278.60791 c\r95.88965 -278.91357 95.51709 -279.06592 95.00732 -279.06592 c\r94.7915 -279.06592 94.5708 -279.03369 94.34326 -278.96973 c\r94.11523 -278.90625 93.89893 -278.81445 93.69238 -278.69434 c\r93.69238 -278.69434 93.69238 -275.19678 93.69238 -275.19678 c\r93.84375 -275.13867 94.00684 -275.10156 94.17871 -275.08496 c\r94.35156 -275.06885 94.52246 -275.06055 94.69092 -275.06055 c\r95.29346 -275.06055 95.74219 -275.23242 96.0376 -275.57715 c\r96.33252 -275.92188 96.47998 -276.44092 96.47998 -277.13428 c\rh\r98.82959 -277.17871 m\r98.82959 -276.60449 98.74023 -276.08203 98.56055 -275.61035 c\r98.38135 -275.13965 98.14648 -274.75098 97.85498 -274.44531 c\r97.55127 -274.12305 97.20801 -273.87891 96.82422 -273.71338 c\r96.43994 -273.54834 96.0293 -273.46582 95.59082 -273.46582 c\r95.18506 -273.46582 94.8418 -273.50781 94.55908 -273.59277 c\r94.27637 -273.67725 93.9873 -273.7959 93.69238 -273.94922 c\r93.69238 -273.94922 93.69238 -271.04639 93.69238 -271.04639 c\r93.69238 -271.04639 91.40674 -271.04639 91.40674 -271.04639 c\r91.40674 -271.04639 91.40674 -280.55762 91.40674 -280.55762 c\r91.40674 -280.55762 93.69238 -280.55762 93.69238 -280.55762 c\r93.69238 -280.55762 93.69238 -279.83252 93.69238 -279.83252 c\r94.04199 -280.10498 94.3999 -280.32715 94.76416 -280.49854 c\r95.12939 -280.66992 95.5498 -280.75586 96.02686 -280.75586 c\r96.9126 -280.75586 97.60156 -280.4375 98.09277 -279.80127 c\r98.58398 -279.16455 98.82959 -278.29053 98.82959 -277.17871 c\rh\r86.45654 -275.87891 m\r86.69287 -276.15918 86.86816 -276.48975 86.98242 -276.87158 c\r87.09619 -277.25293 87.15283 -277.70117 87.15283 -278.21631 c\r87.15283 -278.76904 87.0874 -279.23877 86.95703 -279.62646 c\r86.82617 -280.01416 86.65527 -280.32715 86.44434 -280.56689 c\r86.22803 -280.81348 85.98047 -280.99316 85.69922 -281.10449 c\r85.41846 -281.21582 85.12646 -281.27148 84.82227 -281.27148 c\r84.51416 -281.27148 84.22412 -281.21777 83.95166 -281.11035 c\r83.67871 -281.00342 83.42871 -280.82617 83.20117 -280.5791 c\r82.99023 -280.34766 82.81787 -280.02979 82.68506 -279.62305 c\r82.55225 -279.21729 82.48584 -278.74609 82.48584 -278.20996 c\r82.48584 -277.66211 82.55029 -277.19531 82.67871 -276.80957 c\r82.80762 -276.42432 82.97754 -276.10986 83.18848 -275.8667 c\r83.39941 -275.62305 83.64648 -275.44434 83.92969 -275.32861 c\r84.2124 -275.21338 84.50977 -275.15527 84.82227 -275.15527 c\r85.13477 -275.15527 85.43262 -275.21436 85.71533 -275.33154 c\r85.99805 -275.44922 86.24512 -275.63184 86.45654 -275.87891 c\rh\r89.68115 -278.20996 m\r89.68115 -276.74023 89.25098 -275.57275 88.38867 -274.70752 c\r87.52734 -273.84277 86.33643 -273.41016 84.81592 -273.41016 c\r83.2998 -273.41016 82.11133 -273.84277 81.25 -274.70752 c\r80.38818 -275.57275 79.95752 -276.74023 79.95752 -278.20996 c\r79.95752 -279.69287 80.38818 -280.86426 81.25 -281.7251 c\r82.11133 -282.58594 83.2998 -283.0166 84.81592 -283.0166 c\r86.32813 -283.0166 87.51709 -282.58594 88.38281 -281.7251 c\r89.24805 -280.86426 89.68115 -279.69287 89.68115 -278.20996 c\rh\rf\rQ\rq\r1 0 0 -1 0 0 cm\r1 -0.71973 m\r1 -0.71973 519.86133 -0.71973 519.86133 -0.71973 c\r519.86133 -0.71973 519.86133 -300 519.86133 -300 c\r519.86133 -300 1 -300 1 -300 c\r1 -300 1 -0.71973 1 -0.71973 c\rh\rW n\r0 0 0 rg\r0 i \r/GS0 gs\r34.56543 -47.16406 m\r34.66846 -47.39941 34.73877 -47.6748 34.77588 -47.99316 c\r34.8125 -48.30859 34.83057 -48.69141 34.83057 -49.13672 c\r34.83057 -49.57715 34.8125 -49.95898 34.77588 -50.2832 c\r34.73877 -50.6084 34.66699 -50.88281 34.56104 -51.1084 c\r34.45703 -51.33105 34.31641 -51.49902 34.13818 -51.6123 c\r33.95898 -51.72559 33.72949 -51.78125 33.44971 -51.78125 c\r33.17188 -51.78125 32.94189 -51.72559 32.76025 -51.6123 c\r32.5791 -51.49902 32.43506 -51.3291 32.3291 -51.09961 c\r32.22852 -50.88477 32.15967 -50.60547 32.12354 -50.26074 c\r32.08643 -49.91699 32.06787 -49.53906 32.06787 -49.12793 c\r32.06787 -48.67676 32.0835 -48.29883 32.11621 -47.99512 c\r32.14893 -47.69043 32.21826 -47.41797 32.32471 -47.17773 c\r32.42188 -46.95117 32.56055 -46.78027 32.73828 -46.66016 c\r32.91748 -46.54297 33.15381 -46.48242 33.44971 -46.48242 c\r33.72705 -46.48242 33.95703 -46.53906 34.14014 -46.65234 c\r34.32324 -46.76563 34.46484 -46.93652 34.56543 -47.16406 c\rh\r35.72998 -49.13672 m\r35.72998 -47.97656 35.54492 -47.125 35.17432 -46.58301 c\r34.80371 -46.04102 34.22852 -45.76855 33.44971 -45.76855 c\r32.6582 -45.76855 32.08008 -46.04395 31.71533 -46.59375 c\r31.3501 -47.14355 31.16846 -47.98828 31.16846 -49.12793 c\r31.16846 -50.27637 31.35254 -51.12402 31.72168 -51.67383 c\r32.09082 -52.22168 32.6665 -52.49609 33.44971 -52.49609 c\r34.24072 -52.49609 34.81836 -52.2168 35.18311 -51.66016 c\r35.54785 -51.10352 35.72998 -50.26172 35.72998 -49.13672 c\rh\rf\r35.36523 -78.64844 m\r35.36523 -78.64844 31.79199 -78.64844 31.79199 -78.64844 c\r31.79199 -78.64844 31.79199 -79.30762 31.79199 -79.30762 c\r31.79199 -79.30762 33.16992 -79.30762 33.16992 -79.30762 c\r33.16992 -79.30762 33.16992 -83.63965 33.16992 -83.63965 c\r33.16992 -83.63965 31.79199 -83.63965 31.79199 -83.63965 c\r31.79199 -83.63965 31.79199 -84.22656 31.79199 -84.22656 c\r31.97852 -84.22656 32.17871 -84.24121 32.3916 -84.27148 c\r32.60449 -84.30273 32.76611 -84.34668 32.87598 -84.4043 c\r33.01221 -84.47656 33.12012 -84.56934 33.19824 -84.68066 c\r33.27637 -84.79297 33.32178 -84.94141 33.3335 -85.12988 c\r33.3335 -85.12988 34.02051 -85.12988 34.02051 -85.12988 c\r34.02051 -85.12988 34.02051 -79.30762 34.02051 -79.30762 c\r34.02051 -79.30762 35.36523 -79.30762 35.36523 -79.30762 c\r35.36523 -79.30762 35.36523 -78.64844 35.36523 -78.64844 c\rh\rf\r35.72998 -111.39453 m\r35.72998 -111.39453 31.27344 -111.39453 31.27344 -111.39453 c\r31.27344 -111.39453 31.27344 -112.30566 31.27344 -112.30566 c\r31.5835 -112.56543 31.89453 -112.82617 32.20605 -113.08594 c\r32.51758 -113.34668 32.80762 -113.60449 33.07617 -113.86328 c\r33.64307 -114.40039 34.03125 -114.82813 34.24072 -115.14355 c\r34.45068 -115.46094 34.55566 -115.80273 34.55566 -116.1709 c\r34.55566 -116.50488 34.44238 -116.76758 34.2168 -116.95801 c\r33.99023 -117.14648 33.6748 -117.24219 33.27002 -117.24219 c\r33.00146 -117.24219 32.71045 -117.19531 32.39746 -117.10059 c\r32.08398 -117.00684 31.77832 -116.86328 31.47998 -116.6709 c\r31.47998 -116.6709 31.43604 -116.6709 31.43604 -116.6709 c\r31.43604 -116.6709 31.43604 -117.58398 31.43604 -117.58398 c\r31.64551 -117.68457 31.9248 -117.77734 32.27441 -117.86035 c\r32.62451 -117.94531 32.96289 -117.98633 33.29004 -117.98633 c\r33.96582 -117.98633 34.49561 -117.82715 34.87939 -117.50781 c\r35.26318 -117.18945 35.45459 -116.75586 35.45459 -116.20996 c\r35.45459 -115.96387 35.42334 -115.73535 35.35986 -115.52441 c\r35.2959 -115.31152 35.20215 -115.1084 35.07861 -114.91895 c\r34.96338 -114.73926 34.82861 -114.56348 34.67432 -114.38965 c\r34.51904 -114.2168 34.33105 -114.02441 34.10938 -113.81348 c\r33.79395 -113.50977 33.46826 -113.2168 33.13184 -112.93164 c\r32.79541 -112.64648 32.48145 -112.38379 32.18994 -112.14063 c\r32.18994 -112.14063 35.72998 -112.14063 35.72998 -112.14063 c\r35.72998 -112.14063 35.72998 -111.39453 35.72998 -111.39453 c\rh\rf\r35.16162 -146.99805 m\r35.30322 -146.87402 35.41992 -146.7168 35.51172 -146.5293 c\r35.60352 -146.34082 35.64941 -146.09863 35.64941 -145.80078 c\r35.64941 -145.50488 35.59424 -145.23438 35.48535 -144.98828 c\r35.37549 -144.74316 35.22217 -144.5293 35.02393 -144.34668 c\r34.80225 -144.14355 34.54102 -143.99414 34.24072 -143.89746 c\r33.94043 -143.80078 33.6123 -143.75195 33.25391 -143.75195 c\r32.88721 -143.75195 32.52637 -143.79492 32.17188 -143.88086 c\r31.81641 -143.96582 31.52539 -144.05957 31.29834 -144.16113 c\r31.29834 -144.16113 31.29834 -145.06836 31.29834 -145.06836 c\r31.29834 -145.06836 31.36475 -145.06836 31.36475 -145.06836 c\r31.61621 -144.90527 31.9126 -144.76855 32.25293 -144.66016 c\r32.59375 -144.55176 32.92236 -144.49805 33.23975 -144.49805 c\r33.42578 -144.49805 33.62402 -144.52832 33.83496 -144.58887 c\r34.04541 -144.65039 34.21484 -144.74023 34.34619 -144.85938 c\r34.48193 -144.98633 34.5835 -145.12793 34.6499 -145.28125 c\r34.7168 -145.43555 34.75 -145.62988 34.75 -145.86523 c\r34.75 -146.09668 34.71191 -146.29004 34.63672 -146.44238 c\r34.56055 -146.59473 34.45605 -146.71387 34.32227 -146.80078 c\r34.18896 -146.8916 34.02686 -146.95313 33.83691 -146.98633 c\r33.64648 -147.01953 33.44189 -147.03613 33.22217 -147.03613 c\r33.22217 -147.03613 32.82129 -147.03613 32.82129 -147.03613 c\r32.82129 -147.03613 32.82129 -147.75 32.82129 -147.75 c\r32.82129 -147.75 33.13232 -147.75 33.13232 -147.75 c\r33.58252 -147.75 33.94189 -147.8418 34.20996 -148.02637 c\r34.47803 -148.20996 34.6123 -148.47949 34.6123 -148.83301 c\r34.6123 -148.98926 34.57813 -149.12646 34.51074 -149.24414 c\r34.44238 -149.36133 34.34766 -149.45801 34.22656 -149.5332 c\r34.09961 -149.60889 33.96338 -149.66113 33.81885 -149.68994 c\r33.67432 -149.71875 33.50977 -149.7334 33.32715 -149.7334 c\r33.04688 -149.7334 32.74805 -149.68359 32.43213 -149.58398 c\r32.11572 -149.48438 31.81738 -149.34375 31.53662 -149.16211 c\r31.53662 -149.16211 31.49268 -149.16211 31.49268 -149.16211 c\r31.49268 -149.16211 31.49268 -150.07031 31.49268 -150.07031 c\r31.70264 -150.17188 31.98193 -150.26514 32.33252 -150.35059 c\r32.68213 -150.43604 33.021 -150.479 33.34961 -150.479 c\r33.6709 -150.479 33.95459 -150.4502 34.19971 -150.39209 c\r34.44531 -150.33447 34.6665 -150.24219 34.86426 -150.11475 c\r35.07764 -149.97607 35.23828 -149.80811 35.34766 -149.61182 c\r35.45654 -149.41553 35.51172 -149.18604 35.51172 -148.92285 c\r35.51172 -148.56445 35.38184 -148.25195 35.12354 -147.98438 c\r34.86523 -147.7168 34.55957 -147.54883 34.20801 -147.47852 c\r34.20801 -147.47852 34.20801 -147.41895 34.20801 -147.41895 c\r34.34961 -147.39551 34.5127 -147.34766 34.6958 -147.27344 c\r34.87939 -147.19922 35.03418 -147.10742 35.16162 -146.99805 c\rh\rf\r34.06104 -179.14746 m\r34.06104 -179.14746 34.06104 -182.06348 34.06104 -182.06348 c\r34.06104 -182.06348 31.50342 -179.14746 31.50342 -179.14746 c\r31.50342 -179.14746 34.06104 -179.14746 34.06104 -179.14746 c\rh\r35.89258 -178.44922 m\r35.89258 -178.44922 34.91211 -178.44922 34.91211 -178.44922 c\r34.91211 -178.44922 34.91211 -176.63281 34.91211 -176.63281 c\r34.91211 -176.63281 34.06104 -176.63281 34.06104 -176.63281 c\r34.06104 -176.63281 34.06104 -178.44922 34.06104 -178.44922 c\r34.06104 -178.44922 30.90088 -178.44922 30.90088 -178.44922 c\r30.90088 -178.44922 30.90088 -179.44678 30.90088 -179.44678 c\r30.90088 -179.44678 34.09619 -183.08984 34.09619 -183.08984 c\r34.09619 -183.08984 34.91211 -183.08984 34.91211 -183.08984 c\r34.91211 -183.08984 34.91211 -179.14746 34.91211 -179.14746 c\r34.91211 -179.14746 35.89258 -179.14746 35.89258 -179.14746 c\r35.89258 -179.14746 35.89258 -178.44922 35.89258 -178.44922 c\rh\rf\r35.68994 -211.42822 m\r35.68994 -211.12793 35.63379 -210.84033 35.521 -210.56592 c\r35.40869 -210.29102 35.25488 -210.06006 35.06006 -209.87207 c\r34.84717 -209.66992 34.59326 -209.51416 34.29932 -209.40576 c\r34.00537 -209.29785 33.66406 -209.24365 33.27637 -209.24365 c\r32.91553 -209.24365 32.56836 -209.28027 32.23486 -209.354 c\r31.8999 -209.42822 31.61816 -209.51709 31.38672 -209.62109 c\r31.38672 -209.62109 31.38672 -210.53711 31.38672 -210.53711 c\r31.38672 -210.53711 31.44922 -210.53711 31.44922 -210.53711 c\r31.69189 -210.38525 31.97559 -210.25537 32.30078 -210.14893 c\r32.62646 -210.04248 32.9458 -209.98926 33.25977 -209.98926 c\r33.46973 -209.98926 33.67285 -210.01855 33.86963 -210.07617 c\r34.06592 -210.13379 34.2417 -210.23535 34.39551 -210.37988 c\r34.52539 -210.50439 34.62402 -210.65332 34.68994 -210.82666 c\r34.75732 -211 34.79053 -211.20166 34.79053 -211.42969 c\r34.79053 -211.65283 34.75098 -211.84082 34.67334 -211.99414 c\r34.59424 -212.14746 34.48584 -212.27051 34.34668 -212.36279 c\r34.19287 -212.47314 34.00586 -212.55029 33.78467 -212.59521 c\r33.56445 -212.63965 33.31836 -212.6626 33.04688 -212.6626 c\r32.78564 -212.6626 32.53516 -212.64502 32.29395 -212.60986 c\r32.05322 -212.57422 31.84521 -212.53906 31.67041 -212.50391 c\r31.67041 -212.50391 31.67041 -215.83545 31.67041 -215.83545 c\r31.67041 -215.83545 35.64941 -215.83545 35.64941 -215.83545 c\r35.64941 -215.83545 35.64941 -215.07373 35.64941 -215.07373 c\r35.64941 -215.07373 32.52148 -215.07373 32.52148 -215.07373 c\r32.52148 -215.07373 32.52148 -213.35791 32.52148 -213.35791 c\r32.64844 -213.36914 32.77881 -213.37793 32.9126 -213.3833 c\r33.0459 -213.38916 33.16113 -213.39209 33.25928 -213.39209 c\r33.61768 -213.39209 33.93164 -213.36279 34.20117 -213.30371 c\r34.4707 -213.24414 34.71826 -213.13916 34.94336 -212.98877 c\r35.18066 -212.83057 35.36377 -212.625 35.49414 -212.37354 c\r35.625 -212.12256 35.68994 -211.80713 35.68994 -211.42822 c\rh\rf\r34.93604 -244.18652 m\r34.93604 -244.4541 34.89551 -244.67627 34.81494 -244.85205 c\r34.7334 -245.02734 34.60059 -245.18066 34.41504 -245.31006 c\r34.2793 -245.40234 34.12891 -245.46289 33.96387 -245.4917 c\r33.79883 -245.521 33.62646 -245.53516 33.44678 -245.53516 c\r33.19629 -245.53516 32.96387 -245.50635 32.74854 -245.44824 c\r32.5332 -245.39111 32.31201 -245.30176 32.08545 -245.18066 c\r32.07959 -245.11719 32.07568 -245.05615 32.07227 -244.99707 c\r32.06885 -244.9375 32.06787 -244.86328 32.06787 -244.77393 c\r32.06787 -244.31836 32.11523 -243.95898 32.21143 -243.6958 c\r32.30713 -243.43164 32.43848 -243.22363 32.60742 -243.0708 c\r32.74219 -242.94385 32.88965 -242.85059 33.04688 -242.79199 c\r33.2041 -242.73242 33.37646 -242.70313 33.56152 -242.70313 c\r33.98877 -242.70313 34.32471 -242.83057 34.56934 -243.08594 c\r34.81396 -243.34082 34.93604 -243.70752 34.93604 -244.18652 c\rh\r35.83594 -244.21875 m\r35.83594 -243.5625 35.61523 -243.02686 35.17334 -242.61182 c\r34.73242 -242.19678 34.19141 -241.98926 33.55078 -241.98926 c\r33.22559 -241.98926 32.93066 -242.03857 32.66504 -242.13721 c\r32.39941 -242.23535 32.16406 -242.38135 31.96094 -242.5752 c\r31.70703 -242.81543 31.51123 -243.13379 31.37402 -243.52979 c\r31.2373 -243.92676 31.16846 -244.40381 31.16846 -244.9624 c\r31.16846 -245.53516 31.23096 -246.04297 31.35693 -246.48584 c\r31.48193 -246.92871 31.68262 -247.32227 31.95752 -247.6665 c\r32.2168 -247.99365 32.55225 -248.24854 32.96289 -248.43262 c\r33.37305 -248.61621 33.85156 -248.7085 34.39795 -248.7085 c\r34.57227 -248.7085 34.71826 -248.70117 34.83643 -248.68652 c\r34.95459 -248.67188 35.07422 -248.646 35.1958 -248.6084 c\r35.1958 -248.6084 35.1958 -247.78027 35.1958 -247.78027 c\r35.1958 -247.78027 35.15137 -247.78027 35.15137 -247.78027 c\r35.06885 -247.82373 34.94385 -247.86475 34.77734 -247.90381 c\r34.61084 -247.94287 34.44043 -247.9624 34.2666 -247.9624 c\r33.63281 -247.9624 33.12646 -247.76758 32.74902 -247.37793 c\r32.37109 -246.98828 32.15186 -246.46191 32.08984 -245.79834 c\r32.3374 -245.94531 32.58154 -246.05762 32.82178 -246.13428 c\r33.06201 -246.21094 33.33984 -246.24902 33.65527 -246.24902 c\r33.93555 -246.24902 34.18213 -246.22363 34.396 -246.17285 c\r34.60986 -246.12256 34.8291 -246.02051 35.05273 -245.86719 c\r35.31201 -245.69092 35.50781 -245.46826 35.63867 -245.19922 c\r35.77002 -244.93066 35.83594 -244.60352 35.83594 -244.21875 c\rh\rf\r100.67432 -34.76563 m\r100.67432 -35.03418 100.63379 -35.25586 100.55273 -35.43164 c\r100.47119 -35.60742 100.33887 -35.75977 100.15332 -35.88965 c\r100.01758 -35.98242 99.8667 -36.04199 99.70166 -36.07129 c\r99.53662 -36.09961 99.36426 -36.11426 99.18506 -36.11426 c\r98.93408 -36.11426 98.70166 -36.08594 98.48633 -36.02734 c\r98.271 -35.9707 98.05078 -35.88086 97.82373 -35.76172 c\r97.81738 -35.69727 97.81348 -35.63477 97.80957 -35.57715 c\r97.80713 -35.51758 97.80566 -35.44336 97.80566 -35.35449 c\r97.80566 -34.89746 97.85352 -34.53809 97.94922 -34.27637 c\r98.04541 -34.01172 98.17725 -33.80273 98.34473 -33.65039 c\r98.48047 -33.52441 98.62744 -33.43066 98.78516 -33.37109 c\r98.94189 -33.31348 99.11426 -33.28223 99.2998 -33.28223 c\r99.72656 -33.28223 100.06299 -33.41016 100.30713 -33.66602 c\r100.55225 -33.9209 100.67432 -34.28711 100.67432 -34.76563 c\rh\r101.57373 -34.79883 m\r101.57373 -34.1416 101.35303 -33.60645 100.91162 -33.19141 c\r100.47021 -32.77637 99.9292 -32.56934 99.28857 -32.56934 c\r98.96387 -32.56934 98.66895 -32.61816 98.40283 -32.7168 c\r98.1377 -32.81543 97.90332 -32.96094 97.69922 -33.1543 c\r97.44531 -33.39551 97.24902 -33.71387 97.11182 -34.10938 c\r96.97461 -34.50586 96.90625 -34.9834 96.90625 -35.54199 c\r96.90625 -36.11426 96.96875 -36.62305 97.09473 -37.06543 c\r97.22021 -37.50879 97.42041 -37.90137 97.69531 -38.24609 c\r97.95459 -38.57324 98.29004 -38.8291 98.70068 -39.0127 c\r99.11133 -39.19629 99.58936 -39.28711 100.13623 -39.28711 c\r100.31006 -39.28711 100.45703 -39.28125 100.5752 -39.2666 c\r100.69287 -39.25195 100.8125 -39.22559 100.93359 -39.18848 c\r100.93359 -39.18848 100.93359 -38.36035 100.93359 -38.36035 c\r100.93359 -38.36035 100.88916 -38.36035 100.88916 -38.36035 c\r100.80664 -38.40332 100.68164 -38.44434 100.51514 -38.48438 c\r100.34912 -38.52344 100.17871 -38.54199 100.00439 -38.54199 c\r99.37061 -38.54199 98.86475 -38.34766 98.48682 -37.95703 c\r98.10938 -37.56738 97.88965 -37.04199 97.82764 -36.37793 c\r98.0752 -36.52539 98.31934 -36.63672 98.55957 -36.71387 c\r98.80029 -36.79004 99.07764 -36.8291 99.39404 -36.8291 c\r99.67334 -36.8291 99.91992 -36.80371 100.13477 -36.75293 c\r100.34814 -36.70215 100.56689 -36.59961 100.79102 -36.44727 c\r101.05029 -36.27051 101.24609 -36.04883 101.37646 -35.78027 c\r101.5083 -35.51074 101.57373 -35.18262 101.57373 -34.79883 c\rh\r95.65625 -34.75391 m\r95.65625 -34.4541 95.59961 -34.16602 95.48682 -33.8916 c\r95.375 -33.61719 95.2207 -33.38574 95.02588 -33.19727 c\r94.81299 -32.99512 94.55908 -32.83984 94.26514 -32.73145 c\r93.97119 -32.62305 93.62988 -32.56934 93.24268 -32.56934 c\r92.88184 -32.56934 92.53467 -32.60645 92.20068 -32.67871 c\r91.86621 -32.75391 91.58398 -32.84277 91.35254 -32.94629 c\r91.35254 -32.94629 91.35254 -33.86328 91.35254 -33.86328 c\r91.35254 -33.86328 91.41504 -33.86328 91.41504 -33.86328 c\r91.65771 -33.70996 91.94141 -33.58203 92.2666 -33.47461 c\r92.59277 -33.36816 92.91162 -33.31543 93.22559 -33.31543 c\r93.43555 -33.31543 93.63867 -33.34473 93.83545 -33.40234 c\r94.03223 -33.45996 94.20752 -33.56152 94.36133 -33.70605 c\r94.4917 -33.83008 94.58984 -33.97852 94.65625 -34.15234 c\r94.72314 -34.3252 94.75684 -34.52734 94.75684 -34.75488 c\r94.75684 -34.97852 94.7168 -35.16602 94.63916 -35.31934 c\r94.56006 -35.47266 94.45166 -35.5957 94.3125 -35.68945 c\r94.15869 -35.79883 93.97168 -35.87598 93.75098 -35.91992 c\r93.53076 -35.96582 93.28467 -35.98828 93.0127 -35.98828 c\r92.75146 -35.98828 92.50146 -35.96973 92.26025 -35.93457 c\r92.01904 -35.89941 91.81152 -35.86426 91.63623 -35.8291 c\r91.63623 -35.8291 91.63623 -39.16113 91.63623 -39.16113 c\r91.63623 -39.16113 95.61523 -39.16113 95.61523 -39.16113 c\r95.61523 -39.16113 95.61523 -38.39941 95.61523 -38.39941 c\r95.61523 -38.39941 92.4873 -38.39941 92.4873 -38.39941 c\r92.4873 -38.39941 92.4873 -36.68262 92.4873 -36.68262 c\r92.61426 -36.69531 92.74512 -36.70313 92.87842 -36.70898 c\r93.01221 -36.71582 93.12744 -36.71777 93.2251 -36.71777 c\r93.5835 -36.71777 93.89795 -36.68848 94.16699 -36.62891 c\r94.43701 -36.56934 94.68457 -36.46484 94.90918 -36.31445 c\r95.14648 -36.15625 95.33008 -35.9502 95.45996 -35.69922 c\r95.59082 -35.44727 95.65625 -35.13281 95.65625 -34.75391 c\rh\r89.92383 -32.7041 m\r89.92383 -32.7041 85.46729 -32.7041 85.46729 -32.7041 c\r85.46729 -32.7041 85.46729 -33.61523 85.46729 -33.61523 c\r85.77783 -33.875 86.08838 -34.13574 86.3999 -34.39551 c\r86.71143 -34.65625 87.00195 -34.91406 87.27002 -35.17188 c\r87.83691 -35.70996 88.22461 -36.1377 88.43457 -36.45313 c\r88.64404 -36.76953 88.74951 -37.1123 88.74951 -37.47852 c\r88.74951 -37.81445 88.63623 -38.07715 88.41016 -38.26563 c\r88.18457 -38.45508 87.86914 -38.5498 87.46387 -38.5498 c\r87.19531 -38.5498 86.9043 -38.50293 86.59131 -38.40918 c\r86.27783 -38.31641 85.97217 -38.17188 85.67383 -37.97949 c\r85.67383 -37.97949 85.62939 -37.97949 85.62939 -37.97949 c\r85.62939 -37.97949 85.62939 -38.8916 85.62939 -38.8916 c\r85.83887 -38.99316 86.11816 -39.08496 86.46777 -39.16992 c\r86.81836 -39.25488 87.15674 -39.2959 87.48389 -39.2959 c\r88.15967 -39.2959 88.68945 -39.13672 89.07324 -38.81641 c\r89.45654 -38.49805 89.64893 -38.06445 89.64893 -37.51953 c\r89.64893 -37.27344 89.61719 -37.04395 89.55371 -36.83105 c\r89.49023 -36.61914 89.39697 -36.41797 89.27246 -36.22852 c\r89.15723 -36.04883 89.02295 -35.87305 88.86816 -35.69922 c\r88.71289 -35.52539 88.52441 -35.33398 88.30371 -35.12305 c\r87.98828 -34.81934 87.66211 -34.52539 87.32617 -34.24121 c\r86.98926 -33.95605 86.67529 -33.69238 86.3833 -33.44922 c\r86.3833 -33.44922 89.92383 -33.44922 89.92383 -33.44922 c\r89.92383 -33.44922 89.92383 -32.7041 89.92383 -32.7041 c\rh\rf\r200.04346 -37.66406 m\r200.04346 -37.97559 199.92285 -38.22363 199.68018 -38.40723 c\r199.43848 -38.59375 199.12939 -38.68457 198.75391 -38.68457 c\r198.38379 -38.68457 198.08105 -38.59766 197.84473 -38.42383 c\r197.60889 -38.24805 197.49121 -38.0127 197.49121 -37.7168 c\r197.49121 -37.50684 197.5498 -37.32617 197.66943 -37.17383 c\r197.78809 -37.02148 197.96875 -36.88477 198.20996 -36.76563 c\r198.31885 -36.71387 198.47559 -36.64551 198.68018 -36.56055 c\r198.88477 -36.47559 199.08398 -36.40723 199.27832 -36.35254 c\r199.56689 -36.54297 199.76611 -36.74219 199.87744 -36.94922 c\r199.98779 -37.15527 200.04346 -37.39355 200.04346 -37.66406 c\rh\r200.18115 -34.41797 m\r200.18115 -34.68359 200.12109 -34.89746 200.00195 -35.05859 c\r199.88281 -35.21973 199.64941 -35.38086 199.30176 -35.54297 c\r199.1626 -35.60742 199.01074 -35.66602 198.8457 -35.72168 c\r198.68066 -35.77637 198.46094 -35.85449 198.1875 -35.95117 c\r197.92334 -35.81055 197.71143 -35.61621 197.55176 -35.37402 c\r197.39209 -35.13086 197.3125 -34.85449 197.3125 -34.54883 c\r197.3125 -34.15625 197.44922 -33.83398 197.72314 -33.57813 c\r197.99609 -33.32324 198.34326 -33.19531 198.76465 -33.19531 c\r199.19385 -33.19531 199.53711 -33.30469 199.79492 -33.52148 c\r200.05225 -33.73926 200.18115 -34.03809 200.18115 -34.41797 c\rh\r201.09668 -34.50195 m\r201.09668 -33.94336 200.875 -33.47852 200.43018 -33.1084 c\r199.98633 -32.73926 199.42725 -32.55273 198.75488 -32.55273 c\r198.04053 -32.55273 197.47217 -32.73438 197.04834 -33.09668 c\r196.62451 -33.45801 196.41309 -33.9209 196.41309 -34.48438 c\r196.41309 -34.84375 196.51904 -35.16797 196.73193 -35.45996 c\r196.94434 -35.75098 197.24365 -35.98047 197.63037 -36.15137 c\r197.63037 -36.15137 197.63037 -36.17871 197.63037 -36.17871 c\r197.27588 -36.3623 197.01514 -36.56445 196.84521 -36.78613 c\r196.67627 -37.00488 196.59131 -37.2793 196.59131 -37.61035 c\r196.59131 -38.0957 196.79492 -38.50195 197.20166 -38.8252 c\r197.60938 -39.14941 198.12646 -39.3125 198.75488 -39.3125 c\r199.41309 -39.3125 199.9375 -39.15723 200.32959 -38.84766 c\r200.72217 -38.53809 200.91797 -38.14453 200.91797 -37.66602 c\r200.91797 -37.375 200.82617 -37.08789 200.64063 -36.80469 c\r200.45605 -36.52344 200.18408 -36.30273 199.82568 -36.14355 c\r199.82568 -36.14355 199.82568 -36.11621 199.82568 -36.11621 c\r200.2373 -35.94336 200.55225 -35.72949 200.77002 -35.47461 c\r200.9873 -35.21973 201.09668 -34.89551 201.09668 -34.50195 c\rh\r195.26807 -32.7041 m\r195.26807 -32.7041 190.81104 -32.7041 190.81104 -32.7041 c\r190.81104 -32.7041 190.81104 -33.61523 190.81104 -33.61523 c\r191.12109 -33.875 191.43164 -34.13574 191.74316 -34.39551 c\r192.05469 -34.65625 192.34521 -34.91406 192.61328 -35.17188 c\r193.18018 -35.70996 193.56885 -36.1377 193.77881 -36.45313 c\r193.98828 -36.76953 194.09277 -37.1123 194.09277 -37.47852 c\r194.09277 -37.81445 193.97998 -38.07715 193.75391 -38.26563 c\r193.52783 -38.45508 193.2124 -38.5498 192.80811 -38.5498 c\r192.53857 -38.5498 192.24854 -38.50293 191.93457 -38.40918 c\r191.62158 -38.31641 191.31641 -38.17188 191.01758 -37.97949 c\r191.01758 -37.97949 190.97314 -37.97949 190.97314 -37.97949 c\r190.97314 -37.97949 190.97314 -38.8916 190.97314 -38.8916 c\r191.18262 -38.99316 191.4624 -39.08496 191.81201 -39.16992 c\r192.16162 -39.25488 192.50049 -39.2959 192.82813 -39.2959 c\r193.50391 -39.2959 194.03369 -39.13672 194.41699 -38.81641 c\r194.80078 -38.49805 194.99268 -38.06445 194.99268 -37.51953 c\r194.99268 -37.27344 194.96094 -37.04395 194.89697 -36.83105 c\r194.8335 -36.61914 194.74023 -36.41797 194.61621 -36.22852 c\r194.50146 -36.04883 194.36621 -35.87305 194.21143 -35.69922 c\r194.05664 -35.52539 193.86865 -35.33398 193.64697 -35.12305 c\r193.33154 -34.81934 193.00537 -34.52539 192.66992 -34.24121 c\r192.33301 -33.95605 192.01904 -33.69238 191.72705 -33.44922 c\r191.72705 -33.44922 195.26807 -33.44922 195.26807 -33.44922 c\r195.26807 -33.44922 195.26807 -32.7041 195.26807 -32.7041 c\rh\r189.13135 -32.7041 m\r189.13135 -32.7041 185.55762 -32.7041 185.55762 -32.7041 c\r185.55762 -32.7041 185.55762 -33.36328 185.55762 -33.36328 c\r185.55762 -33.36328 186.93555 -33.36328 186.93555 -33.36328 c\r186.93555 -33.36328 186.93555 -37.69238 186.93555 -37.69238 c\r186.93555 -37.69238 185.55762 -37.69238 185.55762 -37.69238 c\r185.55762 -37.69238 185.55762 -38.28027 185.55762 -38.28027 c\r185.74365 -38.28027 185.94385 -38.2959 186.15723 -38.32715 c\r186.37061 -38.35547 186.53223 -38.40137 186.64111 -38.45898 c\r186.77783 -38.53125 186.88477 -38.62305 186.96387 -38.73535 c\r187.04199 -38.84668 187.08691 -38.99609 187.09961 -39.18457 c\r187.09961 -39.18457 187.78613 -39.18457 187.78613 -39.18457 c\r187.78613 -39.18457 187.78613 -33.36328 187.78613 -33.36328 c\r187.78613 -33.36328 189.13135 -33.36328 189.13135 -33.36328 c\r189.13135 -33.36328 189.13135 -32.7041 189.13135 -32.7041 c\rh\rf\r296.28223 -35.21777 m\r296.28223 -35.21777 296.28223 -38.13477 296.28223 -38.13477 c\r296.28223 -38.13477 293.72461 -35.21777 293.72461 -35.21777 c\r293.72461 -35.21777 296.28223 -35.21777 296.28223 -35.21777 c\rh\r298.11328 -34.51953 m\r298.11328 -34.51953 297.13184 -34.51953 297.13184 -34.51953 c\r297.13184 -34.51953 297.13184 -32.7041 297.13184 -32.7041 c\r297.13184 -32.7041 296.28223 -32.7041 296.28223 -32.7041 c\r296.28223 -32.7041 296.28223 -34.51953 296.28223 -34.51953 c\r296.28223 -34.51953 293.12207 -34.51953 293.12207 -34.51953 c\r293.12207 -34.51953 293.12207 -35.51758 293.12207 -35.51758 c\r293.12207 -35.51758 296.31836 -39.16113 296.31836 -39.16113 c\r296.31836 -39.16113 297.13184 -39.16113 297.13184 -39.16113 c\r297.13184 -39.16113 297.13184 -35.21777 297.13184 -35.21777 c\r297.13184 -35.21777 298.11328 -35.21777 298.11328 -35.21777 c\r298.11328 -35.21777 298.11328 -34.51953 298.11328 -34.51953 c\rh\r291.38477 -34.76563 m\r291.38477 -35.03418 291.34375 -35.25586 291.26465 -35.43164 c\r291.18262 -35.60742 291.04883 -35.75977 290.86328 -35.88965 c\r290.72754 -35.98242 290.57715 -36.04199 290.41211 -36.07129 c\r290.24805 -36.09961 290.0752 -36.11426 289.89551 -36.11426 c\r289.64551 -36.11426 289.41211 -36.08594 289.19727 -36.02734 c\r288.98145 -35.9707 288.76172 -35.88086 288.53418 -35.76172 c\r288.52832 -35.69727 288.52441 -35.63477 288.52148 -35.57715 c\r288.5166 -35.51758 288.51563 -35.44336 288.51563 -35.35449 c\r288.51563 -34.89746 288.56348 -34.53809 288.65918 -34.27637 c\r288.75586 -34.01172 288.8877 -33.80273 289.05566 -33.65039 c\r289.19043 -33.52441 289.33691 -33.43066 289.49609 -33.37109 c\r289.65234 -33.31348 289.8252 -33.28223 290.01074 -33.28223 c\r290.4375 -33.28223 290.77344 -33.41016 291.01758 -33.66602 c\r291.2627 -33.9209 291.38477 -34.28711 291.38477 -34.76563 c\rh\r292.28418 -34.79883 m\r292.28418 -34.1416 292.06348 -33.60645 291.62207 -33.19141 c\r291.18066 -32.77637 290.63965 -32.56934 289.99902 -32.56934 c\r289.6748 -32.56934 289.37891 -32.61816 289.11328 -32.7168 c\r288.84766 -32.81543 288.61328 -32.96094 288.40918 -33.1543 c\r288.15625 -33.39551 287.95996 -33.71387 287.82227 -34.10938 c\r287.68555 -34.50586 287.61719 -34.9834 287.61719 -35.54199 c\r287.61719 -36.11426 287.67969 -36.62305 287.80469 -37.06543 c\r287.93066 -37.50879 288.13086 -37.90137 288.40527 -38.24609 c\r288.66504 -38.57324 289.00098 -38.8291 289.41113 -39.0127 c\r289.82227 -39.19629 290.30078 -39.28711 290.84766 -39.28711 c\r291.02051 -39.28711 291.16699 -39.28125 291.28516 -39.2666 c\r291.40332 -39.25195 291.52344 -39.22559 291.64355 -39.18848 c\r291.64355 -39.18848 291.64355 -38.36035 291.64355 -38.36035 c\r291.64355 -38.36035 291.60059 -38.36035 291.60059 -38.36035 c\r291.5166 -38.40332 291.39258 -38.44434 291.22559 -38.48438 c\r291.05859 -38.52344 290.88965 -38.54199 290.71582 -38.54199 c\r290.08105 -38.54199 289.5752 -38.34766 289.19824 -37.95703 c\r288.82031 -37.56738 288.60059 -37.04199 288.53906 -36.37793 c\r288.78613 -36.52539 289.0293 -36.63672 289.27148 -36.71387 c\r289.51074 -36.79004 289.78906 -36.8291 290.10449 -36.8291 c\r290.38379 -36.8291 290.63086 -36.80371 290.8457 -36.75293 c\r291.05762 -36.70215 291.27734 -36.59961 291.50195 -36.44727 c\r291.76074 -36.27051 291.95605 -36.04883 292.08789 -35.78027 c\r292.21875 -35.51074 292.28418 -35.18262 292.28418 -34.79883 c\rh\rf\r397.52246 -32.7041 m\r397.52246 -32.7041 393.06641 -32.7041 393.06641 -32.7041 c\r393.06641 -32.7041 393.06641 -33.61523 393.06641 -33.61523 c\r393.37695 -33.875 393.68652 -34.13574 393.99805 -34.39551 c\r394.31055 -34.65625 394.59961 -34.91406 394.86816 -35.17188 c\r395.43555 -35.70996 395.82227 -36.1377 396.0332 -36.45313 c\r396.24219 -36.76953 396.34766 -37.1123 396.34766 -37.47852 c\r396.34766 -37.81445 396.23438 -38.07715 396.00781 -38.26563 c\r395.7832 -38.45508 395.46777 -38.5498 395.0625 -38.5498 c\r394.79297 -38.5498 394.50293 -38.50293 394.18945 -38.40918 c\r393.87598 -38.31641 393.57031 -38.17188 393.27148 -37.97949 c\r393.27148 -37.97949 393.22656 -37.97949 393.22656 -37.97949 c\r393.22656 -37.97949 393.22656 -38.8916 393.22656 -38.8916 c\r393.4375 -38.99316 393.7168 -39.08496 394.06641 -39.16992 c\r394.41602 -39.25488 394.75488 -39.2959 395.08203 -39.2959 c\r395.75879 -39.2959 396.28809 -39.13672 396.67188 -38.81641 c\r397.05566 -38.49805 397.24707 -38.06445 397.24707 -37.51953 c\r397.24707 -37.27344 397.21484 -37.04395 397.15137 -36.83105 c\r397.08789 -36.61914 396.99512 -36.41797 396.87109 -36.22852 c\r396.75488 -36.04883 396.62109 -35.87305 396.4668 -35.69922 c\r396.31152 -35.52539 396.12305 -35.33398 395.90234 -35.12305 c\r395.58594 -34.81934 395.26074 -34.52539 394.92383 -34.24121 c\r394.58789 -33.95605 394.27441 -33.69238 393.98242 -33.44922 c\r393.98242 -33.44922 397.52246 -33.44922 397.52246 -33.44922 c\r397.52246 -33.44922 397.52246 -32.7041 397.52246 -32.7041 c\rh\r391.18164 -35.81543 m\r391.32227 -35.69141 391.44043 -35.53418 391.53223 -35.3457 c\r391.62402 -35.1582 391.66895 -34.91504 391.66895 -34.61719 c\r391.66895 -34.32129 391.61523 -34.05176 391.50488 -33.80566 c\r391.39551 -33.55957 391.24219 -33.34668 391.04395 -33.16406 c\r390.82227 -32.96094 390.56152 -32.81152 390.26172 -32.71387 c\r389.96094 -32.61719 389.63184 -32.56934 389.27344 -32.56934 c\r388.90723 -32.56934 388.54785 -32.6123 388.19141 -32.69727 c\r387.83691 -32.78223 387.5459 -32.87598 387.31738 -32.97754 c\r387.31738 -32.97754 387.31738 -33.88574 387.31738 -33.88574 c\r387.31738 -33.88574 387.38477 -33.88574 387.38477 -33.88574 c\r387.63672 -33.72266 387.93262 -33.58594 388.27441 -33.47656 c\r388.61328 -33.36914 388.94238 -33.31543 389.25977 -33.31543 c\r389.44629 -33.31543 389.64453 -33.3457 389.85449 -33.40625 c\r390.06543 -33.4668 390.23535 -33.55664 390.36621 -33.67676 c\r390.50195 -33.80371 390.60352 -33.94434 390.66992 -34.09863 c\r390.73633 -34.25195 390.76953 -34.44727 390.76953 -34.68164 c\r390.76953 -34.91406 390.73242 -35.10645 390.65625 -35.25977 c\r390.58008 -35.41113 390.47559 -35.53125 390.34277 -35.61914 c\r390.20801 -35.70801 390.04785 -35.76953 389.85645 -35.80273 c\r389.66699 -35.83691 389.46191 -35.85352 389.24316 -35.85352 c\r389.24316 -35.85352 388.8418 -35.85352 388.8418 -35.85352 c\r388.8418 -35.85352 388.8418 -36.56738 388.8418 -36.56738 c\r388.8418 -36.56738 389.15332 -36.56738 389.15332 -36.56738 c\r389.60254 -36.56738 389.96191 -36.66016 390.23047 -36.84375 c\r390.49805 -37.02734 390.63281 -37.2959 390.63281 -37.64941 c\r390.63281 -37.80664 390.59863 -37.94336 390.53027 -38.06055 c\r390.46191 -38.17773 390.36816 -38.27539 390.24609 -38.34961 c\r390.11914 -38.42578 389.98438 -38.47754 389.83887 -38.50684 c\r389.69336 -38.53516 389.53027 -38.5498 389.34668 -38.5498 c\r389.06641 -38.5498 388.76758 -38.5 388.45117 -38.40137 c\r388.13574 -38.30078 387.83691 -38.16113 387.55664 -37.97949 c\r387.55664 -37.97949 387.5127 -37.97949 387.5127 -37.97949 c\r387.5127 -37.97949 387.5127 -38.88672 387.5127 -38.88672 c\r387.72168 -38.98828 388.00293 -39.08203 388.35156 -39.16797 c\r388.70215 -39.25195 389.04199 -39.2959 389.36914 -39.2959 c\r389.69043 -39.2959 389.97461 -39.2666 390.2207 -39.20898 c\r390.46484 -39.15137 390.6875 -39.05859 390.88477 -38.93262 c\r391.09766 -38.79297 391.25879 -38.625 391.36719 -38.42773 c\r391.47754 -38.23242 391.53223 -38.00293 391.53223 -37.74023 c\r391.53223 -37.38086 391.40234 -37.06934 391.14453 -36.80078 c\r390.88477 -36.53418 390.5791 -36.36523 390.22754 -36.2959 c\r390.22754 -36.2959 390.22754 -36.23633 390.22754 -36.23633 c\r390.37012 -36.21289 390.53223 -36.16406 390.71582 -36.09082 c\r390.89844 -36.01758 391.05469 -35.9248 391.18164 -35.81543 c\rh\rf\rQ\rq\r1 0 0 -1 0 0 cm\r178.88037 -13.91992 m\r178.88037 -13.91992 306.45703 -13.91992 306.45703 -13.91992 c\r306.45703 -13.91992 306.45703 -28.13477 306.45703 -28.13477 c\r306.45703 -28.13477 178.88037 -28.13477 178.88037 -28.13477 c\r178.88037 -28.13477 178.88037 -13.91992 178.88037 -13.91992 c\rh\rW n\r0 0 0 rg\r0 i \r/GS0 gs\r302.11914 -18.81152 m\r302.11914 -18.81152 302.11914 -21.20605 302.11914 -21.20605 c\r302.00684 -21.25293 301.88867 -21.28613 301.76465 -21.30566 c\r301.64063 -21.3252 301.52734 -21.33594 301.42383 -21.33594 c\r301.00488 -21.33594 300.69043 -21.20801 300.47949 -20.95215 c\r300.27051 -20.69531 300.16602 -20.33984 300.16602 -19.88574 c\r300.16602 -19.40625 300.25 -19.05957 300.41797 -18.84473 c\r300.58691 -18.62793 300.85645 -18.52051 301.22754 -18.52051 c\r301.37402 -18.52051 301.52734 -18.54688 301.68848 -18.60059 c\r301.85156 -18.6543 301.99414 -18.72461 302.11914 -18.81152 c\rh\r303.71484 -17.47266 m\r303.71484 -17.47266 302.11914 -17.47266 302.11914 -17.47266 c\r302.11914 -17.47266 302.11914 -17.98145 302.11914 -17.98145 c\r301.84375 -17.76074 301.58594 -17.59863 301.34668 -17.49414 c\r301.10645 -17.39063 300.8291 -17.33887 300.51563 -17.33887 c\r299.9082 -17.33887 299.42383 -17.56738 299.05957 -18.02441 c\r298.69531 -18.48145 298.5127 -19.09668 298.5127 -19.87109 c\r298.5127 -20.28516 298.57422 -20.65234 298.69727 -20.97168 c\r298.81934 -21.29004 298.98828 -21.56543 299.20117 -21.79395 c\r299.40234 -22.01074 299.64648 -22.17871 299.93262 -22.29883 c\r300.2207 -22.41797 300.50879 -22.47852 300.7959 -22.47852 c\r301.09375 -22.47852 301.33887 -22.44727 301.53027 -22.38574 c\r301.7207 -22.32324 301.91699 -22.24512 302.11914 -22.14941 c\r302.11914 -22.14941 302.11914 -24.22363 302.11914 -24.22363 c\r302.11914 -24.22363 303.71484 -24.22363 303.71484 -24.22363 c\r303.71484 -24.22363 303.71484 -17.47266 303.71484 -17.47266 c\rh\r295.76855 -18.72168 m\r295.87109 -18.84668 295.94922 -18.99512 296.00098 -19.1709 c\r296.05273 -19.34668 296.07813 -19.58789 296.07813 -19.89844 c\r296.07813 -20.18457 296.05176 -20.4248 295.99805 -20.61816 c\r295.94531 -20.81152 295.87109 -20.96582 295.77637 -21.08203 c\r295.68164 -21.20215 295.56836 -21.28418 295.43555 -21.33398 c\r295.30176 -21.38379 295.1582 -21.4082 295.00488 -21.4082 c\r294.85156 -21.4082 294.71387 -21.3877 294.59473 -21.34766 c\r294.47461 -21.30664 294.35938 -21.22559 294.25098 -21.10449 c\r294.15234 -20.99121 294.0752 -20.83594 294.01758 -20.63965 c\r293.95996 -20.44336 293.93066 -20.19531 293.93066 -19.89844 c\r293.93066 -19.63184 293.95703 -19.40039 294.00586 -19.20605 c\r294.05664 -19.00977 294.12988 -18.85254 294.22949 -18.73535 c\r294.32324 -18.62109 294.43555 -18.53906 294.56738 -18.4873 c\r294.69922 -18.43555 294.84961 -18.40918 295.01855 -18.40918 c\r295.16309 -18.40918 295.30078 -18.43359 295.43164 -18.48145 c\r295.56445 -18.52832 295.67676 -18.60938 295.76855 -18.72168 c\rh\r297.73145 -19.90625 m\r297.73145 -19.10547 297.49316 -18.47461 297.01563 -18.01465 c\r296.53809 -17.55371 295.86719 -17.32227 295.00488 -17.32227 c\r294.14258 -17.32227 293.4707 -17.55371 292.99414 -18.01465 c\r292.5166 -18.47461 292.27734 -19.10547 292.27734 -19.90625 c\r292.27734 -20.71191 292.51855 -21.34668 292.99805 -21.80469 c\r293.47852 -22.26563 294.14746 -22.49512 295.00488 -22.49512 c\r295.87305 -22.49512 296.54492 -22.26367 297.01953 -21.80078 c\r297.49414 -21.33789 297.73145 -20.70703 297.73145 -19.90625 c\rh\r291.18066 -17.47266 m\r291.18066 -17.47266 289.58398 -17.47266 289.58398 -17.47266 c\r289.58398 -17.47266 289.58398 -19.88965 289.58398 -19.88965 c\r289.58398 -20.08594 289.57324 -20.28223 289.55273 -20.47852 c\r289.53223 -20.67285 289.49707 -20.81738 289.44531 -20.90918 c\r289.38672 -21.01563 289.2998 -21.09473 289.18555 -21.14355 c\r289.07129 -21.19336 288.91211 -21.21777 288.70703 -21.21777 c\r288.56152 -21.21777 288.41406 -21.19434 288.26465 -21.14844 c\r288.11426 -21.10254 287.95117 -21.02832 287.77637 -20.92676 c\r287.77637 -20.92676 287.77637 -17.47266 287.77637 -17.47266 c\r287.77637 -17.47266 286.18066 -17.47266 286.18066 -17.47266 c\r286.18066 -17.47266 286.18066 -24.22363 286.18066 -24.22363 c\r286.18066 -24.22363 287.77637 -24.22363 287.77637 -24.22363 c\r287.77637 -24.22363 287.77637 -21.80664 287.77637 -21.80664 c\r288.06055 -22.02344 288.33203 -22.18945 288.59473 -22.30469 c\r288.85645 -22.4209 289.14648 -22.47852 289.46582 -22.47852 c\r290.00293 -22.47852 290.42383 -22.3252 290.72559 -22.01953 c\r291.0293 -21.71191 291.18066 -21.25391 291.18066 -20.64355 c\r291.18066 -20.64355 291.18066 -17.47266 291.18066 -17.47266 c\rh\r285.21875 -17.5166 m\r285.04785 -17.47266 284.86621 -17.43945 284.67383 -17.41504 c\r284.48145 -17.39063 284.24707 -17.37793 283.96973 -17.37793 c\r283.34961 -17.37793 282.88867 -17.50195 282.58594 -17.74805 c\r282.28223 -17.99316 282.13281 -18.41406 282.13281 -19.00977 c\r282.13281 -19.00977 282.13281 -21.28809 282.13281 -21.28809 c\r282.13281 -21.28809 281.47656 -21.28809 281.47656 -21.28809 c\r281.47656 -21.28809 281.47656 -22.34375 281.47656 -22.34375 c\r281.47656 -22.34375 282.13281 -22.34375 282.13281 -22.34375 c\r282.13281 -22.34375 282.13281 -23.74023 282.13281 -23.74023 c\r282.13281 -23.74023 283.72852 -23.74023 283.72852 -23.74023 c\r283.72852 -23.74023 283.72852 -22.34375 283.72852 -22.34375 c\r283.72852 -22.34375 285.21875 -22.34375 285.21875 -22.34375 c\r285.21875 -22.34375 285.21875 -21.28809 285.21875 -21.28809 c\r285.21875 -21.28809 283.72852 -21.28809 283.72852 -21.28809 c\r283.72852 -21.28809 283.72852 -19.55664 283.72852 -19.55664 c\r283.72852 -19.38477 283.72949 -19.23535 283.73242 -19.1084 c\r283.73535 -18.98047 283.75879 -18.86523 283.80371 -18.76367 c\r283.84473 -18.66309 283.91699 -18.58203 284.02246 -18.52246 c\r284.12695 -18.46289 284.2793 -18.43359 284.47949 -18.43359 c\r284.5625 -18.43359 284.66992 -18.45117 284.80469 -18.48633 c\r284.93945 -18.52246 285.0332 -18.55469 285.08594 -18.58398 c\r285.08594 -18.58398 285.21875 -18.58398 285.21875 -18.58398 c\r285.21875 -18.58398 285.21875 -17.5166 285.21875 -17.5166 c\rh\r279.33008 -20.53516 m\r279.32129 -20.8623 279.23828 -21.10645 279.08203 -21.27148 c\r278.92578 -21.4375 278.68066 -21.51953 278.34961 -21.51953 c\r278.04395 -21.51953 277.79004 -21.44141 277.5918 -21.28418 c\r277.39453 -21.12891 277.28418 -20.87988 277.25977 -20.53516 c\r277.25977 -20.53516 279.33008 -20.53516 279.33008 -20.53516 c\rh\r280.91895 -19.62305 m\r280.91895 -19.62305 277.26367 -19.62305 277.26367 -19.62305 c\r277.28809 -19.23828 277.43652 -18.94336 277.70898 -18.73926 c\r277.98438 -18.53516 278.3877 -18.43359 278.9209 -18.43359 c\r279.25781 -18.43359 279.58496 -18.49316 279.90234 -18.61523 c\r280.2168 -18.73535 280.46875 -18.86523 280.65234 -19.00391 c\r280.65234 -19.00391 280.83008 -19.00391 280.83008 -19.00391 c\r280.83008 -19.00391 280.83008 -17.75 280.83008 -17.75 c\r280.46875 -17.6084 280.12891 -17.50586 279.80859 -17.44238 c\r279.49023 -17.37793 279.13574 -17.34668 278.74902 -17.34668 c\r277.74902 -17.34668 276.9834 -17.56641 276.4502 -18.00586 c\r275.91797 -18.44434 275.65137 -19.06934 275.65137 -19.88184 c\r275.65137 -20.68555 275.9043 -21.32129 276.4082 -21.79004 c\r276.91113 -22.25977 277.60156 -22.49512 278.47949 -22.49512 c\r279.29102 -22.49512 279.89844 -22.29492 280.30664 -21.89453 c\r280.71484 -21.49512 280.91895 -20.91992 280.91895 -20.16895 c\r280.91895 -20.16895 280.91895 -19.62305 280.91895 -19.62305 c\rh\r274.41309 -17.47266 m\r274.41309 -17.47266 272.71191 -17.47266 272.71191 -17.47266 c\r272.71191 -17.47266 272.71191 -21.7959 272.71191 -21.7959 c\r272.71191 -21.7959 271.49316 -18.98926 271.49316 -18.98926 c\r271.49316 -18.98926 270.32422 -18.98926 270.32422 -18.98926 c\r270.32422 -18.98926 269.10645 -21.7959 269.10645 -21.7959 c\r269.10645 -21.7959 269.10645 -17.47266 269.10645 -17.47266 c\r269.10645 -17.47266 267.50195 -17.47266 267.50195 -17.47266 c\r267.50195 -17.47266 267.50195 -23.93066 267.50195 -23.93066 c\r267.50195 -23.93066 269.47754 -23.93066 269.47754 -23.93066 c\r269.47754 -23.93066 270.95605 -20.68945 270.95605 -20.68945 c\r270.95605 -20.68945 272.43066 -23.93066 272.43066 -23.93066 c\r272.43066 -23.93066 274.41309 -23.93066 274.41309 -23.93066 c\r274.41309 -23.93066 274.41309 -17.47266 274.41309 -17.47266 c\rh\r263.40527 -20.85254 m\r263.40527 -20.85254 263.2627 -20.85254 263.2627 -20.85254 c\r263.19434 -20.87598 263.08496 -20.89355 262.93457 -20.90625 c\r262.78418 -20.91895 262.65918 -20.9248 262.55859 -20.9248 c\r262.33105 -20.9248 262.13086 -20.90918 261.95703 -20.88184 c\r261.78223 -20.85254 261.5957 -20.80273 261.39355 -20.73242 c\r261.39355 -20.73242 261.39355 -17.47266 261.39355 -17.47266 c\r261.39355 -17.47266 259.79883 -17.47266 259.79883 -17.47266 c\r259.79883 -17.47266 259.79883 -22.34375 259.79883 -22.34375 c\r259.79883 -22.34375 261.39355 -22.34375 261.39355 -22.34375 c\r261.39355 -22.34375 261.39355 -21.62793 261.39355 -21.62793 c\r261.74609 -21.92285 262.05078 -22.11914 262.31152 -22.21582 c\r262.57031 -22.31055 262.80957 -22.36035 263.02734 -22.36035 c\r263.08398 -22.36035 263.14746 -22.3584 263.21875 -22.35547 c\r263.28906 -22.35254 263.35059 -22.34863 263.40527 -22.3418 c\r263.40527 -22.3418 263.40527 -20.85254 263.40527 -20.85254 c\rh\r257.08691 -20.53516 m\r257.07715 -20.8623 256.99414 -21.10645 256.83789 -21.27148 c\r256.68164 -21.4375 256.43701 -21.51953 256.10596 -21.51953 c\r255.79883 -21.51953 255.54639 -21.44141 255.34814 -21.28418 c\r255.1499 -21.12891 255.03906 -20.87988 255.01611 -20.53516 c\r255.01611 -20.53516 257.08691 -20.53516 257.08691 -20.53516 c\rh\r258.67383 -19.62305 m\r258.67383 -19.62305 255.02002 -19.62305 255.02002 -19.62305 c\r255.04443 -19.23828 255.19189 -18.94336 255.46631 -18.73926 c\r255.74072 -18.53516 256.14355 -18.43359 256.67529 -18.43359 c\r257.01318 -18.43359 257.34033 -18.49316 257.65674 -18.61523 c\r257.97412 -18.73535 258.22461 -18.86523 258.4082 -19.00391 c\r258.4082 -19.00391 258.58496 -19.00391 258.58496 -19.00391 c\r258.58496 -19.00391 258.58496 -17.75 258.58496 -17.75 c\r258.22461 -17.6084 257.88477 -17.50586 257.56543 -17.44238 c\r257.24561 -17.37793 256.8916 -17.34668 256.50488 -17.34668 c\r255.50439 -17.34668 254.73877 -17.56641 254.20703 -18.00586 c\r253.67383 -18.44434 253.40674 -19.06934 253.40674 -19.88184 c\r253.40674 -20.68555 253.66016 -21.32129 254.16357 -21.79004 c\r254.66699 -22.25977 255.35889 -22.49512 256.23633 -22.49512 c\r257.0459 -22.49512 257.6543 -22.29492 258.06201 -21.89453 c\r258.47168 -21.49512 258.67383 -20.91992 258.67383 -20.16895 c\r258.67383 -20.16895 258.67383 -19.62305 258.67383 -19.62305 c\rh\r250.8877 -21.85645 m\r250.8877 -22.03711 250.8374 -22.19336 250.7373 -22.3252 c\r250.63818 -22.45605 250.52246 -22.54785 250.38916 -22.60059 c\r250.21191 -22.66797 250.04102 -22.70703 249.87256 -22.71387 c\r249.70557 -22.7207 249.48193 -22.72461 249.20117 -22.72461 c\r249.20117 -22.72461 248.90967 -22.72461 248.90967 -22.72461 c\r248.90967 -22.72461 248.90967 -20.79688 248.90967 -20.79688 c\r248.90967 -20.79688 249.39551 -20.79688 249.39551 -20.79688 c\r249.68457 -20.79688 249.92188 -20.81445 250.1084 -20.84863 c\r250.29541 -20.88379 250.45264 -20.95313 250.5791 -21.05664 c\r250.68799 -21.14844 250.7666 -21.25977 250.81543 -21.3877 c\r250.86426 -21.51563 250.8877 -21.67188 250.8877 -21.85645 c\rh\r252.65381 -21.8916 m\r252.65381 -21.60254 252.60303 -21.31934 252.49951 -21.04395 c\r252.39648 -20.76758 252.24805 -20.53516 252.05615 -20.34766 c\r251.79297 -20.09277 251.50049 -19.90039 251.17627 -19.77051 c\r250.85352 -19.63965 250.45068 -19.57617 249.96924 -19.57617 c\r249.96924 -19.57617 248.90967 -19.57617 248.90967 -19.57617 c\r248.90967 -19.57617 248.90967 -17.47266 248.90967 -17.47266 c\r248.90967 -17.47266 247.20898 -17.47266 247.20898 -17.47266 c\r247.20898 -17.47266 247.20898 -23.93066 247.20898 -23.93066 c\r247.20898 -23.93066 250.00977 -23.93066 250.00977 -23.93066 c\r250.42822 -23.93066 250.78174 -23.89551 251.07129 -23.82422 c\r251.35791 -23.75293 251.61328 -23.64746 251.83447 -23.50488 c\r252.10059 -23.33594 252.30322 -23.11621 252.44482 -22.85059 c\r252.58398 -22.58398 252.65381 -22.26563 252.65381 -21.8916 c\rh\r242.95313 -19.01758 m\r242.95313 -18.51367 242.72314 -18.1084 242.26318 -17.80078 c\r241.80273 -17.49219 241.17188 -17.33887 240.37305 -17.33887 c\r239.93115 -17.33887 239.5293 -17.37891 239.16895 -17.46094 c\r238.80957 -17.54102 238.52002 -17.62988 238.30225 -17.72949 c\r238.30225 -17.72949 238.30225 -19.01172 238.30225 -19.01172 c\r238.30225 -19.01172 238.44775 -19.01172 238.44775 -19.01172 c\r238.52783 -18.95703 238.61963 -18.89746 238.72412 -18.83203 c\r238.82959 -18.7666 238.97705 -18.69629 239.16895 -18.62109 c\r239.33398 -18.55469 239.52197 -18.49805 239.73096 -18.4502 c\r239.94092 -18.40137 240.16504 -18.37793 240.40381 -18.37793 c\r240.71631 -18.37793 240.94824 -18.41211 241.09814 -18.48047 c\r241.24902 -18.54785 241.32373 -18.64941 241.32373 -18.78223 c\r241.32373 -18.90137 241.2793 -18.9873 241.19238 -19.04102 c\r241.10352 -19.09473 240.93604 -19.14648 240.6875 -19.19531 c\r240.56982 -19.2207 240.41016 -19.25 240.20752 -19.2793 c\r240.00586 -19.30957 239.82275 -19.34668 239.65674 -19.38965 c\r239.20654 -19.50586 238.87207 -19.68555 238.65332 -19.93066 c\r238.43506 -20.1748 238.32617 -20.47852 238.32617 -20.84473 c\r238.32617 -21.3125 238.55322 -21.70117 239.00439 -22.0127 c\r239.45752 -22.32324 240.07617 -22.47852 240.85938 -22.47852 c\r241.23096 -22.47852 241.58789 -22.44141 241.92725 -22.36914 c\r242.26904 -22.29492 242.53516 -22.21582 242.72607 -22.13086 c\r242.72607 -22.13086 242.72607 -20.90039 242.72607 -20.90039 c\r242.72607 -20.90039 242.58984 -20.90039 242.58984 -20.90039 c\r242.354 -21.05957 242.08447 -21.18945 241.78271 -21.28906 c\r241.47998 -21.38965 241.17529 -21.43945 240.86621 -21.43945 c\r240.6084 -21.43945 240.39307 -21.4043 240.21826 -21.33496 c\r240.04297 -21.26563 239.9541 -21.16699 239.9541 -21.03809 c\r239.9541 -20.92285 239.99463 -20.83496 240.07422 -20.77441 c\r240.15381 -20.71387 240.34082 -20.65234 240.63623 -20.5918 c\r240.79883 -20.56055 240.97363 -20.52832 241.15918 -20.49902 c\r241.34717 -20.46875 241.53467 -20.42969 241.72412 -20.38379 c\r242.14258 -20.27637 242.45166 -20.10938 242.65234 -19.87891 c\r242.85254 -19.64844 242.95313 -19.36133 242.95313 -19.01758 c\rh\r237.17188 -17.47266 m\r237.17188 -17.47266 235.57617 -17.47266 235.57617 -17.47266 c\r235.57617 -17.47266 235.57617 -19.88965 235.57617 -19.88965 c\r235.57617 -20.08594 235.56494 -20.28223 235.54395 -20.47852 c\r235.52393 -20.67285 235.48828 -20.81738 235.4375 -20.90918 c\r235.37842 -21.01563 235.29053 -21.09473 235.17676 -21.14355 c\r235.0625 -21.19336 234.90381 -21.21777 234.69922 -21.21777 c\r234.55322 -21.21777 234.40576 -21.19434 234.25586 -21.14844 c\r234.10596 -21.10254 233.94336 -21.02832 233.76953 -20.92676 c\r233.76953 -20.92676 233.76953 -17.47266 233.76953 -17.47266 c\r233.76953 -17.47266 232.17188 -17.47266 232.17188 -17.47266 c\r232.17188 -17.47266 232.17188 -22.34375 232.17188 -22.34375 c\r232.17188 -22.34375 233.76953 -22.34375 233.76953 -22.34375 c\r233.76953 -22.34375 233.76953 -21.80664 233.76953 -21.80664 c\r234.05225 -22.02344 234.32471 -22.18945 234.58594 -22.30469 c\r234.84766 -22.4209 235.13818 -22.47852 235.45752 -22.47852 c\r235.99463 -22.47852 236.41553 -22.3252 236.71729 -22.01953 c\r237.02148 -21.71191 237.17188 -21.25391 237.17188 -20.64355 c\r237.17188 -20.64355 237.17188 -17.47266 237.17188 -17.47266 c\rh\r229.0625 -18.72168 m\r229.16699 -18.84668 229.24414 -18.99512 229.2959 -19.1709 c\r229.34766 -19.34668 229.37402 -19.58789 229.37402 -19.89844 c\r229.37402 -20.18457 229.34668 -20.4248 229.29395 -20.61816 c\r229.24072 -20.81152 229.16699 -20.96582 229.07227 -21.08203 c\r228.97705 -21.20215 228.86328 -21.28418 228.72998 -21.33398 c\r228.59766 -21.38379 228.4541 -21.4082 228.2998 -21.4082 c\r228.14551 -21.4082 228.0083 -21.3877 227.88916 -21.34766 c\r227.77002 -21.30664 227.65381 -21.22559 227.54541 -21.10449 c\r227.44727 -20.99121 227.37012 -20.83594 227.31201 -20.63965 c\r227.25537 -20.44336 227.22607 -20.19531 227.22607 -19.89844 c\r227.22607 -19.63184 227.25098 -19.40039 227.30176 -19.20605 c\r227.35254 -19.00977 227.42627 -18.85254 227.52295 -18.73535 c\r227.61816 -18.62109 227.73096 -18.53906 227.86279 -18.4873 c\r227.99414 -18.43555 228.14355 -18.40918 228.31201 -18.40918 c\r228.45801 -18.40918 228.59668 -18.43359 228.72803 -18.48145 c\r228.85889 -18.52832 228.9707 -18.60938 229.0625 -18.72168 c\rh\r231.02588 -19.90625 m\r231.02588 -19.10547 230.7876 -18.47461 230.31104 -18.01465 c\r229.83301 -17.55371 229.1626 -17.32227 228.2998 -17.32227 c\r227.43701 -17.32227 226.76563 -17.55371 226.28857 -18.01465 c\r225.81201 -18.47461 225.57324 -19.10547 225.57324 -19.90625 c\r225.57324 -20.71191 225.81299 -21.34668 226.29297 -21.80469 c\r226.77393 -22.26563 227.44287 -22.49512 228.2998 -22.49512 c\r229.16895 -22.49512 229.84033 -22.26367 230.31494 -21.80078 c\r230.78955 -21.33789 231.02588 -20.70703 231.02588 -19.90625 c\rh\r224.42969 -17.47266 m\r224.42969 -17.47266 222.83447 -17.47266 222.83447 -17.47266 c\r222.83447 -17.47266 222.83447 -22.34375 222.83447 -22.34375 c\r222.83447 -22.34375 224.42969 -22.34375 224.42969 -22.34375 c\r224.42969 -22.34375 224.42969 -17.47266 224.42969 -17.47266 c\rh\r224.4707 -23.04199 m\r224.4707 -23.04199 222.79297 -23.04199 222.79297 -23.04199 c\r222.79297 -23.04199 222.79297 -24.22363 222.79297 -24.22363 c\r222.79297 -24.22363 224.4707 -24.22363 224.4707 -24.22363 c\r224.4707 -24.22363 224.4707 -23.04199 224.4707 -23.04199 c\rh\r221.87207 -17.5166 m\r221.70117 -17.47266 221.52002 -17.43945 221.32764 -17.41504 c\r221.13574 -17.39063 220.90039 -17.37793 220.62305 -17.37793 c\r220.00244 -17.37793 219.5415 -17.50195 219.23828 -17.74805 c\r218.93555 -17.99316 218.78516 -18.41406 218.78516 -19.00977 c\r218.78516 -19.00977 218.78516 -21.28809 218.78516 -21.28809 c\r218.78516 -21.28809 218.12793 -21.28809 218.12793 -21.28809 c\r218.12793 -21.28809 218.12793 -22.34375 218.12793 -22.34375 c\r218.12793 -22.34375 218.78516 -22.34375 218.78516 -22.34375 c\r218.78516 -22.34375 218.78516 -23.74023 218.78516 -23.74023 c\r218.78516 -23.74023 220.37988 -23.74023 220.37988 -23.74023 c\r220.37988 -23.74023 220.37988 -22.34375 220.37988 -22.34375 c\r220.37988 -22.34375 221.87207 -22.34375 221.87207 -22.34375 c\r221.87207 -22.34375 221.87207 -21.28809 221.87207 -21.28809 c\r221.87207 -21.28809 220.37988 -21.28809 220.37988 -21.28809 c\r220.37988 -21.28809 220.37988 -19.55664 220.37988 -19.55664 c\r220.37988 -19.38477 220.38184 -19.23535 220.38574 -19.1084 c\r220.38867 -18.98047 220.41211 -18.86523 220.45654 -18.76367 c\r220.49707 -18.66309 220.57031 -18.58203 220.67578 -18.52246 c\r220.7793 -18.46289 220.93311 -18.43359 221.13379 -18.43359 c\r221.21582 -18.43359 221.32324 -18.45117 221.4585 -18.48633 c\r221.59277 -18.52246 221.68652 -18.55469 221.73926 -18.58398 c\r221.73926 -18.58398 221.87207 -18.58398 221.87207 -18.58398 c\r221.87207 -18.58398 221.87207 -17.5166 221.87207 -17.5166 c\rh\r215.95215 -17.34668 m\r215.51758 -17.34668 215.12061 -17.39648 214.76123 -17.49805 c\r214.40234 -17.59863 214.08936 -17.75586 213.82324 -17.9668 c\r213.56055 -18.17773 213.35645 -18.44434 213.21191 -18.76367 c\r213.06689 -19.08398 212.99463 -19.45996 212.99463 -19.89063 c\r212.99463 -20.34473 213.07178 -20.7373 213.22705 -21.06543 c\r213.38232 -21.39551 213.59863 -21.66895 213.87646 -21.88574 c\r214.146 -22.08984 214.45605 -22.24121 214.80762 -22.33594 c\r215.15918 -22.43066 215.52441 -22.47852 215.90283 -22.47852 c\r216.24268 -22.47852 216.55615 -22.44336 216.84326 -22.37109 c\r217.12939 -22.29883 217.39697 -22.20313 217.64551 -22.08789 c\r217.64551 -22.08789 217.64551 -20.75781 217.64551 -20.75781 c\r217.64551 -20.75781 217.41992 -20.75781 217.41992 -20.75781 c\r217.35791 -20.80957 217.2832 -20.86914 217.1958 -20.93848 c\r217.10889 -21.00781 217.00195 -21.07422 216.875 -21.14063 c\r216.75391 -21.2041 216.62061 -21.25684 216.47607 -21.29785 c\r216.33203 -21.33984 216.16357 -21.36035 215.97119 -21.36035 c\r215.54639 -21.36035 215.21924 -21.22852 214.99072 -20.96484 c\r214.76172 -20.70215 214.64697 -20.34375 214.64697 -19.89063 c\r214.64697 -19.4248 214.76416 -19.06934 214.99902 -18.82813 c\r215.23438 -18.58594 215.56689 -18.46484 215.99805 -18.46484 c\r216.19873 -18.46484 216.37988 -18.4873 216.54053 -18.53027 c\r216.70166 -18.57617 216.83545 -18.62793 216.94141 -18.6875 c\r217.04199 -18.74512 217.13037 -18.80566 217.20703 -18.86719 c\r217.28418 -18.93066 217.35449 -18.99121 217.41992 -19.05078 c\r217.41992 -19.05078 217.64551 -19.05078 217.64551 -19.05078 c\r217.64551 -19.05078 217.64551 -17.72266 217.64551 -17.72266 c\r217.39453 -17.60742 217.13184 -17.5166 216.8584 -17.44824 c\r216.58496 -17.37988 216.28271 -17.34668 215.95215 -17.34668 c\rh\r211.85596 -17.47266 m\r211.85596 -17.47266 210.25977 -17.47266 210.25977 -17.47266 c\r210.25977 -17.47266 210.25977 -18.00977 210.25977 -18.00977 c\r209.96387 -17.79102 209.69434 -17.62402 209.44873 -17.50977 c\r209.20361 -17.39551 208.91113 -17.33887 208.57129 -17.33887 c\r208.02197 -17.33887 207.59863 -17.49316 207.30176 -17.80273 c\r207.00537 -18.11133 206.85645 -18.56836 206.85645 -19.17285 c\r206.85645 -19.17285 206.85645 -22.34375 206.85645 -22.34375 c\r206.85645 -22.34375 208.45264 -22.34375 208.45264 -22.34375 c\r208.45264 -22.34375 208.45264 -19.92676 208.45264 -19.92676 c\r208.45264 -19.68164 208.46143 -19.47656 208.47754 -19.31348 c\r208.49365 -19.15039 208.53174 -19.01367 208.59082 -18.90723 c\r208.64746 -18.80078 208.73242 -18.72266 208.84668 -18.67285 c\r208.96094 -18.62402 209.12012 -18.59961 209.32568 -18.59961 c\r209.4624 -18.59961 209.61279 -18.62402 209.77881 -18.67285 c\r209.94531 -18.72266 210.10547 -18.79492 210.25977 -18.88965 c\r210.25977 -18.88965 210.25977 -22.34375 210.25977 -22.34375 c\r210.25977 -22.34375 211.85596 -22.34375 211.85596 -22.34375 c\r211.85596 -22.34375 211.85596 -17.47266 211.85596 -17.47266 c\rh\r205.99219 -20.85254 m\r205.99219 -20.85254 205.85107 -20.85254 205.85107 -20.85254 c\r205.78271 -20.87598 205.67334 -20.89355 205.52344 -20.90625 c\r205.37305 -20.91895 205.24756 -20.9248 205.14746 -20.9248 c\r204.91992 -20.9248 204.71924 -20.90918 204.54541 -20.88184 c\r204.37109 -20.85254 204.18311 -20.80273 203.98291 -20.73242 c\r203.98291 -20.73242 203.98291 -17.47266 203.98291 -17.47266 c\r203.98291 -17.47266 202.38672 -17.47266 202.38672 -17.47266 c\r202.38672 -17.47266 202.38672 -22.34375 202.38672 -22.34375 c\r202.38672 -22.34375 203.98291 -22.34375 203.98291 -22.34375 c\r203.98291 -22.34375 203.98291 -21.62793 203.98291 -21.62793 c\r204.33447 -21.92285 204.63965 -22.11914 204.89941 -22.21582 c\r205.15869 -22.31055 205.39795 -22.36035 205.61621 -22.36035 c\r205.67188 -22.36035 205.73584 -22.3584 205.80664 -22.35547 c\r205.87744 -22.35254 205.93945 -22.34863 205.99219 -22.3418 c\r205.99219 -22.3418 205.99219 -20.85254 205.99219 -20.85254 c\rh\r201.4248 -17.5166 m\r201.25342 -17.47266 201.07178 -17.43945 200.87988 -17.41504 c\r200.6875 -17.39063 200.45313 -17.37793 200.17529 -17.37793 c\r199.55518 -17.37793 199.09424 -17.50195 198.7915 -17.74805 c\r198.48877 -17.99316 198.3374 -18.41406 198.3374 -19.00977 c\r198.3374 -19.00977 198.3374 -21.28809 198.3374 -21.28809 c\r198.3374 -21.28809 197.68066 -21.28809 197.68066 -21.28809 c\r197.68066 -21.28809 197.68066 -22.34375 197.68066 -22.34375 c\r197.68066 -22.34375 198.3374 -22.34375 198.3374 -22.34375 c\r198.3374 -22.34375 198.3374 -23.74023 198.3374 -23.74023 c\r198.3374 -23.74023 199.93408 -23.74023 199.93408 -23.74023 c\r199.93408 -23.74023 199.93408 -22.34375 199.93408 -22.34375 c\r199.93408 -22.34375 201.4248 -22.34375 201.4248 -22.34375 c\r201.4248 -22.34375 201.4248 -21.28809 201.4248 -21.28809 c\r201.4248 -21.28809 199.93408 -21.28809 199.93408 -21.28809 c\r199.93408 -21.28809 199.93408 -19.55664 199.93408 -19.55664 c\r199.93408 -19.38477 199.93506 -19.23535 199.93799 -19.1084 c\r199.94092 -18.98047 199.96436 -18.86523 200.00879 -18.76367 c\r200.05029 -18.66309 200.12354 -18.58203 200.22803 -18.52246 c\r200.33252 -18.46289 200.48535 -18.43359 200.68555 -18.43359 c\r200.76855 -18.43359 200.87695 -18.45117 201.01172 -18.48633 c\r201.14502 -18.52246 201.23828 -18.55469 201.29199 -18.58398 c\r201.29199 -18.58398 201.4248 -18.58398 201.4248 -18.58398 c\r201.4248 -18.58398 201.4248 -17.5166 201.4248 -17.5166 c\rh\r197.18555 -19.01758 m\r197.18555 -18.51367 196.95557 -18.1084 196.49512 -17.80078 c\r196.03516 -17.49219 195.40527 -17.33887 194.60498 -17.33887 c\r194.1626 -17.33887 193.76172 -17.37891 193.40186 -17.46094 c\r193.0415 -17.54102 192.75244 -17.62988 192.53418 -17.72949 c\r192.53418 -17.72949 192.53418 -19.01172 192.53418 -19.01172 c\r192.53418 -19.01172 192.68018 -19.01172 192.68018 -19.01172 c\r192.75977 -18.95703 192.85254 -18.89746 192.95703 -18.83203 c\r193.06152 -18.7666 193.20996 -18.69629 193.40186 -18.62109 c\r193.56738 -18.55469 193.75439 -18.49805 193.96387 -18.4502 c\r194.17334 -18.40137 194.39697 -18.37793 194.63672 -18.37793 c\r194.94922 -18.37793 195.18066 -18.41211 195.33154 -18.48047 c\r195.48145 -18.54785 195.55664 -18.64941 195.55664 -18.78223 c\r195.55664 -18.90137 195.51221 -18.9873 195.42432 -19.04102 c\r195.33545 -19.09473 195.16797 -19.14648 194.92041 -19.19531 c\r194.80225 -19.2207 194.64209 -19.25 194.43994 -19.2793 c\r194.23828 -19.30957 194.05518 -19.34668 193.88965 -19.38965 c\r193.43848 -19.50586 193.104 -19.68555 192.88574 -19.93066 c\r192.66748 -20.1748 192.55811 -20.47852 192.55811 -20.84473 c\r192.55811 -21.3125 192.78467 -21.70117 193.2373 -22.0127 c\r193.68994 -22.32324 194.30859 -22.47852 195.09229 -22.47852 c\r195.46387 -22.47852 195.81982 -22.44141 196.16016 -22.36914 c\r196.50049 -22.29492 196.76758 -22.21582 196.95898 -22.13086 c\r196.95898 -22.13086 196.95898 -20.90039 196.95898 -20.90039 c\r196.95898 -20.90039 196.82129 -20.90039 196.82129 -20.90039 c\r196.58594 -21.05957 196.31689 -21.18945 196.01465 -21.28906 c\r195.71289 -21.38965 195.40723 -21.43945 195.09814 -21.43945 c\r194.8418 -21.43945 194.625 -21.4043 194.4502 -21.33496 c\r194.2749 -21.26563 194.1875 -21.16699 194.1875 -21.03809 c\r194.1875 -20.92285 194.22705 -20.83496 194.30664 -20.77441 c\r194.38623 -20.71387 194.57373 -20.65234 194.86865 -20.5918 c\r195.03076 -20.56055 195.20508 -20.52832 195.39209 -20.49902 c\r195.57959 -20.46875 195.76709 -20.42969 195.95654 -20.38379 c\r196.375 -20.27637 196.68457 -20.10938 196.88477 -19.87891 c\r197.08496 -19.64844 197.18555 -19.36133 197.18555 -19.01758 c\rh\r191.40381 -17.47266 m\r191.40381 -17.47266 189.80859 -17.47266 189.80859 -17.47266 c\r189.80859 -17.47266 189.80859 -19.88965 189.80859 -19.88965 c\r189.80859 -20.08594 189.79785 -20.28223 189.77686 -20.47852 c\r189.75586 -20.67285 189.72021 -20.81738 189.67041 -20.90918 c\r189.61035 -21.01563 189.52393 -21.09473 189.40918 -21.14355 c\r189.29541 -21.19336 189.13574 -21.21777 188.93164 -21.21777 c\r188.78564 -21.21777 188.63818 -21.19434 188.48828 -21.14844 c\r188.33838 -21.10254 188.17578 -21.02832 188.00098 -20.92676 c\r188.00098 -20.92676 188.00098 -17.47266 188.00098 -17.47266 c\r188.00098 -17.47266 186.40479 -17.47266 186.40479 -17.47266 c\r186.40479 -17.47266 186.40479 -22.34375 186.40479 -22.34375 c\r186.40479 -22.34375 188.00098 -22.34375 188.00098 -22.34375 c\r188.00098 -22.34375 188.00098 -21.80664 188.00098 -21.80664 c\r188.28467 -22.02344 188.55713 -22.18945 188.81885 -22.30469 c\r189.08008 -22.4209 189.37061 -22.47852 189.68945 -22.47852 c\r190.22754 -22.47852 190.64697 -22.3252 190.9502 -22.01953 c\r191.25293 -21.71191 191.40381 -21.25391 191.40381 -20.64355 c\r191.40381 -20.64355 191.40381 -17.47266 191.40381 -17.47266 c\rh\r185.104 -17.47266 m\r185.104 -17.47266 181.24658 -17.47266 181.24658 -17.47266 c\r181.24658 -17.47266 181.24658 -18.61523 181.24658 -18.61523 c\r181.24658 -18.61523 182.32471 -18.61523 182.32471 -18.61523 c\r182.32471 -18.61523 182.32471 -22.78809 182.32471 -22.78809 c\r182.32471 -22.78809 181.24658 -22.78809 181.24658 -22.78809 c\r181.24658 -22.78809 181.24658 -23.93066 181.24658 -23.93066 c\r181.24658 -23.93066 185.104 -23.93066 185.104 -23.93066 c\r185.104 -23.93066 185.104 -22.78809 185.104 -22.78809 c\r185.104 -22.78809 184.02637 -22.78809 184.02637 -22.78809 c\r184.02637 -22.78809 184.02637 -18.61523 184.02637 -18.61523 c\r184.02637 -18.61523 185.104 -18.61523 185.104 -18.61523 c\r185.104 -18.61523 185.104 -17.47266 185.104 -17.47266 c\rh\rf\rQ\rq\r1 0 0 -1 0 0 cm\r16.29932 -126.37109 m\r16.29932 -126.37109 27.18945 -126.37109 27.18945 -126.37109 c\r27.18945 -126.37109 27.18945 -167.74854 27.18945 -167.74854 c\r27.18945 -167.74854 16.29932 -167.74854 16.29932 -167.74854 c\r16.29932 -167.74854 16.29932 -126.37109 16.29932 -126.37109 c\rh\rW n\r0 0 0 rg\r0 i \r/GS0 gs\r24.00732 -160.14307 m\r24.00732 -160.14307 21.56152 -160.14307 21.56152 -160.14307 c\r21.51416 -160.03369 21.47998 -159.91797 21.45947 -159.79688 c\r21.43896 -159.67529 21.42822 -159.56396 21.42822 -159.4624 c\r21.42822 -159.05273 21.55908 -158.74463 21.82129 -158.53906 c\r22.08301 -158.33398 22.44678 -158.23145 22.91162 -158.23145 c\r23.39941 -158.23145 23.75391 -158.31396 23.97412 -158.47852 c\r24.19482 -158.64355 24.30518 -158.90771 24.30518 -159.27197 c\r24.30518 -159.41357 24.27734 -159.56396 24.22266 -159.72266 c\r24.16846 -159.88184 24.09668 -160.02197 24.00732 -160.14307 c\rh\r24.09912 -147.60059 m\r23.97217 -147.70117 23.81934 -147.77734 23.64014 -147.82813 c\r23.46143 -147.87891 23.21436 -147.9043 22.89795 -147.9043 c\r22.60547 -147.9043 22.35986 -147.87793 22.16211 -147.82617 c\r21.96436 -147.77344 21.80615 -147.70117 21.68799 -147.60938 c\r21.56689 -147.5166 21.48096 -147.4043 21.43115 -147.27441 c\r21.38086 -147.14453 21.35547 -147.00391 21.35547 -146.85352 c\r21.35547 -146.70313 21.37598 -146.56934 21.41699 -146.45215 c\r21.45898 -146.33496 21.54199 -146.22168 21.66553 -146.11523 c\r21.78076 -146.01953 21.93896 -145.94336 22.13965 -145.88672 c\r22.34082 -145.83008 22.59375 -145.80176 22.89795 -145.80176 c\r23.16992 -145.80176 23.40576 -145.82715 23.60449 -145.87598 c\r23.8042 -145.9248 23.96484 -145.99805 24.08594 -146.09375 c\r24.20117 -146.18555 24.28564 -146.2959 24.33887 -146.42578 c\r24.39111 -146.55469 24.41846 -146.70117 24.41846 -146.86621 c\r24.41846 -147.00781 24.39453 -147.14355 24.34473 -147.27246 c\r24.29639 -147.40137 24.21436 -147.51074 24.09912 -147.60059 c\rh\r22.24658 -136.66211 m\r21.91309 -136.65234 21.6626 -136.57227 21.49463 -136.41895 c\r21.32568 -136.26563 21.24219 -136.02734 21.24219 -135.70215 c\r21.24219 -135.40137 21.32178 -135.1543 21.48096 -134.96094 c\r21.64063 -134.7666 21.896 -134.65723 22.24658 -134.63477 c\r22.24658 -134.63477 22.24658 -136.66211 22.24658 -136.66211 c\rh\r25.50391 -141.85449 m\r25.50391 -141.42969 25.45215 -141.04102 25.34912 -140.68945 c\r25.24609 -140.33789 25.08594 -140.03223 24.87109 -139.77246 c\r24.65527 -139.51367 24.38428 -139.31445 24.05615 -139.17285 c\r23.72852 -139.03027 23.34473 -138.95996 22.90479 -138.95996 c\r22.44141 -138.95996 22.04102 -139.03613 21.70508 -139.1875 c\r21.36865 -139.34082 21.08936 -139.55078 20.86816 -139.82422 c\r20.6582 -140.08691 20.50537 -140.39063 20.40771 -140.73535 c\r20.31006 -141.08008 20.26123 -141.4375 20.26123 -141.80762 c\r20.26123 -142.13965 20.29834 -142.44727 20.37207 -142.72754 c\r20.4458 -143.00781 20.54199 -143.26953 20.66016 -143.51367 c\r20.66016 -143.51367 22.01953 -143.51367 22.01953 -143.51367 c\r22.01953 -143.51367 22.01953 -143.29199 22.01953 -143.29199 c\r21.9668 -143.23145 21.90576 -143.1582 21.83496 -143.07324 c\r21.76465 -142.98828 21.6958 -142.88281 21.62793 -142.75879 c\r21.56348 -142.64063 21.51025 -142.51074 21.46777 -142.36914 c\r21.42529 -142.22656 21.4043 -142.0625 21.4043 -141.875 c\r21.4043 -141.45801 21.53857 -141.1377 21.80811 -140.91406 c\r22.07715 -140.68945 22.44238 -140.57813 22.90479 -140.57813 c\r23.38184 -140.57813 23.74365 -140.69336 23.99121 -140.92285 c\r24.23828 -141.15234 24.36133 -141.47852 24.36133 -141.90039 c\r24.36133 -142.09668 24.33936 -142.27441 24.29395 -142.43164 c\r24.24854 -142.58887 24.19531 -142.71973 24.13379 -142.82422 c\r24.07568 -142.92188 24.01416 -143.00879 23.9502 -143.08398 c\r23.88623 -143.15918 23.82324 -143.22852 23.76221 -143.29199 c\r23.76221 -143.29199 23.76221 -143.51367 23.76221 -143.51367 c\r23.76221 -143.51367 25.11963 -143.51367 25.11963 -143.51367 c\r25.23779 -143.26758 25.33105 -143.00977 25.40039 -142.74316 c\r25.46924 -142.47559 25.50391 -142.17969 25.50391 -141.85449 c\rh\r25.37451 -155.53906 m\r25.37451 -155.53906 25.37451 -153.97656 25.37451 -153.97656 c\r25.37451 -153.97656 22.90576 -153.97656 22.90576 -153.97656 c\r22.70508 -153.97656 22.50488 -153.96582 22.30518 -153.9458 c\r22.10645 -153.92529 21.95898 -153.89063 21.86426 -153.84131 c\r21.75537 -153.7832 21.67578 -153.69824 21.625 -153.58643 c\r21.57471 -153.47461 21.5498 -153.31836 21.5498 -153.11816 c\r21.5498 -152.97559 21.57324 -152.83105 21.62109 -152.68408 c\r21.66846 -152.5376 21.74316 -152.37842 21.84668 -152.20752 c\r21.84668 -152.20752 25.37451 -152.20752 25.37451 -152.20752 c\r25.37451 -152.20752 25.37451 -150.64502 25.37451 -150.64502 c\r25.37451 -150.64502 20.39893 -150.64502 20.39893 -150.64502 c\r20.39893 -150.64502 20.39893 -152.20752 20.39893 -152.20752 c\r20.39893 -152.20752 20.94824 -152.20752 20.94824 -152.20752 c\r20.72656 -152.48486 20.55664 -152.75195 20.43848 -153.00781 c\r20.32031 -153.26367 20.26123 -153.54785 20.26123 -153.86035 c\r20.26123 -154.38672 20.41797 -154.79785 20.73145 -155.09473 c\r21.04395 -155.39111 21.5127 -155.53906 22.13574 -155.53906 c\r22.13574 -155.53906 25.37451 -155.53906 25.37451 -155.53906 c\rh\r23.79736 -167.40869 m\r24.31152 -167.40869 24.72607 -167.18359 25.04004 -166.73291 c\r25.35498 -166.28223 25.51221 -165.66553 25.51221 -164.8833 c\r25.51221 -164.44971 25.4707 -164.05664 25.38818 -163.70459 c\r25.30566 -163.35254 25.21387 -163.06934 25.11377 -162.85547 c\r25.11377 -162.85547 23.80273 -162.85547 23.80273 -162.85547 c\r23.80273 -162.85547 23.80273 -162.99805 23.80273 -162.99805 c\r23.8584 -163.07617 23.91992 -163.1665 23.98682 -163.26953 c\r24.05322 -163.37158 24.125 -163.5166 24.20215 -163.70459 c\r24.27002 -163.86621 24.3291 -164.0498 24.37793 -164.25488 c\r24.42627 -164.45996 24.45068 -164.6792 24.45068 -164.91309 c\r24.45068 -165.21924 24.41553 -165.44629 24.3457 -165.59326 c\r24.27637 -165.74023 24.17334 -165.81445 24.03711 -165.81445 c\r23.91553 -165.81445 23.82813 -165.771 23.77344 -165.68457 c\r23.71826 -165.59814 23.66602 -165.43311 23.61621 -165.19092 c\r23.58936 -165.0752 23.56104 -164.91895 23.5293 -164.72119 c\r23.49854 -164.52393 23.46094 -164.34424 23.4165 -164.18262 c\r23.29834 -163.74072 23.11426 -163.41357 22.86523 -163.19971 c\r22.61523 -162.98584 22.30371 -162.87939 21.93213 -162.87939 c\r21.45361 -162.87939 21.05566 -163.10107 20.73779 -163.54346 c\r20.41992 -163.98682 20.26123 -164.5918 20.26123 -165.35986 c\r20.26123 -165.72363 20.29932 -166.07227 20.37402 -166.40527 c\r20.44922 -166.73877 20.53027 -166.99902 20.61621 -167.18652 c\r20.61621 -167.18652 21.87402 -167.18652 21.87402 -167.18652 c\r21.87402 -167.18652 21.87402 -167.05273 21.87402 -167.05273 c\r21.71094 -166.82178 21.57861 -166.55859 21.47656 -166.26318 c\r21.37402 -165.96729 21.32275 -165.66797 21.32275 -165.36523 c\r21.32275 -165.11426 21.35889 -164.90283 21.43018 -164.73145 c\r21.50098 -164.55957 21.60156 -164.47363 21.73291 -164.47363 c\r21.85107 -164.47363 21.94141 -164.51221 22.00244 -164.59082 c\r22.06494 -164.66846 22.12695 -164.85156 22.18896 -165.14063 c\r22.22168 -165.29883 22.25342 -165.46973 22.28467 -165.65332 c\r22.31494 -165.83643 22.35498 -166.02051 22.40186 -166.20508 c\r22.51123 -166.61523 22.68359 -166.91797 22.91797 -167.11426 c\r23.15283 -167.31055 23.44629 -167.40869 23.79736 -167.40869 c\rh\r23.17871 -138.2168 m\r23.17871 -138.2168 23.17871 -134.63867 23.17871 -134.63867 c\r23.57178 -134.66211 23.87305 -134.80762 24.08154 -135.07617 c\r24.28955 -135.34375 24.39453 -135.73828 24.39453 -136.26074 c\r24.39453 -136.59082 24.33252 -136.91113 24.20801 -137.2207 c\r24.08496 -137.53125 23.95215 -137.77637 23.81055 -137.95605 c\r23.81055 -137.95605 23.81055 -138.12988 23.81055 -138.12988 c\r23.81055 -138.12988 25.09229 -138.12988 25.09229 -138.12988 c\r25.23682 -137.77637 25.34131 -137.44434 25.40625 -137.12988 c\r25.47119 -136.81836 25.50391 -136.4707 25.50391 -136.09277 c\r25.50391 -135.11426 25.28027 -134.36426 24.83154 -133.84277 c\r24.38232 -133.32031 23.74365 -133.06055 22.91455 -133.06055 c\r22.09375 -133.06055 21.44385 -133.30762 20.96484 -133.7998 c\r20.48486 -134.29395 20.24512 -134.9707 20.24512 -135.83008 c\r20.24512 -136.62207 20.44922 -137.21875 20.85791 -137.61719 c\r21.26709 -138.01758 21.85449 -138.2168 22.62109 -138.2168 c\r22.62109 -138.2168 23.17871 -138.2168 23.17871 -138.2168 c\rh\r22.88916 -149.52246 m\r23.70703 -149.52246 24.35156 -149.28857 24.82178 -148.82227 c\r25.29297 -148.35449 25.52832 -147.69824 25.52832 -146.85352 c\r25.52832 -146.00781 25.29297 -145.35254 24.82178 -144.88477 c\r24.35156 -144.41797 23.70703 -144.18457 22.88916 -144.18457 c\r22.06543 -144.18457 21.41846 -144.41895 20.94922 -144.88867 c\r20.47998 -145.35938 20.24512 -146.01465 20.24512 -146.85352 c\r20.24512 -147.7041 20.48145 -148.36133 20.9541 -148.82617 c\r21.42627 -149.29004 22.07129 -149.52246 22.88916 -149.52246 c\rh\r23.30176 -132.36816 m\r23.95166 -132.36816 24.47998 -132.09961 24.88721 -131.56055 c\r25.29297 -131.02051 25.49609 -130.28809 25.49609 -129.3623 c\r25.49609 -128.82813 25.44824 -128.36328 25.35205 -127.96387 c\r25.25635 -127.56738 25.13428 -127.19434 24.98633 -126.84766 c\r24.98633 -126.84766 23.40576 -126.84766 23.40576 -126.84766 c\r23.40576 -126.84766 23.40576 -127.03027 23.40576 -127.03027 c\r23.68652 -127.37305 23.90283 -127.75977 24.0542 -128.18555 c\r24.20508 -128.61328 24.28076 -129.02148 24.28076 -129.41406 c\r24.28076 -129.51563 24.27148 -129.64941 24.25342 -129.81445 c\r24.23633 -129.97852 24.20605 -130.1123 24.16504 -130.21777 c\r24.11133 -130.34375 24.04395 -130.44922 23.96436 -130.53223 c\r23.88428 -130.61426 23.76514 -130.65625 23.6084 -130.65625 c\r23.46289 -130.65625 23.33838 -130.5957 23.2334 -130.47656 c\r23.12842 -130.35547 23.04785 -130.17969 22.9917 -129.94922 c\r22.93311 -129.70605 22.87744 -129.44922 22.82568 -129.17871 c\r22.77441 -128.9082 22.70801 -128.65527 22.62842 -128.41895 c\r22.44824 -127.875 22.20361 -127.48242 21.89453 -127.24512 c\r21.58594 -127.00684 21.20264 -126.8877 20.74463 -126.8877 c\r20.13037 -126.8877 19.62842 -127.15625 19.23975 -127.69629 c\r18.85156 -128.23535 18.65674 -128.92871 18.65674 -129.77734 c\r18.65674 -130.20117 18.69922 -130.62207 18.7832 -131.03711 c\r18.86719 -131.45117 18.97266 -131.81055 19.09961 -132.11426 c\r19.09961 -132.11426 20.61816 -132.11426 20.61816 -132.11426 c\r20.61816 -132.11426 20.61816 -131.93652 20.61816 -131.93652 c\r20.40674 -131.67676 20.229 -131.3584 20.08691 -130.98047 c\r19.94385 -130.60352 19.87256 -130.21777 19.87256 -129.82422 c\r19.87256 -129.68457 19.88184 -129.54688 19.90088 -129.41016 c\r19.9209 -129.27148 19.95654 -129.13965 20.00977 -129.01367 c\r20.05371 -128.90039 20.12109 -128.80273 20.21094 -128.72266 c\r20.30078 -128.6416 20.40332 -128.60059 20.51855 -128.60059 c\r20.69287 -128.60059 20.82715 -128.66602 20.91992 -128.79688 c\r21.01318 -128.92578 21.09766 -129.17188 21.1748 -129.5332 c\r21.22461 -129.76953 21.27393 -129.99805 21.3208 -130.21582 c\r21.36816 -130.43457 21.43311 -130.66797 21.51563 -130.91992 c\r21.68164 -131.41504 21.90674 -131.7793 22.19189 -132.01563 c\r22.47705 -132.25098 22.84717 -132.36816 23.30176 -132.36816 c\rh\r25.37451 -161.70605 m\r25.37451 -161.70605 25.37451 -160.14307 25.37451 -160.14307 c\r25.37451 -160.14307 24.85596 -160.14307 24.85596 -160.14307 c\r25.08057 -159.87354 25.24609 -159.62158 25.35303 -159.38721 c\r25.4585 -159.15234 25.51221 -158.88086 25.51221 -158.57422 c\r25.51221 -157.97998 25.27881 -157.50488 24.8125 -157.14795 c\r24.34521 -156.7915 23.71631 -156.61328 22.92432 -156.61328 c\r22.50195 -156.61328 22.12793 -156.67383 21.80127 -156.79346 c\r21.4751 -156.91406 21.19531 -157.07861 20.96143 -157.28711 c\r20.73975 -157.48389 20.56787 -157.72314 20.44531 -158.00488 c\r20.32324 -158.28564 20.26123 -158.56689 20.26123 -158.84814 c\r20.26123 -159.14014 20.29297 -159.38037 20.35645 -159.56738 c\r20.41992 -159.75439 20.50098 -159.94629 20.59863 -160.14307 c\r20.59863 -160.14307 18.47852 -160.14307 18.47852 -160.14307 c\r18.47852 -160.14307 18.47852 -161.70605 18.47852 -161.70605 c\r18.47852 -161.70605 25.37451 -161.70605 25.37451 -161.70605 c\rh\rf\rQ\rq\r1 0 0 -1 0 0 cm\r1 -0.71973 m\r1 -0.71973 519.86133 -0.71973 519.86133 -0.71973 c\r519.86133 -0.71973 519.86133 -300 519.86133 -300 c\r519.86133 -300 1 -300 1 -300 c\r1 -300 1 -0.71973 1 -0.71973 c\rh\rW n\r1 1 1 rg\r0 i \r/GS0 gs\r451.01758 -167.875 m\r451.01758 -167.875 511.69336 -167.875 511.69336 -167.875 c\r511.69336 -167.875 511.69336 -125.99121 511.69336 -125.99121 c\r511.69336 -125.99121 451.01758 -125.99121 451.01758 -125.99121 c\r451.01758 -125.99121 451.01758 -167.875 451.01758 -167.875 c\rh\rf\r0 0 0 RG\r1 w 10 M 0 j 0 J []0 d \r451.01758 -167.875 m\r451.01758 -167.875 511.69336 -167.875 511.69336 -167.875 c\r511.69336 -167.875 511.69336 -125.99121 511.69336 -125.99121 c\r511.69336 -125.99121 451.01758 -125.99121 451.01758 -125.99121 c\r451.01758 -125.99121 451.01758 -167.875 451.01758 -167.875 c\rh\rS\rQ\rq\r1 0 0 -1 0 0 cm\r451.14746 -126.37109 m\r451.14746 -126.37109 511.56348 -126.37109 511.56348 -126.37109 c\r511.56348 -126.37109 511.56348 -167.74854 511.56348 -167.74854 c\r511.56348 -167.74854 451.14746 -167.74854 451.14746 -167.74854 c\r451.14746 -167.74854 451.14746 -126.37109 451.14746 -126.37109 c\rh\rW n\r0.60001 0.60001 1 rg\r0 i \r/GS0 gs\r454.12891 -163.56006 m\r454.12891 -163.56006 459.83398 -163.56006 459.83398 -163.56006 c\r459.83398 -163.56006 459.83398 -157.9751 459.83398 -157.9751 c\r459.83398 -157.9751 454.12891 -157.9751 454.12891 -157.9751 c\r454.12891 -157.9751 454.12891 -163.56006 454.12891 -163.56006 c\rh\rf\r0 0 0 RG\r4 w 10 M 0 j 0 J []0 d \r454.12891 -163.56006 m\r454.12891 -163.56006 459.83398 -163.56006 459.83398 -163.56006 c\r459.83398 -163.56006 459.83398 -157.9751 459.83398 -157.9751 c\r459.83398 -157.9751 454.12891 -157.9751 454.12891 -157.9751 c\r454.12891 -157.9751 454.12891 -163.56006 454.12891 -163.56006 c\rh\rS\r0 0 0 rg\r491.11133 -158.92383 m\r491.11133 -158.92383 491.11133 -161.57227 491.11133 -161.57227 c\r490.88867 -161.6709 490.68262 -161.74121 490.49121 -161.78369 c\r490.2998 -161.8252 490.11035 -161.84668 489.91992 -161.84668 c\r489.45996 -161.84668 489.09766 -161.6958 488.83398 -161.39404 c\r488.57031 -161.09229 488.43848 -160.6543 488.43848 -160.08057 c\r488.43848 -159.53613 488.53613 -159.12256 488.73145 -158.84131 c\r488.92676 -158.56006 489.25195 -158.41943 489.70508 -158.41943 c\r489.94922 -158.41943 490.19336 -158.46533 490.43848 -158.55664 c\r490.68262 -158.64746 490.90723 -158.77051 491.11133 -158.92383 c\rh\r491.94629 -158.14795 m\r491.94629 -157.32666 491.75586 -156.72314 491.37305 -156.33936 c\r490.99121 -155.95459 490.40332 -155.76221 489.6084 -155.76221 c\r489.34473 -155.76221 489.08887 -155.78027 488.83691 -155.81592 c\r488.58691 -155.85205 488.34082 -155.90332 488.09766 -155.96973 c\r488.09766 -155.96973 488.09766 -156.80127 488.09766 -156.80127 c\r488.09766 -156.80127 488.1416 -156.80127 488.1416 -156.80127 c\r488.27734 -156.74902 488.49414 -156.68408 488.79102 -156.60742 c\r489.08789 -156.53027 489.38379 -156.49219 489.67969 -156.49219 c\r489.96582 -156.49219 490.20117 -156.5249 490.3877 -156.5918 c\r490.57422 -156.6582 490.71973 -156.75098 490.82324 -156.86914 c\r490.92578 -156.98145 491.00098 -157.11816 491.0459 -157.27637 c\r491.08984 -157.43555 491.11133 -157.61328 491.11133 -157.81006 c\r491.11133 -157.81006 491.11133 -158.25195 491.11133 -158.25195 c\r490.86035 -158.05518 490.61914 -157.9082 490.38965 -157.81152 c\r490.16016 -157.71436 489.86719 -157.66602 489.5127 -157.66602 c\r488.91992 -157.66602 488.44922 -157.875 488.10059 -158.29346 c\r487.75293 -158.71191 487.57813 -159.30078 487.57813 -160.0625 c\r487.57813 -160.479 487.63867 -160.83887 487.75879 -161.14111 c\r487.87988 -161.44385 488.04297 -161.70508 488.25 -161.9248 c\r488.44238 -162.13037 488.67676 -162.29053 488.95215 -162.40479 c\r489.22754 -162.51904 489.50195 -162.57617 489.77344 -162.57617 c\r490.0625 -162.57617 490.30273 -162.54785 490.49707 -162.4917 c\r490.68945 -162.43506 490.89648 -162.34912 491.11133 -162.2334 c\r491.11133 -162.2334 491.16406 -162.44141 491.16406 -162.44141 c\r491.16406 -162.44141 491.94629 -162.44141 491.94629 -162.44141 c\r491.94629 -162.44141 491.94629 -158.14795 491.94629 -158.14795 c\rh\r485.84961 -160.56152 m\r485.84668 -160.98828 485.73438 -161.31836 485.51953 -161.55176 c\r485.30176 -161.78516 484.97168 -161.90186 484.52734 -161.90186 c\r484.08203 -161.90186 483.72656 -161.77344 483.46191 -161.51709 c\r483.19824 -161.26025 483.04883 -160.94189 483.01367 -160.56152 c\r483.01367 -160.56152 485.84961 -160.56152 485.84961 -160.56152 c\rh\r486.65918 -159.93457 m\r486.65918 -159.93457 483.01367 -159.93457 483.01367 -159.93457 c\r483.01367 -159.63721 483.05859 -159.37793 483.15039 -159.15674 c\r483.24219 -158.93604 483.36719 -158.75488 483.52734 -158.61328 c\r483.67969 -158.47461 483.8623 -158.37061 484.07422 -158.30176 c\r484.28516 -158.23193 484.51758 -158.19727 484.77246 -158.19727 c\r485.1084 -158.19727 485.44727 -158.26318 485.78906 -158.39502 c\r486.12988 -158.52734 486.37207 -158.65674 486.51758 -158.78467 c\r486.51758 -158.78467 486.5625 -158.78467 486.5625 -158.78467 c\r486.5625 -158.78467 486.5625 -157.89258 486.5625 -157.89258 c\r486.28125 -157.77637 485.99512 -157.6792 485.70313 -157.60059 c\r485.41016 -157.52295 485.10352 -157.4834 484.78223 -157.4834 c\r483.96094 -157.4834 483.32031 -157.70117 482.86133 -158.13623 c\r482.40039 -158.57129 482.1709 -159.18945 482.1709 -159.99072 c\r482.1709 -160.7832 482.39063 -161.41211 482.83203 -161.87744 c\r483.27246 -162.34326 483.85449 -162.57617 484.57324 -162.57617 c\r485.24121 -162.57617 485.75586 -162.38525 486.11719 -162.00342 c\r486.47754 -161.62207 486.65918 -161.07959 486.65918 -160.37744 c\r486.65918 -160.37744 486.65918 -159.93457 486.65918 -159.93457 c\rh\r480.37305 -160.05273 m\r480.37305 -160.63818 480.27148 -161.07471 480.06641 -161.36475 c\r479.86133 -161.65381 479.54688 -161.79883 479.12305 -161.79883 c\r478.88281 -161.79883 478.64063 -161.74854 478.39648 -161.64648 c\r478.1543 -161.54541 477.9209 -161.41211 477.69824 -161.24756 c\r477.69824 -161.24756 477.69824 -158.49854 477.69824 -158.49854 c\r477.93555 -158.39404 478.14063 -158.32324 478.31055 -158.28564 c\r478.48145 -158.24805 478.67383 -158.22949 478.8916 -158.22949 c\r479.35742 -158.22949 479.7207 -158.38281 479.98145 -158.68945 c\r480.24219 -158.99609 480.37305 -159.45068 480.37305 -160.05273 c\rh\r481.23145 -160.07666 m\r481.23145 -159.68359 481.17383 -159.32422 481.05957 -158.99854 c\r480.94238 -158.67285 480.78125 -158.39746 480.56934 -158.17188 c\r480.37402 -157.95752 480.14453 -157.79248 479.87793 -157.67529 c\r479.61328 -157.55811 479.33203 -157.49902 479.03613 -157.49902 c\r478.7793 -157.49902 478.54492 -157.52686 478.33691 -157.58154 c\r478.12891 -157.63623 477.91504 -157.72217 477.69824 -157.83789 c\r477.69824 -157.83789 477.69824 -155.80957 477.69824 -155.80957 c\r477.69824 -155.80957 476.86426 -155.80957 476.86426 -155.80957 c\r476.86426 -155.80957 476.86426 -162.44141 476.86426 -162.44141 c\r476.86426 -162.44141 477.69824 -162.44141 477.69824 -162.44141 c\r477.69824 -162.44141 477.69824 -161.93408 477.69824 -161.93408 c\r477.9209 -162.11621 478.1709 -162.26904 478.44727 -162.39209 c\r478.72461 -162.51465 479.02051 -162.57617 479.33398 -162.57617 c\r479.93262 -162.57617 480.39844 -162.35547 480.73242 -161.91455 c\r481.06543 -161.47314 481.23145 -160.86035 481.23145 -160.07666 c\rh\r475.28906 -163.25 m\r475.28906 -163.25 474.34277 -163.25 474.34277 -163.25 c\r474.34277 -163.25 474.34277 -164.09912 474.34277 -164.09912 c\r474.34277 -164.09912 475.28906 -164.09912 475.28906 -164.09912 c\r475.28906 -164.09912 475.28906 -163.25 475.28906 -163.25 c\rh\r475.2334 -157.47949 m\r475.2334 -156.91309 475.08496 -156.48486 474.78906 -156.19531 c\r474.49414 -155.90674 474.09863 -155.76221 473.60156 -155.76221 c\r473.4834 -155.76221 473.32715 -155.77344 473.13477 -155.79688 c\r472.94043 -155.81934 472.77832 -155.84863 472.64844 -155.8833 c\r472.64844 -155.8833 472.64844 -156.6582 472.64844 -156.6582 c\r472.64844 -156.6582 472.69238 -156.6582 472.69238 -156.6582 c\r472.77539 -156.62744 472.88672 -156.5918 473.02734 -156.55176 c\r473.16797 -156.51172 473.30469 -156.49219 473.43652 -156.49219 c\r473.65039 -156.49219 473.82129 -156.521 473.9502 -156.57861 c\r474.08008 -156.63672 474.17871 -156.72314 474.24414 -156.83887 c\r474.30859 -156.95459 474.35059 -157.09424 474.36914 -157.25732 c\r474.38867 -157.4209 474.39941 -157.62012 474.39941 -157.85449 c\r474.39941 -157.85449 474.39941 -161.75928 474.39941 -161.75928 c\r474.39941 -161.75928 473.36914 -161.75928 473.36914 -161.75928 c\r473.36914 -161.75928 473.36914 -162.44141 473.36914 -162.44141 c\r473.36914 -162.44141 475.2334 -162.44141 475.2334 -162.44141 c\r475.2334 -162.44141 475.2334 -157.47949 475.2334 -157.47949 c\rh\r471.59766 -160.03125 m\r471.59766 -160.61035 471.49902 -161.0498 471.30371 -161.34912 c\r471.10742 -161.64941 470.79199 -161.79883 470.35645 -161.79883 c\r470.1123 -161.79883 469.86621 -161.74756 469.61719 -161.64453 c\r469.36816 -161.54199 469.13672 -161.40967 468.92285 -161.24756 c\r468.92285 -161.24756 468.92285 -158.46729 468.92285 -158.46729 c\r469.16016 -158.36328 469.36523 -158.29102 469.53516 -158.25 c\r469.70508 -158.20947 469.89941 -158.18945 470.11621 -158.18945 c\r470.57813 -158.18945 470.94141 -158.33789 471.20313 -158.63477 c\r471.46582 -158.93164 471.59766 -159.39697 471.59766 -160.03125 c\rh\r472.45605 -160.05518 m\r472.45605 -159.64941 472.39746 -159.28516 472.28027 -158.96094 c\r472.16406 -158.63721 472.00586 -158.36523 471.80664 -158.14502 c\r471.59766 -157.91699 471.36621 -157.74561 471.11328 -157.63135 c\r470.8623 -157.5166 470.58496 -157.45996 470.28223 -157.45996 c\r470.00098 -157.45996 469.75586 -157.49219 469.54395 -157.55762 c\r469.33496 -157.62256 469.12695 -157.70996 468.92285 -157.81982 c\r468.92285 -157.81982 468.87012 -157.59473 468.87012 -157.59473 c\r468.87012 -157.59473 468.08887 -157.59473 468.08887 -157.59473 c\r468.08887 -157.59473 468.08887 -164.34521 468.08887 -164.34521 c\r468.08887 -164.34521 468.92285 -164.34521 468.92285 -164.34521 c\r468.92285 -164.34521 468.92285 -161.93359 468.92285 -161.93359 c\r469.15625 -162.12158 469.40527 -162.27637 469.66895 -162.396 c\r469.93359 -162.51563 470.22949 -162.57617 470.55859 -162.57617 c\r471.14551 -162.57617 471.60742 -162.35645 471.94727 -161.91699 c\r472.28516 -161.47656 472.45605 -160.85596 472.45605 -160.05518 c\rh\r466.43555 -157.59473 m\r466.43555 -157.59473 465.60156 -157.59473 465.60156 -157.59473 c\r465.60156 -157.59473 465.60156 -162.44141 465.60156 -162.44141 c\r465.60156 -162.44141 466.43555 -162.44141 466.43555 -162.44141 c\r466.43555 -162.44141 466.43555 -157.59473 466.43555 -157.59473 c\rh\r466.49414 -163.25 m\r466.49414 -163.25 465.54492 -163.25 465.54492 -163.25 c\r465.54492 -163.25 465.54492 -164.09912 465.54492 -164.09912 c\r465.54492 -164.09912 466.49414 -164.09912 466.49414 -164.09912 c\r466.49414 -164.09912 466.49414 -163.25 466.49414 -163.25 c\rh\r463.9502 -157.59473 m\r463.9502 -157.59473 463.11523 -157.59473 463.11523 -157.59473 c\r463.11523 -157.59473 463.11523 -164.34521 463.11523 -164.34521 c\r463.11523 -164.34521 463.9502 -164.34521 463.9502 -164.34521 c\r463.9502 -164.34521 463.9502 -157.59473 463.9502 -157.59473 c\rh\rf\r0.60001 0.2 0.39999 rg\r454.12891 -149.59863 m\r454.12891 -149.59863 459.83398 -149.59863 459.83398 -149.59863 c\r459.83398 -149.59863 459.83398 -144.01367 459.83398 -144.01367 c\r459.83398 -144.01367 454.12891 -144.01367 454.12891 -144.01367 c\r454.12891 -144.01367 454.12891 -149.59863 454.12891 -149.59863 c\rh\rf\r454.12891 -149.59863 m\r454.12891 -149.59863 459.83398 -149.59863 459.83398 -149.59863 c\r459.83398 -149.59863 459.83398 -144.01367 459.83398 -144.01367 c\r459.83398 -144.01367 454.12891 -144.01367 454.12891 -144.01367 c\r454.12891 -144.01367 454.12891 -149.59863 454.12891 -149.59863 c\rh\rS\r0 0 0 rg\r483.57129 -143.67676 m\r483.41504 -143.63574 483.24414 -143.60352 483.05957 -143.57715 c\r482.875 -143.55078 482.70996 -143.53809 482.56543 -143.53809 c\r482.06055 -143.53809 481.67676 -143.6709 481.41309 -143.9375 c\r481.15137 -144.2041 481.01953 -144.63086 481.01953 -145.21875 c\r481.01953 -145.21875 481.01953 -147.79785 481.01953 -147.79785 c\r481.01953 -147.79785 480.45996 -147.79785 480.45996 -147.79785 c\r480.45996 -147.79785 480.45996 -148.47949 480.45996 -148.47949 c\r480.45996 -148.47949 481.01953 -148.47949 481.01953 -148.47949 c\r481.01953 -148.47949 481.01953 -149.87646 481.01953 -149.87646 c\r481.01953 -149.87646 481.85352 -149.87646 481.85352 -149.87646 c\r481.85352 -149.87646 481.85352 -148.47949 481.85352 -148.47949 c\r481.85352 -148.47949 483.57129 -148.47949 483.57129 -148.47949 c\r483.57129 -148.47949 483.57129 -147.79785 483.57129 -147.79785 c\r483.57129 -147.79785 481.85352 -147.79785 481.85352 -147.79785 c\r481.85352 -147.79785 481.85352 -145.58594 481.85352 -145.58594 c\r481.85352 -145.33105 481.86035 -145.13184 481.87109 -144.98828 c\r481.88281 -144.84473 481.92383 -144.71094 481.99512 -144.58594 c\r482.06055 -144.4707 482.14844 -144.38574 482.26367 -144.33203 c\r482.37695 -144.27832 482.5498 -144.25195 482.7832 -144.25195 c\r482.91992 -144.25195 483.06055 -144.27148 483.20801 -144.31152 c\r483.35547 -144.35059 483.46191 -144.38379 483.52734 -144.41016 c\r483.52734 -144.41016 483.57129 -144.41016 483.57129 -144.41016 c\r483.57129 -144.41016 483.57129 -143.67676 483.57129 -143.67676 c\rh\r478.9248 -146.59961 m\r478.92188 -147.02637 478.81055 -147.35645 478.59375 -147.59082 c\r478.37695 -147.82422 478.04688 -147.94043 477.60352 -147.94043 c\r477.1582 -147.94043 476.80176 -147.8125 476.53809 -147.55566 c\r476.27344 -147.29883 476.12305 -146.98047 476.08789 -146.59961 c\r476.08789 -146.59961 478.9248 -146.59961 478.9248 -146.59961 c\rh\r479.73438 -145.97266 m\r479.73438 -145.97266 476.08789 -145.97266 476.08789 -145.97266 c\r476.08789 -145.67578 476.13477 -145.41602 476.22559 -145.19629 c\r476.31738 -144.97461 476.44336 -144.79395 476.60254 -144.65234 c\r476.75586 -144.51367 476.93848 -144.40918 477.14844 -144.33984 c\r477.36035 -144.27051 477.59277 -144.23633 477.84668 -144.23633 c\r478.18457 -144.23633 478.52246 -144.30176 478.86426 -144.43359 c\r479.20508 -144.56543 479.44824 -144.69531 479.59277 -144.82324 c\r479.59277 -144.82324 479.63672 -144.82324 479.63672 -144.82324 c\r479.63672 -144.82324 479.63672 -143.93066 479.63672 -143.93066 c\r479.35742 -143.81543 479.07031 -143.71777 478.77734 -143.63965 c\r478.48535 -143.56152 478.17871 -143.52246 477.8584 -143.52246 c\r477.03711 -143.52246 476.39648 -143.73926 475.93555 -144.1748 c\r475.47559 -144.61035 475.24512 -145.22852 475.24512 -146.0293 c\r475.24512 -146.82227 475.46582 -147.45117 475.90723 -147.91602 c\r476.34766 -148.38184 476.92969 -148.61426 477.64844 -148.61426 c\r478.31641 -148.61426 478.83105 -148.42383 479.19238 -148.04199 c\r479.55371 -147.66016 479.73438 -147.11816 479.73438 -146.41602 c\r479.73438 -146.41602 479.73438 -145.97266 479.73438 -145.97266 c\rh\r473.51465 -146.59961 m\r473.51172 -147.02637 473.40234 -147.35645 473.18457 -147.59082 c\r472.96777 -147.82422 472.63867 -147.94043 472.19531 -147.94043 c\r471.74902 -147.94043 471.39258 -147.8125 471.12891 -147.55566 c\r470.86523 -147.29883 470.71484 -146.98047 470.67871 -146.59961 c\r470.67871 -146.59961 473.51465 -146.59961 473.51465 -146.59961 c\rh\r474.32617 -145.97266 m\r474.32617 -145.97266 470.67871 -145.97266 470.67871 -145.97266 c\r470.67871 -145.67578 470.72461 -145.41602 470.81641 -145.19629 c\r470.9082 -144.97461 471.03418 -144.79395 471.19238 -144.65234 c\r471.34668 -144.51367 471.5293 -144.40918 471.74023 -144.33984 c\r471.95117 -144.27051 472.18457 -144.23633 472.43848 -144.23633 c\r472.77441 -144.23633 473.11426 -144.30176 473.45508 -144.43359 c\r473.7959 -144.56543 474.03906 -144.69531 474.18359 -144.82324 c\r474.18359 -144.82324 474.22754 -144.82324 474.22754 -144.82324 c\r474.22754 -144.82324 474.22754 -143.93066 474.22754 -143.93066 c\r473.94727 -143.81543 473.66113 -143.71777 473.36914 -143.63965 c\r473.07813 -143.56152 472.77051 -143.52246 472.44824 -143.52246 c\r471.62695 -143.52246 470.9873 -143.73926 470.52734 -144.1748 c\r470.06738 -144.61035 469.83594 -145.22852 469.83594 -146.0293 c\r469.83594 -146.82227 470.05664 -147.45117 470.49902 -147.91602 c\r470.93945 -148.38184 471.51953 -148.61426 472.24121 -148.61426 c\r472.90723 -148.61426 473.4209 -148.42383 473.7832 -148.04199 c\r474.14551 -147.66016 474.32617 -147.11816 474.32617 -146.41602 c\r474.32617 -146.41602 474.32617 -145.97266 474.32617 -145.97266 c\rh\r469.39648 -147.5918 m\r469.39648 -147.5918 469.35254 -147.5918 469.35254 -147.5918 c\r469.22852 -147.61914 469.1084 -147.63965 468.99219 -147.65234 c\r468.87598 -147.66406 468.7373 -147.6709 468.5791 -147.6709 c\r468.32129 -147.6709 468.07422 -147.61523 467.83496 -147.50391 c\r467.5957 -147.39258 467.36523 -147.24902 467.14453 -147.07227 c\r467.14453 -147.07227 467.14453 -143.63281 467.14453 -143.63281 c\r467.14453 -143.63281 466.31055 -143.63281 466.31055 -143.63281 c\r466.31055 -143.63281 466.31055 -148.47949 466.31055 -148.47949 c\r466.31055 -148.47949 467.14453 -148.47949 467.14453 -148.47949 c\r467.14453 -148.47949 467.14453 -147.76367 467.14453 -147.76367 c\r467.47461 -148.02441 467.76563 -148.20898 468.01855 -148.31738 c\r468.27051 -148.42578 468.52734 -148.47949 468.79004 -148.47949 c\r468.93457 -148.47949 469.04004 -148.47656 469.10449 -148.46875 c\r469.16895 -148.46191 469.2666 -148.44824 469.39648 -148.42773 c\r469.39648 -148.42773 469.39648 -147.5918 469.39648 -147.5918 c\rh\r465.77246 -149.59082 m\r465.77246 -149.59082 465.72852 -149.59082 465.72852 -149.59082 c\r465.63672 -149.61621 465.51758 -149.64258 465.36914 -149.66943 c\r465.22266 -149.69629 465.09375 -149.70947 464.98145 -149.70947 c\r464.62305 -149.70947 464.36523 -149.63281 464.20508 -149.47852 c\r464.04395 -149.32471 463.96289 -149.04639 463.96289 -148.64453 c\r463.96289 -148.64453 463.96289 -148.47949 463.96289 -148.47949 c\r463.96289 -148.47949 465.46484 -148.47949 465.46484 -148.47949 c\r465.46484 -148.47949 465.46484 -147.79785 465.46484 -147.79785 c\r465.46484 -147.79785 463.99023 -147.79785 463.99023 -147.79785 c\r463.99023 -147.79785 463.99023 -143.63281 463.99023 -143.63281 c\r463.99023 -143.63281 463.15527 -143.63281 463.15527 -143.63281 c\r463.15527 -143.63281 463.15527 -147.79785 463.15527 -147.79785 c\r463.15527 -147.79785 462.59668 -147.79785 462.59668 -147.79785 c\r462.59668 -147.79785 462.59668 -148.47949 462.59668 -148.47949 c\r462.59668 -148.47949 463.15527 -148.47949 463.15527 -148.47949 c\r463.15527 -148.47949 463.15527 -148.63965 463.15527 -148.63965 c\r463.15527 -149.21436 463.30176 -149.65527 463.59375 -149.9624 c\r463.88574 -150.27002 464.30859 -150.42334 464.85938 -150.42334 c\r465.04688 -150.42334 465.21387 -150.41504 465.36328 -150.39746 c\r465.51172 -150.37988 465.64746 -150.35986 465.77246 -150.33643 c\r465.77246 -150.33643 465.77246 -149.59082 465.77246 -149.59082 c\rh\rf\r498.87988 -146.59961 m\r498.87695 -147.02637 498.7666 -147.35645 498.5498 -147.59082 c\r498.33301 -147.82422 498.00293 -147.94043 497.55957 -147.94043 c\r497.11328 -147.94043 496.75781 -147.8125 496.49316 -147.55566 c\r496.22949 -147.29883 496.0791 -146.98047 496.04395 -146.59961 c\r496.04395 -146.59961 498.87988 -146.59961 498.87988 -146.59961 c\rh\r499.68945 -145.97266 m\r499.68945 -145.97266 496.04395 -145.97266 496.04395 -145.97266 c\r496.04395 -145.67578 496.08984 -145.41602 496.18164 -145.19629 c\r496.27344 -144.97461 496.39746 -144.79395 496.55762 -144.65234 c\r496.71191 -144.51367 496.89355 -144.40918 497.10547 -144.33984 c\r497.31641 -144.27051 497.54883 -144.23633 497.80371 -144.23633 c\r498.14063 -144.23633 498.47852 -144.30176 498.82031 -144.43359 c\r499.16016 -144.56543 499.4043 -144.69531 499.54883 -144.82324 c\r499.54883 -144.82324 499.59277 -144.82324 499.59277 -144.82324 c\r499.59277 -144.82324 499.59277 -143.93066 499.59277 -143.93066 c\r499.3125 -143.81543 499.02637 -143.71777 498.73438 -143.63965 c\r498.44141 -143.56152 498.13477 -143.52246 497.81348 -143.52246 c\r496.99316 -143.52246 496.35156 -143.73926 495.8916 -144.1748 c\r495.43066 -144.61035 495.20117 -145.22852 495.20117 -146.0293 c\r495.20117 -146.82227 495.42188 -147.45117 495.86328 -147.91602 c\r496.30371 -148.38184 496.88477 -148.61426 497.60449 -148.61426 c\r498.27246 -148.61426 498.78613 -148.42383 499.14844 -148.04199 c\r499.50879 -147.66016 499.68945 -147.11816 499.68945 -146.41602 c\r499.68945 -146.41602 499.68945 -145.97266 499.68945 -145.97266 c\rh\r493.4043 -146.0918 m\r493.4043 -146.67676 493.30078 -147.11328 493.09668 -147.40332 c\r492.89258 -147.69238 492.57813 -147.83789 492.15332 -147.83789 c\r491.91406 -147.83789 491.67188 -147.78711 491.42871 -147.68555 c\r491.18555 -147.58398 490.95313 -147.45117 490.73047 -147.28613 c\r490.73047 -147.28613 490.73047 -144.53711 490.73047 -144.53711 c\r490.96777 -144.43262 491.17188 -144.36133 491.3418 -144.32422 c\r491.5127 -144.28613 491.70605 -144.26758 491.92285 -144.26758 c\r492.38867 -144.26758 492.75195 -144.4209 493.01172 -144.72754 c\r493.27441 -145.03516 493.4043 -145.48926 493.4043 -146.0918 c\rh\r494.2627 -146.11523 m\r494.2627 -145.72168 494.20605 -145.3623 494.08984 -145.03711 c\r493.97461 -144.71191 493.81055 -144.43652 493.60059 -144.21094 c\r493.40625 -143.99707 493.1748 -143.83105 492.91016 -143.71387 c\r492.64453 -143.59668 492.36426 -143.53809 492.06836 -143.53809 c\r491.81055 -143.53809 491.57617 -143.56543 491.36719 -143.62012 c\r491.1582 -143.67578 490.94629 -143.76074 490.73047 -143.87598 c\r490.73047 -143.87598 490.73047 -141.84863 490.73047 -141.84863 c\r490.73047 -141.84863 489.89551 -141.84863 489.89551 -141.84863 c\r489.89551 -141.84863 489.89551 -148.47949 489.89551 -148.47949 c\r489.89551 -148.47949 490.73047 -148.47949 490.73047 -148.47949 c\r490.73047 -148.47949 490.73047 -147.97266 490.73047 -147.97266 c\r490.95215 -148.15527 491.20117 -148.30762 491.47852 -148.43066 c\r491.75586 -148.55273 492.05176 -148.61426 492.36523 -148.61426 c\r492.96387 -148.61426 493.42969 -148.39453 493.76367 -147.95313 c\r494.09668 -147.51172 494.2627 -146.89941 494.2627 -146.11523 c\rh\r488.81055 -148.47949 m\r488.81055 -148.47949 485.91504 -141.84863 485.91504 -141.84863 c\r485.91504 -141.84863 485.02832 -141.84863 485.02832 -141.84863 c\r485.02832 -141.84863 485.94727 -143.86914 485.94727 -143.86914 c\r485.94727 -143.86914 483.97168 -148.47949 483.97168 -148.47949 c\r483.97168 -148.47949 484.87695 -148.47949 484.87695 -148.47949 c\r484.87695 -148.47949 486.40039 -144.8877 486.40039 -144.8877 c\r486.40039 -144.8877 487.9375 -148.47949 487.9375 -148.47949 c\r487.9375 -148.47949 488.81055 -148.47949 488.81055 -148.47949 c\rh\rf\r1 1 0.8 rg\r454.12891 -135.63672 m\r454.12891 -135.63672 459.83398 -135.63672 459.83398 -135.63672 c\r459.83398 -135.63672 459.83398 -130.05273 459.83398 -130.05273 c\r459.83398 -130.05273 454.12891 -130.05273 454.12891 -130.05273 c\r454.12891 -130.05273 454.12891 -135.63672 454.12891 -135.63672 c\rh\rf\r454.12891 -135.63672 m\r454.12891 -135.63672 459.83398 -135.63672 459.83398 -135.63672 c\r459.83398 -135.63672 459.83398 -130.05273 459.83398 -130.05273 c\r459.83398 -130.05273 454.12891 -130.05273 454.12891 -130.05273 c\r454.12891 -130.05273 454.12891 -135.63672 454.12891 -135.63672 c\rh\rS\r0 0 0 rg\r507.63477 -129.67285 m\r507.63477 -129.67285 506.54199 -129.67285 506.54199 -129.67285 c\r506.54199 -129.67285 504.55176 -131.79395 504.55176 -131.79395 c\r504.55176 -131.79395 504.01367 -131.29004 504.01367 -131.29004 c\r504.01367 -131.29004 504.01367 -129.67285 504.01367 -129.67285 c\r504.01367 -129.67285 503.17773 -129.67285 503.17773 -129.67285 c\r503.17773 -129.67285 503.17773 -136.42285 503.17773 -136.42285 c\r503.17773 -136.42285 504.01367 -136.42285 504.01367 -136.42285 c\r504.01367 -136.42285 504.01367 -132.0918 504.01367 -132.0918 c\r504.01367 -132.0918 506.41602 -134.51855 506.41602 -134.51855 c\r506.41602 -134.51855 507.46484 -134.51855 507.46484 -134.51855 c\r507.46484 -134.51855 505.16699 -132.2793 505.16699 -132.2793 c\r505.16699 -132.2793 507.63477 -129.67285 507.63477 -129.67285 c\rh\r502.07324 -129.97168 m\r501.79492 -129.8418 501.53125 -129.74023 501.28223 -129.66797 c\r501.0332 -129.59668 500.76758 -129.56055 500.4873 -129.56055 c\r500.12988 -129.56055 499.80273 -129.6123 499.50391 -129.71484 c\r499.20703 -129.81738 498.95117 -129.97266 498.73828 -130.18066 c\r498.52344 -130.38965 498.35547 -130.65234 498.23828 -130.97168 c\r498.12012 -131.29004 498.06055 -131.66211 498.06055 -132.08594 c\r498.06055 -132.87891 498.2832 -133.50195 498.72852 -133.95313 c\r499.17188 -134.4043 499.75879 -134.63086 500.4873 -134.63086 c\r500.76953 -134.63086 501.04883 -134.59082 501.32227 -134.5127 c\r501.5957 -134.43457 501.8457 -134.33887 502.07324 -134.22656 c\r502.07324 -134.22656 502.07324 -133.32031 502.07324 -133.32031 c\r502.07324 -133.32031 502.02832 -133.32031 502.02832 -133.32031 c\r501.77344 -133.51172 501.51172 -133.65918 501.24121 -133.76172 c\r500.9707 -133.86426 500.70703 -133.91602 500.4502 -133.91602 c\r499.97656 -133.91602 499.60352 -133.76074 499.33008 -133.45117 c\r499.05762 -133.14063 498.91992 -132.68652 498.91992 -132.08594 c\r498.91992 -131.50488 499.05469 -131.05664 499.32129 -130.74414 c\r499.58887 -130.43066 499.96484 -130.27441 500.4502 -130.27441 c\r500.61816 -130.27441 500.78906 -130.29688 500.96484 -130.33887 c\r501.13867 -130.38086 501.29492 -130.43652 501.43457 -130.50586 c\r501.55469 -130.56445 501.66992 -130.62891 501.77441 -130.69629 c\r501.88086 -130.76367 501.96582 -130.82129 502.02832 -130.87012 c\r502.02832 -130.87012 502.07324 -130.87012 502.07324 -130.87012 c\r502.07324 -130.87012 502.07324 -129.97168 502.07324 -129.97168 c\rh\r495.96973 -130.8623 m\r495.96973 -130.8623 495.96973 -132.21777 495.96973 -132.21777 c\r495.71777 -132.20313 495.41895 -132.18262 495.07715 -132.15332 c\r494.7334 -132.12402 494.46484 -132.08105 494.26367 -132.02637 c\r494.02637 -131.95898 493.83301 -131.85645 493.68652 -131.71484 c\r493.54004 -131.57324 493.46582 -131.37891 493.46582 -131.13281 c\r493.46582 -130.85352 493.55176 -130.64355 493.72168 -130.50195 c\r493.8916 -130.36035 494.15234 -130.29004 494.50195 -130.29004 c\r494.79395 -130.29004 495.05859 -130.3457 495.2998 -130.45898 c\r495.54102 -130.57031 495.76465 -130.70508 495.96973 -130.8623 c\rh\r496.80469 -129.67285 m\r496.80469 -129.67285 495.96973 -129.67285 495.96973 -129.67285 c\r495.96973 -129.67285 495.96973 -130.18945 495.96973 -130.18945 c\r495.89551 -130.13965 495.7959 -130.07031 495.67285 -129.98242 c\r495.54688 -129.89355 495.4248 -129.82324 495.30859 -129.77148 c\r495.16992 -129.70605 495.00977 -129.64941 494.83203 -129.60449 c\r494.65234 -129.55859 494.44043 -129.53613 494.2002 -129.53613 c\r493.75586 -129.53613 493.37891 -129.68164 493.07031 -129.97168 c\r492.76172 -130.26172 492.60742 -130.62988 492.60742 -131.0791 c\r492.60742 -131.44727 492.6875 -131.74414 492.84766 -131.97168 c\r493.00781 -132.19922 493.2373 -132.37695 493.53418 -132.50684 c\r493.83398 -132.63672 494.19434 -132.72559 494.61523 -132.77246 c\r495.03613 -132.81836 495.48828 -132.85352 495.96973 -132.87695 c\r495.96973 -132.87695 495.96973 -133.00293 495.96973 -133.00293 c\r495.96973 -133.18945 495.93652 -133.34375 495.87012 -133.46484 c\r495.80469 -133.58691 495.70898 -133.68457 495.58594 -133.75391 c\r495.46875 -133.82031 495.32715 -133.86621 495.16309 -133.88867 c\r494.99805 -133.91113 494.8252 -133.92383 494.64648 -133.92383 c\r494.42871 -133.92383 494.18555 -133.89453 493.91895 -133.83789 c\r493.65039 -133.78125 493.37402 -133.69922 493.08789 -133.5918 c\r493.08789 -133.5918 493.04492 -133.5918 493.04492 -133.5918 c\r493.04492 -133.5918 493.04492 -134.41797 493.04492 -134.41797 c\r493.20703 -134.45996 493.44238 -134.50879 493.74707 -134.56055 c\r494.05469 -134.61133 494.35645 -134.6377 494.65527 -134.6377 c\r495.00195 -134.6377 495.30664 -134.60938 495.56348 -134.55273 c\r495.82227 -134.49609 496.04492 -134.40039 496.2334 -134.26465 c\r496.41895 -134.13086 496.56055 -133.95898 496.65918 -133.74805 c\r496.75586 -133.53613 496.80469 -133.27539 496.80469 -132.96191 c\r496.80469 -132.96191 496.80469 -129.67285 496.80469 -129.67285 c\rh\r490.81055 -132.13086 m\r490.81055 -132.71582 490.70801 -133.15234 490.50293 -133.44238 c\r490.29883 -133.73145 489.98438 -133.87598 489.56055 -133.87598 c\r489.31934 -133.87598 489.07813 -133.8252 488.83398 -133.72363 c\r488.5918 -133.62207 488.3584 -133.49023 488.13574 -133.3252 c\r488.13574 -133.3252 488.13574 -130.5752 488.13574 -130.5752 c\r488.37305 -130.47168 488.57715 -130.40039 488.74707 -130.3623 c\r488.91797 -130.3252 489.11133 -130.30664 489.32813 -130.30664 c\r489.79395 -130.30664 490.15723 -130.45996 490.41895 -130.76758 c\r490.67969 -131.07324 490.81055 -131.52734 490.81055 -132.13086 c\rh\r491.66895 -132.15332 m\r491.66895 -131.76074 491.61133 -131.40137 491.49609 -131.0752 c\r491.37988 -130.75098 491.21777 -130.47363 491.00684 -130.24902 c\r490.81152 -130.03516 490.58105 -129.86914 490.31543 -129.75293 c\r490.0498 -129.63574 489.76953 -129.57617 489.47363 -129.57617 c\r489.2168 -129.57617 488.98242 -129.60449 488.77441 -129.65918 c\r488.56445 -129.71387 488.35254 -129.7998 488.13574 -129.91504 c\r488.13574 -129.91504 488.13574 -127.8877 488.13574 -127.8877 c\r488.13574 -127.8877 487.30078 -127.8877 487.30078 -127.8877 c\r487.30078 -127.8877 487.30078 -134.51855 487.30078 -134.51855 c\r487.30078 -134.51855 488.13574 -134.51855 488.13574 -134.51855 c\r488.13574 -134.51855 488.13574 -134.01074 488.13574 -134.01074 c\r488.3584 -134.19336 488.60645 -134.3457 488.88477 -134.46973 c\r489.16211 -134.5918 489.45801 -134.65332 489.77051 -134.65332 c\r490.36914 -134.65332 490.83496 -134.43164 491.16992 -133.99219 c\r491.50293 -133.5498 491.66895 -132.93848 491.66895 -132.15332 c\rh\r485.7998 -131.92383 m\r486.00879 -131.70898 486.11426 -131.42676 486.11426 -131.07324 c\r486.11426 -130.63086 485.92773 -130.26953 485.55273 -129.98535 c\r485.17773 -129.70215 484.66699 -129.56055 484.01953 -129.56055 c\r483.6543 -129.56055 483.31641 -129.60352 483.01172 -129.68945 c\r482.7041 -129.77344 482.44824 -129.86816 482.24023 -129.96875 c\r482.24023 -129.96875 482.24023 -130.88477 482.24023 -130.88477 c\r482.24023 -130.88477 482.28516 -130.88477 482.28516 -130.88477 c\r482.54785 -130.68848 482.83984 -130.53223 483.16211 -130.41602 c\r483.48242 -130.30078 483.79199 -130.24219 484.08594 -130.24219 c\r484.45215 -130.24219 484.73828 -130.30176 484.94434 -130.41797 c\r485.15234 -130.53516 485.25488 -130.71875 485.25488 -130.96973 c\r485.25488 -131.16016 485.19922 -131.30469 485.08789 -131.40332 c\r484.97461 -131.50098 484.75879 -131.58594 484.44238 -131.6543 c\r484.32324 -131.68066 484.16992 -131.71191 483.97852 -131.74609 c\r483.78906 -131.78027 483.61621 -131.81934 483.45898 -131.8584 c\r483.02539 -131.97168 482.71875 -132.13672 482.53711 -132.35449 c\r482.35645 -132.57324 482.26563 -132.8418 482.26563 -133.15918 c\r482.26563 -133.35742 482.30762 -133.5459 482.3916 -133.72363 c\r482.47559 -133.89941 482.60352 -134.05566 482.77539 -134.19531 c\r482.94043 -134.33105 483.15137 -134.43848 483.40625 -134.51855 c\r483.66309 -134.59766 483.94922 -134.6377 484.26563 -134.6377 c\r484.56055 -134.6377 484.86133 -134.60156 485.16309 -134.53125 c\r485.4668 -134.46094 485.71875 -134.37402 485.91992 -134.27344 c\r485.91992 -134.27344 485.91992 -133.40039 485.91992 -133.40039 c\r485.91992 -133.40039 485.875 -133.40039 485.875 -133.40039 c\r485.66309 -133.55664 485.4043 -133.6875 485.10156 -133.79395 c\r484.79688 -133.90137 484.5 -133.95508 484.20703 -133.95508 c\r483.90332 -133.95508 483.64648 -133.89746 483.43848 -133.78223 c\r483.22754 -133.66797 483.12402 -133.49512 483.12402 -133.2666 c\r483.12402 -133.06836 483.1875 -132.91797 483.31348 -132.81641 c\r483.43848 -132.71582 483.63867 -132.63281 483.91504 -132.56934 c\r484.06836 -132.53613 484.24121 -132.50098 484.43066 -132.46582 c\r484.62109 -132.43066 484.7793 -132.39941 484.90723 -132.37012 c\r485.29297 -132.2832 485.59082 -132.13477 485.7998 -131.92383 c\r485.7998 -131.92383 485.7998 -131.92383 485.7998 -131.92383 c\rh\r480.96289 -129.67285 m\r480.96289 -129.67285 480.12793 -129.67285 480.12793 -129.67285 c\r480.12793 -129.67285 480.12793 -132.43164 480.12793 -132.43164 c\r480.12793 -132.63867 480.11719 -132.84082 480.09863 -133.03418 c\r480.08008 -133.22754 480.03906 -133.38281 479.97754 -133.49805 c\r479.90918 -133.62207 479.8125 -133.71777 479.68555 -133.78125 c\r479.55859 -133.84473 479.375 -133.87598 479.13672 -133.87598 c\r478.90332 -133.87598 478.66992 -133.81836 478.43652 -133.70508 c\r478.20508 -133.58984 477.97168 -133.44434 477.73828 -133.26953 c\r477.74707 -133.20215 477.75391 -133.12402 477.76172 -133.03711 c\r477.76758 -132.94922 477.76953 -132.86133 477.76953 -132.77441 c\r477.76953 -132.77441 477.76953 -129.67285 477.76953 -129.67285 c\r477.76953 -129.67285 476.93457 -129.67285 476.93457 -129.67285 c\r476.93457 -129.67285 476.93457 -132.43164 476.93457 -132.43164 c\r476.93457 -132.64551 476.92578 -132.84863 476.90625 -133.04102 c\r476.8877 -133.23438 476.84766 -133.38672 476.78516 -133.50293 c\r476.7168 -133.62793 476.61914 -133.7207 476.49219 -133.7832 c\r476.36523 -133.8457 476.18164 -133.87598 475.94336 -133.87598 c\r475.7168 -133.87598 475.48926 -133.82031 475.26074 -133.71094 c\r475.03223 -133.60156 474.80469 -133.46094 474.57813 -133.29004 c\r474.57813 -133.29004 474.57813 -129.67285 474.57813 -129.67285 c\r474.57813 -129.67285 473.74219 -129.67285 473.74219 -129.67285 c\r473.74219 -129.67285 473.74219 -134.51855 473.74219 -134.51855 c\r473.74219 -134.51855 474.57813 -134.51855 474.57813 -134.51855 c\r474.57813 -134.51855 474.57813 -133.98047 474.57813 -133.98047 c\r474.83789 -134.19238 475.0957 -134.35645 475.35449 -134.47559 c\r475.6123 -134.59375 475.8877 -134.65332 476.17969 -134.65332 c\r476.51758 -134.65332 476.80176 -134.58398 477.03711 -134.44434 c\r477.27148 -134.30566 477.44629 -134.11426 477.56152 -133.86816 c\r477.89844 -134.14453 478.20508 -134.3457 478.48242 -134.46973 c\r478.75977 -134.59082 479.05566 -134.65332 479.37305 -134.65332 c\r479.91504 -134.65332 480.31641 -134.49219 480.57422 -134.16992 c\r480.83301 -133.84766 480.96289 -133.39746 480.96289 -132.81836 c\r480.96289 -132.81836 480.96289 -129.67285 480.96289 -129.67285 c\rh\r471.59766 -132.1084 m\r471.59766 -132.6875 471.49902 -133.12695 471.30371 -133.42578 c\r471.10742 -133.72559 470.79199 -133.87598 470.35645 -133.87598 c\r470.1123 -133.87598 469.86621 -133.8252 469.61719 -133.72168 c\r469.36816 -133.61914 469.13672 -133.48633 468.92285 -133.3252 c\r468.92285 -133.3252 468.92285 -130.54395 468.92285 -130.54395 c\r469.16016 -130.44141 469.36523 -130.36914 469.53516 -130.32715 c\r469.70508 -130.28711 469.89941 -130.26758 470.11621 -130.26758 c\r470.57813 -130.26758 470.94141 -130.41504 471.20313 -130.71191 c\r471.46582 -131.00879 471.59766 -131.47363 471.59766 -132.1084 c\rh\r472.45605 -132.13281 m\r472.45605 -131.72656 472.39746 -131.3623 472.28027 -131.03809 c\r472.16406 -130.71387 472.00586 -130.44336 471.80664 -130.22168 c\r471.59766 -129.99512 471.36621 -129.82324 471.11328 -129.70801 c\r470.8623 -129.59375 470.58496 -129.53613 470.28223 -129.53613 c\r470.00098 -129.53613 469.75586 -129.56934 469.54395 -129.63574 c\r469.33496 -129.69922 469.12695 -129.78711 468.92285 -129.89746 c\r468.92285 -129.89746 468.87012 -129.67285 468.87012 -129.67285 c\r468.87012 -129.67285 468.08887 -129.67285 468.08887 -129.67285 c\r468.08887 -129.67285 468.08887 -136.42285 468.08887 -136.42285 c\r468.08887 -136.42285 468.92285 -136.42285 468.92285 -136.42285 c\r468.92285 -136.42285 468.92285 -134.01074 468.92285 -134.01074 c\r469.15625 -134.19824 469.40527 -134.35352 469.66895 -134.47363 c\r469.93359 -134.59277 470.22949 -134.65332 470.55859 -134.65332 c\r471.14551 -134.65332 471.60742 -134.43457 471.94727 -133.99414 c\r472.28516 -133.55371 472.45605 -132.93359 472.45605 -132.13281 c\rh\r466.43555 -129.67285 m\r466.43555 -129.67285 465.60156 -129.67285 465.60156 -129.67285 c\r465.60156 -129.67285 465.60156 -134.51855 465.60156 -134.51855 c\r465.60156 -134.51855 466.43555 -134.51855 466.43555 -134.51855 c\r466.43555 -134.51855 466.43555 -129.67285 466.43555 -129.67285 c\rh\r466.49414 -135.32715 m\r466.49414 -135.32715 465.54492 -135.32715 465.54492 -135.32715 c\r465.54492 -135.32715 465.54492 -136.17676 465.54492 -136.17676 c\r465.54492 -136.17676 466.49414 -136.17676 466.49414 -136.17676 c\r466.49414 -136.17676 466.49414 -135.32715 466.49414 -135.32715 c\rh\r463.9502 -129.67285 m\r463.9502 -129.67285 463.11523 -129.67285 463.11523 -129.67285 c\r463.11523 -129.67285 463.11523 -136.42285 463.11523 -136.42285 c\r463.11523 -136.42285 463.9502 -136.42285 463.9502 -136.42285 c\r463.9502 -136.42285 463.9502 -129.67285 463.9502 -129.67285 c\rh\rf\rQ\rq\r1 0 0 -1 0 0 cm\r1.25928 -0.97363 m\r1.25928 -0.97363 519.60156 -0.97363 519.60156 -0.97363 c\r519.60156 -0.97363 519.60156 -299.74658 519.60156 -299.74658 c\r519.60156 -299.74658 1.25928 -299.74658 1.25928 -299.74658 c\r1.25928 -299.74658 1.25928 -0.97363 1.25928 -0.97363 c\rh\rW n\r0 0 0 RG\r0 i 1 w 10 M 0 j 0 J []0 d \r/GS0 gs\r1.38965 -299.61914 m\r1.38965 -299.61914 519.47266 -299.61914 519.47266 -299.61914 c\r519.47266 -299.61914 519.47266 -1.10059 519.47266 -1.10059 c\r519.47266 -1.10059 1.38965 -1.10059 1.38965 -1.10059 c\r1.38965 -1.10059 1.38965 -299.61914 1.38965 -299.61914 c\rh\rS\rEMC \rQ\r\rendstream\rendobj\r81 0 obj<</Length 20080/Type/Metadata/Subtype/XML>>stream\r
-<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
-<?adobe-xap-filters esc="CRLF"?>\r
-<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>\r
-<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>\r
-<rdf:Description rdf:about='uuid:7a069029-7a5e-11d8-b649-000a956e58ec' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='Mac OS X 10.3.3 Quartz PDFContext'></rdf:Description>\r
-<rdf:Description rdf:about='uuid:7a069029-7a5e-11d8-b649-000a956e58ec' xmlns:xap='http://ns.adobe.com/xap/1.0/'\r
- xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/' xap:ModifyDate='2004-03-20T03:05:20-08:00' xap:CreateDate='2004-03-20T03:00:43-08:00' xap:CreatorTool='Excel' xap:MetadataDate='2004-03-20T03:05:20-08:00'><xap:Thumbnails><rdf:Alt><rdf:li rdf:parseType='Resource'><xapGImg:format>JPEG</xapGImg:format><xapGImg:width>256</xapGImg:width><xapGImg:height>148</xapGImg:height><xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAlAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7Z5D8h+Rp/I3l2efy7pk&#xA;s0umWbyyvZ27MzNboWZmKVJJ6nFU9/5V75A/6lnSv+kG2/5oxV3/ACr3yB/1LOlf9INt/wA0Yq7/&#xA;AJV75A/6lnSv+kG2/wCaMVd/yr3yB/1LOlf9INt/zRirv+Ve+QP+pZ0r/pBtv+aMVd/yr3yB/wBS&#xA;zpX/AEg23/NGKu/5V75A/wCpZ0r/AKQbb/mjFXf8q98gf9SzpX/SDbf80Yq7/lXvkD/qWdK/6Qbb&#xA;/mjFXf8AKvfIH/Us6V/0g23/ADRirv8AlXvkD/qWdK/6Qbb/AJoxV3/KvfIH/Us6V/0g23/NGKu/&#xA;5V75A/6lnSv+kG2/5oxV3/KvfIH/AFLOlf8ASDbf80Yq7/lXvkD/AKlnSv8ApBtv+aMVd/yr3yB/&#xA;1LOlf9INt/zRirv+Ve+QP+pZ0r/pBtv+aMVd/wAq98gf9SzpX/SDbf8ANGKu/wCVe+QP+pZ0r/pB&#xA;tv8AmjFXf8q98gf9SzpX/SDbf80Yq7/lXvkD/qWdK/6Qbb/mjFXf8q98gf8AUs6V/wBINt/zRirv&#xA;+Ve+QP8AqWdK/wCkG2/5oxV3/KvfIH/Us6V/0g23/NGKu/5V75A/6lnSv+kG2/5oxV3/ACr3yB/1&#xA;LOlf9INt/wA0Yq7/AJV75A/6lnSv+kG2/wCaMVd/yr3yB/1LOlf9INt/zRirv+Ve+QP+pZ0r/pBt&#xA;v+aMVd/yr3yB/wBSzpX/AEg23/NGKpF588h+RoPI3mKeDy7pkU0WmXjxSpZ26srLbuVZWCVBB6HF&#xA;U9/L3/lAPLP/AGyrH/qGTFWQYq7FXYqlvmXTr/UvLuqadp92bC/vLSeC0vVrWGWWNkSQU3+BiDti&#xA;rxCf8uvzp0qNbTQLxdOOpzH/AEaz1CeS0tWgsfT+tS3FxbtIfXuR6zRBN/s1qWOKqo/Kb84bXVb6&#xA;ez1pOUk949vqP1uQy+le6ja3DKiNCfRItopUIDEFjttiqrceQf8AnIhNBltrTzQsmoSehILie7cN&#xA;HIgu1cRssNODA2pIcGtH774qmuq/lR5y1TyNeaDNqC2t9feaZNYkvbeZw8VjNeGYmNuIpKsbfCvS&#xA;vfFUr0b8v/z90rT9Oso9btXUu0+pypcvHxla/vbiX04/QYOs8d1DX4l4lKU6Yq6//LL87bjTZLSX&#xA;zE1+s6lZ4bm7IWqCwmjZGWCqN9Yiu/ioaKU264qrTeR/+cjF+rmLzVbMg067hMZmflHcypc+hzf0&#xA;F9Yp6sA9aimqV49eSrKvOHlL8zZtE0Sx8reYWiubQSjUbu8m4zSSuFMMrOkEgkSFuVYuK8xQchTF&#xA;Uhb8m/Mbfl3qnl9NRNvrWs+Yv0rd6sJmeVbf68jiRXIBMi20Yop25bVpirG0/Iz8woJkE81rrE63&#xA;GuTS6vPdSwSynU7YR28hhWORVKTcpOPPatK98Vbk/wCce/O9ppXl2z03WFuZbaf63qgu7mSOzhkZ&#xA;IFdYbVYZjJQQNxdZY35MTUBtlWXefPIPnjUvO95rflxLexeews7ODVheSR3MbR3qS3LLEIXQc7bl&#xA;EDyxVINT/LX8+tTilsrjzNH+jhYyW8am7lSWSZZGeBmeKBaMRxWRm5bdPDFUwuvJf57R6PdS6frt&#xA;dUubi5SO0ub9mit7R7Vo7Zo5ha8nlimfk3JRz4r9nFVO8/Lr84LzU4bu+1f6z9S1U3UYTUZIYprK&#xA;WOaMRrAttSJoRJGGUs4kodx1xVRi/Lv897TSorCw8xW9rFDptpaxrFOVVZIre1jkWOP6vRGE0dxJ&#xA;63M8w6rxHZVPvLPlH84bLzho11qmvrd+W7GO8ivraWZnlmV5rn6oxCxRh5FieDmzsfsnuPiVYwvl&#xA;T/nInU4NcuLTXP0WJbyVLO2vJ2MkkEd7MVaLhCfqwNuyKtC3Km/HFWVaV5K/MufyH5u0/wAy6z9e&#xA;8wa1YzWWmqs3+iRGTT1i5rxijZC100hYgfZ40AxViafk1+cOh2mqr5c82+td3o0pUurlzDKbewju&#xA;oTbqwSYJwSS3+On7wqxalaFVY35R/nREZ7mHXlGsRzXt7a36XshQzXccNI/SeAcIxJG3KnUU2GKp&#xA;prPkL8+rqLVIk8xwS211dVFuLp4GmgZ7o/BILWT6oqxTW6NEofl6bHkOW6r1jyrp13pnljSNNvGD&#xA;XdlZW1vcMpLKZIolRyGNCRyXriqaYq7FXYqx/wDML/lAPM3/AGyr7/qGfFXfl7/ygHln/tlWP/UM&#xA;mKsgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;2Ksf/ML/AJQDzN/2yr7/AKhnxV35e/8AKAeWf+2VY/8AUMmKo/zDZ6je6FqFnptybLULi3kjtboG&#xA;hjkZSFYMA3Gh/aoadaHFWCea9V85aHJ5R0iDVRFPd29xFqM3prcc5baKNg/OcF26kVNOXU4qh/0v&#xA;57/6mH/pzt/6Yq79L+e/+ph/6c7f+mKu/S/nv/qYf+nO3/pirv0v57/6mH/pzt/6Yq79L+e/+ph/&#xA;6c7f+mKu/S/nv/qYf+nO3/pirv0v57/6mH/pzt/6Yq79L+e/+ph/6c7f+mKu/S/nv/qYf+nO3/pi&#xA;rv0v57/6mH/pzt/6Yq79L+e/+ph/6c7f+mKu/S/nv/qYf+nO3/pirv0v57/6mH/pzt/6Yq79L+e/&#xA;+ph/6c7f+mKu/S/nv/qYf+nO3/pirv0v57/6mH/pzt/6Yq79L+e/+ph/6c7f+mKu/S/nv/qYf+nO&#xA;3/pirv0v57/6mH/pzt/6Yq79L+e/+ph/6c7f+mKu/S/nv/qYf+nO3/pirv0v57/6mH/pzt/6Yq79&#xA;L+e/+ph/6c7f+mKu/S/nv/qYf+nO3/pirLPy81fVNU0WebUrj6zcRXcsAl4JHVUC0+FAo74qyjFX&#xA;Yq7FWP8A5hf8oB5m/wC2Vff9Qz4q78vf+UA8s/8AbKsf+oZMVZBirzX80v8AlLPJ/wD28v8AkzHi&#xA;qFxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksh/Kz/jg3v/AG0L&#xA;j/jXFWZ4q7FXYqx/8wv+UA8zf9sq+/6hnxV35e/8oB5Z/wC2VY/9QyYqmWuW19daLf21hIYb2e3l&#xA;itphJ6RSR0Kq4kCTcSpNQeDfI4q8u8+2mvQal5Dt7q5gOox296lxLxlnQzCCLmwZ5EkdT25UPf2x&#xA;VS9DX/8AlttP+kWT/soxV3oa/wD8ttp/0iyf9lGKu9DX/wDlttP+kWT/ALKMVYTcec/zJn81azoH&#xA;lzy8muvof1b65cRcYQPrcPqx/DLOOvxDYnpkJ5Ix5lNKdz52/NHS9T0i08xeV10e31i8jsILuUpK&#xA;olkqfsxzk7AE4IZYy5FaZ16Gv/8ALbaf9Isn/ZRliHehr/8Ay22n/SLJ/wBlGKu9DX/+W20/6RZP&#xA;+yjFXehr/wDy22n/AEiyf9lGKu9DX/8AlttP+kWT/soxV3oa/wD8ttp/0iyf9lGKu9DX/wDlttP+&#xA;kWT/ALKMVd6Gv/8ALbaf9Isn/ZRirvQ1/wD5bbT/AKRZP+yjFXehr/8Ay22n/SLJ/wBlGKu9DX/+&#xA;W20/6RZP+yjFXehr/wDy22n/AEiyf9lGKu9DX/8AlttP+kWT/soxV3oa/wD8ttp/0iyf9lGKu9DX&#xA;/wDlttP+kWT/ALKMVd6Gv/8ALbaf9Isn/ZRiqRec/M2reVtHGp3Dx3itNFbx29taOZGeZuKgBrlR&#xA;1xVKP8a/mV/1JGtf9wpv+yvKvGh3hNJx5N8yar5q0GLWbWWG2ileSP0J7RxIrROY2rxuWHVctQ9M&#xA;/KgOPL12HIZ/r8/JlFATRakAk0+/FWaYq7FXYqx/8wv+UA8zf9sq+/6hnxV35e/8oB5Z/wC2VY/9&#xA;QyYqyDFXmv5pf8pZ5P8A+3l/yZjxVC4q7FXYqkv5Mf8Ak2fzS/7cP/UHLmBrenxZRV/+chP96Py/&#xA;/wDAlt/+TUmR0f1H3JkmebFg7FXYq7FUn1rzh5W0OdLfWNVtrCeVPUjjuJVjZkqRyAJ6VGKpf/yt&#xA;H8uv+pj0/wD6SE/rirKMVdirsVdirsVdirsVdirsVdirBPzj/wCUc03/ALbGnf8AJ8ZGXIq+h80j&#xA;a+dfyQ/5QGH/AJjL7/qKkzeDk1PX/wArP+ODe/8AbQuP+NcKszxV2KuxVj/5hf8AKAeZv+2Vff8A&#xA;UM+Ku/L3/lAPLP8A2yrH/qGTFU31KG+n0+5hsLlbO9kjZLe7aMTCJyKK/pkoH4nehOKvK/zAtNdg&#xA;1PyHb3N5DNqMNteR3Ny0TOrzpbxCSSgeMkNQ+Hj7Yqoehr//AC22n/SLJ/2UYq70Nf8A+W20/wCk&#xA;WT/soxV3oa//AMttp/0iyf8AZRiqB/JFbhfzT/NAXDpJN/uC5PGhjU/6JLSilpCNv8rMDW9Piyii&#xA;f+ciRKZPIIiZUkPmS34MyllB9KShKgrX78jo/qPuTJV9DX/+W20/6RZP+yjNiwd6Gv8A/Lbaf9Is&#xA;n/ZRirvQ1/8A5bbT/pFk/wCyjFXehr//AC22n/SLJ/2UYqxjR9Gt9S/P6wtdet7TVIf8OzusUlsD&#xA;ECLpQDwlaYchU75jaokQ2TFOf+ckPJ3lHTvyX8xXmn6Hp9ndxfU/SuLe1hikXlfQK3F0UMKqSDmJ&#xA;p5kzG7I8kd6Gv/8ALbaf9Isn/ZRm0YO9DX/+W20/6RZP+yjFXehr/wDy22n/AEiyf9lGKu9DX/8A&#xA;lttP+kWT/soxVi/nHXvPWl6joOl6L+jbzUNdu2tIRdRTwxqwTmCWSZz28MjKQiLKr9WsP+ciNL0q&#xA;91O5svLRtrGCW5nCS3hbhChduIJFTRdsoGqgTSeFH+U9U8x655Z0zWJLizgfULaO4aFbaVgpkUNQ&#xA;E3ArTMlCbehr/wDy22n/AEiyf9lGKu9DX/8AlttP+kWT/soxV3oa/wD8ttp/0iyf9lGKsJ/NqLVl&#xA;0HTTc3MEsX6Y0+qxwPG1fXFPiaaQfhkZcir6SzSNr5q/JiLVm8jRG2ubeOL65e0SSB5G/wB6Xr8Q&#xA;mjH4ZvByantP5UBx5euw5DP9fn5MooCaLUgEmn34VZpirsVdirH/AMwv+UA8zf8AbKvv+oZ8Vd+X&#xA;v/KAeWf+2VY/9QyYqw38sPMfm7UvzD882OtuVtLCWBbGzFwlxHCCZBxSkUDfEAGPXsDuMVRH5pf8&#xA;pZ5P/wC3l/yZjxVC4q7FXYqkv5Mf+TZ/NL/tw/8AUHLmBrenxZRV/wDnIT/ej8v/APwJbf8A5NSZ&#xA;HR/UfcmSZ5sWDsVdirsVYz5f/wDWidP/APAauP8AqLXMXV/R8WUU/wD+cn//ACRnmX/ox/7qFvmH&#xA;pv7wMpclfNs1uxV2KuxVhvmz/wAmH+XH/bZb/kwcqz/QUjm9f/MH/lAvMv8A2yr3/qHfNVj+oe9m&#xA;XlX5Xf8AkuvLn/bPt/8AiAzdNbKMVdirsVYJ+cf/ACjmm/8AbY07/k+MjLkVfQ+aRtfOv5If8oDD&#xA;/wAxl9/1FSZvByamTateeY7P8odbn8ufWTrS6jN9SjsxIZnk2IVVi+Nq0+yOuFWI/l/rf55XGmPP&#xA;rOk6xcyi/SJ/ry6jYyJacUZ3WNJULftLUBv4YSrO7bXfOM8cbw+VtQnDKWmH6U1GL0T9YMSxnm59&#xA;U8FqWTp9qnEjArLPJUB13y/DqWpWuoaXdyM6vZvqGoErwYr1aVOW4+0BQ9RtiqF86WaWWieaIIZr&#xA;h4X8vXrtHPcz3C8hHIKgTPJxNPDFU9/L3/lAPLP/AGyrH/qGTFWCeSU1M/mB+ZkFrGyTkwNagmSJ&#xA;Fkk9cD4mDKjMAr7Bq1DVFeIVUPO9r5lhvPIEGpXcEmsR2t4l7cem0iPcLBEJXFGhqrb02GKrfQ1/&#xA;/lttP+kWT/soxV3oa/8A8ttp/wBIsn/ZRirvQ1//AJbbT/pFk/7KMVQP5IrcL+af5oC4dJJv9wXJ&#xA;40Man/RJaUUtIRt/lZga3p8WUUT/AM5EiUyeQREypIfMlvwZlLKD6UlCVBWv35HR/UfcmSr6Gv8A&#xA;/Lbaf9Isn/ZRmxYO9DX/APlttP8ApFk/7KMVd6Gv/wDLbaf9Isn/AGUYq70Nf/5bbT/pFk/7KMVS&#xA;Lyol6v8AzkNYC7ljlf8Aw3ccWijaIAfW12IZ5f15i6v6Piyiyb/nJ/8A8kZ5l/6Mf+6hb5h6b+8D&#xA;KXJDehr/APy22n/SLJ/2UZtmtRvJtUsraS6vNUsLa1hHKWea3eONF8WZrkAD54qkv+PNA/6nLy//&#xA;AMHH/wBlmKpnpeqTavC8+la5pmoQxtwkltYjMqtSvEtHdMAaHpiqQ+Yo9SX8xfy6+tzwyr+mG4iK&#xA;FoiD6J6lpZa5Vn+gpHN7R+YP/KBeZf8AtlXv/UO+arH9Q97MvHPyzh1o/l95eMV3bJEbCDgr20jM&#xA;BwGxYTrX7s3TWyK4Gvw28s31u0b00Z+P1WQV4itP96MVeXaR+av5t6xpsGpad5QtJ7K4BaGX65Gn&#xA;IBip+F5FYbjuMy8egzTiJRGx8wxMgE+8leevO+u+YL/Q9W0200S8sLeO5K1N3yWVqD+7lVR9+U5c&#xA;MscuGQopBtv82otWXQdNNzcwSxfpjT6rHA8bV9cU+JppB+GUS5FL6SzSNr5q/JiLVm8jRG2ubeOL&#xA;65e0SSB5G/3pevxCaMfhm8HJqZjfWvme6/KXVLby47/4jl1ORNPeB1t2+sEDiUd2ATfxb6cKoP8A&#xA;KTy1/wA5E2drdt5m1GSC45TfV4dUuYr9WrCvonlA8hCiVSGFRsxNCaYpLMWT88LaO4uWuNNvjCga&#xA;1s44fRMzLETxlYySUMkvwngRxFG33XFCO8uj8231uN9al09NES6vEmRIj9ZkhRmS1daPxRXCq/Vm&#xA;38Oiq/8AML/jleZv/Acvv+IPiqbfl7/ygHln/tlWP/UMmKsX/LTyT5l0Tzl5x1zWrayiXX54ZraS&#xA;0kmdz6XqKxdZCVXkOLfDTw3psqt/NL/lLPJ//by/5Mx4q8o/N2K5vPMHk7Skvruxtr+4u0uWs5mg&#xA;dgkKuvxL4Ed8yNJiGTIInkUSNBIvMvkCLTfLmq6jb+YNcNxZWdxcQh7+QrziiZ15AAbVGbnP2Xij&#xA;CUhdgFrEzb03yHNNP5G8uzzyNLNLplm8srkszM1uhZmY7kk9TnPNq/8AJj/ybP5pf9uH/qDlzA1v&#xA;T4soq/8AzkJ/vR+X/wD4Etv/AMmpMjo/qPuTJM82LBhf5q+Y9d0HQbGbRJYob681G2shJMnqIFn5&#xA;CpX5gZKEeKQHepSPj+c//V/0v/pDb+ubj+Rp/wA4NfiMh/KrzHq3mLyZbapqzo9881xHI0S8FIim&#xA;ZBRfkuaYii2Iny//AOtE6f8A+A1cf9Ra5iav6Piyin//ADk//wCSM8y/9GP/AHULfMPTf3gZS5K+&#xA;bZrYf+b/AP5LPzD/AMwjf8SGKpHo3krybJo9jJJoOnPI9vEzu1pASSUBJJKZ2GPTYjEemPLuDjmR&#xA;XfkxbW9rL5wt7aJILeLXJkihjUIiqI0AVVWgAGcvq4gZZAcrb48k482f+TD/AC4/7bLf8mDmFn+g&#xA;shzev/mD/wAoF5l/7ZV7/wBQ75qsf1D3sy8q/K7/AMl15c/7Z9v/AMQGbprZBqP/ABz7n/jE/wDx&#xA;E4q8y/KL/wAlzon/ABik/wCTz513Z39xH8dWifNFeUf/ACcHmL/tl2f/ABM5o+1v774Bsx8kw/OP&#xA;/lHNN/7bGnf8nxmrlyLN9D5pG186/kh/ygMP/MZff9RUmbwcmplGpeVdW81flDruhaVGJLy81CZE&#xA;BZFAB4gsS7IKCvjhViPkL8jfzD8t6bJbj1LCQ38d76dhJGY3SNUHpsz3kcg+OOteRxVncvlb81Vt&#xA;4xBrOrG55SPcSSizKS1mEkYCLej0wsYKEId8VU7Dyv8Am6n1Y32rahNGsIS7tQLXg7F2baT66JPh&#xA;5fa25UCkBcVTTUNP8wW3kTX11dLiSW28v38D39x6AaZ2WVwQkM0/GiUr0HhttirLfy9/5QDyz/2y&#xA;rH/qGTFU01gX50m8GnoJL8wyC1RpPRBlKkJWTjJw3/a4mnhiryvz3b+YI7/yDDe3UT6pHa3cd3PJ&#xA;H6nO4S3iEsh4PEPjIJoKU/DFXnX5hx6ivnjyJ9bnhmBub3h6UTRU/wBHFa8pJa5m9n/38fx0Yz5J&#xA;j55/5QnzB/2zbz/kw+dNqv7qX9U/c0x5vKvL/mb8zYdB02Gz80/V7OO1gS2t/qFo/pxrGoRObLyb&#xA;iu1Tuc5AY3f4uyuKIlxcxfL9r1r/AJxYu9Wu/NX5hXGr3n1/UH/Q/r3fppDzpDcBf3cYCiigDbNd&#xA;rxRH47nBzYfCmY3dMm/5yJEpk8giJlSQ+ZLfgzKWUH0pKEqCtfvyvR/Ufc0yVfQ1/wD5bbT/AKRZ&#xA;P+yjNiwYD+cceqLo+hG6uIJY/wBO2HwxQPG1eTb8mlk/Vlun/vI+8feg8mU52rjvGPy5/Nq60Hyv&#xA;Fp0WmXNxGk1xIJY7USqfUlZ6c/rEVaV/lzhyCS58NPkkLESQzz8nfOUvmn894LuW1ltHg0C4i9Oa&#xA;H0GI+so1Qvqz1G/WuYmsHo+KJY5QNSFPSf8AnJ//AMkZ5l/6Mf8AuoW+YWm/vAiXJDehr/8Ay22n&#xA;/SLJ/wBlGbZrYl+bMWsj8uNfM11bPELVuapbyIxHIdGM7gfdiqL0L/jiaf8A8w0P/JsZ2+L6B7nG&#xA;Lzvyl+Y/lzyzrXm601LWYdOlm1m4lSKWzurosoCpyDQEKN1Ioc5HWf30v6xciPJN7f8AMHy/5p/M&#xA;3yDb6Xq8OpSW2qmSRIrO5tSoaJgCWnJDfIZg5/oLIc30Z+YP/KBeZf8AtlXv/UO+arH9Q97MvHPy&#xA;zh1o/l95eMV3bJEbCDgr20jMBwGxYTrX7s3TWn2oQ699Qua3lqR6T1AtZP5T/wAvGKsC/KL/AMlz&#xA;on/GKT/k8+dd2d/cR/HVonzYrq/nfV/LX5q61LpmnC/kksrWGRWNKADmG+0n81M0fam+c+4OTpsE&#xA;8gqItDeZvzQ8x+YV0nTNQ0dbG3fVLJ/XBBPJJgQP7x+vyzWziQC3ZNLkxi5Cg+1M0TB81fkxFqze&#xA;RojbXNvHF9cvaJJA8jf70vX4hNGPwzeDk1PafyoDjy9dhyGf6/PyZRQE0WpAJNPvwqzTFXYq7FWP&#xA;/mF/ygHmb/tlX3/UM+Ku/L3/AJQDyz/2yrH/AKhkxVkGKvNfzS/5Szyf/wBvL/kzHiry38zf+U38&#xA;hf8AMVff9Q4zN7P/AL+P46MZ8kR55/5QnzB/2zbz/kw+dNqv7qX9U/c0x5vJdB/44enf8wsP/Jtc&#xA;5SPJ7fTf3Uf6o+567/zir/ylH5hf9uf/AJM3GavtDmPx3Og1/wDfy+H3BlX/ADkJ/vR+X/8A4Etv&#xA;/wAmpMq0f1H3OFJM82LB53+dn/HC0L/tvaf/AMSbLdP/AHkfePvQeSf52rjvnnyN/wAo7D/xkl/5&#xA;OHOMhyev7M/uR8fvek/kJ/5PYf8AbBm/6iFzC1/0uv7V/vR/V/SXrf8Azk//AOSM8y/9GP8A3ULf&#xA;Nfpv7wOtlyV82zWw/wDN/wD8ln5h/wCYRv8AiQxVboX/ABxNP/5hof8Ak2M7fF9A9zjF4jZf8pV5&#xA;s/7as/8AxNs5bP8A3s/6xem7G+gp15T/APJv+Q/+Y9/+IDMDV/QV7X/h+P6H1n+YP/KBeZf+2Ve/&#xA;9Q75psf1D3umLyr8rv8AyXXlz/tn2/8AxAZumtkGo/8AHPuf+MT/APETirzL8ov/ACXOif8AGKT/&#xA;AJPPnXdnf3Efx1aJ82C+Zf8Ayauuf8w1r/ybXNN2h/fy+H3O87E5y9yX61/vTov/AG1bP/k5muzf&#xA;SXO7V/uvi+68550L51/JD/lAYf8AmMvv+oqTN4OTU9f/ACs/44N7/wBtC4/41wqzPFXYq7FWP/mF&#xA;/wAoB5m/7ZV9/wBQz4q78vf+UA8s/wDbKsf+oZMVTfUVu20+6WzYpdtDILZxxBEhU8COYdftfzKR&#xA;7Yq8t/MWPXP0x5FW4mhXUBb3gumaMyL9YFvF6p+BogVJrSgH8MVea/mHHqK+ePIn1ueGYG5veHpR&#xA;NFT/AEcVryklrmb2f/fx/HRjPkmPnn/lCfMH/bNvP+TD502q/upf1T9zTHm8l0H/AI4enf8AMLD/&#xA;AMm1zlI8nt9N/dR/qj7nrv8Azir/AMpR+YX/AG5/+TNxmr7Q5j8dzoNf/fy+H3BlH/ORIlMnkERM&#xA;qSHzJb8GZSyg+lJQlQVr9+VaP6j7nCkq+hr/APy22n/SLJ/2UZsWDAfzjj1RdH0I3VxBLH+nbD4Y&#xA;oHjavJt+TSyfqy3T/wB5H3j70HkynO1cd88+Rv8AlHYf+Mkv/Jw5xkOT1/Zn9yPj970n8hP/ACew&#xA;/wC2DN/1ELmFr/pdf2r/AHo/q/pL1v8A5yf/APJGeZf+jH/uoW+a/Tf3gdbLkhvQ1/8A5bbT/pFk&#xA;/wCyjNs1sS/NmLWR+XGvma6tniFq3NUt5EYjkOjGdwPuxVF6F/xxNP8A+YaH/k2M7fF9A9zjF4jZ&#xA;f8pV5s/7as//ABNs5bP/AHs/6xem7G+gp15T/wDJv+Q/+Y9/+IDMDV/QV7X/AIfj+h9Z/mD/AMoF&#xA;5l/7ZV7/ANQ75psf1D3umLxz8s4daP5feXjFd2yRGwg4K9tIzAcBsWE61+7N01p9qEOvfULmt5ak&#xA;ek9QLWT+U/8ALxirAvyi/wDJc6J/xik/5PPnXdnf3Efx1aJ82C+Zf/Jq65/zDWv/ACbXNN2h/fy+&#xA;H3O87E5y9yX61/vTov8A21bP/k5muzfSXO7V/uvi+68550L5q/JiLVm8jRG2ubeOL65e0SSB5G/3&#xA;pevxCaMfhm8HJqe0/lQHHl67DkM/1+fkyigJotSASaffhVmmKuxV2Ksf/ML/AJQDzN/2yr7/AKhn&#xA;xV35e/8AKAeWf+2VY/8AUMmKsgxV5r+aX/KWeT/+3l/yZjxV5b+Zv/Kb+Qv+Yq+/6hxmb2f/AH8f&#xA;x0Yz5Ijzz/yhPmD/ALZt5/yYfOm1X91L+qfuaY83kug/8cPTv+YWH/k2ucpHk9vpv7qP9Ufc9d/5&#xA;xV/5Sj8wv+3P/wAmbjNX2hzH47nQa/8Av5fD7gyr/nIT/ej8v/8AwJbf/k1JlWj+o+5wpJnmxYPO&#xA;/wA7P+OFoX/be0//AIk2W6f+8j7x96DyT/O1cd88+Rv+Udh/4yS/8nDnGQ5PX9mf3I+P3vSfyE/8&#xA;nsP+2DN/1ELmFr/pdf2r/ej+r+kvW/8AnJ//AMkZ5l/6Mf8AuoW+a/Tf3gdbLkr5tmth/wCb/wD5&#xA;LPzD/wAwjf8AEhiq3Qv+OJp//MND/wAmxnb4voHucYvEbL/lKvNn/bVn/wCJtnLZ/wC9n/WL03Y3&#xA;0FOvKf8A5N/yH/zHv/xAZgav6Cva/wDD8f0PrP8AMH/lAvMv/bKvf+od802P6h73TF5V+V3/AJLr&#xA;y5/2z7f/AIgM3TWyDUf+Ofc/8Yn/AOInFXmX5Rf+S50T/jFJ/wAnnzruzv7iP46tE+bBfMv/AJNX&#xA;XP8AmGtf+Ta5pu0P7+Xw+53nYnOXuS/Wv96dF/7atn/yczXZvpLndq/3Xxfdec86F86/kh/ygMP/&#xA;ADGX3/UVJm8HJqev/lZ/xwb3/toXH/GuFWZ4q7FXYqx/8wv+UA8zf9sq+/6hnxV35e/8oB5Z/wC2&#xA;VY/9QyYqmWuJqj6NfJpLiLU2gkFnIQp4ylTxI5hkrXpyBHiCMVYJ5q8oeftY/wAKXcE1i2o6VBON&#xA;Se8LqGmniRCQIF4n7JrxAFegpirEfNH5NfmhrmqaNqQv9EtrjRZJpYFpdyI5mQIQ4oh2A7HLcOU4&#xA;5iQ5hBFqOq/k5+cep6XeabPq3l1YL2CS2laOC+DhJUKMVJkYVo21Rmdk7VySiYkR3Fdf1sRAMetP&#xA;+cY/zNtbSG1j1vRTHBGsSForupCAKK0I32zXiZdrDtTJGIiBHYef62R/l/8Ak9+cnka/1m90nVfL&#xA;s8uufVvra3cF86r9UV1j9P05IiKiU8qk/RmPmxDJzcPNnOSRkeZTLzb+XP50+a59Fk1fUfLaJol/&#xA;HqVulpDfRF5I1KhXaSSb4aN2GDFgjA2GolMpfJn5rqoKPobtyUEc7sbFgGO69hvlyEj85fk9+Zvm&#xA;awtLSS+0W2NneQ30br9berwElVYFR8JrvvkoS4SCOit/8qt/Or/q6eW/+ke//wCqubT+WMvdH7f1&#xA;tfhhhulf84s/mTplktpBrmjNGhZgZIrotViWPTj45rBMh2WDtCeKPCAK/HmnflH8hvza8rebP8Ua&#xA;frGgS34tGsfSuIbxofTdw5PFHRuVR/NT2yrNAZBRadRqZZZcRrlTIvPn5f8A54+dfKl95Z1XUvLM&#xA;NhqHpetLa2+oJMPRmSdeLSSyL9qMVqp2ynHpoxNi2glMJfJn5rrE7RvobyBSUTndjkQNhUr3zIQl&#xA;nmn8q/zN8w+Xr/RZrrRYIr6IxPMhuyygkGoBSnbFUFaflJ+c1raw20eq+XDHAixoWgvqkIAorSQe&#xA;GbSPa+UCqj9v62Hhhi0X/OMH5lx6hqN8ut6KZtSuHup1MV1xDuSSE3qBv3JzAnmMpGXebc7TayeE&#xA;VED4onTv+ccPzSsPMekeYIda0NrzRpjPaxvFdmJmYUpIAwYjbswyrJ6xRXU6yeauIDZ6HrGgfn7q&#xA;2kX2l3F/5US3v7eW1maO21EOEmQxsVJnYVo21RmKNJEG93G4kt8uflh+Z2h6DYaPFc6JNFYQJbpK&#xA;5uwzCNaVICZlMUW3kf8ANa4syksmhxPNHxkXldniWWhFQtDTFWLeXPyP/N7QNFtdHs9X8vyW1opW&#xA;N5oL1pCGYv8AEVdB1bwzY4e08mOAiBGh7/1sDAFKb7/nGr8z7zzBda5LrWiLd3kcccqLFdiMCJQo&#xA;4gktXbffMbNqZZJmRqy5el1MsN8Nb96jdf8AOMH5mXL2rvreig2lxHdR8Yrrd4TyUNUnbxymUuIU&#xA;26jXzyx4SB+Pi9Y+qf8AOQv/AC2+Uv8ApF1L/sozC/Jw7y4nExfyb+UX5m+WNDTSYbzRblElmmMr&#xA;/W1JM0jSEUCnYFsy2L0n8vdB1nRdDlttXMH12W6mnb6qzNHxcgLQuFO4WtMVZPirsVdirH/zC/5Q&#xA;DzN/2yr7/qGfFXfl7/ygHln/ALZVj/1DJirIMVdirsVdirz3zB+Vuqatq17qUXmBrCW4mWS2EFu1&#xA;YFSIx7Vn4tIeVfV416UpQUVZd5Z0ebRtCtNMlufrj2ysv1jh6dVLllHHk/2VIXdiTSpJOKppirsV&#xA;dirsVYl5s8l6lrt3NLBqwsoJreCAwmGWUo0M7StLGyzwqjuj8OQXkNmBqFoqjPJPla58t6bc2dxq&#xA;UmqPcXT3XryqVK+oqAoAWk25IW69ScVZDirsVdirsVY/518s3vmLSobK01N9KkiuEuDOieqGEYai&#xA;MnOMEBmDippVRUEbYqreVPL0+g6bLZTancas8lzPc/W7ziZv37l+JKBV2J7KB4ACgCqdYq7FXYq7&#xA;FUBrumNqmj3enrIsRuozGJHRpFWvcorxk/8ABYqk/kjyhfeXIrtbzVDqclyLdQ/pvEFFvCIakNLN&#xA;yd+PJ3rUn2CgKsnxV2KuxV2KuxV2Ksf/ADC/5QDzN/2yr7/qGfFXfl7/AMoB5Z/7ZVj/ANQyYqyD&#xA;FXYq7FXYq7FXYq7FXYq7FXYq8ok/Ibjf6jead5nv9JbULm8upIdP/wBGi5Xqyq/JI3VXZTKpDMK/&#xA;AuKtx/kRJDp97bQebtXjnu+dLoTy8laUsZpCnqcGd+ezUHGgp3qqpt+QCSXrXs3mrVZbsiUR3Tyy&#xA;NKhcSiN0ZpGVHjM7EFFXtx471VRX/KltTF5DcL551xQtxaTzxC4k4yC0jjQR0LkcWMbMag/a3qQD&#xA;iqy+/IWwfUtT1XS/MOp6Pqer6i2o389lKYlkUs7LA6IUDKplO7deh22xVEa/+Rukazqej6lJrOow&#xA;XWi29nb28kczM0jWd2Lv1ZmkLtIzOP2ieJ37Yql2nf8AOP31W7hvZvN+sXV9A0bpeyTOZw0bk/bL&#xA;tUFPgKsCKe1AFU68rflLNonmHT9auvM2pazLp9vJbxw38jSrWUtydeTNQkOOVak0602xV6FirsVd&#xA;irsVdirsVdirsVdirsVdirsVY/8AmF/ygHmb/tlX3/UM+KsS8l/8rY/wdoP1D9A/Uf0dafVfX+ue&#xA;r6XoJ6fqcPh58acqbVxVOf8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/&#xA;AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8A&#xA;kM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9i&#xA;rv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n&#xA;/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/&#xA;AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9irv8A&#xA;kM3/AH7n/T9irv8AkM3/AH7n/T9irv8AkM3/AH7n/T9iqTedP+Vsf4O176/+gfqP6Ou/rXofXPV9&#xA;L0H9T0+fw8+NeNdq4q//2Q==</xapGImg:image></rdf:li></rdf:Alt></xap:Thumbnails></rdf:Description>\r
-<rdf:Description rdf:about='uuid:7a069029-7a5e-11d8-b649-000a956e58ec' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:ee245c78-7a5d-11d8-b649-000a956e58ec'/>\r
-<rdf:Description rdf:about='uuid:7a069029-7a5e-11d8-b649-000a956e58ec' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'/>\r
-</rdf:RDF>\r
-</x:xmpmeta>\r
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                           
-<?xpacket end='w'?>\rendstream\rendobj\rxref\r0 82\r0000000001 65535 f\r
-0000000002 00001 f\r
-0000000003 00001 f\r
-0000000006 00001 f\r
-0000000016 00000 n\r
-0000000384 00000 n\r
-0000000007 00001 f\r
-0000000008 00001 f\r
-0000000009 00001 f\r
-0000000010 00001 f\r
-0000000011 00001 f\r
-0000000012 00001 f\r
-0000000013 00001 f\r
-0000000014 00001 f\r
-0000000015 00001 f\r
-0000000016 00001 f\r
-0000000017 00001 f\r
-0000000018 00001 f\r
-0000000021 00001 f\r
-0000000434 00000 n\r
-0000000495 00000 n\r
-0000000023 00001 f\r
-0000000645 00000 n\r
-0000000025 00001 f\r
-0000000666 00000 n\r
-0000000026 00001 f\r
-0000000027 00001 f\r
-0000000028 00001 f\r
-0000000029 00001 f\r
-0000000030 00001 f\r
-0000000031 00001 f\r
-0000000032 00001 f\r
-0000000033 00001 f\r
-0000000034 00001 f\r
-0000000035 00001 f\r
-0000000036 00001 f\r
-0000000037 00001 f\r
-0000000038 00001 f\r
-0000000039 00001 f\r
-0000000040 00001 f\r
-0000000041 00001 f\r
-0000000042 00001 f\r
-0000000043 00001 f\r
-0000000044 00001 f\r
-0000000045 00001 f\r
-0000000046 00001 f\r
-0000000047 00001 f\r
-0000000048 00001 f\r
-0000000049 00001 f\r
-0000000050 00001 f\r
-0000000051 00001 f\r
-0000000052 00001 f\r
-0000000053 00001 f\r
-0000000054 00001 f\r
-0000000055 00001 f\r
-0000000056 00001 f\r
-0000000057 00001 f\r
-0000000058 00001 f\r
-0000000059 00001 f\r
-0000000060 00001 f\r
-0000000061 00001 f\r
-0000000062 00001 f\r
-0000000063 00001 f\r
-0000000064 00001 f\r
-0000000065 00001 f\r
-0000000066 00001 f\r
-0000000067 00001 f\r
-0000000068 00001 f\r
-0000000069 00001 f\r
-0000000070 00001 f\r
-0000000071 00001 f\r
-0000000072 00001 f\r
-0000000073 00001 f\r
-0000000074 00001 f\r
-0000000075 00001 f\r
-0000000076 00001 f\r
-0000000077 00001 f\r
-0000000078 00001 f\r
-0000000000 00001 f\r
-0000000778 00000 n\r
-0000000801 00000 n\r
-0000179037 00000 n\r
-trailer\r<</Size 82/Root 19 0 R/Info 20 0 R/ID[<7a04c2147a5e11d8b649000a956e58ec><7a04c2147a5e11d8b649000a956e58ec>]>>\rstartxref\r199194\r%%EOF\r
\ No newline at end of file
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/nestedvm.ivme04.bbl b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/nestedvm.ivme04.bbl
deleted file mode 100644 (file)
index 02ba95c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-\providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace}
-\providecommand{\MR}{\relax\ifhmode\unskip\space\fi MR }
-% \MRhref is called by the amsart/book/proc definition of \MR.
-\providecommand{\MRhref}[2]{%
-  \href{http://www.ams.org/mathscinet-getitem?mr=#1}{#2}
-}
-\providecommand{\href}[2]{#2}
-\begin{thebibliography}{10}
-
-\bibitem{j2me}
-http://java.sun.com/j2me/docs/index.html.
-
-\bibitem{msil}
-http://research.microsoft.com/~emeijer/Papers/CLR.pdf.
-
-\bibitem{parrot}
-http://www.parrotcode.org.
-
-\bibitem{python}
-http://www.python.org.
-
-\bibitem{jazillian}
-http://www.jazillian.com/.
-
-\bibitem{c2j}
-http://www.soften.ktu.lt/~stonis/c2java/.
-
-\bibitem{gcc}
-http://gcc.gnu.org/.
-
-\bibitem{jikes}
-http://www-124.ibm.com/developerworks/oss/jikes/.
-
-\bibitem{csharp}
-\emph{The c\# programming language},
-  http://download.microsoft.com/download/0/a/c/0acb3585-3f3f-4169-ad61-efc9f01%
-76788/CSharp.zip.
-
-\bibitem{cni}
-\emph{The cygnus native interface for c++/java integration},
-  http://gcc.gnu.org/java/papers/cni/t1.html.
-
-\bibitem{hotspot}
-\emph{The java hotspot performance engine architecture}, 1999,
-  http://java.sun.com/products/hotspot/whitepaper.html.
-
-\bibitem{capp}
-Frank Buddrus and Jorg Schodel, \emph{Cappuccino -- a c++ to java translator},
-  Proceedings of the 1998 ACM symposium on Applied Computing (1998).
-
-\bibitem{java}
-James Gosling et~al., \emph{The {Java} language specification}, GOTOP
-  Information Inc., 5F, No.7, Lane 50, Sec.3 Nan Kang Road Taipei, Taiwan; Unit
-  1905, Metro Plaza Tower 2, No. 223 Hing Fong Road, Kwai Chung, N.T., Hong
-  Kong, 1996, citeseer.ist.psu.edu/gosling96java.html.
-
-\bibitem{KR}
-B.~W. Kernighan and D.~M. Ritchie, \emph{The c programming language},  (1979).
-
-\bibitem{jni}
-Sheng Liang, \emph{The javatm native interface: Programmer's guide and
-  specification},  (1999).
-
-\bibitem{mohca}
-Scott Malabarba, Premkumar~T. Devanbu, and Aaron Stearns, \emph{Mohca-java: A
-  tool for c++ to java conversion support}, International Conference on
-  Software Engineering, 1999, citeseer.ist.psu.edu/malabarba99mohcajava.html,
-  pp.~650--653.
-
-\bibitem{ephedra}
-J.~Martin, \emph{Ephedra: A c to java migration environment},  (2002),
-  http://www.rigi.csc.uvic.ca/?jmartin/Ephedra.
-
-\bibitem{c2jpp}
-Novosoft,  (September 2001), C2J ?C to Java translator.
-
-\bibitem{soustroup}
-B.~Stroustrup., \emph{The c++ programming language},  (1997).
-
-\bibitem{egcsjvm}
-T.~Waddington, \emph{Java backend for gcc},  (November 2000),
-  http://archive.csee.uq.edu.au/?csmweb/uqbt.html\#gccjvm.
-
-\end{thebibliography}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/pdftricks.sty b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/pdftricks.sty
deleted file mode 100644 (file)
index 68ae554..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-%
-% pdftricks.sty 
-%
-% Copyright (c) 2001, Radhakrishnan CV <cvr@river-valley.com>
-%                     Rajagopal CV <cvr3@river-valley.com>
-%                     http://www.river-valley.com
-%
-% River Valley Technologies, Software Technology Park,
-% Trivandrum, India 695034
-%
-% Tel: +91 471 33 7501/7502
-%
-%                     Antoine Chambert-Loir 
-%                     <chambert@math.polytechnique.fr>
-%                     http://www.math.polytechnique.fr/~chambert
-%
-% Ecole polytechnique, Palaiseau Cedex, France
-% 
-%
-% 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 (gpl.txt); if not, write to the Free
-% Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-% MA  02111-1307, USA.
-%
-% $Id: pdftricks.sty,v 1.15 2001/09/30 11:21:23 cvr Exp $
-%
-\NeedsTeXFormat{LaTeX2e}
-\def\Fileversion$#1: #2 ${\gdef\fileversion{#2}}
-\def\Filedate$#1: #2 #3 ${\gdef\filedate{#2}}
-\Fileversion$Revision: 1.15 $
-\Filedate$Date: 2001/09/30 11:21:23 $
-\ProvidesPackage{pdftricks}
-   [\filedate\space\fileversion\space psTricks support in PDF (CVRACL)]
-\PackageWarningNoLine{pdftricks}
-   {****************************************\MessageBreak
-    Package pdftricks v,\fileversion\space loaded\MessageBreak
-    [psTricks support in PDF (CVR, ACL)]\MessageBreak
-    ****************************************}
-\RequirePackage{graphicx,color}
-\newif\if@debug\@debugfalse
-\newif\ifPDFTshell
-\newif\ifPDFTnopdf
-\newif\ifnoprocess \noprocessfalse
-\newif\ifmiktex \miktexfalse
-\DeclareOption{debug}{\@debugtrue}
-\DeclareOption{noshell}{\PDFTshellfalse}
-\DeclareOption{shell}{\PDFTshelltrue}
-\DeclareOption{miktex}{\global\miktextrue}  
-\ExecuteOptions{shell}
-\ProcessOptions\relax
-\ifPDFTshell
-% we must set it to false if \write18 doesn't work.
-% Hack given by Thierry Bouche (Thanks !)
-\def\tmpfile{/tmp/w18-test-\the\year\the\month\the\day\the\time} 
-\ifmiktex%
- \immediate\write18{rem >"\tmpfile"}%%%%%% LDL-2
-\else
- \immediate\write18{touch \tmpfile} %%%%%% LDL-1
-\fi
-\ifmiktex
- \IfFileExists{\tmpfile.}{\PDFTshelltrue}{\PDFTshellfalse} %%%%%% LDL-4
-\else
- \IfFileExists{\tmpfile}{\PDFTshelltrue}{\PDFTshellfalse}  %%%%%% LDL-3
-\fi
-\fi
-\ifPDFTshell
-  \PackageWarningNoLine{pdftricks}
-   {****************************************\MessageBreak
-    Using \csname write\endcsname18 capability \MessageBreak
-    for producing PDF-figures.  \MessageBreak
-    ****************************************}
-\else
-  \PackageWarningNoLine{pdftricks}
-   {****************************************\MessageBreak
-    No \csname write\endcsname18 capability.\MessageBreak
-    You'll have to run a script by yourself!\MessageBreak
-    ****************************************}
-\fi
-
-% warning! the definition of FIGURES if pst2pdf must be set accordingly !!
-\def\PDFTfigname{\jobname-fig\thepsfig}
-\def\PDFTWarning#1#2{\if@debug\PackageWarning{#1}{#2}\fi}
-\def\PDFTWarningNoLine#1#2{\if@debug\PackageWarningNoLine{#1}{#2}\fi}
-\def\makeinnocent#1{\catcode`#1=12 }
-\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
-\def\latexname{lplain}\def\latexename{LaTeX2e}
-\newwrite\PDFStream
-
-\long\def\ProcessStream#1% start it all of
-   {\begingroup%
-    \def\CurrentStream{#1}%
-    \let\do\makeinnocent \dospecials 
-    \makeinnocent\^^L% and whatever other special cases
-    \endlinechar`\^^M \catcode`\^^M=12 \xStream}
-{\catcode`\^^M=12 \endlinechar=-1 %
- \gdef\xStream#1^^M{%
-    \expandafter\ProcessStreamLine}
- \gdef\ProcessStreamLine#1^^M{\def\test{#1}
-      \csarg\ifx{End\CurrentStream Test}\test
-          \edef\next{\noexpand\EndOfStream{\CurrentStream}}%
-      \else \ThisStream{#1}\let\next\ProcessStreamLine
-      \fi \next}
-}
-\long\def\streaminfo{\string\end{document}}
-\def\CSstringmeaning#1{\expandafter\CSgobblearrow\meaning#1}
-\def\CSstringcsnoescape#1{\expandafter\CSgobbleescape\string#1}
-{\escapechar-1
-\expandafter\expandafter\expandafter\gdef
-  \expandafter\expandafter\expandafter\CSgobblearrow
-    \expandafter\string\csname macro:->\endcsname{}
-}
-\def\CSgobbleescape#1{\ifnum`\\=`#1 \else #1\fi}
-\def\WriteStreamLine#1{\def\CStmp{#1}%
-    \immediate\write\PDFStream{\CSstringmeaning\CStmp}}
-
-\def\AfterIncludedStream
-   {\immediate\closeout\PDFStream  %changed on 2001/1/20
-    \relax
-    }%
-\def\BeforeIncludedStream
-   {\stepcounter{psfig}\xdef\PDFCutFile{\PDFTfigname.tex}%
-    \message{Opening PDFStream=\PDFCutFile}%
-    \immediate\openout\PDFStream=\PDFCutFile
-    \immediate\write\PDFStream{\string\documentclass{article}}
-    \immediate\write\PDFStream{\string\input\space tmp.inputs}
-    \immediate\write\PDFStream{\string\pagestyle{empty}}
-    \immediate\write\PDFStream{\string\usepackage{amssymb,amsbsy}}
-    \immediate\write\PDFStream{\string\begin{document}}
-    \let\ThisStream\WriteStreamLine}
-\long\def\specialstream #1#2#3{%
-     \message{Special stream '#1'}%
-    \csarg\def{After#1Stream}{#2\AfterIncludedStream#3}%
-    \csarg\def{#1}{\BeforeIncludedStream\relax
-          \ProcessStream{#1}}%
-    \PDFEndDef{#1}}
-\def\EndOfStream#1{\endgroup\end{#1}%
-    \csname After#1Stream\endcsname}
-\def\PDFEndDef#1{{\escapechar=-1\relax
-    \csarg\xdef{End#1Test}{\string\\end\string\{#1\string\}}%
-    }}
-%%
-%% The real meat of psfile manipulation starts here.
-%%
-%%
-\AtEndDocument{\endPShook%
-      \ifPDFTnopdf
-        \PackageWarningNoLine{pdftricks}
-        {******************************************\MessageBreak
-         Some PDF files of images were not found.\MessageBreak
-         Run the script `pst2pdf' before the next\MessageBreak
-         run of pdfLaTeX\MessageBreak
-         ******************************************}
-       \fi
-}
-\gdef\endPShook{}
-\def\noprocess{\global\noprocesstrue
-  \PackageWarning{pdftricks}
-        {******************************************\MessageBreak
-           Figure Number: \PDFTfigname\space is not processed \MessageBreak
-         ******************************************\MessageBreak}
-}
-\specialstream{pdfpic}{%
-         \immediate\write\PDFStream{\streaminfo}}
-        {\psgraphicsinclude\global\noprocessfalse}
-\newcounter{psfig}
-\newif\if@pdfGINwidth
-\newif\if@pdfGINheight
-\newif\if@pdfGINscale
-\long\gdef\psgraphicsinclude{%
-  \@ifundefined{Fig\thepsfig}
-  {\PDFTWarningNoLine{pdftricks}
-    {******************************************\MessageBreak
-     ************ Processing Fig: \thepsfig\space**********\MessageBreak
-    ******************************************}
-  }
-  {\noprocess}
-   \ifPDFTshell\ifnoprocess\relax\else
-    \IfFileExists{\PDFTfigname.tex}{%
-     \immediate\write18{latex -interaction=batchmode \PDFTfigname}
-  \PDFTWarningNoLine{pdftricks}
-    {******************************************\MessageBreak
-     \PDFTfigname.tex converted to \PDFTfigname.dvi\MessageBreak
-     ******************************************}
-    }{}
-    \IfFileExists{\PDFTfigname.dvi}{%
-     \immediate\write18{dvips -o \PDFTfigname.ps \PDFTfigname}
-     \immediate\write18{ps2eps -f \PDFTfigname.ps}
-  \PDFTWarningNoLine{pdftricks}
-    {******************************************\MessageBreak
-     \PDFTfigname.eps generated\MessageBreak
-     ******************************************}
-    }{}
-    \IfFileExists{\PDFTfigname.eps}{%
-      \immediate\write18{epstopdf \PDFTfigname.eps}
-  \PDFTWarningNoLine{pdftricks}
-    {******************************************\MessageBreak
-     \PDFTfigname.eps converted to \PDFTfigname.pdf\MessageBreak
-     ******************************************}
-    }{}
-    \ifmiktex%
-    \immediate\write18{del \PDFTfigname.aux \PDFTfigname.dvi \PDFTfigname.log \PDFTfigname.eps}     %%%%%% LDL-6
-    \else
-    \immediate\write18{rm \PDFTfigname.aux \PDFTfigname.dvi \PDFTfigname.log \PDFTfigname.eps} %%%%%% LDL-5
-   \fi\fi
-   \fi
-  \IfFileExists{\PDFTfigname.pdf}%
-     {\begin{center}
-     \bgroup\fboxsep\@PDFboxsep\fboxrule\@PDFboxrule%
-      \color{\@PDFgraphiccolor}%
-      \fcolorbox{\@PDFgraphiclinecolor}{\@PDFgraphicbackground}%
-     {\if@pdfGINwidth%
-       \includegraphics[width=\@PDFgraphicwidth]{\PDFTfigname}\else%
-      \if@pdfGINheight%
-       \includegraphics[height=\@PDFgraphicheight]{\PDFTfigname}\else%
-      \if@pdfGINscale%
-       \includegraphics[scale=\@PDFgraphicscale]{\PDFTfigname}\else%
-       \includegraphics{\PDFTfigname}\fi\fi\fi%
-     }\egroup\end{center}%
-      \global\@pdfGINwidthfalse\let\@PDFgraphicwidth\relax
-      \global\@pdfGINheightfalse\let\@PDFgraphicheight\relax
-      \global\@pdfGINscalefalse\let\@PDFgraphicscale\relax
-      }{\PDFTnopdftrue}
-   \gdef\@PDFgraphiclinecolor{white}
-   \gdef\@PDFgraphicbackground{white}
-   \gdef\@PDFboxsep{0pt}
-   \gdef\@PDFboxrule{0pt}
-}
-\definecolor{gray30}{gray}{.70}
-\definecolor{gray10}{gray}{.90}
-\RequirePackage{keyval}
-\def\configure[#1][#2]{\setkeys{#1}{#2}
-  \PDFTWarning{pdftricks}{Reconfigured #1 parameter(s)\MessageBreak  #2\MessageBreak}
-  }
-\define@key{pdfgraphic}{width}     {\gdef\@PDFgraphicwidth{#1}\global\@pdfGINwidthtrue}
-\define@key{pdfgraphic}{height}    {\gdef\@PDFgraphicheight{#1}\global\@pdfGINheighttrue}
-\define@key{pdfgraphic}{scale}     {\gdef\@PDFgraphicscale{#1}\global\@pdfGINscaletrue}
-\define@key{pdfgraphic}{color}     {\gdef\@PDFgraphiccolor{#1}}
-\define@key{pdfgraphic}{linecolor} {\gdef\@PDFgraphiclinecolor{#1}}
-\define@key{pdfgraphic}{background}{\gdef\@PDFgraphicbackground{#1}}
-\define@key{pdfgraphic}{linewidth} {\gdef\@PDFboxrule{#1}}
-\define@key{pdfgraphic}{rulesep}   {\gdef\@PDFboxsep{#1}}
-\gdef\@PDFgraphiccolor{black}
-\gdef\@PDFgraphiclinecolor{white}
-\gdef\@PDFgraphicbackground{white}
-\gdef\@PDFboxrule{0pt}
-\gdef\@PDFboxsep{0pt}
-%%
-%% Tweak to grab all the packages used in the master doc.
-%% This forces you to load pdftricks as the first package.
-%%
-\newenvironment{psinputs}{\begingroup
- \newwrite\CVinputs
- \immediate\openout\CVinputs=tmp.inputs
-  \def\usepackage{\@ifnextchar[\@CVUsepackage\@@CVUsepackage}
-  \def\@CVUsepackage[##1]##2{\immediate\write\CVinputs%
-     {\string\usepackage[##1]{##2}}}
-  \def\@@CVUsepackage##1{\immediate\write\CVinputs%
-     {\string\usepackage{##1}}}
- }
- {\endgroup\immediate\closeout\CVinputs}
-%%
-%% Arrays to keep the fig numbers
-%%
-\newcounter{arraylength}%
-\newcounter{ArrayIndex}%
-\newcounter{zeroCtr}%
-\newcounter{recordCtr}
-\setcounter{recordCtr}{1}
-\newcounter{Ctr}
-\def\DeclareArray#1{\Array{#1}[0]{}}%
-%
-\def\Array#1[#2]#3{%
-      \expandafter\gdef\csname #1#2\endcsname{#3}%
-      \expandafter\gdef\csname #1\endcsname[##1]{\csname #1##1\endcsname}}%
-%
-\def\getArraylength#1{\setcounter{arraylength}{0}%
-   \loop\expandafter\ifx\csname #1\thearraylength\endcsname\relax%
-   \else\stepcounter{arraylength}\repeat}%
-%
-\def\addToArray#1#2{\setcounter{arraylength}{0}%
-   \loop\expandafter\ifx\csname #1\thearraylength\endcsname\relax%
-   \else\stepcounter{arraylength}\repeat%
-   \Array{#1}[\thearraylength]{#2}}%
-%
-\def\clearArray#1{\getArraylength{#1}%
-   \loop\ifnum\c@arraylength >0%
-   \global\expandafter\let\csname #1\thearraylength\endcsname\relax%
-   \addtocounter{arraylength}{-1}\repeat}%
-%
-\long\def\ArrayIterator#1#2{%
-   \setcounter{ArrayIndex}{1}\getArraylength{#1}%
-   \setcounter{zeroCtr}{\c@arraylength}%
-   \loop\ifnum\c@ArrayIndex<\c@zeroCtr{#2}%
-   \stepcounter{ArrayIndex}\repeat%
-}%
-\def\@nnil{\@nil}
-\def\@empty{}
-\def\@cvrstop#1\@@#2{}
-%%
-%% Equivalent of \@tfor and \@for where any delimiter can be 
-%% provided instead of LaTeX's default comma character
-%%
-\long\def\cvr@delimfor#1#2#3{\DeclareArray{#1}\clearArray{#1}%
-   \long\def\@icvrloop##1#2##2\@@##3{\def##3{##1}\ifx ##3\@nnil%
-   \expandafter\@cvrstop \else\addToArray{#1}{##1}%
-    \relax\expandafter\@icvrloop\fi##2\@@##3}%
-   \long\def\@cvrloop##1#2##2#2##3\@@##4{\addToArray{#1}{##1}%
-   \def##4{##1}\ifx ##4\@nnil \else%
-    \def##4{##2}\def\y@y{##2}\ifx\y@y\@nnil\else%
-         \addToArray{#1}{##2}\fi\ifx ##4\@nnil \else%
-      \@icvrloop ##3\@@##4\fi\fi}%
-  \expandafter\def\expandafter\@fortmp\expandafter{#3}%
-  \ifx\@fortmp\@empty \else%
-    \expandafter\@cvrloop#3#2\@nil#2\@nil\@@\@ee@\fi}%
-%
-% Dont look into the following code. It is harmful
-% for your eyes and brain as well.
-%
-\newcounter{f@irstCtr}
-\newcounter{s@econdCtr}
-\long\gdef\NoProcess[#1]{%
-   \long\def\@i@@noprocess##1,##2\@@##3{\def##3{##1}\ifx ##3\@nnil%
-   \expandafter\@cvrstop \else
-      \expandafter\hyphencheck##1-@-*[*]
-    \relax\expandafter\@i@@noprocess\fi##2\@@##3}%
-   \long\def\@@@noprocess##1,##2,##3\@@##4{
-      \expandafter\hyphencheck##1-@-*[*]
-   \def##4{##1}\ifx ##4\@nnil \else%
-    \def##4{##2}\def\y@y{##2}\ifx\y@y\@nnil\else%
-      \expandafter\hyphencheck##2-@-*[*]
-         \fi\ifx ##4\@nnil \else%
-      \@i@@noprocess ##3\@@##4\fi\fi}%
-  \expandafter\def\expandafter\@fortmp\expandafter{#1}%
-  \ifx\@fortmp\@empty \else%
-    \expandafter\@@@noprocess#1,\@nil,\@nil\@@\@ee@\fi}%
-\def\d@d#1[*]{}
-\def\hyphencheck#1-#2-#3{\def\r@r{@}\def\s@s{*}\edef\c@c{#3}
-   \ifx\c@c\r@r
-   \setcounter{f@irstCtr}{#1}
-   \setcounter{s@econdCtr}{#2}
-   \stepcounter{s@econdCtr}
-   \loop\ifnum\thes@econdCtr > \thef@irstCtr% 
-      \expandafter\edef\csname Fig\thef@irstCtr\endcsname{TRUE}
-      \stepcounter{f@irstCtr}
-   \repeat%
-   \else\ifx\c@c\s@s% 
-      \expandafter\edef\csname Fig#1\endcsname{TRUE}
-   \fi\fi\d@d}
-
-%%
-%%
-%% End of file `pdftricks.sty'
-%%
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/pst2pdf b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/pst2pdf
deleted file mode 100755 (executable)
index e58bfe7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#! /bin/bash
-# pst2pdf
-# PSTricks 2 PDF converter :
-# Usage: "pst2pdf" produces PDF files for all files of the form *-fig*.tex
-#         "pst2pdf <FILE>" only considers FILE-fig.tex
-# It removes intermediary files at the end.
-
-FILE=$1
-if test -z $FILE; then
-               FIGURES=`ls *-fig*.tex`;
-else
-               FIGURES=`ls -- $FILE-fig*.tex`;
-fi
-
-for f in $FIGURES ; do
-  fig=`basename  $f .tex`
-  latex $fig
-  dvips -Ppdf -E -o $fig.eps $fig
-  epstopdf $fig.eps 
-  rm $fig.eps $fig.dvi $fig.log $fig.aux
-done
-
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/tmp.inputs b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/doc/tmp.inputs
deleted file mode 100644 (file)
index 6a46703..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-\usepackage{pstricks}
-\usepackage{pst-node}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/CXXTest.cc b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/CXXTest.cc
deleted file mode 100644 (file)
index 21b3972..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <iostream>
-
-using namespace std;
-
-class Test {
-public:
-    Test();
-    ~Test();
-    void sayhi();
-};
-
-class Exn {
-public:
-    Exn() { }
-};
-    
-
-Test test;
-
-int main(int argc,char *argv[]) {
-    printf("Name: %p\n",typeid(const char*).name());
-    printf("Name: %s\n",typeid(const char*).name());
-    printf("Is pointer: %d\n",typeid(const char*).__is_pointer_p ());
-    printf("Name: %p\n",typeid(int).name());
-    printf("Name: %s\n",typeid(int).name());
-    printf("Is pointer: %d\n",typeid(int).__is_pointer_p ());
-    
-    try {
-        test.sayhi();
-    } catch(char *e) {
-        printf("sayhi threw: %s\n",e);
-    } catch(const char *e) {
-        printf("sayhi threw: const char *:%s\n",e);
-    } catch(int n) {
-        printf("sayhi threw: %d\n",n);
-    }
-    return 0;
-}
-
-Test::Test() {
-    cout << "Test's constructor" << endl;
-}
-
-Test::~Test() {
-    cout << "Test's destructor" << endl;
-}
-
-void Test::sayhi() {
-    static char exn[] = "Non-const!";
-    cout << "Hello, World from Test" << endl;
-    cout << "Now throwing an exception" << endl;
-    throw "Hello, Exception Handling!";
-    //throw exn;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/CallTest.java b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/CallTest.java
deleted file mode 100644 (file)
index 95184ce..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-package tests;
-
-import org.ibex.nestedvm.Runtime;
-import java.io.*;
-import java.util.Date;
-
-public class CallTest {
-    public static void main(String[] args) throws Exception {
-        int a1 = args.length > 0 ? Integer.parseInt(args[0]) : 0;
-        int a2 = args.length > 1 ? Integer.parseInt(args[1]) : 0;
-        int a3 = args.length > 2 ? Integer.parseInt(args[2]) : 0;
-        int a4 = args.length > 3 ? Integer.parseInt(args[3]) : 0;
-        int a5 = args.length > 4 ? Integer.parseInt(args[4]) : 0;
-        int a6 = args.length > 5 ? Integer.parseInt(args[5]) : 0;
-        
-        System.out.println("Version is: " + System.getProperty("os.version"));
-        final Runtime rt;
-        if(a1 == 99) // yeah.. this is ugly
-            rt = new org.ibex.nestedvm.Interpreter("build/tests/Test.mips");
-        else
-            rt = (Runtime) Class.forName("tests.Test").newInstance();
-               
-        rt.setCallJavaCB(new Runtime.CallJavaCB() {
-                public int call(int a, int b, int c, int d) {
-                    switch(a) {
-                        case 1: return rt.strdup("OS: " + System.getProperty("os.name"));
-                        case 2: return rt.strdup(System.getProperty("os.version"));
-                        case 3: return rt.strdup(new Date().toString());
-                        case 4: return rt.addFD(new Runtime.InputOutputStreamFD(null,new CustomOS()));
-                        case 5:
-                            System.out.println("In callJava() in Java"); 
-                            try { rt.call("backinmips"); } catch(Runtime.CallException e) { }
-                            System.out.println("Back in callJava() in Java");
-                            return 0;
-                        default: return 0;
-                    }
-                }
-            });
-        System.out.println("Runtime: " + rt);
-        
-        rt.start(new String[]{"Test","calltest"});
-        rt.execute();
-        
-        System.out.println("== Start of CallTest ==");
-        System.out.println("Back in java... calling callme()");
-        int ret = rt.call("callme",new int[]{a1,a2,a3,a4,a5,a6});
-        System.out.println("callme returned: " + ret);
-        
-        int addr = rt.strdup("Hello, World from java");
-        rt.call("echo",addr,4);
-        rt.free(addr);
-        rt.call("echo",new Object[]{"Hello, World, from the Object[] call method",new Integer(2)});
-        System.out.println("== End of CallTest ==");
-        
-        rt.execute();
-        System.exit(rt.exitStatus());
-    }
-    
-    private static class CustomOS extends OutputStream {
-        public CustomOS() { }
-        public void write(int b) {  byte[] a = new byte[1]; a[0] = (byte)(b&0xff); write(a,0,1); }
-        public void write(byte[] b, int off, int len) {
-            int len2 = len;
-            while(b[len2-1]=='\n') len2--;
-            System.out.println("This just in from MIPS: " + new String(b,off,len2));
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Echo.java b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Echo.java
deleted file mode 100644 (file)
index 6ef97ae..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-package tests;
-
-import java.net.*;
-
-import org.ibex.nestedvm.Runtime;
-
-public class Echo {
-    private static final int PORT = 2000;
-    public static void main(String[] args) throws Exception {
-        ServerSocket sock = new ServerSocket(PORT);
-        System.err.println("Listening on " + PORT);
-        for(;;) new Client(sock.accept()).go();
-    }
-    
-    private static class Client implements Runnable {
-        private Socket sock;
-        public Client(Socket sock) { this.sock = sock; }
-        public void go() { new Thread(this).start(); }
-        public void run() {
-            try {
-                Runtime task = (Runtime) Class.forName("tests.EchoHelper").newInstance();
-                task.closeFD(0);
-                task.closeFD(1);
-                //task.closeFD(2);
-                task.addFD(new Runtime.InputStreamFD(sock.getInputStream()));
-                task.addFD(new Runtime.OutputStreamFD(sock.getOutputStream()));
-                //task.dupFD(1);
-                
-                int status = task.run(new String[]{"EchoHelper"} );
-                System.err.println("Exit status: " + status);
-            } catch(Exception e) {
-                System.err.println(e);
-            }
-        }
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/EchoHelper.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/EchoHelper.c
deleted file mode 100644 (file)
index 32c95e0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-int main() {
-    char buf[1024];
-    char *p;
-    printf("Hello! Welcome to EchoHelper.c\n");
-    while(fgets(buf,sizeof(buf),stdin) != NULL) {
-        for(p=buf;*p && *p!='\n' && *p!='\r';p++);
-        *p = '\0';
-        fprintf(stdout,"You said: %s\n",buf);
-        fflush(stdout);
-        fprintf(stderr,"They said: %s\n",buf);
-        if(strcmp(buf,"exit")==0) break;
-    }
-    return 0;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Env.java b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Env.java
deleted file mode 100644 (file)
index be64739..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-package tests;
-
-import org.ibex.nestedvm.Runtime;
-
-class Env {
-    public static void main(String[] args) throws Exception {
-        int n = 0;
-        while(n < args.length && args[n].indexOf("=") != -1) n++;
-
-        if(n==args.length) {
-            System.err.println("Usage: Env [name=value ...] classname [args ...]");
-            System.exit(1);
-        }
-        
-        String[] env = new String[n];
-        String[] appArgs = new String[args.length-n-1];
-        for(int i=0;i<n;i++) env[i] = args[i];
-        String className = args[n];
-        for(int i=n+1;i<args.length;i++) appArgs[i-n-1] = args[i];
-        
-        Runtime rt;
-        if(className.endsWith(".mips")) {
-            rt = new org.ibex.nestedvm.Interpreter(className);
-        } else {
-            Class c = Class.forName(className);
-            if(!Runtime.class.isAssignableFrom(c)) { System.err.println(className + " isn't a MIPS compiled class"); System.exit(1); }
-            rt = (Runtime) c.newInstance();
-        }
-        System.exit(rt.run(appArgs,env));
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FTBench.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FTBench.c
deleted file mode 100644 (file)
index 9bb6dac..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <stdio.h>
-#include <freetype/freetype.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#define FT_Check(expr) do { \
-    if((expr) != 0) { \
-        fprintf(stderr,#expr " failed\n"); \
-        exit(EXIT_FAILURE); \
-    } \
-} while(0)
-
-#define BMP_WIDTH 800
-#define BMP_HEIGHT 600
-
-static char buf[BMP_WIDTH*BMP_HEIGHT];
-
-int main(int argc, char **argv) {
-    char *ttf;
-    char *out;
-    FT_Library library;
-    FT_Face face;
-    FT_GlyphSlot glyph;
-    int num_glyphs;
-    int c;
-    int glyph_index;
-    int loc_x;
-    int loc_y;
-    int glyph_width;
-    int glyph_height;
-    int i,j;
-    int fd;
-    char *p;
-    int n,count;
-    char *glyph_buf;
-    int pixel_size;
-    
-    if(argc < 3) {
-        fprintf(stderr,"Usage: %s ttf bmp\n",argv[0]);
-        exit(1);
-    }
-    
-    ttf = argv[1];
-    out = argv[2];
-    
-    memset(buf,'\377',BMP_WIDTH*BMP_HEIGHT);
-    
-    FT_Check(FT_Init_FreeType(&library));
-    FT_Check(FT_New_Face(library,ttf,0,&face));
-    
-    loc_y = loc_x = 0;
-    for(pixel_size=8;pixel_size<48;pixel_size+=4) {
-        FT_Check(FT_Set_Pixel_Sizes(face,0,pixel_size));
-        for(c=32;c<127;c++) {
-            glyph_index = FT_Get_Char_Index(face,c);
-            FT_Check(FT_Load_Glyph(face,glyph_index,FT_LOAD_DEFAULT));
-            FT_Check(FT_Render_Glyph(face->glyph, ft_render_mode_normal));
-            glyph = face->glyph;
-            glyph_width = glyph->bitmap.width;
-            glyph_height = glyph->bitmap.rows;
-            glyph_buf = glyph->bitmap.buffer;
-            if(loc_x + glyph_width + glyph->bitmap_left >= BMP_WIDTH) {
-                loc_x = 0;
-                loc_y += pixel_size;
-                if(loc_y >= BMP_HEIGHT-pixel_size) goto done;
-            }
-            
-            for(i=0;i<glyph_height;i++)
-                for(j=0;j<glyph_width;j++)
-                    buf[(loc_y+i)*BMP_WIDTH+loc_x+j] &= (~glyph_buf[i*glyph_width+j]);
-            loc_x += face->glyph->advance.x/64;
-        }
-    }
-done:
-    
-    if((fd = open(out,O_CREAT|O_WRONLY,0644)) < 0) {
-        perror("open");
-        exit(1);
-    }
-    p = buf;
-    count = BMP_WIDTH*BMP_HEIGHT;
-    
-    while(count) {
-        n = write(fd,p,count);
-        if(n < 0) {
-            perror("write");
-            exit(1);
-        }
-        count -=n;
-        p += n;
-    }
-    close(fd);
-    
-    return 0;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Fork.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Fork.c
deleted file mode 100644 (file)
index fce4546..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-
-int main() {
-    fprintf(stderr,"In the main process (pid: %d), about to fork\n",getpid());
-    pid_t pid;
-    int status;
-    int i;
-    
-    pid = fork();
-    switch(pid) {
-        case -1: perror("fork"); break;
-        case 0: 
-            fprintf(stderr,"In the forked process (pid: %d), sleeping for 2 sec\n",getpid());
-            sleep(2);
-            fprintf(stderr,"Child done sleeping... exiting\n");
-            _exit(0);
-            break;
-        default:
-            fprintf(stderr,"In the main process (child is: %d) waiting for child\n",pid);
-            if(waitpid(pid,&status,0) < 0)
-                perror("waitpid");
-            else
-                fprintf(stderr,"Child process exited (status: %d)\n",status);
-    }
-    pid = fork();
-    if(pid==0) {
-        fprintf(stderr,"1st fork (pid: %d)\n",getpid());
-        if(fork()==0) {
-            fprintf(stderr,"2nd fork (pid: %d).. sleeping\n",getpid());
-            sleep(5);
-            fprintf(stderr,"2nd fork exiting\n");
-            _exit(0);
-        }
-        fprintf(stderr,"1st fork (pid: %d) exiting\n",getpid());
-        _exit(0);
-    } else  {
-        waitpid(pid,NULL,0);
-        fprintf(stderr,"1st  fork terminated\n");
-    }
-    fprintf(stderr,"Sleeping for a bit\n");
-    sleep(10);
-    
-    fprintf(stderr,"Next few pids should be sequential\n");
-    for(i=0;i<10;i++) {
-        if(fork() == 0) {
-            fprintf(stderr,"I am a child %d\n",getpid());
-            sleep(i%4 + 5);
-            fprintf(stderr,"Child %d exiting\n",getpid());
-            _exit(0);
-        }
-    }
-    for(i=0;i<10;i++) fprintf(stderr,"Waited on %d\n",waitpid(-1,NULL,0));
-    
-    return 0;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FreeTypeDemo.java b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FreeTypeDemo.java
deleted file mode 100644 (file)
index 6749728..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-package tests;
-
-import org.ibex.nestedvm.Runtime;
-import org.ibex.nestedvm.Interpreter;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.image.*;
-import java.awt.event.*;
-import java.io.*;
-
-public class FreeTypeDemo {
-    private JFrame frame;
-    private static final int OURWIDTH=640;
-    private static final int OURHEIGHT=256;
-    private static final int BASELINE=160;
-    private byte[] render = new byte[OURWIDTH*OURHEIGHT];
-    private int size = 72;
-    private StringBuffer sb = new StringBuffer();
-    private View view;
-    private Image image;
-    
-    private Runnable renderThread;
-    private String theText;
-    private boolean renderNeeded;
-    
-    private String name;
-    private Runtime rt;
-    
-    int renderAddr;
-    int stringAddr;
-    int stringSize;
-    
-    public static void main(String[] argv) throws Exception {
-        new FreeTypeDemo(argv);
-    }
-    
-    public FreeTypeDemo(String[] argv) throws Exception {
-        if(argv.length >= 2 && argv[1].startsWith("int")) {
-            name = "Interpreter";
-            rt = new Interpreter("build/FreeTypeDemoHelper.mips");
-        } else {
-            rt = (Runtime) Class.forName("tests.FreeTypeDemoHelper").newInstance();
-            name = "Compiler";
-        }
-        
-        rt.start(new String[]{ "freetype.mips"});
-        if(rt.execute()) throw new Error("freetype.mips exited");
-
-        byte[] font = InputStreamToByteArray.convert(new FileInputStream(argv[0]));
-        int fontAddr = rt.malloc(font.length);
-        if(fontAddr == 0) throw new Error("malloc() failed");
-        rt.copyout(font,fontAddr,font.length);
-        
-        rt.setUserInfo(0,fontAddr);
-        rt.setUserInfo(1,font.length);
-
-        renderAddr = rt.malloc(OURWIDTH*OURHEIGHT);
-        if(renderAddr == 0) throw new Error("malloc() failed");
-        
-        if(rt.execute()) throw new Error("freetype.mips exited (" + rt.getUserInfo(1) +")");
-
-        createImage();
-        
-        frame = new JFrame("FreeTypeDemo - " + name);
-        frame.setSize(OURWIDTH,OURHEIGHT);
-        view = new View();
-        frame.getContentPane().add(view,BorderLayout.CENTER);
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.show();
-        view.requestFocus();
-        renderThread = new Runnable() {
-            public void run() {
-                try {
-                    for(;;) {
-                         synchronized(this) { while(!renderNeeded) wait(); renderNeeded = false; }
-                        renderText(theText==null ? "" : theText);
-                    }
-                } catch(Exception e) { throw new Error(e); }
-            }
-        };
-        new Thread(renderThread).start();
-        keyPress('\n');
-    }
-   
-    private static ColorModel cmodel = new DirectColorModel(8, 0xff,0xff,0xff);
-    private void createImage() {
-        for(int i=0;i<OURHEIGHT;i++)
-            for(int j=0;j<OURWIDTH;j++)
-                render[i*OURWIDTH+j] = (byte)((~(render[i*OURWIDTH+j]&0xff))&0xff);
-        image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(OURWIDTH, OURHEIGHT, cmodel, render, 0, OURWIDTH));
-        MediaTracker mediatracker = new MediaTracker(new Canvas());
-        mediatracker.addImage(image, 1);
-        try { mediatracker.waitForAll(); } catch (InterruptedException e) { }
-        mediatracker.removeImage(image);
-    }
-    private void renderText(String s) {
-        try {
-            byte[] b = (s+"\0").getBytes("UTF-16BE");
-            if(stringSize < b.length) {
-                System.err.println("reallocing the string space");
-                if(stringAddr != 0) rt.free(stringAddr);
-                stringAddr = rt.malloc(b.length*2);
-                if(stringAddr == 0) throw new Error("malloc failed");
-                stringSize = b.length*2;
-            }
-            rt.copyout(b,stringAddr,b.length);
-            long start = System.currentTimeMillis();
-            if(rt.call("render",new int[]{stringAddr,size,renderAddr,OURWIDTH,OURHEIGHT,BASELINE})==0)
-                throw new Error("render() failed");
-            System.out.println(name + ": Render of: " + s + " took " + (System.currentTimeMillis()-start) + " ms");
-            rt.copyin(renderAddr,render,render.length);
-            createImage();
-            view.repaint();
-        } catch(Exception e) {
-            throw new Error(e);
-        }
-    }
-    
-    private void keyPress(char c) {
-        if(c == '\n' || c == '\r') {
-            sb.setLength(0);
-            theText = "Press any key";
-        } else if(c == '+' || c == '-') {
-            size += (c=='+'?1:-1) * 8;
-            System.out.println("New size: " + size);
-        } else {
-            sb.append(c);
-            theText = sb.toString();
-        }
-        synchronized(renderThread) { renderNeeded = true; renderThread.notify(); }
-    }
-                
-    public class View extends JComponent {
-        public void paintComponent(Graphics g) {
-            g.drawImage(image,0,0,OURWIDTH,OURHEIGHT,0,0,OURWIDTH,OURHEIGHT,null);
-        }
-        public View() {
-            addKeyListener(new KeyAdapter() {
-                public void keyTyped(KeyEvent e) {
-                    keyPress(e.getKeyChar());
-                }
-            });
-            setPreferredSize(new Dimension(OURWIDTH,OURHEIGHT));
-        }
-    }
-    private static class InputStreamToByteArray {
-
-        /** scratch space for isToByteArray() */
-        private static byte[] workspace = new byte[16 * 1024];
-        /** Trivial method to completely read an InputStream */
-        public static synchronized byte[] convert(InputStream is) throws IOException {
-            int pos = 0;
-            while (true) {
-                int numread = is.read(workspace, pos, workspace.length - pos);
-                if (numread == -1) break;
-                else if (pos + numread < workspace.length) pos += numread;
-                else {
-                    pos += numread;
-                    byte[] temp = new byte[workspace.length * 2];
-                    System.arraycopy(workspace, 0, temp, 0, workspace.length);
-                    workspace = temp;
-                }
-            }
-            byte[] ret = new byte[pos];
-            System.arraycopy(workspace, 0, ret, 0, pos);
-            return ret;
-        }
-    }
-}
-
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FreeTypeDemoHelper.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/FreeTypeDemoHelper.c
deleted file mode 100644 (file)
index cfae8ff..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
-
-#include <unistd.h>
-#include <freetype/freetype.h>
-
-FT_Library  library;   /* handle to library     */
-FT_Face     face;      /* handle to face object */
-
-#define FT_Check(expr,err) do { \
-    if((expr) != 0) { \
-        errprint(#expr " failed\n"); \
-            return err; \
-    } \
-} while(0)
-
-#define max(a,b) ((a) > (b) ? (a) : (b))
-#define min(a,b) ((a) < (b) ? (a) : (b))
-
-static int errprint(const char *s) {
-    int l = strlen(s);
-    int n;
-    while(l) {
-        n = write(STDERR_FILENO,s,l);
-        if(n < 0) return n;
-        l -= n;
-        s += n;
-    }
-    return 0;
-}
-        
-void draw(FT_GlyphSlot glyph,int x, char *buf, int buf_width, int buf_height, int baseline) {
-    int y = max(baseline - glyph->bitmap_top,0);
-    int rows = glyph->bitmap.rows;
-    int width = glyph->bitmap.width;
-    int i,j;
-    x = x + glyph->bitmap_left;
-    if(x + width >= buf_width) return;
-    if(y + rows >= buf_height) return;
-    //if(buf == NULL) fprintf(stderr,"ABout to dereference %p\n",buf);
-    for(i=0;i<rows;i++)
-        for(j=0;j<width;j++)
-            buf[(i+y)*buf_width+x+j] |= glyph->bitmap.buffer[i*width+j];
-}
-
-/* Prevent --gc-sections from blowing this away */
-int render(short *s, int size, char *buf, int buf_width, int buf_height, int baseline)  __attribute__((section(".text")));
-int render(short *s, int size, char *buf, int buf_width, int buf_height, int baseline) {
-    int glyph_index;
-    int x = 0;
-    FT_Check(FT_Set_Pixel_Sizes(face,0,size),0);
-    memset(buf,'\0',buf_width*buf_height);
-    //fprintf(stderr,"Rendering %d pt %c... at %p (%dx%d)\n",size,*s,buf,buf_width,buf_height);
-    while(*s) {
-        glyph_index = FT_Get_Char_Index(face,*s);
-        FT_Check(FT_Load_Glyph(face,glyph_index,FT_LOAD_DEFAULT),0);
-        FT_Check(FT_Render_Glyph(face->glyph,FT_RENDER_MODE_NORMAL/*256color antialiased*/),0);
-        draw(face->glyph,x,buf,buf_width,buf_height,baseline);
-        x += face->glyph->advance.x/64;
-        s++;
-    }
-    return 1;
-}
-
-char * user_info[2];
-extern void _pause();
-
-int main(int argc,char** argv) {
-    char *fontdata;
-    int fontsize;
-
-    _pause();
-    
-    fontdata = user_info[0];
-    fontsize = (int)user_info[1];
-    
-    //fprintf(stderr,"Initializng freetype with a %d byte font at %p\n", fontsize, fontdata);
-    
-    FT_Check(FT_Init_FreeType(&library),EXIT_FAILURE);
-    FT_Check(FT_New_Memory_Face(library, fontdata,fontsize, 0, &face),EXIT_FAILURE);
-    
-    errprint("Freetype initialized\n");
-    _pause();
-    errprint("Unpaused\n");
-    
-    /* not reached */
-    return EXIT_FAILURE;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Hello.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Hello.c
deleted file mode 100644 (file)
index d7189ae..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main() {
-    puts("Hello, World");
-    return 0;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPack.java b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPack.java
deleted file mode 100644 (file)
index c154703..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-package tests;
-
-import org.ibex.nestedvm.Runtime;
-import java.io.*;
-
-public class MSPack {
-    private String[] fileNames;
-    private int[] lengths;
-    private byte[][] data;
-        
-    public static class MSPackException extends IOException { public MSPackException(String s) { super(s); } }
-    
-    public MSPack(InputStream cabIS) throws IOException {
-        byte[] cab = InputStreamToByteArray.convert(cabIS);        
-        try {
-            //Interpreter vm = new Interpreter("mspack.mips");
-                       Runtime vm;
-                       try {
-                                vm = (Runtime) Class.forName("tests.MSPackHelper").newInstance();
-                       } catch(Exception e) {
-                               throw new MSPackException("couldn't instansiate MSPackHelper");
-                       }
-            int cabAddr = vm.sbrk(cab.length);
-            if(cabAddr < 0) throw new MSPackException("sbrk failed");
-        
-            vm.copyout(cab,cabAddr,cab.length);
-        
-            vm.setUserInfo(0,cabAddr);
-            vm.setUserInfo(1,cab.length);
-        
-            int status = vm.run(new String[]{ "mspack.mips"} );
-            if(status != 0) throw new MSPackException("mspack.mips failed (" + status + ")");
-            
-            /*static struct {
-                char *filename;
-                char *data;
-                int length;
-            } output_table[MAX_MEMBERS+1]; */
-
-            int filesTable = vm.getUserInfo(2);
-            int count=0;
-            while(vm.memRead(filesTable+count*12) != 0) count++;
-            
-            fileNames = new String[count];
-            data = new byte[count][];
-            lengths = new int[count];
-            
-            for(int i=0,addr=filesTable;i<count;i++,addr+=12) {
-                int length = vm.memRead(addr+8);
-                data[i] = new byte[length];
-                lengths[i] = length;
-                fileNames[i] = vm.cstring(vm.memRead(addr));
-                System.out.println("" + fileNames[i]);
-                vm.copyin(vm.memRead(addr+4),data[i],length);
-            }
-        } catch(Runtime.ExecutionException e) {
-            e.printStackTrace();
-            throw new MSPackException("mspack.mips crashed");
-        }
-    }
-    
-    public String[] getFileNames() { return fileNames; }
-    public int[] getLengths() { return lengths; }
-    public InputStream getInputStream(int index) { return new ByteArrayInputStream(data[index]); }
-    public InputStream getInputStream(String fileName) {
-        for(int i=0;i<fileNames.length;i++) {
-            if(fileName.equalsIgnoreCase(fileNames[i])) return getInputStream(i);
-        }
-        return null;
-    }
-    
-    public static void main(String[] args) throws IOException {
-        MSPack pack = new MSPack(new FileInputStream(args[0]));
-        String[] files = pack.getFileNames();
-        for(int i=0;i<files.length;i++)
-            System.out.println(i + ": " + files[i] + ": " + pack.getLengths()[i]);
-        System.out.println("Writing " + files[files.length-1]);
-        InputStream is = pack.getInputStream(files.length-1);
-        OutputStream os = new FileOutputStream(files[files.length-1]);
-        int n;
-        byte[] buf = new byte[4096];
-        while((n = is.read(buf)) != -1) os.write(buf,0,n);
-        os.close();
-        is.close();
-    }
-    private static class InputStreamToByteArray {
-
-        /** scratch space for isToByteArray() */
-        private static byte[] workspace = new byte[16 * 1024];
-        /** Trivial method to completely read an InputStream */
-        public static synchronized byte[] convert(InputStream is) throws IOException {
-            int pos = 0;
-            while (true) {
-                int numread = is.read(workspace, pos, workspace.length - pos);
-                if (numread == -1) break;
-                else if (pos + numread < workspace.length) pos += numread;
-                else {
-                    pos += numread;
-                    byte[] temp = new byte[workspace.length * 2];
-                    System.arraycopy(workspace, 0, temp, 0, workspace.length);
-                    workspace = temp;
-                }
-            }
-            byte[] ret = new byte[pos];
-            System.arraycopy(workspace, 0, ret, 0, pos);
-            return ret;
-        }
-    }
-}
-
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPackBench.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPackBench.c
deleted file mode 100644 (file)
index 2966c6f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <sys/fcntl.h>
-
-#include "mspack.h"
-
-int main(int argc, char **argv) {
-    struct mscab_decompressor *decomp;
-    struct mscabd_cabinet *cab;
-    struct mscabd_file *file;
-    int i;
-    
-    if(argc < 2) {
-        fprintf(stderr,"Usage: %s cab\n",argv[0]);
-        exit(1);
-    }
-    
-    
-    decomp = mspack_create_cab_decompressor(NULL);
-    if(!decomp) exit(1);
-    
-    for(i=1;i<argc;i++) {
-        cab = decomp->search(decomp,argv[i]);
-        if(!cab) exit(2);
-    
-        for(file = cab->files;file;file=file->next)
-            decomp->extract(decomp,file,file->filename);
-         
-        decomp->close(decomp,cab);
-    }
-    mspack_destroy_cab_decompressor(decomp);
-
-    return 0;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPackHelper.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/MSPackHelper.c
deleted file mode 100644 (file)
index ddbcfcf..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-UserInfo:
-    On start:
-        0: Addr of CAB/EXE
-        1: Length of CAB/EXE
-    On Edit:
-        2: Addr of output_table array
-
-Exit codes:
-    0: Success
-    1: Internal Error
-    2: Invalid CAB
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <sys/fcntl.h>
-
-#include "mspack.h"
-
-#define MAX(a,b) (((a)>(b))?(a):(b))
-#define MIN(a,b) (((a)<(b))?(a):(b))
-#define MAX_MEMBERS 64
-
-char *xstrdup(const char *s) {
-    char *ret = strdup(s);
-    if(ret == NULL) exit(1);
-    return ret;
-}
-
-typedef struct {
-    char *addr;
-    int pos;
-    int size;
-    int length;
-    int writable;
-} mem_buf_t;
-
-static mem_buf_t *cab_mem_buf = NULL;
-
-static void mem_buf_grow(mem_buf_t *buf,size_t newsize) {
-    size_t new_len;
-    char *p;
-    if(buf->length < 0) exit(1); 
-    if(newsize <= buf->length) return;
-    new_len = MAX(buf->length ? buf->length*2 : 65536,newsize);
-    p = realloc(buf->addr,new_len);
-    if(p == NULL) exit(1);
-    buf->addr = p;
-    buf->length = new_len;
-}
-
-static struct {
-    char *filename;
-    mem_buf_t buf;
-} write_buf_table[MAX_MEMBERS];
-
-static struct {
-    char *filename;
-    char *data;
-    int length;
-} output_table[MAX_MEMBERS+1];
-
-static struct mspack_file *my_open(struct mspack_system *sys, char *filename, int mode) {
-    mem_buf_t *buf = NULL;
-    int i;
-    if(strcmp(filename,"/dev/cab")==0) {    
-        if(mode != MSPACK_SYS_OPEN_READ) return NULL;
-        buf = cab_mem_buf;
-    } else {
-        if(mode != MSPACK_SYS_OPEN_WRITE) return NULL;
-        
-        for(i=0;i<MAX_MEMBERS;i++) {
-            if(write_buf_table[i].filename == NULL) {
-                printf("%s in %d\n",filename,i);
-                write_buf_table[i].filename = xstrdup(filename);
-                buf = &write_buf_table[i].buf;
-                buf->writable = 1;
-                break;
-            }
-        }
-    }
-    
-    return (struct mspack_file *) buf;
-}
-
-static void my_close(struct mspack_file *buf_) {
-    mem_buf_t *buf = (mem_buf_t*) buf_;
-    /* NO OP */
-}
-
-static int my_read(struct mspack_file *buf_, void *out, int count) {
-    mem_buf_t *buf = (mem_buf_t*) buf_;
-    count = MIN(buf->size - buf->pos, count);
-    memcpy(out,buf->addr + buf->pos,count);
-    buf->pos += count;
-    return count;
-}
-
-static int my_write(struct mspack_file *buf_, void *in, int count) {
-    mem_buf_t *buf = (mem_buf_t*) buf_;
-    if(!buf->writable) return -1;
-    if(buf->length < buf->pos + count) mem_buf_grow(buf,buf->pos + count);
-    memcpy(buf->addr+buf->pos,in,count);
-    buf->pos += count;
-    buf->size = MAX(buf->size,buf->pos);
-    return count;
-}
-
-static int my_seek(struct mspack_file *buf_, off_t off, int mode) {
-    mem_buf_t *buf = (mem_buf_t*) buf_;
-    int newpos;
-    switch(mode) {
-        case MSPACK_SYS_SEEK_START: newpos = off; break;
-        case MSPACK_SYS_SEEK_CUR: newpos = buf->pos + off; break;
-        case MSPACK_SYS_SEEK_END: newpos = buf->size - off; break;
-        default: return -1;
-    }
-    if(newpos < 0) return -1;
-    if(newpos > buf->size) {
-        if(!buf->writable) return -1;
-        if(newpos > buf->length)
-            mem_buf_grow(buf,newpos);
-    }
-    buf->pos = newpos;
-    return 0;
-}
-
-static off_t my_tell(struct mspack_file *buf_) {
-    mem_buf_t *buf = (mem_buf_t*) buf_;
-    return buf ? buf->pos : 0;
-}
-
-static void my_message(struct mspack_file *file, char *format, ...) {
-  va_list ap;
-  va_start(ap, format);
-  vfprintf(stderr, format, ap);
-  va_end(ap);
-  fputc((int) '\n', stderr);
-  fflush(stderr);
-}
-
-static void *my_alloc(struct mspack_system *sys, size_t size) { return malloc(size); }
-static void my_free(void *p) { free(p); }
-static void my_copy(void *src, void *dest, size_t bytes) { memcpy(dest, src, bytes); }
-
-static struct mspack_system my_system =  {
-    &my_open,
-    &my_close,
-    &my_read, 
-    &my_write,
-    &my_seek,
-    &my_tell,
-    &my_message,
-    &my_alloc,
-    &my_free,
-    &my_copy,
-    NULL
-};
-
-char *user_info[4];
-
-int main(int argc, char **argv) {
-    struct mscab_decompressor *decomp;
-    struct mscabd_cabinet *cab;
-    struct mscabd_file *file;
-        mem_buf_t mem_buf;
-        size_t size = (size_t)user_info[1];
-        int i;
-        
-        mem_buf.addr = user_info[0];
-        mem_buf.pos = mem_buf.writable = 0;
-        mem_buf.length = -1;
-        mem_buf.size = size;
-        
-        cab_mem_buf = &mem_buf;
-                
-    decomp = mspack_create_cab_decompressor(&my_system);
-    if(!decomp) exit(1);
-    
-    cab = decomp->search(decomp,"/dev/cab");
-    if(!cab) exit(2);
-    
-        for(file = cab->files;file;file=file->next)
-            decomp->extract(decomp,file,file->filename);
-        
-    decomp->close(decomp,cab);
-    mspack_destroy_cab_decompressor(decomp);
-        
-    printf("Success!\n");
-    
-        for(i=0;i<MAX_MEMBERS && write_buf_table[i].filename;i++) {
-            output_table[i].filename = write_buf_table[i].filename;
-            output_table[i].data = write_buf_table[i].buf.addr;
-            output_table[i].length = write_buf_table[i].buf.size;
-        }
-        
-        user_info[2] = (char*) output_table;
-        
-        /*
-        if(output_table[0].filename) {
-            printf("%s in 0\n",write_buf_table[0].filename);
-            fp = fopen(output_table[0].filename,"wb");
-            if(fp) {
-                fwrite(output_table[0].data,1,output_table[0].length,fp);
-                fclose(fp);
-                printf("Wrote: %s\n",output_table[0].filename);
-            }
-        }
-        */
-        
-    return 0;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Paranoia.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Paranoia.c
deleted file mode 100644 (file)
index 1d3d55c..0000000
+++ /dev/null
@@ -1,2247 +0,0 @@
-/*     A C version of Kahan's Floating Point Test "Paranoia"
-
-                       Thos Sumner, UCSF, Feb. 1985
-                       David Gay, BTL, Jan. 1986
-
-       This is a rewrite from the Pascal version by
-
-                       B. A. Wichmann, 18 Jan. 1985
-
-       (and does NOT exhibit good C programming style).
-
-       Adjusted to use Standard C headers 19 Jan. 1992 (dmg);
-       compile with -DKR_headers or insert
-#define KR_headers
-       at the beginning if you have an old-style C compiler.
-
-(C) Apr 19 1983 in BASIC version by:
-       Professor W. M. Kahan,
-       567 Evans Hall
-       Electrical Engineering & Computer Science Dept.
-       University of California
-       Berkeley, California 94720
-       USA
-
-converted to Pascal by:
-       B. A. Wichmann
-       National Physical Laboratory
-       Teddington Middx
-       TW11 OLW
-       UK
-
-converted to C by:
-
-       David M. Gay            and     Thos Sumner
-       AT&T Bell Labs                  Computer Center, Rm. U-76
-       600 Mountain Avenue             University of California
-       Murray Hill, NJ 07974           San Francisco, CA 94143
-       USA                             USA
-
-with simultaneous corrections to the Pascal source (reflected
-in the Pascal source available over netlib).
-[A couple of bug fixes from dgh = sun!dhough incorporated 31 July 1986.]
-
-Reports of results on various systems from all the versions
-of Paranoia are being collected by Richard Karpinski at the
-same address as Thos Sumner.  This includes sample outputs,
-bug reports, and criticisms.
-
-You may copy this program freely if you acknowledge its source.
-Comments on the Pascal version to NPL, please.
-
-
-The C version catches signals from floating-point exceptions.
-If signal(SIGFPE,...) is unavailable in your environment, you may
-#define NOSIGNAL to comment out the invocations of signal.
-
-This source file is too big for some C compilers, but may be split
-into pieces.  Comments containing "SPLIT" suggest convenient places
-for this splitting.  At the end of these comments is an "ed script"
-(for the UNIX(tm) editor ed) that will do this splitting.
-
-By #defining Single when you compile this source, you may obtain
-a single-precision C version of Paranoia.
-
-
-The following is from the introductory commentary from Wichmann's work:
-
-The BASIC program of Kahan is written in Microsoft BASIC using many
-facilities which have no exact analogy in Pascal.  The Pascal
-version below cannot therefore be exactly the same.  Rather than be
-a minimal transcription of the BASIC program, the Pascal coding
-follows the conventional style of block-structured languages.  Hence
-the Pascal version could be useful in producing versions in other
-structured languages.
-
-Rather than use identifiers of minimal length (which therefore have
-little mnemonic significance), the Pascal version uses meaningful
-identifiers as follows [Note: A few changes have been made for C]:
-
-
-BASIC   C               BASIC   C               BASIC   C               
-
-   A                       J                       S    StickyBit
-   A1   AInverse           J0   NoErrors           T
-   B    Radix                    [Failure]         T0   Underflow
-   B1   BInverse           J1   NoErrors           T2   ThirtyTwo
-   B2   RadixD2                  [SeriousDefect]   T5   OneAndHalf
-   B9   BMinusU2           J2   NoErrors           T7   TwentySeven
-   C                             [Defect]          T8   TwoForty
-   C1   CInverse           J3   NoErrors           U    OneUlp
-   D                             [Flaw]            U0   UnderflowThreshold
-   D4   FourD              K    PageNo             U1
-   E0                      L    Milestone          U2
-   E1                      M                       V
-   E2   Exp2               N                       V0
-   E3                      N1                      V8
-   E5   MinSqEr            O    Zero               V9
-   E6   SqEr               O1   One                W
-   E7   MaxSqEr            O2   Two                X
-   E8                      O3   Three              X1
-   E9                      O4   Four               X8
-   F1   MinusOne           O5   Five               X9   Random1
-   F2   Half               O8   Eight              Y
-   F3   Third              O9   Nine               Y1
-   F6                      P    Precision          Y2
-   F9                      Q                       Y9   Random2
-   G1   GMult              Q8                      Z
-   G2   GDiv               Q9                      Z0   PseudoZero
-   G3   GAddSub            R                       Z1
-   H                       R1   RMult              Z2
-   H1   HInverse           R2   RDiv               Z9
-   I                       R3   RAddSub
-   IO   NoTrials           R4   RSqrt
-   I3   IEEE               R9   Random9
-
-   SqRWrng
-
-All the variables in BASIC are true variables and in consequence,
-the program is more difficult to follow since the "constants" must
-be determined (the glossary is very helpful).  The Pascal version
-uses Real constants, but checks are added to ensure that the values
-are correctly converted by the compiler.
-
-The major textual change to the Pascal version apart from the
-identifiersis that named procedures are used, inserting parameters
-wherehelpful.  New procedures are also introduced.  The
-correspondence is as follows:
-
-
-BASIC       Pascal
-lines 
-
-  90- 140   Pause
- 170- 250   Instructions
- 380- 460   Heading
- 480- 670   Characteristics
- 690- 870   History
-2940-2950   Random
-3710-3740   NewD
-4040-4080   DoesYequalX
-4090-4110   PrintIfNPositive
-4640-4850   TestPartialUnderflow
-
-=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
-
-Below is an "ed script" that splits para.c into 10 files
-of the form part[1-8].c, subs.c, and msgs.c, plus a header
-file, paranoia.h, that these files require.
-
-r paranoia.c
-$
-?SPLIT
- .d
-+d
--,$w msgs.c
--,$d
-?SPLIT
- .d
-+d
--,$w subs.c
--,$d
-?part8
-+d
-?include
- .,$w part8.c
- .,$d
--d
-?part7
-+d
-?include
- .,$w part7.c
- .,$d
--d
-?part6
-+d
-?include
- .,$w part6.c
- .,$d
--d
-?part5
-+d
-?include
- .,$w part5.c
- .,$d
--d
-?part4
-+d
-?include
- .,$w part4.c
- .,$d
--d
-?part3
-+d
-?include
- .,$w part3.c
- .,$d
--d
-?part2
-+d
-?include
- .,$w part2.c
- .,$d
-?SPLIT
- .d
-1,/^#include/-1d
-1,$w part1.c
-/Computed constants/,$d
-1,$s/^int/extern &/
-1,$s/^FLOAT/extern &/
-1,$s/^char/extern &/
-1,$s! = .*!;!
-/^Guard/,/^Round/s/^/extern /
-/^jmp_buf/s/^/extern /
-/^Sig_type/s/^/extern /
-s/$/\
-extern void sigfpe(INT);/
-w paranoia.h
-q
-
-*/
-
-#include <stdio.h>
-#ifndef NOSIGNAL
-#include <signal.h>
-#endif
-#include <setjmp.h>
-
-#ifdef Single
-#define FLOAT float
-#define FABS(x) (float)fabs((double)(x))
-#define FLOOR(x) (float)floor((double)(x))
-#define LOG(x) (float)log((double)(x))
-#define POW(x,y) (float)pow((double)(x),(double)(y))
-#define SQRT(x) (float)sqrt((double)(x))
-#else
-#define FLOAT double
-#define FABS(x) fabs(x)
-#define FLOOR(x) floor(x)
-#define LOG(x) log(x)
-#define POW(x,y) pow(x,y)
-#define SQRT(x) sqrt(x)
-#endif
-
-jmp_buf ovfl_buf;
-#ifdef KR_headers
-#define VOID /* void */
-#define INT /* int */
-#define FP /* FLOAT */
-#define CHARP /* char * */
-#define CHARPP /* char ** */
-extern double fabs(), floor(), log(), pow(), sqrt();
-extern void exit();
-typedef void (*Sig_type)();
-FLOAT Sign(), Random();
-extern void BadCond();
-extern void SqXMinX();
-extern void TstCond();
-extern void notify();
-extern int read();
-#else
-#define VOID void
-#define INT int
-#define FP FLOAT
-#define CHARP char *
-#define CHARPP char **
-#ifdef __STDC__
-#include <stdlib.h>
-#include <math.h>
-#else
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern double fabs(double), floor(double), log(double);
-extern double pow(double,double), sqrt(double);
-extern void exit(INT);
-#ifdef __cplusplus
-       }
-#endif
-#endif
-typedef void (*Sig_type)(int);
-FLOAT Sign(FLOAT), Random(void);
-extern void BadCond(int, char*);
-extern void SqXMinX(int);
-extern void TstCond(int, int, char*);
-extern void notify(char*);
-extern int read(int, char*, int);
-#endif
-#undef V9
-extern void Characteristics(VOID);
-extern void Heading(VOID);
-extern void History(VOID);
-extern void Instructions(VOID);
-extern void IsYeqX(VOID);
-extern void NewD(VOID);
-extern void Pause(VOID);
-extern void PrintIfNPositive(VOID);
-extern void SR3750(VOID);
-extern void SR3980(VOID);
-extern void TstPtUf(VOID);
-
-Sig_type sigsave;
-
-#define KEYBOARD 0
-
-FLOAT Radix, BInvrse, RadixD2, BMinusU2;
-
-/*Small floating point constants.*/
-FLOAT Zero = 0.0;
-FLOAT Half = 0.5;
-FLOAT One = 1.0;
-FLOAT Two = 2.0;
-FLOAT Three = 3.0;
-FLOAT Four = 4.0;
-FLOAT Five = 5.0;
-FLOAT Eight = 8.0;
-FLOAT Nine = 9.0;
-FLOAT TwentySeven = 27.0;
-FLOAT ThirtyTwo = 32.0;
-FLOAT TwoForty = 240.0;
-FLOAT MinusOne = -1.0;
-FLOAT OneAndHalf = 1.5;
-/*Integer constants*/
-int NoTrials = 20; /*Number of tests for commutativity. */
-#define False 0
-#define True 1
-
-/* Definitions for declared types 
-       Guard == (Yes, No);
-       Rounding == (Chopped, Rounded, Other);
-       Message == packed array [1..40] of char;
-       Class == (Flaw, Defect, Serious, Failure);
-         */
-#define Yes 1
-#define No  0
-#define Chopped 2
-#define Rounded 1
-#define Other   0
-#define Flaw    3
-#define Defect  2
-#define Serious 1
-#define Failure 0
-typedef int Guard, Rounding, Class;
-typedef char Message;
-
-/* Declarations of Variables */
-int Indx;
-char ch[8];
-FLOAT AInvrse, A1;
-FLOAT C, CInvrse;
-FLOAT D, FourD;
-FLOAT E0, E1, Exp2, E3, MinSqEr;
-FLOAT SqEr, MaxSqEr, E9;
-FLOAT Third;
-FLOAT F6, F9;
-FLOAT H, HInvrse;
-int I;
-FLOAT StickyBit, J;
-FLOAT MyZero;
-FLOAT Precision;
-FLOAT Q, Q9;
-FLOAT R, Random9;
-FLOAT T, Underflow, S;
-FLOAT OneUlp, UfThold, U1, U2;
-FLOAT V, V0, V9;
-FLOAT W;
-FLOAT X, X1, X2, X8, Random1;
-FLOAT Y, Y1, Y2, Random2;
-FLOAT Z, PseudoZero, Z1, Z2, Z9;
-int ErrCnt[4];
-int fpecount;
-int Milestone;
-int PageNo;
-int M, N, N1;
-Guard GMult, GDiv, GAddSub;
-Rounding RMult, RDiv, RAddSub, RSqrt;
-int Break, Done, NotMonot, Monot, Anomaly, IEEE,
-               SqRWrng, UfNGrad;
-/* Computed constants. */
-/*U1  gap below 1.0, i.e, 1.0-U1 is next number below 1.0 */
-/*U2  gap above 1.0, i.e, 1.0+U2 is next number above 1.0 */
-
-/* floating point exception receiver */
- void
-sigfpe(INT x)
-{
-       fpecount++;
-       printf("\n* * * FLOATING-POINT ERROR %d * * *\n", x);
-       fflush(stdout);
-       if (sigsave) {
-#ifndef NOSIGNAL
-               signal(SIGFPE, sigsave);
-#endif
-               sigsave = 0;
-               longjmp(ovfl_buf, 1);
-               }
-       exit(1);
-}
-
-main(VOID)
-{
-       /* First two assignments use integer right-hand sides. */
-       Zero = 0;
-       One = 1;
-       Two = One + One;
-       Three = Two + One;
-       Four = Three + One;
-       Five = Four + One;
-       Eight = Four + Four;
-       Nine = Three * Three;
-       TwentySeven = Nine * Three;
-       ThirtyTwo = Four * Eight;
-       TwoForty = Four * Five * Three * Four;
-       MinusOne = -One;
-       Half = One / Two;
-       OneAndHalf = One + Half;
-       ErrCnt[Failure] = 0;
-       ErrCnt[Serious] = 0;
-       ErrCnt[Defect] = 0;
-       ErrCnt[Flaw] = 0;
-       PageNo = 1;
-       /*=============================================*/
-       Milestone = 0;
-       /*=============================================*/
-#ifndef NOSIGNAL
-       signal(SIGFPE, sigfpe);
-#endif
-       Instructions();
-       Pause();
-       Heading();
-       Pause();
-       Characteristics();
-       Pause();
-       History();
-       Pause();
-       /*=============================================*/
-       Milestone = 7;
-       /*=============================================*/
-       printf("Program is now RUNNING tests on small integers:\n");
-       
-       TstCond (Failure, (Zero + Zero == Zero) && (One - One == Zero)
-                  && (One > Zero) && (One + One == Two),
-                       "0+0 != 0, 1-1 != 0, 1 <= 0, or 1+1 != 2");
-       Z = - Zero;
-       if (Z != 0.0) {
-               ErrCnt[Failure] = ErrCnt[Failure] + 1;
-               printf("Comparison alleges that -0.0 is Non-zero!\n");
-               U2 = 0.001;
-               Radix = 1;
-               TstPtUf();
-               }
-       TstCond (Failure, (Three == Two + One) && (Four == Three + One)
-                  && (Four + Two * (- Two) == Zero)
-                  && (Four - Three - One == Zero),
-                  "3 != 2+1, 4 != 3+1, 4+2*(-2) != 0, or 4-3-1 != 0");
-       TstCond (Failure, (MinusOne == (0 - One))
-                  && (MinusOne + One == Zero ) && (One + MinusOne == Zero)
-                  && (MinusOne + FABS(One) == Zero)
-                  && (MinusOne + MinusOne * MinusOne == Zero),
-                  "-1+1 != 0, (-1)+abs(1) != 0, or -1+(-1)*(-1) != 0");
-       TstCond (Failure, Half + MinusOne + Half == Zero,
-                 "1/2 + (-1) + 1/2 != 0");
-       /*=============================================*/
-       /*SPLIT
-       {
-               extern void part2(VOID), part3(VOID), part4(VOID),
-                       part5(VOID), part6(VOID), part7(VOID);
-               int part8(VOID);
-
-               part2();
-               part3();
-               part4();
-               part5();
-               part6();
-               part7();
-               return part8();
-               }
-       }
-#include "paranoia.h"
-void part2(VOID){
-*/
-       Milestone = 10;
-       /*=============================================*/
-       TstCond (Failure, (Nine == Three * Three)
-                  && (TwentySeven == Nine * Three) && (Eight == Four + Four)
-                  && (ThirtyTwo == Eight * Four)
-                  && (ThirtyTwo - TwentySeven - Four - One == Zero),
-                  "9 != 3*3, 27 != 9*3, 32 != 8*4, or 32-27-4-1 != 0");
-       TstCond (Failure, (Five == Four + One) &&
-                       (TwoForty == Four * Five * Three * Four)
-                  && (TwoForty / Three - Four * Four * Five == Zero)
-                  && ( TwoForty / Four - Five * Three * Four == Zero)
-                  && ( TwoForty / Five - Four * Three * Four == Zero),
-                 "5 != 4+1, 240/3 != 80, 240/4 != 60, or 240/5 != 48");
-       if (ErrCnt[Failure] == 0) {
-               printf("-1, 0, 1/2, 1, 2, 3, 4, 5, 9, 27, 32 & 240 are O.K.\n");
-               printf("\n");
-               }
-       printf("Searching for Radix and Precision.\n");
-       W = One;
-       do  {
-               W = W + W;
-               Y = W + One;
-               Z = Y - W;
-               Y = Z - One;
-               } while (MinusOne + FABS(Y) < Zero);
-       /*.. now W is just big enough that |((W+1)-W)-1| >= 1 ...*/
-       Precision = Zero;
-       Y = One;
-       do  {
-               Radix = W + Y;
-               Y = Y + Y;
-               Radix = Radix - W;
-               } while ( Radix == Zero);
-       if (Radix < Two) Radix = One;
-       printf("Radix = %f .\n", Radix);
-       if (Radix != 1) {
-               W = One;
-               do  {
-                       Precision = Precision + One;
-                       W = W * Radix;
-                       Y = W + One;
-                       } while ((Y - W) == One);
-               }
-       /*... now W == Radix^Precision is barely too big to satisfy (W+1)-W == 1
-                                                     ...*/
-       U1 = One / W;
-       U2 = Radix * U1;
-       printf("Closest relative separation found is U1 = %.7e .\n\n", U1);
-       printf("Recalculating radix and precision\n ");
-       
-       /*save old values*/
-       E0 = Radix;
-       E1 = U1;
-       E9 = U2;
-       E3 = Precision;
-       
-       X = Four / Three;
-       Third = X - One;
-       F6 = Half - Third;
-       X = F6 + F6;
-       X = FABS(X - Third);
-       if (X < U2) X = U2;
-       
-       /*... now X = (unknown no.) ulps of 1+...*/
-       do  {
-               U2 = X;
-               Y = Half * U2 + ThirtyTwo * U2 * U2;
-               Y = One + Y;
-               X = Y - One;
-               } while ( ! ((U2 <= X) || (X <= Zero)));
-       
-       /*... now U2 == 1 ulp of 1 + ... */
-       X = Two / Three;
-       F6 = X - Half;
-       Third = F6 + F6;
-       X = Third - Half;
-       X = FABS(X + F6);
-       if (X < U1) X = U1;
-       
-       /*... now  X == (unknown no.) ulps of 1 -... */
-       do  {
-               U1 = X;
-               Y = Half * U1 + ThirtyTwo * U1 * U1;
-               Y = Half - Y;
-               X = Half + Y;
-               Y = Half - X;
-               X = Half + Y;
-               } while ( ! ((U1 <= X) || (X <= Zero)));
-       /*... now U1 == 1 ulp of 1 - ... */
-       if (U1 == E1) printf("confirms closest relative separation U1 .\n");
-       else printf("gets better closest relative separation U1 = %.7e .\n", U1);
-       W = One / U1;
-       F9 = (Half - U1) + Half;
-       Radix = FLOOR(0.01 + U2 / U1);
-       if (Radix == E0) printf("Radix confirmed.\n");
-       else printf("MYSTERY: recalculated Radix = %.7e .\n", Radix);
-       TstCond (Defect, Radix <= Eight + Eight,
-                  "Radix is too big: roundoff problems");
-       TstCond (Flaw, (Radix == Two) || (Radix == 10)
-                  || (Radix == One), "Radix is not as good as 2 or 10");
-       /*=============================================*/
-       Milestone = 20;
-       /*=============================================*/
-       TstCond (Failure, F9 - Half < Half,
-                  "(1-U1)-1/2 < 1/2 is FALSE, prog. fails?");
-       X = F9;
-       I = 1;
-       Y = X - Half;
-       Z = Y - Half;
-       TstCond (Failure, (X != One)
-                  || (Z == Zero), "Comparison is fuzzy,X=1 but X-1/2-1/2 != 0");
-       X = One + U2;
-       I = 0;
-       /*=============================================*/
-       Milestone = 25;
-       /*=============================================*/
-       /*... BMinusU2 = nextafter(Radix, 0) */
-       BMinusU2 = Radix - One;
-       BMinusU2 = (BMinusU2 - U2) + One;
-       /* Purify Integers */
-       if (Radix != One)  {
-               X = - TwoForty * LOG(U1) / LOG(Radix);
-               Y = FLOOR(Half + X);
-               if (FABS(X - Y) * Four < One) X = Y;
-               Precision = X / TwoForty;
-               Y = FLOOR(Half + Precision);
-               if (FABS(Precision - Y) * TwoForty < Half) Precision = Y;
-               }
-       if ((Precision != FLOOR(Precision)) || (Radix == One)) {
-               printf("Precision cannot be characterized by an Integer number\n");
-               printf("of significant digits but, by itself, this is a minor flaw.\n");
-               }
-       if (Radix == One) 
-               printf("logarithmic encoding has precision characterized solely by U1.\n");
-       else printf("The number of significant digits of the Radix is %f .\n",
-                       Precision);
-       TstCond (Serious, U2 * Nine * Nine * TwoForty < One,
-                  "Precision worse than 5 decimal figures  ");
-       /*=============================================*/
-       Milestone = 30;
-       /*=============================================*/
-       /* Test for extra-precise subepressions */
-       X = FABS(((Four / Three - One) - One / Four) * Three - One / Four);
-       do  {
-               Z2 = X;
-               X = (One + (Half * Z2 + ThirtyTwo * Z2 * Z2)) - One;
-               } while ( ! ((Z2 <= X) || (X <= Zero)));
-       X = Y = Z = FABS((Three / Four - Two / Three) * Three - One / Four);
-       do  {
-               Z1 = Z;
-               Z = (One / Two - ((One / Two - (Half * Z1 + ThirtyTwo * Z1 * Z1))
-                       + One / Two)) + One / Two;
-               } while ( ! ((Z1 <= Z) || (Z <= Zero)));
-       do  {
-               do  {
-                       Y1 = Y;
-                       Y = (Half - ((Half - (Half * Y1 + ThirtyTwo * Y1 * Y1)) + Half
-                               )) + Half;
-                       } while ( ! ((Y1 <= Y) || (Y <= Zero)));
-               X1 = X;
-               X = ((Half * X1 + ThirtyTwo * X1 * X1) - F9) + F9;
-               } while ( ! ((X1 <= X) || (X <= Zero)));
-       if ((X1 != Y1) || (X1 != Z1)) {
-               BadCond(Serious, "Disagreements among the values X1, Y1, Z1,\n");
-               printf("respectively  %.7e,  %.7e,  %.7e,\n", X1, Y1, Z1);
-               printf("are symptoms of inconsistencies introduced\n");
-               printf("by extra-precise evaluation of arithmetic subexpressions.\n");
-               notify("Possibly some part of this");
-               if ((X1 == U1) || (Y1 == U1) || (Z1 == U1))  printf(
-                       "That feature is not tested further by this program.\n") ;
-               }
-       else  {
-               if ((Z1 != U1) || (Z2 != U2)) {
-                       if ((Z1 >= U1) || (Z2 >= U2)) {
-                               BadCond(Failure, "");
-                               notify("Precision");
-                               printf("\tU1 = %.7e, Z1 - U1 = %.7e\n",U1,Z1-U1);
-                               printf("\tU2 = %.7e, Z2 - U2 = %.7e\n",U2,Z2-U2);
-                               }
-                       else {
-                               if ((Z1 <= Zero) || (Z2 <= Zero)) {
-                                       printf("Because of unusual Radix = %f", Radix);
-                                       printf(", or exact rational arithmetic a result\n");
-                                       printf("Z1 = %.7e, or Z2 = %.7e ", Z1, Z2);
-                                       notify("of an\nextra-precision");
-                                       }
-                               if (Z1 != Z2 || Z1 > Zero) {
-                                       X = Z1 / U1;
-                                       Y = Z2 / U2;
-                                       if (Y > X) X = Y;
-                                       Q = - LOG(X);
-                                       printf("Some subexpressions appear to be calculated extra\n");
-                                       printf("precisely with about %g extra B-digits, i.e.\n",
-                                               (Q / LOG(Radix)));
-                                       printf("roughly %g extra significant decimals.\n",
-                                               Q / LOG(10.));
-                                       }
-                               printf("That feature is not tested further by this program.\n");
-                               }
-                       }
-               }
-       Pause();
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-void part3(VOID){
-*/
-       Milestone = 35;
-       /*=============================================*/
-       if (Radix >= Two) {
-               X = W / (Radix * Radix);
-               Y = X + One;
-               Z = Y - X;
-               T = Z + U2;
-               X = T - Z;
-               TstCond (Failure, X == U2,
-                       "Subtraction is not normalized X=Y,X+Z != Y+Z!");
-               if (X == U2) printf(
-                       "Subtraction appears to be normalized, as it should be.");
-               }
-       printf("\nChecking for guard digit in *, /, and -.\n");
-       Y = F9 * One;
-       Z = One * F9;
-       X = F9 - Half;
-       Y = (Y - Half) - X;
-       Z = (Z - Half) - X;
-       X = One + U2;
-       T = X * Radix;
-       R = Radix * X;
-       X = T - Radix;
-       X = X - Radix * U2;
-       T = R - Radix;
-       T = T - Radix * U2;
-       X = X * (Radix - One);
-       T = T * (Radix - One);
-       if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)) GMult = Yes;
-       else {
-               GMult = No;
-               TstCond (Serious, False,
-                       "* lacks a Guard Digit, so 1*X != X");
-               }
-       Z = Radix * U2;
-       X = One + Z;
-       Y = FABS((X + Z) - X * X) - U2;
-       X = One - U2;
-       Z = FABS((X - U2) - X * X) - U1;
-       TstCond (Failure, (Y <= Zero)
-                  && (Z <= Zero), "* gets too many final digits wrong.\n");
-       Y = One - U2;
-       X = One + U2;
-       Z = One / Y;
-       Y = Z - X;
-       X = One / Three;
-       Z = Three / Nine;
-       X = X - Z;
-       T = Nine / TwentySeven;
-       Z = Z - T;
-       TstCond(Defect, X == Zero && Y == Zero && Z == Zero,
-               "Division lacks a Guard Digit, so error can exceed 1 ulp\n\
-or  1/3  and  3/9  and  9/27 may disagree");
-       Y = F9 / One;
-       X = F9 - Half;
-       Y = (Y - Half) - X;
-       X = One + U2;
-       T = X / One;
-       X = T - X;
-       if ((X == Zero) && (Y == Zero) && (Z == Zero)) GDiv = Yes;
-       else {
-               GDiv = No;
-               TstCond (Serious, False,
-                       "Division lacks a Guard Digit, so X/1 != X");
-               }
-       X = One / (One + U2);
-       Y = X - Half - Half;
-       TstCond (Serious, Y < Zero,
-                  "Computed value of 1/1.000..1 >= 1");
-       X = One - U2;
-       Y = One + Radix * U2;
-       Z = X * Radix;
-       T = Y * Radix;
-       R = Z / Radix;
-       StickyBit = T / Radix;
-       X = R - X;
-       Y = StickyBit - Y;
-       TstCond (Failure, X == Zero && Y == Zero,
-                       "* and/or / gets too many last digits wrong");
-       Y = One - U1;
-       X = One - F9;
-       Y = One - Y;
-       T = Radix - U2;
-       Z = Radix - BMinusU2;
-       T = Radix - T;
-       if ((X == U1) && (Y == U1) && (Z == U2) && (T == U2)) GAddSub = Yes;
-       else {
-               GAddSub = No;
-               TstCond (Serious, False,
-                       "- lacks Guard Digit, so cancellation is obscured");
-               }
-       if (F9 != One && F9 - One >= Zero) {
-               BadCond(Serious, "comparison alleges  (1-U1) < 1  although\n");
-               printf("  subtraction yields  (1-U1) - 1 = 0 , thereby vitiating\n");
-               printf("  such precautions against division by zero as\n");
-               printf("  ...  if (X == 1.0) {.....} else {.../(X-1.0)...}\n");
-               }
-       if (GMult == Yes && GDiv == Yes && GAddSub == Yes) printf(
-               "     *, /, and - appear to have guard digits, as they should.\n");
-       /*=============================================*/
-       Milestone = 40;
-       /*=============================================*/
-       Pause();
-       printf("Checking rounding on multiply, divide and add/subtract.\n");
-       RMult = Other;
-       RDiv = Other;
-       RAddSub = Other;
-       RadixD2 = Radix / Two;
-       A1 = Two;
-       Done = False;
-       do  {
-               AInvrse = Radix;
-               do  {
-                       X = AInvrse;
-                       AInvrse = AInvrse / A1;
-                       } while ( ! (FLOOR(AInvrse) != AInvrse));
-               Done = (X == One) || (A1 > Three);
-               if (! Done) A1 = Nine + One;
-               } while ( ! (Done));
-       if (X == One) A1 = Radix;
-       AInvrse = One / A1;
-       X = A1;
-       Y = AInvrse;
-       Done = False;
-       do  {
-               Z = X * Y - Half;
-               TstCond (Failure, Z == Half,
-                       "X * (1/X) differs from 1");
-               Done = X == Radix;
-               X = Radix;
-               Y = One / X;
-               } while ( ! (Done));
-       Y2 = One + U2;
-       Y1 = One - U2;
-       X = OneAndHalf - U2;
-       Y = OneAndHalf + U2;
-       Z = (X - U2) * Y2;
-       T = Y * Y1;
-       Z = Z - X;
-       T = T - X;
-       X = X * Y2;
-       Y = (Y + U2) * Y1;
-       X = X - OneAndHalf;
-       Y = Y - OneAndHalf;
-       if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T <= Zero)) {
-               X = (OneAndHalf + U2) * Y2;
-               Y = OneAndHalf - U2 - U2;
-               Z = OneAndHalf + U2 + U2;
-               T = (OneAndHalf - U2) * Y1;
-               X = X - (Z + U2);
-               StickyBit = Y * Y1;
-               S = Z * Y2;
-               T = T - Y;
-               Y = (U2 - Y) + StickyBit;
-               Z = S - (Z + U2 + U2);
-               StickyBit = (Y2 + U2) * Y1;
-               Y1 = Y2 * Y1;
-               StickyBit = StickyBit - Y2;
-               Y1 = Y1 - Half;
-               if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
-                       && ( StickyBit == Zero) && (Y1 == Half)) {
-                       RMult = Rounded;
-                       printf("Multiplication appears to round correctly.\n");
-                       }
-               else    if ((X + U2 == Zero) && (Y < Zero) && (Z + U2 == Zero)
-                               && (T < Zero) && (StickyBit + U2 == Zero)
-                               && (Y1 < Half)) {
-                               RMult = Chopped;
-                               printf("Multiplication appears to chop.\n");
-                               }
-                       else printf("* is neither chopped nor correctly rounded.\n");
-               if ((RMult == Rounded) && (GMult == No)) notify("Multiplication");
-               }
-       else printf("* is neither chopped nor correctly rounded.\n");
-       /*=============================================*/
-       Milestone = 45;
-       /*=============================================*/
-       Y2 = One + U2;
-       Y1 = One - U2;
-       Z = OneAndHalf + U2 + U2;
-       X = Z / Y2;
-       T = OneAndHalf - U2 - U2;
-       Y = (T - U2) / Y1;
-       Z = (Z + U2) / Y2;
-       X = X - OneAndHalf;
-       Y = Y - T;
-       T = T / Y1;
-       Z = Z - (OneAndHalf + U2);
-       T = (U2 - OneAndHalf) + T;
-       if (! ((X > Zero) || (Y > Zero) || (Z > Zero) || (T > Zero))) {
-               X = OneAndHalf / Y2;
-               Y = OneAndHalf - U2;
-               Z = OneAndHalf + U2;
-               X = X - Y;
-               T = OneAndHalf / Y1;
-               Y = Y / Y1;
-               T = T - (Z + U2);
-               Y = Y - Z;
-               Z = Z / Y2;
-               Y1 = (Y2 + U2) / Y2;
-               Z = Z - OneAndHalf;
-               Y2 = Y1 - Y2;
-               Y1 = (F9 - U1) / F9;
-               if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
-                       && (Y2 == Zero) && (Y2 == Zero)
-                       && (Y1 - Half == F9 - Half )) {
-                       RDiv = Rounded;
-                       printf("Division appears to round correctly.\n");
-                       if (GDiv == No) notify("Division");
-                       }
-               else if ((X < Zero) && (Y < Zero) && (Z < Zero) && (T < Zero)
-                       && (Y2 < Zero) && (Y1 - Half < F9 - Half)) {
-                       RDiv = Chopped;
-                       printf("Division appears to chop.\n");
-                       }
-               }
-       if (RDiv == Other) printf("/ is neither chopped nor correctly rounded.\n");
-       BInvrse = One / Radix;
-       TstCond (Failure, (BInvrse * Radix - Half == Half),
-                  "Radix * ( 1 / Radix ) differs from 1");
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-void part4(VOID){
-*/
-       Milestone = 50;
-       /*=============================================*/
-       TstCond (Failure, ((F9 + U1) - Half == Half)
-                  && ((BMinusU2 + U2 ) - One == Radix - One),
-                  "Incomplete carry-propagation in Addition");
-       X = One - U1 * U1;
-       Y = One + U2 * (One - U2);
-       Z = F9 - Half;
-       X = (X - Half) - Z;
-       Y = Y - One;
-       if ((X == Zero) && (Y == Zero)) {
-               RAddSub = Chopped;
-               printf("Add/Subtract appears to be chopped.\n");
-               }
-       if (GAddSub == Yes) {
-               X = (Half + U2) * U2;
-               Y = (Half - U2) * U2;
-               X = One + X;
-               Y = One + Y;
-               X = (One + U2) - X;
-               Y = One - Y;
-               if ((X == Zero) && (Y == Zero)) {
-                       X = (Half + U2) * U1;
-                       Y = (Half - U2) * U1;
-                       X = One - X;
-                       Y = One - Y;
-                       X = F9 - X;
-                       Y = One - Y;
-                       if ((X == Zero) && (Y == Zero)) {
-                               RAddSub = Rounded;
-                               printf("Addition/Subtraction appears to round correctly.\n");
-                               if (GAddSub == No) notify("Add/Subtract");
-                               }
-                       else printf("Addition/Subtraction neither rounds nor chops.\n");
-                       }
-               else printf("Addition/Subtraction neither rounds nor chops.\n");
-               }
-       else printf("Addition/Subtraction neither rounds nor chops.\n");
-       S = One;
-       X = One + Half * (One + Half);
-       Y = (One + U2) * Half;
-       Z = X - Y;
-       T = Y - X;
-       StickyBit = Z + T;
-       if (StickyBit != Zero) {
-               S = Zero;
-               BadCond(Flaw, "(X - Y) + (Y - X) is non zero!\n");
-               }
-       StickyBit = Zero;
-       if ((GMult == Yes) && (GDiv == Yes) && (GAddSub == Yes)
-               && (RMult == Rounded) && (RDiv == Rounded)
-               && (RAddSub == Rounded) && (FLOOR(RadixD2) == RadixD2)) {
-               printf("Checking for sticky bit.\n");
-               X = (Half + U1) * U2;
-               Y = Half * U2;
-               Z = One + Y;
-               T = One + X;
-               if ((Z - One <= Zero) && (T - One >= U2)) {
-                       Z = T + Y;
-                       Y = Z - X;
-                       if ((Z - T >= U2) && (Y - T == Zero)) {
-                               X = (Half + U1) * U1;
-                               Y = Half * U1;
-                               Z = One - Y;
-                               T = One - X;
-                               if ((Z - One == Zero) && (T - F9 == Zero)) {
-                                       Z = (Half - U1) * U1;
-                                       T = F9 - Z;
-                                       Q = F9 - Y;
-                                       if ((T - F9 == Zero) && (F9 - U1 - Q == Zero)) {
-                                               Z = (One + U2) * OneAndHalf;
-                                               T = (OneAndHalf + U2) - Z + U2;
-                                               X = One + Half / Radix;
-                                               Y = One + Radix * U2;
-                                               Z = X * Y;
-                                               if (T == Zero && X + Radix * U2 - Z == Zero) {
-                                                       if (Radix != Two) {
-                                                               X = Two + U2;
-                                                               Y = X / Two;
-                                                               if ((Y - One == Zero)) StickyBit = S;
-                                                               }
-                                                       else StickyBit = S;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       if (StickyBit == One) printf("Sticky bit apparently used correctly.\n");
-       else printf("Sticky bit used incorrectly or not at all.\n");
-       TstCond (Flaw, !(GMult == No || GDiv == No || GAddSub == No ||
-                       RMult == Other || RDiv == Other || RAddSub == Other),
-               "lack(s) of guard digits or failure(s) to correctly round or chop\n\
-(noted above) count as one flaw in the final tally below");
-       /*=============================================*/
-       Milestone = 60;
-       /*=============================================*/
-       printf("\n");
-       printf("Does Multiplication commute?  ");
-       printf("Testing on %d random pairs.\n", NoTrials);
-       Random9 = SQRT(3.0);
-       Random1 = Third;
-       I = 1;
-       do  {
-               X = Random();
-               Y = Random();
-               Z9 = Y * X;
-               Z = X * Y;
-               Z9 = Z - Z9;
-               I = I + 1;
-               } while ( ! ((I > NoTrials) || (Z9 != Zero)));
-       if (I == NoTrials) {
-               Random1 = One + Half / Three;
-               Random2 = (U2 + U1) + One;
-               Z = Random1 * Random2;
-               Y = Random2 * Random1;
-               Z9 = (One + Half / Three) * ((U2 + U1) + One) - (One + Half /
-                       Three) * ((U2 + U1) + One);
-               }
-       if (! ((I == NoTrials) || (Z9 == Zero)))
-               BadCond(Defect, "X * Y == Y * X trial fails.\n");
-       else printf("     No failures found in %d integer pairs.\n", NoTrials);
-       /*=============================================*/
-       Milestone = 70;
-       /*=============================================*/
-       printf("\nRunning test of square root(x).\n");
-       TstCond (Failure, (Zero == SQRT(Zero))
-                  && (- Zero == SQRT(- Zero))
-                  && (One == SQRT(One)), "Square root of 0.0, -0.0 or 1.0 wrong");
-       MinSqEr = Zero;
-       MaxSqEr = Zero;
-       J = Zero;
-       X = Radix;
-       OneUlp = U2;
-       SqXMinX (Serious);
-       X = BInvrse;
-       OneUlp = BInvrse * U1;
-       SqXMinX (Serious);
-       X = U1;
-       OneUlp = U1 * U1;
-       SqXMinX (Serious);
-       if (J != Zero) Pause();
-       printf("Testing if sqrt(X * X) == X for %d Integers X.\n", NoTrials);
-       J = Zero;
-       X = Two;
-       Y = Radix;
-       if ((Radix != One)) do  {
-               X = Y;
-               Y = Radix * Y;
-               } while ( ! ((Y - X >= NoTrials)));
-       OneUlp = X * U2;
-       I = 1;
-       while (I <= NoTrials) {
-               X = X + One;
-               SqXMinX (Defect);
-               if (J > Zero) break;
-               I = I + 1;
-               }
-       printf("Test for sqrt monotonicity.\n");
-       I = - 1;
-       X = BMinusU2;
-       Y = Radix;
-       Z = Radix + Radix * U2;
-       NotMonot = False;
-       Monot = False;
-       while ( ! (NotMonot || Monot)) {
-               I = I + 1;
-               X = SQRT(X);
-               Q = SQRT(Y);
-               Z = SQRT(Z);
-               if ((X > Q) || (Q > Z)) NotMonot = True;
-               else {
-                       Q = FLOOR(Q + Half);
-                       if (!(I > 0 || Radix == Q * Q)) Monot = True;
-                       else if (I > 0) {
-                       if (I > 1) Monot = True;
-                       else {
-                               Y = Y * BInvrse;
-                               X = Y - U1;
-                               Z = Y + U1;
-                               }
-                       }
-                       else {
-                               Y = Q;
-                               X = Y - U2;
-                               Z = Y + U2;
-                               }
-                       }
-               }
-       if (Monot) printf("sqrt has passed a test for Monotonicity.\n");
-       else {
-               BadCond(Defect, "");
-               printf("sqrt(X) is non-monotonic for X near %.7e .\n", Y);
-               }
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-void part5(VOID){
-*/
-       Milestone = 80;
-       /*=============================================*/
-       MinSqEr = MinSqEr + Half;
-       MaxSqEr = MaxSqEr - Half;
-       Y = (SQRT(One + U2) - One) / U2;
-       SqEr = (Y - One) + U2 / Eight;
-       if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-       SqEr = Y + U2 / Eight;
-       if (SqEr < MinSqEr) MinSqEr = SqEr;
-       Y = ((SQRT(F9) - U2) - (One - U2)) / U1;
-       SqEr = Y + U1 / Eight;
-       if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-       SqEr = (Y + One) + U1 / Eight;
-       if (SqEr < MinSqEr) MinSqEr = SqEr;
-       OneUlp = U2;
-       X = OneUlp;
-       for( Indx = 1; Indx <= 3; ++Indx) {
-               Y = SQRT((X + U1 + X) + F9);
-               Y = ((Y - U2) - ((One - U2) + X)) / OneUlp;
-               Z = ((U1 - X) + F9) * Half * X * X / OneUlp;
-               SqEr = (Y + Half) + Z;
-               if (SqEr < MinSqEr) MinSqEr = SqEr;
-               SqEr = (Y - Half) + Z;
-               if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-               if (((Indx == 1) || (Indx == 3))) 
-                       X = OneUlp * Sign (X) * FLOOR(Eight / (Nine * SQRT(OneUlp)));
-               else {
-                       OneUlp = U1;
-                       X = - OneUlp;
-                       }
-               }
-       /*=============================================*/
-       Milestone = 85;
-       /*=============================================*/
-       SqRWrng = False;
-       Anomaly = False;
-       RSqrt = Other; /* ~dgh */
-       if (Radix != One) {
-               printf("Testing whether sqrt is rounded or chopped.\n");
-               D = FLOOR(Half + POW(Radix, One + Precision - FLOOR(Precision)));
-       /* ... == Radix^(1 + fract) if (Precision == Integer + fract. */
-               X = D / Radix;
-               Y = D / A1;
-               if ((X != FLOOR(X)) || (Y != FLOOR(Y))) {
-                       Anomaly = True;
-                       }
-               else {
-                       X = Zero;
-                       Z2 = X;
-                       Y = One;
-                       Y2 = Y;
-                       Z1 = Radix - One;
-                       FourD = Four * D;
-                       do  {
-                               if (Y2 > Z2) {
-                                       Q = Radix;
-                                       Y1 = Y;
-                                       do  {
-                                               X1 = FABS(Q + FLOOR(Half - Q / Y1) * Y1);
-                                               Q = Y1;
-                                               Y1 = X1;
-                                               } while ( ! (X1 <= Zero));
-                                       if (Q <= One) {
-                                               Z2 = Y2;
-                                               Z = Y;
-                                               }
-                                       }
-                               Y = Y + Two;
-                               X = X + Eight;
-                               Y2 = Y2 + X;
-                               if (Y2 >= FourD) Y2 = Y2 - FourD;
-                               } while ( ! (Y >= D));
-                       X8 = FourD - Z2;
-                       Q = (X8 + Z * Z) / FourD;
-                       X8 = X8 / Eight;
-                       if (Q != FLOOR(Q)) Anomaly = True;
-                       else {
-                               Break = False;
-                               do  {
-                                       X = Z1 * Z;
-                                       X = X - FLOOR(X / Radix) * Radix;
-                                       if (X == One) 
-                                               Break = True;
-                                       else
-                                               Z1 = Z1 - One;
-                                       } while ( ! (Break || (Z1 <= Zero)));
-                               if ((Z1 <= Zero) && (! Break)) Anomaly = True;
-                               else {
-                                       if (Z1 > RadixD2) Z1 = Z1 - Radix;
-                                       do  {
-                                               NewD();
-                                               } while ( ! (U2 * D >= F9));
-                                       if (D * Radix - D != W - D) Anomaly = True;
-                                       else {
-                                               Z2 = D;
-                                               I = 0;
-                                               Y = D + (One + Z) * Half;
-                                               X = D + Z + Q;
-                                               SR3750();
-                                               Y = D + (One - Z) * Half + D;
-                                               X = D - Z + D;
-                                               X = X + Q + X;
-                                               SR3750();
-                                               NewD();
-                                               if (D - Z2 != W - Z2) Anomaly = True;
-                                               else {
-                                                       Y = (D - Z2) + (Z2 + (One - Z) * Half);
-                                                       X = (D - Z2) + (Z2 - Z + Q);
-                                                       SR3750();
-                                                       Y = (One + Z) * Half;
-                                                       X = Q;
-                                                       SR3750();
-                                                       if (I == 0) Anomaly = True;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               if ((I == 0) || Anomaly) {
-                       BadCond(Failure, "Anomalous arithmetic with Integer < ");
-                       printf("Radix^Precision = %.7e\n", W);
-                       printf(" fails test whether sqrt rounds or chops.\n");
-                       SqRWrng = True;
-                       }
-               }
-       if (! Anomaly) {
-               if (! ((MinSqEr < Zero) || (MaxSqEr > Zero))) {
-                       RSqrt = Rounded;
-                       printf("Square root appears to be correctly rounded.\n");
-                       }
-               else  {
-                       if ((MaxSqEr + U2 > U2 - Half) || (MinSqEr > Half)
-                               || (MinSqEr + Radix < Half)) SqRWrng = True;
-                       else {
-                               RSqrt = Chopped;
-                               printf("Square root appears to be chopped.\n");
-                               }
-                       }
-               }
-       if (SqRWrng) {
-               printf("Square root is neither chopped nor correctly rounded.\n");
-               printf("Observed errors run from %.7e ", MinSqEr - Half);
-               printf("to %.7e ulps.\n", Half + MaxSqEr);
-               TstCond (Serious, MaxSqEr - MinSqEr < Radix * Radix,
-                       "sqrt gets too many last digits wrong");
-               }
-       /*=============================================*/
-       Milestone = 90;
-       /*=============================================*/
-       Pause();
-       printf("Testing powers Z^i for small Integers Z and i.\n");
-       N = 0;
-       /* ... test powers of zero. */
-       I = 0;
-       Z = -Zero;
-       M = 3;
-       Break = False;
-       do  {
-               X = One;
-               SR3980();
-               if (I <= 10) {
-                       I = 1023;
-                       SR3980();
-                       }
-               if (Z == MinusOne) Break = True;
-               else {
-                       Z = MinusOne;
-                       /* .. if(-1)^N is invalid, replace MinusOne by One. */
-                       I = - 4;
-                       }
-               } while ( ! Break);
-       PrintIfNPositive();
-       N1 = N;
-       N = 0;
-       Z = A1;
-       M = (int)FLOOR(Two * LOG(W) / LOG(A1));
-       Break = False;
-       do  {
-               X = Z;
-               I = 1;
-               SR3980();
-               if (Z == AInvrse) Break = True;
-               else Z = AInvrse;
-               } while ( ! (Break));
-       /*=============================================*/
-               Milestone = 100;
-       /*=============================================*/
-       /*  Powers of Radix have been tested, */
-       /*         next try a few primes     */
-       M = NoTrials;
-       Z = Three;
-       do  {
-               X = Z;
-               I = 1;
-               SR3980();
-               do  {
-                       Z = Z + Two;
-                       } while ( Three * FLOOR(Z / Three) == Z );
-               } while ( Z < Eight * Three );
-       if (N > 0) {
-               printf("Errors like this may invalidate financial calculations\n");
-               printf("\tinvolving interest rates.\n");
-               }
-       PrintIfNPositive();
-       N += N1;
-       if (N == 0) printf("... no discrepancies found.\n");
-       if (N > 0) Pause();
-       else printf("\n");
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-void part6(VOID){
-*/
-       Milestone = 110;
-       /*=============================================*/
-       printf("Seeking Underflow thresholds UfThold and E0.\n");
-       D = U1;
-       if (Precision != FLOOR(Precision)) {
-               D = BInvrse;
-               X = Precision;
-               do  {
-                       D = D * BInvrse;
-                       X = X - One;
-                       } while ( X > Zero);
-               }
-       Y = One;
-       Z = D;
-       /* ... D is power of 1/Radix < 1. */
-       do  {
-               C = Y;
-               Y = Z;
-               Z = Y * Y;
-               } while ((Y > Z) && (Z + Z > Z));
-       Y = C;
-       Z = Y * D;
-       do  {
-               C = Y;
-               Y = Z;
-               Z = Y * D;
-               } while ((Y > Z) && (Z + Z > Z));
-       if (Radix < Two) HInvrse = Two;
-       else HInvrse = Radix;
-       H = One / HInvrse;
-       /* ... 1/HInvrse == H == Min(1/Radix, 1/2) */
-       CInvrse = One / C;
-       E0 = C;
-       Z = E0 * H;
-       /* ...1/Radix^(BIG Integer) << 1 << CInvrse == 1/C */
-       do  {
-               Y = E0;
-               E0 = Z;
-               Z = E0 * H;
-               } while ((E0 > Z) && (Z + Z > Z));
-       UfThold = E0;
-       E1 = Zero;
-       Q = Zero;
-       E9 = U2;
-       S = One + E9;
-       D = C * S;
-       if (D <= C) {
-               E9 = Radix * U2;
-               S = One + E9;
-               D = C * S;
-               if (D <= C) {
-                       BadCond(Failure, "multiplication gets too many last digits wrong.\n");
-                       Underflow = E0;
-                       Y1 = Zero;
-                       PseudoZero = Z;
-                       Pause();
-                       }
-               }
-       else {
-               Underflow = D;
-               PseudoZero = Underflow * H;
-               UfThold = Zero;
-               do  {
-                       Y1 = Underflow;
-                       Underflow = PseudoZero;
-                       if (E1 + E1 <= E1) {
-                               Y2 = Underflow * HInvrse;
-                               E1 = FABS(Y1 - Y2);
-                               Q = Y1;
-                               if ((UfThold == Zero) && (Y1 != Y2)) UfThold = Y1;
-                               }
-                       PseudoZero = PseudoZero * H;
-                       } while ((Underflow > PseudoZero)
-                               && (PseudoZero + PseudoZero > PseudoZero));
-               }
-       /* Comment line 4530 .. 4560 */
-       if (PseudoZero != Zero) {
-               printf("\n");
-               Z = PseudoZero;
-       /* ... Test PseudoZero for "phoney- zero" violates */
-       /* ... PseudoZero < Underflow or PseudoZero < PseudoZero + PseudoZero
-                  ... */
-               if (PseudoZero <= Zero) {
-                       BadCond(Failure, "Positive expressions can underflow to an\n");
-                       printf("allegedly negative value\n");
-                       printf("PseudoZero that prints out as: %g .\n", PseudoZero);
-                       X = - PseudoZero;
-                       if (X <= Zero) {
-                               printf("But -PseudoZero, which should be\n");
-                               printf("positive, isn't; it prints out as  %g .\n", X);
-                               }
-                       }
-               else {
-                       BadCond(Flaw, "Underflow can stick at an allegedly positive\n");
-                       printf("value PseudoZero that prints out as %g .\n", PseudoZero);
-                       }
-               TstPtUf();
-               }
-       /*=============================================*/
-       Milestone = 120;
-       /*=============================================*/
-       if (CInvrse * Y > CInvrse * Y1) {
-               S = H * S;
-               E0 = Underflow;
-               }
-       if (! ((E1 == Zero) || (E1 == E0))) {
-               BadCond(Defect, "");
-               if (E1 < E0) {
-                       printf("Products underflow at a higher");
-                       printf(" threshold than differences.\n");
-                       if (PseudoZero == Zero) 
-                       E0 = E1;
-                       }
-               else {
-                       printf("Difference underflows at a higher");
-                       printf(" threshold than products.\n");
-                       }
-               }
-       printf("Smallest strictly positive number found is E0 = %g .\n", E0);
-       Z = E0;
-       TstPtUf();
-       Underflow = E0;
-       if (N == 1) Underflow = Y;
-       I = 4;
-       if (E1 == Zero) I = 3;
-       if (UfThold == Zero) I = I - 2;
-       UfNGrad = True;
-       switch (I)  {
-               case    1:
-               UfThold = Underflow;
-               if ((CInvrse * Q) != ((CInvrse * Y) * S)) {
-                       UfThold = Y;
-                       BadCond(Failure, "Either accuracy deteriorates as numbers\n");
-                       printf("approach a threshold = %.17e\n", UfThold);;
-                       printf(" coming down from %.17e\n", C);
-                       printf(" or else multiplication gets too many last digits wrong.\n");
-                       }
-               Pause();
-               break;
-       
-               case    2:
-               BadCond(Failure, "Underflow confuses Comparison, which alleges that\n");
-               printf("Q == Y while denying that |Q - Y| == 0; these values\n");
-               printf("print out as Q = %.17e, Y = %.17e .\n", Q, Y2);
-               printf ("|Q - Y| = %.17e .\n" , FABS(Q - Y2));
-               UfThold = Q;
-               break;
-       
-               case    3:
-               X = X;
-               break;
-       
-               case    4:
-               if ((Q == UfThold) && (E1 == E0)
-                       && (FABS( UfThold - E1 / E9) <= E1)) {
-                       UfNGrad = False;
-                       printf("Underflow is gradual; it incurs Absolute Error =\n");
-                       printf("(roundoff in UfThold) < E0.\n");
-                       Y = E0 * CInvrse;
-                       Y = Y * (OneAndHalf + U2);
-                       X = CInvrse * (One + U2);
-                       Y = Y / X;
-                       IEEE = (Y == E0);
-                       }
-               }
-       if (UfNGrad) {
-               printf("\n");
-               sigsave = sigfpe;
-               if (setjmp(ovfl_buf)) {
-                       printf("Underflow / UfThold failed!\n");
-                       R = H + H;
-                       }
-               else R = SQRT(Underflow / UfThold);
-               sigsave = 0;
-               if (R <= H) {
-                       Z = R * UfThold;
-                       X = Z * (One + R * H * (One + H));
-                       }
-               else {
-                       Z = UfThold;
-                       X = Z * (One + H * H * (One + H));
-                       }
-               if (! ((X == Z) || (X - Z != Zero))) {
-                       BadCond(Flaw, "");
-                       printf("X = %.17e\n\tis not equal to Z = %.17e .\n", X, Z);
-                       Z9 = X - Z;
-                       printf("yet X - Z yields %.17e .\n", Z9);
-                       printf("    Should this NOT signal Underflow, ");
-                       printf("this is a SERIOUS DEFECT\nthat causes ");
-                       printf("confusion when innocent statements like\n");;
-                       printf("    if (X == Z)  ...  else");
-                       printf("  ... (f(X) - f(Z)) / (X - Z) ...\n");
-                       printf("encounter Division by Zero although actually\n");
-                       sigsave = sigfpe;
-                       if (setjmp(ovfl_buf)) printf("X / Z fails!\n");
-                       else printf("X / Z = 1 + %g .\n", (X / Z - Half) - Half);
-                       sigsave = 0;
-                       }
-               }
-       printf("The Underflow threshold is %.17e, %s\n", UfThold,
-                  " below which");
-       printf("calculation may suffer larger Relative error than ");
-       printf("merely roundoff.\n");
-       Y2 = U1 * U1;
-       Y = Y2 * Y2;
-       Y2 = Y * U1;
-       if (Y2 <= UfThold) {
-               if (Y > E0) {
-                       BadCond(Defect, "");
-                       I = 5;
-                       }
-               else {
-                       BadCond(Serious, "");
-                       I = 4;
-                       }
-               printf("Range is too narrow; U1^%d Underflows.\n", I);
-               }
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-void part7(VOID){
-*/
-       Milestone = 130;
-       /*=============================================*/
-       Y = - FLOOR(Half - TwoForty * LOG(UfThold) / LOG(HInvrse)) / TwoForty;
-       Y2 = Y + Y;
-       printf("Since underflow occurs below the threshold\n");
-       printf("UfThold = (%.17e) ^ (%.17e)\nonly underflow ", HInvrse, Y);
-       printf("should afflict the expression\n\t(%.17e) ^ (%.17e);\n",
-               HInvrse, Y2);
-       printf("actually calculating yields:");
-       if (setjmp(ovfl_buf)) {
-               sigsave = 0;
-               BadCond(Serious, "trap on underflow.\n");
-               }
-       else {
-               sigsave = sigfpe;
-               V9 = POW(HInvrse, Y2);
-               sigsave = 0;
-               printf(" %.17e .\n", V9);
-               if (! ((V9 >= Zero) && (V9 <= (Radix + Radix + E9) * UfThold))) {
-                       BadCond(Serious, "this is not between 0 and underflow\n");
-               printf("   threshold = %.17e .\n", UfThold);
-               }
-               else if (! (V9 > UfThold * (One + E9)))
-                       printf("This computed value is O.K.\n");
-               else {
-                       BadCond(Defect, "this is not between 0 and underflow\n");
-                       printf("   threshold = %.17e .\n", UfThold);
-                       }
-               }
-       /*=============================================*/
-       Milestone = 140;
-       /*=============================================*/
-       printf("\n");
-       /* ...calculate Exp2 == exp(2) == 7.389056099... */
-       X = Zero;
-       I = 2;
-       Y = Two * Three;
-       Q = Zero;
-       N = 0;
-       do  {
-               Z = X;
-               I = I + 1;
-               Y = Y / (I + I);
-               R = Y + Q;
-               X = Z + R;
-               Q = (Z - X) + R;
-               } while(X > Z);
-       Z = (OneAndHalf + One / Eight) + X / (OneAndHalf * ThirtyTwo);
-       X = Z * Z;
-       Exp2 = X * X;
-       X = F9;
-       Y = X - U1;
-       printf("Testing X^((X + 1) / (X - 1)) vs. exp(2) = %.17e as X -> 1.\n",
-               Exp2);
-       for(I = 1;;) {
-               Z = X - BInvrse;
-               Z = (X + One) / (Z - (One - BInvrse));
-               Q = POW(X, Z) - Exp2;
-               if (FABS(Q) > TwoForty * U2) {
-                       N = 1;
-                       V9 = (X - BInvrse) - (One - BInvrse);
-                       BadCond(Defect, "Calculated");
-                       printf(" %.17e for\n", POW(X,Z));
-                       printf("\t(1 + (%.17e) ^ (%.17e);\n", V9, Z);
-                       printf("\tdiffers from correct value by %.17e .\n", Q);
-                       printf("\tThis much error may spoil financial\n");
-                       printf("\tcalculations involving tiny interest rates.\n");
-                       break;
-                       }
-               else {
-                       Z = (Y - X) * Two + Y;
-                       X = Y;
-                       Y = Z;
-                       Z = One + (X - F9)*(X - F9);
-                       if (Z > One && I < NoTrials) I++;
-                       else  {
-                               if (X > One) {
-                                       if (N == 0)
-                                          printf("Accuracy seems adequate.\n");
-                                       break;
-                                       }
-                               else {
-                                       X = One + U2;
-                                       Y = U2 + U2;
-                                       Y += X;
-                                       I = 1;
-                                       }
-                               }
-                       }
-               }
-       /*=============================================*/
-       Milestone = 150;
-       /*=============================================*/
-       printf("Testing powers Z^Q at four nearly extreme values.\n");
-       N = 0;
-       Z = A1;
-       Q = FLOOR(Half - LOG(C) / LOG(A1));
-       Break = False;
-       do  {
-               X = CInvrse;
-               Y = POW(Z, Q);
-               IsYeqX();
-               Q = - Q;
-               X = C;
-               Y = POW(Z, Q);
-               IsYeqX();
-               if (Z < One) Break = True;
-               else Z = AInvrse;
-               } while ( ! (Break));
-       PrintIfNPositive();
-       if (N == 0) printf(" ... no discrepancies found.\n");
-       printf("\n");
-       
-       /*=============================================*/
-       Milestone = 160;
-       /*=============================================*/
-       Pause();
-       printf("Searching for Overflow threshold:\n");
-       printf("This may generate an error.\n");
-       Y = - CInvrse;
-       V9 = HInvrse * Y;
-       sigsave = sigfpe;
-       if (setjmp(ovfl_buf)) { I = 0; V9 = Y; goto overflow; }
-       do {
-               V = Y;
-               Y = V9;
-               V9 = HInvrse * Y;
-               } while(V9 < Y);
-       I = 1;
-overflow:
-       sigsave = 0;
-       Z = V9;
-       printf("Can `Z = -Y' overflow?\n");
-       printf("Trying it on Y = %.17e .\n", Y);
-       V9 = - Y;
-       V0 = V9;
-       if (V - Y == V + V0) printf("Seems O.K.\n");
-       else {
-               printf("finds a ");
-               BadCond(Flaw, "-(-Y) differs from Y.\n");
-               }
-       if (Z != Y) {
-               BadCond(Serious, "");
-               printf("overflow past %.17e\n\tshrinks to %.17e .\n", Y, Z);
-               }
-       if (I) {
-               Y = V * (HInvrse * U2 - HInvrse);
-               Z = Y + ((One - HInvrse) * U2) * V;
-               if (Z < V0) Y = Z;
-               if (Y < V0) V = Y;
-               if (V0 - V < V0) V = V0;
-               }
-       else {
-               V = Y * (HInvrse * U2 - HInvrse);
-               V = V + ((One - HInvrse) * U2) * Y;
-               }
-       printf("Overflow threshold is V  = %.17e .\n", V);
-       if (I) printf("Overflow saturates at V0 = %.17e .\n", V0);
-       else printf("There is no saturation value because \
-the system traps on overflow.\n");
-       V9 = V * One;
-       printf("No Overflow should be signaled for V * 1 = %.17e\n", V9);
-       V9 = V / One;
-       printf("                           nor for V / 1 = %.17e .\n", V9);
-       printf("Any overflow signal separating this * from the one\n");
-       printf("above is a DEFECT.\n");
-       /*=============================================*/
-       Milestone = 170;
-       /*=============================================*/
-       if (!(-V < V && -V0 < V0 && -UfThold < V && UfThold < V)) {
-               BadCond(Failure, "Comparisons involving ");
-               printf("+-%g, +-%g\nand +-%g are confused by Overflow.",
-                       V, V0, UfThold);
-               }
-       /*=============================================*/
-       Milestone = 175;
-       /*=============================================*/
-       printf("\n");
-       for(Indx = 1; Indx <= 3; ++Indx) {
-               switch (Indx)  {
-                       case 1: Z = UfThold; break;
-                       case 2: Z = E0; break;
-                       case 3: Z = PseudoZero; break;
-                       }
-               if (Z != Zero) {
-                       V9 = SQRT(Z);
-                       Y = V9 * V9;
-                       if (Y / (One - Radix * E9) < Z
-                          || Y > (One + Radix * E9) * Z) { /* dgh: + E9 --> * E9 */
-                               if (V9 > U1) BadCond(Serious, "");
-                               else BadCond(Defect, "");
-                               printf("Comparison alleges that what prints as Z = %.17e\n", Z);
-                               printf(" is too far from sqrt(Z) ^ 2 = %.17e .\n", Y);
-                               }
-                       }
-               }
-       /*=============================================*/
-       Milestone = 180;
-       /*=============================================*/
-       for(Indx = 1; Indx <= 2; ++Indx) {
-               if (Indx == 1) Z = V;
-               else Z = V0;
-               V9 = SQRT(Z);
-               X = (One - Radix * E9) * V9;
-               V9 = V9 * X;
-               if (((V9 < (One - Two * Radix * E9) * Z) || (V9 > Z))) {
-                       Y = V9;
-                       if (X < W) BadCond(Serious, "");
-                       else BadCond(Defect, "");
-                       printf("Comparison alleges that Z = %17e\n", Z);
-                       printf(" is too far from sqrt(Z) ^ 2 (%.17e) .\n", Y);
-                       }
-               }
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-int part8(VOID){
-*/
-       Milestone = 190;
-       /*=============================================*/
-       Pause();
-       X = UfThold * V;
-       Y = Radix * Radix;
-       if (X*Y < One || X > Y) {
-               if (X * Y < U1 || X > Y/U1) BadCond(Defect, "Badly");
-               else BadCond(Flaw, "");
-                       
-               printf(" unbalanced range; UfThold * V = %.17e\n\t%s\n",
-                       X, "is too far from 1.\n");
-               }
-       /*=============================================*/
-       Milestone = 200;
-       /*=============================================*/
-       for (Indx = 1; Indx <= 5; ++Indx)  {
-               X = F9;
-               switch (Indx)  {
-                       case 2: X = One + U2; break;
-                       case 3: X = V; break;
-                       case 4: X = UfThold; break;
-                       case 5: X = Radix;
-                       }
-               Y = X;
-               sigsave = sigfpe;
-               if (setjmp(ovfl_buf))
-                       printf("  X / X  traps when X = %g\n", X);
-               else {
-                       V9 = (Y / X - Half) - Half;
-                       if (V9 == Zero) continue;
-                       if (V9 == - U1 && Indx < 5) BadCond(Flaw, "");
-                       else BadCond(Serious, "");
-                       printf("  X / X differs from 1 when X = %.17e\n", X);
-                       printf("  instead, X / X - 1/2 - 1/2 = %.17e .\n", V9);
-                       }
-               sigsave = 0;
-               }
-       /*=============================================*/
-       Milestone = 210;
-       /*=============================================*/
-       MyZero = Zero;
-       printf("\n");
-       printf("What message and/or values does Division by Zero produce?\n") ;
-#ifndef NOPAUSE
-       printf("This can interupt your program.  You can ");
-       printf("skip this part if you wish.\n");
-       printf("Do you wish to compute 1 / 0? ");
-       fflush(stdout);
-       read (KEYBOARD, ch, 8);
-       if ((ch[0] == 'Y') || (ch[0] == 'y')) {
-#endif
-               sigsave = sigfpe;
-               printf("    Trying to compute 1 / 0 produces ...");
-               if (!setjmp(ovfl_buf)) printf("  %.7e .\n", One / MyZero);
-               sigsave = 0;
-#ifndef NOPAUSE
-               }
-       else printf("O.K.\n");
-       printf("\nDo you wish to compute 0 / 0? ");
-       fflush(stdout);
-       read (KEYBOARD, ch, 80);
-       if ((ch[0] == 'Y') || (ch[0] == 'y')) {
-#endif
-               sigsave = sigfpe;
-               printf("\n    Trying to compute 0 / 0 produces ...");
-               if (!setjmp(ovfl_buf)) printf("  %.7e .\n", Zero / MyZero);
-               sigsave = 0;
-#ifndef NOPAUSE
-               }
-       else printf("O.K.\n");
-#endif
-       /*=============================================*/
-       Milestone = 220;
-       /*=============================================*/
-       Pause();
-       printf("\n");
-       {
-               static char *msg[] = {
-                       "FAILUREs  encountered =",
-                       "SERIOUS DEFECTs  discovered =",
-                       "DEFECTs  discovered =",
-                       "FLAWs  discovered =" };
-               int i;
-               for(i = 0; i < 4; i++) if (ErrCnt[i])
-                       printf("The number of  %-29s %d.\n",
-                               msg[i], ErrCnt[i]);
-               }
-       printf("\n");
-       if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[Defect]
-                       + ErrCnt[Flaw]) > 0) {
-               if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[
-                       Defect] == 0) && (ErrCnt[Flaw] > 0)) {
-                       printf("The arithmetic diagnosed seems ");
-                       printf("Satisfactory though flawed.\n");
-                       }
-               if ((ErrCnt[Failure] + ErrCnt[Serious] == 0)
-                       && ( ErrCnt[Defect] > 0)) {
-                       printf("The arithmetic diagnosed may be Acceptable\n");
-                       printf("despite inconvenient Defects.\n");
-                       }
-               if ((ErrCnt[Failure] + ErrCnt[Serious]) > 0) {
-                       printf("The arithmetic diagnosed has ");
-                       printf("unacceptable Serious Defects.\n");
-                       }
-               if (ErrCnt[Failure] > 0) {
-                       printf("Potentially fatal FAILURE may have spoiled this");
-                       printf(" program's subsequent diagnoses.\n");
-                       }
-               }
-       else {
-               printf("No failures, defects nor flaws have been discovered.\n");
-               if (! ((RMult == Rounded) && (RDiv == Rounded)
-                       && (RAddSub == Rounded) && (RSqrt == Rounded))) 
-                       printf("The arithmetic diagnosed seems Satisfactory.\n");
-               else {
-                       if (StickyBit >= One &&
-                               (Radix - Two) * (Radix - Nine - One) == Zero) {
-                               printf("Rounding appears to conform to ");
-                               printf("the proposed IEEE standard P");
-                               if ((Radix == Two) &&
-                                        ((Precision - Four * Three * Two) *
-                                         ( Precision - TwentySeven -
-                                          TwentySeven + One) == Zero)) 
-                                       printf("754");
-                               else printf("854");
-                               if (IEEE) printf(".\n");
-                               else {
-                                       printf(",\nexcept for possibly Double Rounding");
-                                       printf(" during Gradual Underflow.\n");
-                                       }
-                               }
-                       printf("The arithmetic diagnosed appears to be Excellent!\n");
-                       }
-               }
-       if (fpecount)
-               printf("\nA total of %d floating point exceptions were registered.\n",
-                       fpecount);
-       printf("END OF TEST.\n");
-       return 0;
-       }
-
-/*SPLIT subs.c
-#include "paranoia.h"
-*/
-
- FLOAT
-Sign (FP X)
-#ifdef KR_headers
-FLOAT X;
-#endif
-{ return X >= 0. ? 1.0 : -1.0; }
-
- void
-Pause(VOID)
-{
-#ifndef NOPAUSE
-       char ch[8];
-
-       printf("\nTo continue, press RETURN");
-       fflush(stdout);
-       read(KEYBOARD, ch, 8);
-#endif
-       printf("\nDiagnosis resumes after milestone Number %d", Milestone);
-       printf("          Page: %d\n\n", PageNo);
-       ++Milestone;
-       ++PageNo;
-       }
-
- void
-TstCond (INT K, INT Valid, CHARP T)
-#ifdef KR_headers
-int K, Valid;
-char *T;
-#endif
-{ if (! Valid) { BadCond(K,T); printf(".\n"); } }
-
- void
-BadCond(INT K, CHARP T)
-#ifdef KR_headers
-int K;
-char *T;
-#endif
-{
-       static char *msg[] = { "FAILURE", "SERIOUS DEFECT", "DEFECT", "FLAW" };
-
-       ErrCnt [K] = ErrCnt [K] + 1;
-       printf("%s:  %s", msg[K], T);
-       }
-
-
- FLOAT
-Random(VOID)
-/*  Random computes
-     X = (Random1 + Random9)^5
-     Random1 = X - FLOOR(X) + 0.000005 * X;
-   and returns the new value of Random1
-*/
-{
-       FLOAT X, Y;
-       
-       X = Random1 + Random9;
-       Y = X * X;
-       Y = Y * Y;
-       X = X * Y;
-       Y = X - FLOOR(X);
-       Random1 = Y + X * 0.000005;
-       return(Random1);
-       }
-
- void
-SqXMinX (INT ErrKind)
-#ifdef KR_headers
-int ErrKind;
-#endif
-{
-       FLOAT XA, XB;
-       
-       XB = X * BInvrse;
-       XA = X - XB;
-       SqEr = ((SQRT(X * X) - XB) - XA) / OneUlp;
-       if (SqEr != Zero) {
-               if (SqEr < MinSqEr) MinSqEr = SqEr;
-               if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-               J = J + 1.0;
-               BadCond(ErrKind, "\n");
-               printf("sqrt( %.17e) - %.17e  = %.17e\n", X * X, X, OneUlp * SqEr);
-               printf("\tinstead of correct value 0 .\n");
-               }
-       }
-
- void
-NewD(VOID)
-{
-       X = Z1 * Q;
-       X = FLOOR(Half - X / Radix) * Radix + X;
-       Q = (Q - X * Z) / Radix + X * X * (D / Radix);
-       Z = Z - Two * X * D;
-       if (Z <= Zero) {
-               Z = - Z;
-               Z1 = - Z1;
-               }
-       D = Radix * D;
-       }
-
- void
-SR3750(VOID)
-{
-       if (! ((X - Radix < Z2 - Radix) || (X - Z2 > W - Z2))) {
-               I = I + 1;
-               X2 = SQRT(X * D);
-               Y2 = (X2 - Z2) - (Y - Z2);
-               X2 = X8 / (Y - Half);
-               X2 = X2 - Half * X2 * X2;
-               SqEr = (Y2 + Half) + (Half - X2);
-               if (SqEr < MinSqEr) MinSqEr = SqEr;
-               SqEr = Y2 - X2;
-               if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-               }
-       }
-
- void
-IsYeqX(VOID)
-{
-       if (Y != X) {
-               if (N <= 0) {
-                       if (Z == Zero && Q <= Zero)
-                               printf("WARNING:  computing\n");
-                       else BadCond(Defect, "computing\n");
-                       printf("\t(%.17e) ^ (%.17e)\n", Z, Q);
-                       printf("\tyielded %.17e;\n", Y);
-                       printf("\twhich compared unequal to correct %.17e ;\n",
-                               X);
-                       printf("\t\tthey differ by %.17e .\n", Y - X);
-                       }
-               N = N + 1; /* ... count discrepancies. */
-               }
-       }
-
- void
-SR3980(VOID)
-{
-       do {
-               Q = (FLOAT) I;
-               Y = POW(Z, Q);
-               IsYeqX();
-               if (++I > M) break;
-               X = Z * X;
-               } while ( X < W );
-       }
-
- void
-PrintIfNPositive(VOID)
-{
-       if (N > 0) printf("Similar discrepancies have occurred %d times.\n", N);
-       }
-
- void
-TstPtUf(VOID)
-{
-       N = 0;
-       if (Z != Zero) {
-               printf("Since comparison denies Z = 0, evaluating ");
-               printf("(Z + Z) / Z should be safe.\n");
-               sigsave = sigfpe;
-               if (setjmp(ovfl_buf)) goto very_serious;
-               Q9 = (Z + Z) / Z;
-               printf("What the machine gets for (Z + Z) / Z is  %.17e .\n",
-                       Q9);
-               if (FABS(Q9 - Two) < Radix * U2) {
-                       printf("This is O.K., provided Over/Underflow");
-                       printf(" has NOT just been signaled.\n");
-                       }
-               else {
-                       if ((Q9 < One) || (Q9 > Two)) {
-very_serious:
-                               N = 1;
-                               ErrCnt [Serious] = ErrCnt [Serious] + 1;
-                               printf("This is a VERY SERIOUS DEFECT!\n");
-                               }
-                       else {
-                               N = 1;
-                               ErrCnt [Defect] = ErrCnt [Defect] + 1;
-                               printf("This is a DEFECT!\n");
-                               }
-                       }
-               sigsave = 0;
-               V9 = Z * One;
-               Random1 = V9;
-               V9 = One * Z;
-               Random2 = V9;
-               V9 = Z / One;
-               if ((Z == Random1) && (Z == Random2) && (Z == V9)) {
-                       if (N > 0) Pause();
-                       }
-               else {
-                       N = 1;
-                       BadCond(Defect, "What prints as Z = ");
-                       printf("%.17e\n\tcompares different from  ", Z);
-                       if (Z != Random1) printf("Z * 1 = %.17e ", Random1);
-                       if (! ((Z == Random2)
-                               || (Random2 == Random1)))
-                               printf("1 * Z == %g\n", Random2);
-                       if (! (Z == V9)) printf("Z / 1 = %.17e\n", V9);
-                       if (Random2 != Random1) {
-                               ErrCnt [Defect] = ErrCnt [Defect] + 1;
-                               BadCond(Defect, "Multiplication does not commute!\n");
-                               printf("\tComparison alleges that 1 * Z = %.17e\n",
-                                       Random2);
-                               printf("\tdiffers from Z * 1 = %.17e\n", Random1);
-                               }
-                       Pause();
-                       }
-               }
-       }
-
- void
-notify(CHARP s)
-#ifdef KR_headers
- char *s;
-#endif
-{
-       printf("%s test appears to be inconsistent...\n", s);
-       printf("   PLEASE NOTIFY KARPINKSI!\n");
-       }
-
-/*SPLIT msgs.c
-#include "paranoia.h"
-*/
-
- void
-msglist(CHARPP s)
-#ifdef KR_headers
-char **s;
-#endif
-{ while(*s) printf("%s\n", *s++); }
-
- void
-Instructions(VOID)
-{
-  static char *instr[] = {
-       "Lest this program stop prematurely, i.e. before displaying\n",
-       "    `END OF TEST',\n",
-       "try to persuade the computer NOT to terminate execution when an",
-       "error like Over/Underflow or Division by Zero occurs, but rather",
-       "to persevere with a surrogate value after, perhaps, displaying some",
-       "warning.  If persuasion avails naught, don't despair but run this",
-       "program anyway to see how many milestones it passes, and then",
-       "amend it to make further progress.\n",
-       "Answer questions with Y, y, N or n (unless otherwise indicated).\n",
-       0};
-
-       msglist(instr);
-       }
-
- void
-Heading(VOID)
-{
-  static char *head[] = {
-       "Users are invited to help debug and augment this program so it will",
-       "cope with unanticipated and newly uncovered arithmetic pathologies.\n",
-       "Please send suggestions and interesting results to",
-       "\tRichard Karpinski",
-       "\tComputer Center U-76",
-       "\tUniversity of California",
-       "\tSan Francisco, CA 94143-0704, USA\n",
-       "In doing so, please include the following information:",
-#ifdef Single
-       "\tPrecision:\tsingle;",
-#else
-       "\tPrecision:\tdouble;",
-#endif
-       "\tVersion:\t10 February 1989;",
-       "\tComputer:\n",
-       "\tCompiler:\n",
-       "\tOptimization level:\n",
-       "\tOther relevant compiler options:",
-       0};
-
-       msglist(head);
-       }
-
- void
-Characteristics(VOID)
-{
-       static char *chars[] = {
-        "Running this program should reveal these characteristics:",
-       "     Radix = 1, 2, 4, 8, 10, 16, 100, 256 ...",
-       "     Precision = number of significant digits carried.",
-       "     U2 = Radix/Radix^Precision = One Ulp",
-       "\t(OneUlpnit in the Last Place) of 1.000xxx .",
-       "     U1 = 1/Radix^Precision = One Ulp of numbers a little less than 1.0 .",
-       "     Adequacy of guard digits for Mult., Div. and Subt.",
-       "     Whether arithmetic is chopped, correctly rounded, or something else",
-       "\tfor Mult., Div., Add/Subt. and Sqrt.",
-       "     Whether a Sticky Bit used correctly for rounding.",
-       "     UnderflowThreshold = an underflow threshold.",
-       "     E0 and PseudoZero tell whether underflow is abrupt, gradual, or fuzzy.",
-       "     V = an overflow threshold, roughly.",
-       "     V0  tells, roughly, whether  Infinity  is represented.",
-       "     Comparisions are checked for consistency with subtraction",
-       "\tand for contamination with pseudo-zeros.",
-       "     Sqrt is tested.  Y^X is not tested.",
-       "     Extra-precise subexpressions are revealed but NOT YET tested.",
-       "     Decimal-Binary conversion is NOT YET tested for accuracy.",
-       0};
-
-       msglist(chars);
-       }
-
- void
-History(VOID)
-{ /* History */
- /* Converted from Brian Wichmann's Pascal version to C by Thos Sumner,
-       with further massaging by David M. Gay. */
-
-  static char *hist[] = {
-       "The program attempts to discriminate among",
-       "   FLAWs, like lack of a sticky bit,",
-       "   Serious DEFECTs, like lack of a guard digit, and",
-       "   FAILUREs, like 2+2 == 5 .",
-       "Failures may confound subsequent diagnoses.\n",
-       "The diagnostic capabilities of this program go beyond an earlier",
-       "program called `MACHAR', which can be found at the end of the",
-       "book  `Software Manual for the Elementary Functions' (1980) by",
-       "W. J. Cody and W. Waite. Although both programs try to discover",
-       "the Radix, Precision and range (over/underflow thresholds)",
-       "of the arithmetic, this program tries to cope with a wider variety",
-       "of pathologies, and to say how well the arithmetic is implemented.",
-       "\nThe program is based upon a conventional radix representation for",
-       "floating-point numbers, but also allows logarithmic encoding",
-       "as used by certain early WANG machines.\n",
-       "BASIC version of this program (C) 1983 by Prof. W. M. Kahan;",
-       "see source comments for more history.",
-       0};
-
-       msglist(hist);
-       }
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Simple.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Simple.c
deleted file mode 100644 (file)
index 02f0700..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-int precision = 7;
-long long r;
-
-#define HOST_BITS_PER_WIDE_INT 64
-#define HOST_WIDE_INT long long
-
-long long x = 123;
-
-int dec(long long x){
-    return x - 1;
-}
-
-int _start() {
-    //long long r = (((HOST_WIDE_INT) 1 << (precision - 1)) - 1);
-    //long long r = ((HOST_WIDE_INT) 1 << (precision)) - 1;
-    long long r = x - 1;
-    
-    //r = dec(x);
-    r >>= 32;
-    
-    return r;
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/SpeedTest.java b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/SpeedTest.java
deleted file mode 100644 (file)
index 667d9a2..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package tests;
-
-import org.ibex.nestedvm.Runtime;
-
-import java.io.*;
-import java.util.*;
-
-class SpeedTest {
-    private static long start,end;
-    private static long now() { return System.currentTimeMillis(); }
-    private static void start()  { start = now(); }
-    private static void end() { end = now(); }
-    private static float diff() { return ((float)(end-start))/1000; }
-    
-    /*private static InputStream is = new InputStream() {
-        int left = 100*1024*1024;
-        int c = 0;
-        public int read() { if(left==0) return -1; left--; return (c++)&0xff; }
-        public int read(byte[] buf, int pos,int len) {
-            len = Math.min(left,len);
-            Arrays.fill(buf,pos,len,(byte)c++);
-            left -= len;
-            return len;
-        }
-        public void close() { left =  100*1024*1024; }
-    };
-    
-    private static OutputStream os = new OutputStream() {
-        public void write(int c) { }
-        public void write(byte[] buf, int pos, int len) { }
-    };*/
-    
-    public static void main(String[] args) throws Exception {
-        float d;
-        
-        if(args.length < 2) { System.err.println("Usage: SpeedTest {classname|mips binary} number_of_runs args"); System.exit(1); }
-        String className = args[0];
-        int runs = Integer.parseInt(args[1]);
-        if(runs < 5) throw new Error("Runs must be >= 5");
-        String[] appArgs = new String[args.length-1];
-        appArgs[0] = className;
-        for(int i=2;i<args.length;i++) appArgs[i-1] = args[i];
-        
-        Class c = null;
-        boolean binary = className.endsWith(".mips");
-        if(!binary) {
-            start();
-            c = Class.forName(className);
-            end();
-            d = diff();
-            System.out.println("Class.forName() took " + d + "sec");
-            
-            start();
-            c.newInstance();
-            end();
-            d = diff();
-            System.out.println("c.newInstance() took " + d + "sec");
-            
-            if(!Runtime.class.isAssignableFrom(c)) { System.err.println(className + " isn't a MIPS compiled class"); System.exit(1); }
-        } else {
-            throw new Error("Interpreter not supported in speedtest");
-        }
-            
-        float times[] = new float[runs];
-        
-        for(int i=0;i<runs;i++) {
-            //Runtime runtime = binary ? new Interpreter(className) : (Runtime) c.newInstance();
-            Runtime runtime = (Runtime) c.newInstance();
-            /*runtime.closeFD(0);
-            runtime.closeFD(1);
-            runtime.addFD(new Runtime.InputStreamFD(is));
-            runtime.addFD(new Runtime.OutputStreamFD(os));*/
-            System.gc();
-            start();
-            int status = runtime.run(appArgs);
-            if(status != 0) { System.err.println(className + " failed with exit status: " + status); System.exit(1); }
-            end();
-            //is.close();
-            times[i] = diff();
-            System.err.println("Run " + (i+1) + ": " + times[i] + " sec");
-        }
-        
-        java.util.Arrays.sort(times);
-        
-        System.out.println("Best: " + times[0]);
-        System.out.println("Worst: " + times[times.length-1]);
-        float sum = 0.0f;
-        for(int i=2;i<times.length-2;i++)
-            sum += times[i];
-        float avg = sum / (times.length-4);
-        System.out.println("Avg of middle " + (times.length-4) + ": " + avg);
-    }
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Test.c b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/Test.c
deleted file mode 100644 (file)
index e8aa5df..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <sys/unistd.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <sys/signal.h>
-#include <time.h>
-#include <dirent.h>
-#include <wchar.h>
-#include <math.h>
-
-char *user_info[1024];
-
-extern void _pause();
-extern int _call_java(int a, int b, int c, int d);
-
-void suckram();
-
-int main(int argc, char **argv) {
-    int i,n,fd;
-    time_t now;
-    DIR *dir;
-    struct dirent *dent;
-    char buf[1024];
-    unsigned char ubuf[1024];
-    unsigned short sbuf[1024];
-    char *s;
-    
-    printf("Entered main()\n");
-    
-    if(argc > 1 && strcmp(argv[1],"calltest")==0)  {
-        printf("pausing for call test\n");
-        _pause();
-        printf("unpaused from call test\n");
-        
-        for(i=1;i<=3;i++) {
-            char *s = (char*)_call_java(i,0,0,0);
-            printf("_call_java(%d,0,0,0) = \"%s\" (%d chars)\n",i,s,strlen(s));
-            free(s);
-        }
-        fd = _call_java(4,0,0,0);
-        if(fd != -1) {
-            FILE *fp;
-            fprintf(stderr,"fd: %i\n",fd);
-            fp = fdopen(fd,"w");
-            if(fp != NULL) {
-                fprintf(fp,"It worked! fp is %p - Hello, Java!\n",fp);
-                fclose(fp);
-            } else {
-                fprintf(stderr,"fdopen failed\n");
-                close(fd);
-            }
-        } else {
-            fprintf(stderr,"fd == -1\n");
-        }
-        
-        printf("In main() in MIPS\n");
-        _call_java(5,0,0,0);
-        printf("Back in main() in MIPS\n");
-    } else if(argc > 2 && strcmp(argv[1],"fdtest")==0)  {
-        printf("opening %s\n",argv[2]);
-        fd = open(argv[2],O_RDONLY);
-        if(fd < 0) { perror("open"); exit(1); }
-        
-        printf("reading up to 64 bytes\n");
-        n = read(fd,buf,64);
-        if(n < 0) {perror("read"); exit(1); }
-        printf("read %d bytes\n",n);
-        for(i=0;i<n;i++) if(buf[i]=='\n' || buf[i]=='\r') { buf[i] = '\0'; break; }
-        printf("Read \"%s\"...\n",n == 0 ? NULL : buf);
-        
-        printf("seeking back to pos 4...\n");
-        if(lseek(fd,4,SEEK_SET) < 0) { perror("lseek"); exit(1); }
-        
-        printf("reading up to 64 bytes\n");
-        n = read(fd,buf,64);
-        if(n < 0) {perror("read"); exit(1); }
-        printf("read %d bytes\n",n);
-        for(i=0;i<n;i++) if(buf[i]=='\n' || buf[i]=='\r') { buf[i] = '\0'; break; }
-        printf("Read \"%s\"...\n",n == 0 ? NULL : buf);
-
-        printf("reading up to 64 bytes\n");
-        n = read(fd,buf,64);
-        if(n < 0) {perror("read"); exit(1); }
-        printf("read %d bytes\n",n);
-        for(i=0;i<n;i++) if(buf[i]=='\n' || buf[i]=='\r') { buf[i] = '\0'; break; }
-        printf("Read \"%s\"...\n",n == 0 ? NULL : buf);
-    } else if(argc > 1 && strcmp(argv[1],"fptest")==0)  {
-        double d = 0.0;
-        while(d != 10.0) {
-            printf("d: %f\n",d);
-            d += 2.5;
-        }
-    } else if(argc > 1 && strcmp(argv[1],"nullderef")==0) {
-        volatile int *mem = 0;
-        *mem = 1;
-    } else if(argc > 2 && strcmp(argv[1],"crashme") == 0) {
-        volatile int *mem = (int*) atoi(argv[2]);
-        *mem = 1;
-    } else if(argc > 2 && strcmp(argv[1],"get") == 0) {
-        extern int _open_socket(const char *host, int port);
-        fd = _open_socket(argv[2],80);
-        if(fd == -1) { perror("open_socket"); exit(EXIT_FAILURE); }
-#define REQ "GET / HTTP/1.0\r\n\r\n"
-        n = write(fd,REQ,strlen(REQ));
-        if(n != strlen(REQ)) { perror("write"); exit(EXIT_FAILURE); }
-        for(;;) {
-            n = read(fd,buf,sizeof(buf));
-            if(n < 0) { perror("read"); exit(EXIT_FAILURE); }
-            if(n == 0) break;
-            write(1,buf,n);
-        }
-    } else if(argc > 1 && strcmp(argv[1],"server") == 0) {
-        extern int _listen_socket(int port);
-        extern int _accept(int fd);
-        
-        int server = _listen_socket(2000);
-        if(server< 0) { perror("server_socket"); exit(EXIT_FAILURE); }
-        while((fd = _accept(server)) >= 0) {
-            char buf2[1024];
-            int n = read(fd,buf,sizeof(buf));
-            if(n < 0) { perror("read"); continue; }
-            if(n == 0) continue;
-            while(n > 0 && (buf[n-1] == '\r' || buf[n-1] == '\n')) n--;
-            buf[n] = '\0';
-            snprintf(buf2,sizeof(buf2),"Hello, %s from nestedvm's socket support\r\n",buf);
-            write(fd,buf2,strlen(buf2));
-            close(fd);
-        }
-    } else { 
-        printf("%d\n", 0xffffff);
-        printf("%u\n", 0xffffffU);
-        printf("%li\n",0xffffffL);
-        printf("%lu\n",0xffffffUL);
-
-        
-        for(i=0;i<argc;i++)
-            printf("argv[%d] = \"%s\"\n",i,argv[i]);
-        for(i=0;user_info[i];i++)
-            printf("user_info[%d] = \"%s\"\n",i,user_info[i]);
-        
-        printf("getenv(\"USER\") = \"%s\"\n",getenv("USER"));
-        printf("getenv(\"HOME\") = \"%s\"\n",getenv("HOME"));
-        printf("getenv(\"TZ\") = \"%s\"\n",getenv("TZ"));
-    
-        time(&now);
-        tzset();
-        printf("%s %s %d\n",tzname[0],tzname[1],(int)_timezone);
-        
-        printf("Running ctime\n");
-        s = ctime(&now);
-        printf("ctime returned: %p\n",s);
-        printf("Current time: %s",s);
-        
-        printf("Trying to open /nonexistent\n");
-        fd = open("/nonexistent",O_RDONLY);
-        if(fd < 0) perror("open");
-        else close(fd);
-        
-        printf("Tyring to mkdir .mkdirtest\n");
-        if(mkdir(".mkdirtest",0700) < 0) perror("mkdir");
-        
-        printf("Trying to opendir .\n");
-        dir = opendir(".");
-        if(dir) {
-            printf("Success!\n");
-            while((dent=readdir(dir))!=NULL) {
-                struct stat statbuf;
-                stat(dent->d_name,&statbuf);
-                printf("\t[%s] %lu %i %i\n",dent->d_name,dent->d_ino,statbuf.st_ino,statbuf.st_dev);
-            }
-            if(errno != 0) { fprintf(stderr,"readdir errno: %d\n",errno); perror("readdir"); }
-            closedir(dir);
-        } else {
-            perror("opendir");
-        }
-                
-    
-#if 0
-        printf("Sleeping...\n");
-        sleep(1);
-        printf("Done\n");
-#endif
-        
-        fd = open("test.txt",O_RDONLY);
-        if(fd != -1) {
-            printf("Opened test.txt\n");
-            n = read(fd,sbuf,sizeof(sbuf));
-            printf("n: %d\n",n);
-            if(n < 0) perror("read");
-            ubuf[n] = '\0';
-            printf("buf: %s\n",buf);
-            for(i=0;i<n/2;i++) {
-                printf("Char %d: [%x]\n",i,sbuf[i]);
-            }
-        }
-        
-        {
-            static double f = 1.574;
-            int n;
-            printf("%e\n",f);
-            f += 20.001;
-            f *= -2.0;
-            n = (int) f;
-            printf("%el\n",f);
-            printf("%d\n",n);
-            printf("%e\n",f);
-            printf("%e\n",fabs(f));
-        }
-    }
-        
-    {
-        char buf[1024];
-        memcpy(buf,"Hello, World",sizeof("Hello, World"));
-        printf("%s\n",buf);
-    }
-    
-    {
-        
-#define HOST_BITS_PER_WIDE_INT 64
-#define HOST_WIDE_INT long long
-        
-        extern int ri(int n);
-        int precision = ri(8);
-        long long l;
-        
-        l = (precision - HOST_BITS_PER_WIDE_INT > 0
-             ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
-            (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
-             ? (((HOST_WIDE_INT) 1
-                 << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
-             : 0);
-        
-        printf("%llX\n",l);
-    }
-    
-    {
-        double d = -2.34;
-        //d = abs(d);
-        printf("abs(-2.24) = %g\n",d);
-    }
-        
-    
-    //printf("cwd: %s\n",getcwd(NULL,0));
-    //printf("isatty(0): %d\n",isatty(0));
-    //printf("exiting\n");
-    return 0;
-}
-
-long long zero = 0;
-int izero = 0;
-long long rl(long long n) { return n + zero; }
-int ri(int n) { return n + izero; }
-
-void suckram() {
-    int total = 0;
-    fprintf(stderr,"Eating up all available memory\n");
-    while(malloc(1024*1024) != NULL) total ++;
-    fprintf(stderr,"Ate up %d megs\n",total);
-}
-
-__attribute__((constructor)) static void my_ctor()  { printf("Constructor!\n"); }
-__attribute__((destructor)) static void my_dtor()  { printf("Destructor!\n"); }
-
-int callme(int a1,int a2, int a3, int a4, int a5, int a6)  __attribute__((section(".text")));
-int callme(int a1,int a2, int a3, int a4, int a5, int a6) {
-    printf("You said: %d %d %d %d %d %d\n",a1,a2,a3,a4,a5,a6);
-    return a1+a2+a3+a4+a5+a6;
-}
-
-void echo(const char *string, int count)  __attribute__((section(".text")));
-void echo(const char *string, int count) {
-    int i;
-    for(i=0;i<count;i++)
-        printf("%d: %s\n",i,string);
-}
-
-void backinmips()  __attribute__((section(".text")));
-void backinmips() {
-    fprintf(stderr,"In backinmips() in mips\n");
-}
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/check.sh b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/src/tests/check.sh
deleted file mode 100755 (executable)
index 1ea7ac0..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/bin/sh -e
-
-[ -z "$JAVA" ] && JAVA=java
-CLASSPATH="$(pwd)/build"; export CLASSPATH
-if [ "$1" != "running_from_make" ]; then
-       echo "Please don't run this scipt directly. Use make check" >&2
-       exit 1
-fi
-
-INT="$2"
-
-cd tmp
-
-if [ ! -e .skipmspack ]; then
-
-mkdir -p mspack
-cd mspack
-rm -f *.TTT *.inf FONTINST.EXE *.DLL *.TXT;
-for f in \
-    andale32.exe arial32.exe arialb32.exe comic32.exe courie32.exe georgi32.exe \
-    impact32.exe times32.exe trebuc32.exe verdan32.exe webdin32.exe; \
-do
-       [ -e "$f" ] || wget "http://dist.xwt.org/corefonts/$f" || rm -f "$f"
-       [ -e "$f" ] ||  exit 1
-done
-
-echo "Extracting MS Core Fonts using MSPackBench..."
-$JAVA tests.MSPackBench *32.exe
-
-cat <<EOF | md5sum -cv
-663974c9fe3ba55b228724fd4d4e445f  AndaleMo.TTF
-3e7043e8125f1c8998347310f2c315bc  AriBlk.TTF
-f11c0317db527bdd80fa0afa04703441  Arial.TTF
-34cd8fd9e4fae9f075d4c9a2c971d065  Arialbd.TTF
-a2b3bcdb39097b6aed17a766652b92b2  Arialbi.TTF
-25633f73d92a0646e733e50cf2cc3b07  Ariali.TTF
-a50f9c96a76356e3d01013e0b042989f  Comic.TTF
-81d64ec3675c4adc14e9ad2c5c8103a7  Comicbd.TTF
-f4b306eed95aa7d274840533be635532  Georgia.TTF
-c61b355a5811e56ed3d7cea5d67c900e  Georgiab.TTF
-1e4e5d1975bdf4a5c648afbf8872fa13  Georgiai.TTF
-e5d52bbfff45e1044381bacb7fc8e300  Georgiaz.TTF
-8fc622c3a2e2d992ec059cca61e3dfc0  Impact.TTF
-4f97f4d6ba74767259ccfb242ce0e3f7  Times.TTF
-ed6e29caf3843142d739232aa8642158  Timesbd.TTF
-6d2bd425ff00a79dd02e4c95f689861b  Timesbi.TTF
-957dd4f17296522dead302ab4fcdfa8d  Timesi.TTF
-055460df9ab3c8aadd3330bd30805f11  Trebucbd.ttf
-3ba52ab1fa0cd726e7868e9c6673902c  Verdana.TTF
-a2b4dc9afc18e76cfcaa0071fa7cd0da  Verdanab.TTF
-24b3a293c865a2c265280f017fb24ba5  Verdanai.TTF
-f7310c29df0070530c48a47f2dca9014  Verdanaz.TTF
-1a56b45a66b07b4c576d5ead048ed992  Webdings.TTF
-20f23317e90516cbb7d38bd53b3d1c5b  cour.ttf
-7d94f95bf383769b51379d095139f2d7  courbd.ttf
-da414c01f951b020bb09a4165d3fb5fa  courbi.ttf
-167e27add66e9e8eb0d28a1235dd3bda  couri.ttf
-70e7be8567bc05f771b59abd9d696407  trebuc.ttf
-fb5d68cb58c6ad7e88249d65f6900740  trebucbi.ttf
-8f308fe77b584e20b246aa1f8403d2e9  trebucit.ttf
-663974c9fe3ba55b228724fd4d4e445f  AndaleMo.TTF
-3e7043e8125f1c8998347310f2c315bc  AriBlk.TTF
-f11c0317db527bdd80fa0afa04703441  Arial.TTF
-34cd8fd9e4fae9f075d4c9a2c971d065  Arialbd.TTF
-a2b3bcdb39097b6aed17a766652b92b2  Arialbi.TTF
-25633f73d92a0646e733e50cf2cc3b07  Ariali.TTF
-a50f9c96a76356e3d01013e0b042989f  Comic.TTF
-81d64ec3675c4adc14e9ad2c5c8103a7  Comicbd.TTF
-f4b306eed95aa7d274840533be635532  Georgia.TTF
-c61b355a5811e56ed3d7cea5d67c900e  Georgiab.TTF
-1e4e5d1975bdf4a5c648afbf8872fa13  Georgiai.TTF
-e5d52bbfff45e1044381bacb7fc8e300  Georgiaz.TTF
-8fc622c3a2e2d992ec059cca61e3dfc0  Impact.TTF
-4f97f4d6ba74767259ccfb242ce0e3f7  Times.TTF
-ed6e29caf3843142d739232aa8642158  Timesbd.TTF
-6d2bd425ff00a79dd02e4c95f689861b  Timesbi.TTF
-957dd4f17296522dead302ab4fcdfa8d  Timesi.TTF
-055460df9ab3c8aadd3330bd30805f11  Trebucbd.ttf
-3ba52ab1fa0cd726e7868e9c6673902c  Verdana.TTF
-a2b4dc9afc18e76cfcaa0071fa7cd0da  Verdanab.TTF
-24b3a293c865a2c265280f017fb24ba5  Verdanai.TTF
-f7310c29df0070530c48a47f2dca9014  Verdanaz.TTF
-1a56b45a66b07b4c576d5ead048ed992  Webdings.TTF
-20f23317e90516cbb7d38bd53b3d1c5b  cour.ttf
-7d94f95bf383769b51379d095139f2d7  courbd.ttf
-da414c01f951b020bb09a4165d3fb5fa  courbi.ttf
-167e27add66e9e8eb0d28a1235dd3bda  couri.ttf
-70e7be8567bc05f771b59abd9d696407  trebuc.ttf
-fb5d68cb58c6ad7e88249d65f6900740  trebucbi.ttf
-8f308fe77b584e20b246aa1f8403d2e9  trebucit.ttf
-EOF
-
-echo "Core Fonts extracted successfully!"
-
-cd ..
-
-fi
-
-if [ ! -e .skipdjpeg ]; then
-echo "Decoding some jpegs with DJpeg..."
-
-rm -f *.tga
-
-[ -e banner.jpg ] || wget http://www.xwt.org/image/banner.jpg
-[ -e banner.jpg ] || exit 1
-
-$JAVA tests.DJpeg -targa -outfile thebride_1280.tga thebride_1280.jpg 
-echo "e90f6b915aee2fc0d2eb9fc60ace6203  thebride_1280.tga" | md5sum -cv
-
-$JAVA tests.DJpeg -targa -outfile banner.tga banner.jpg
-echo "4c7cc29ae2094191a9b0308cf9a04fbd  banner.tga" | md5sum -cv
-
-echo "JPEGs decoded successfully!"
-
-fi
-
-if [ ! -e .skipfreetype ]; then
-
-cd mspack
-
-echo "Rendering some fonts with FTBench..."
-if ! [ -e Verdana.TTF -a -e Arial.TTF -a -e Comic.TTF ]; then
-       echo "Can't find the corefonts - did the mspack test complete?"
-       exit 1
-fi
-
-rm -f *.render
-
-for f in Verdana.TTF Arial.TTF Comic.TTF; do
-       $JAVA tests.FTBench "$f" "$f".render
-done
-
-cat <<EOF|md5sum -cv
-e33b9db5a413af214b2524265af18026  Arial.TTF.render
-61dee4f697a61ebc1b47decbed04b2da  Comic.TTF.render
-d5a6d39a63e49c597ed860913e27d2bb  Verdana.TTF.render
-EOF
-
-echo "Fonts rendered successfully"
-cd ..
-
-fi
-
-if [ ! -e .skipgc ]; then
-
-echo "Running gctest from the boehm-gc library..."
-$JAVA tests.GCTest
-
-fi
-
-if [ ! -e .busybox -a -e ../build/tests/BusyBox.class ]; then
-       echo "Running busybox's md5sum command on some ttfs"
-       $JAVA tests.BusyBox ash -c "md5sum mspack/*.ttf > md5.1"
-       md5sum mspack/*.ttf > md5.2
-       cmp md5.1 md5.2 && echo "The BusyBox md5sum command and sh work properly!"
-fi
-
-cat <<EOF
-* * * * * * * * * * * * * * * * * * * * * 
-* All tests completed with no failures  *
-* * * * * * * * * * * * * * * * * * * * * 
-
-EOF
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/Makefile b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/Makefile
deleted file mode 100644 (file)
index 1d61401..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-# Inspired by XWT's Makefile.upstream
-
-version_gcc = 3.3
-version_gpc = 20030830
-version_texinputs = 1.0
-url_gcc-core = http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(version_gcc)/gcc-core-$(version_gcc).tar.gz
-url_gcc-c++ = http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(version_gcc)/gcc-g++-$(version_gcc).tar.gz
-url_gcc-gpc = http://www.gnu-pascal.de/alpha/gpc-$(version_gpc).tar.gz
-url_gcc-g77 = http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(version_gcc)/gcc-g77-$(version_gcc).tar.gz
-url_texinputs = http://www.megacz.com/tmp/texinputs-$(version_texinputs).tgz
-patches_gcc = gcc-fixes.patch gcc-fdata-sections-bss.patch
-configure_gcc = --target=mips-unknown-elf --disable-threads --with-gnu-ld --with-gnu-as --with-newlib=yes --enable-sjlj-exceptions --enable-languages="c"
-configure_gcc_step2 = $(configure_gcc) --enable-languages="c,c++,pascal,f77"
-
-version_binutils = 2.14
-url_binutils = ftp://ftp.gnu.org/gnu/binutils/binutils-$(version_binutils).tar.gz
-patches_binutils = binutils-no64.patch
-configure_binutils = --target=mips-unknown-elf
-
-version_newlib = 1.11.0
-url_newlib = http://mirrors.rcn.net/pub/sourceware/newlib/newlib-$(version_newlib).tar.gz
-patches_newlib = newlib-mips.patch newlib-tzset.patch newlib-malloc.patch newlib-vasprintf.patch
-configure_newlib = --enable-multilib --target=mips-unknown-elf
-
-url_openbsdglob = http://www.brianweb.net/xwt/openbsdglob.tar.gz
-url_regex = ftp://ftp.zoo.toronto.edu/pub/regex.shar
-
-version_bcel = 5.1
-url_bcel = http://mirrors.mix5.com/apache/jakarta/bcel/binaries/bcel-$(version_bcel).tar.gz
-
-.SECONDARY: # This is broken in gmake < 3.79.1
-
-upstream = $(shell pwd)
-root = $(shell dirname "`pwd`")
-usr = $(upstream)/install
-
-PATH := $(usr)/bin:$(PATH)
-export PATH
-
-# Solaris' patch doesn't work, use gnu patch on solaris
-PATCH = $(shell test `uname` = SunOS && echo gpatch || echo patch)
-
-tasks/full_toolchain: tasks/build_binutils tasks/build_gcc_step2 tasks/build_libc
-       touch $@
-
-tasks/build_gcc: tasks/build_binutils
-tasks/build_newlib: tasks/build_gcc
-
-tasks/build_libc: tasks/build_newlib tasks/build_regex tasks/build_openbsdglob
-       touch $@
-
-clean_%:
-       rm -rf "build/$(*)"*
-       rm -f "tasks/build_$*" "tasks/patch_$*" "tasks/extract_$*"
-
-
-gpc := $(usr)/bin/mips-unknown-elf-gpc
-gpc_flags := --big-endian -w -lgpc -lc $(usr)/mips-unknown-elf/lib/support*.o
-gpc_flags += -Wl,-T,$(usr)/mips-unknown-elf/lib/linker.ld
-g77 := $(usr)/bin/mips-unknown-elf-g77
-g77_flags := --big-endian -w -lg2c -lc $(usr)/mips-unknown-elf/lib/support*.o
-g77_flags += -Wl,-T,$(usr)/mips-unknown-elf/lib/linker.ld
-
-# FIXME ugly path hacks evil bad
-nestedvm := java -cp $(usr)/../build/bcel/bcel-5.1.jar:$(usr)/../../build org.ibex.nestedvm.Compiler -outformat class
-
-tasks/download_tex:  ; mkdir -p build/tex; touch $@
-build/tex/tex.web:   ; curl -o $@ http://www.math.uni.wroc.pl/~hebisch/tex_p/tex.web
-build/dtex/tangle.p: ; curl http://www.gnu-pascal.de/crystal/gpc/en/attachments/5593/tangle.p.gz | zcat > $@
-tasks/extract_tex:     build/tex/tex.web build/tex/tangle.p; touch $@
-
-build/tex/tangle.mips:  build/tex/tangle.p tasks/full_toolchain tasks/extract_tex tasks/build_gcc_step2
-       cd build/tex; $(gpc) tangle.p $(gpc_flags) -o tangle.mips
-build/tex/Tangle.class: build/tex/tangle.mips
-       $(nestedvm) -o unixruntime -outfile $@ Tangle $<
-build/tex/tex.p: build/tex/tex.web build/tex/tex.ch build/tex/Tangle.class
-       rm -f build/tex/tex.p build/tex/tex.pool
-       cd build/tex; java -cp .:$(usr)/../../build Tangle        \
-                       --gpc-rts=-nPascalfile:tex.p              \
-                       --gpc-rts=-npool:tex.pool                 \
-                       --gpc-rts=-nwebfile:tex.web               \
-                       --gpc-rts=-nchangefile:tex.ch
-build/tex/tex.mips:  build/tex/tex.p tasks/full_toolchain tasks/build_gcc_step2
-       cd build/tex; $(gpc) tex.p $(gpc_flags) -o tex.mips
-tasks/build_tex: build/tex/tex.mips
-       cd build/tex; $(nestedvm) -o unixruntime -outfile TeX.class TeX tex.mips
-       touch $@ 
-tasks/extract_texinputs: tasks/build_tex tasks/download_texinputs
-       cd build/tex; tar xvzf ../../download/texinputs-1.0.tgz
-       touch $@
-tasks/extract_linpack: tasks/download_linpack ; touch $@
-tasks/download_linpack:
-       mkdir -p build/linpack
-       cd build/linpack; wget -N http://www.math.iastate.edu/burkardt/f_src/linpack_bench/linpack_bench.f
-       touch $@
-
-tasks/build_linpack: tasks/full_toolchain tasks/extract_linpack
-       cd build/linpack; $(g77) linpack_bench.f $(g77_flags) -o linpack.mips
-       cd build/linpack; $(nestedvm) -o unixruntime -outfile Linpack.class Linpack linpack.mips
-       touch $@
-
-tasks/download_%:
-       if [ -z "$(url_$*)" ]; then echo "No url for $*" >&2; false; fi
-       mkdir -p download
-       cd download && wget --passive-ftp -N $(url_$*)
-       touch $@
-
-tasks/download_gcc: tasks/download_gcc-core tasks/download_gcc-c++ tasks/download_gcc-gpc tasks/download_gcc-g77
-       touch $@
-
-tasks/extract_%: tasks/download_%
-       mkdir -p build
-       cd build && \
-               gzip -dc  ../download/$*-$(version_$*).tar.gz | tar xf - && \
-               rm -f $* && \
-               ln -s $*-$(version_$*) $*
-       touch $@
-
-tasks/extract_gcc: tasks/download_gcc
-       mkdir -p build
-       cd build && gzip -dc ../download/gcc-core-$(version_gcc).tar.gz | tar xf -
-       cd build && gzip -dc ../download/gcc-g++-$(version_gcc).tar.gz | tar xf -
-       cd build && gzip -dc ../download/gcc-g77-$(version_gcc).tar.gz | tar xf -
-       cd build && gzip -dc ../download/gpc-$(version_gpc).tar.gz | tar xf - && \
-                       rm -rf gcc-$(version_gcc)/gcc/p/; mv gpc-$(version_gpc)/p gcc-$(version_gcc)/gcc/p
-       rmdir build/gpc-$(version_gpc)
-       touch $@
-
-tasks/patch_%: tasks/extract_%
-       cd build/$*-$(version_$*) &&  \
-       for p in $(patches_$*) end; do \
-               [ "$$p" = "end" ] || $(PATCH) -p0 < ../../patches/$$p || exit 1; \
-       done
-       touch $@
-
-tasks/build_%: tasks/patch_%
-       mkdir -p $(usr)
-       mkdir -p build/$*-obj && cd build/$*-obj && \
-               ../$*-$(version_$*)/configure --prefix=$(usr) $(configure_$*) && \
-               $(MAKE) TARGET_CFLAGS="$(MIPS_CFLAGS)" && \
-               $(MAKE) install
-       touch $@
-
-tasks/build_gcc_step2: tasks/patch_gcc tasks/build_libc
-       for f in crt0.o support.o support_aux.o; do \
-               rm -f "$(usr)/mips-unknown-elf/lib/$$f"; \
-               ln -s "$(root)/build/org/ibex/nestedvm/$$f" "$(usr)/mips-unknown-elf/lib/$$f"; \
-       done
-
-       rm -f "$(usr)/mips-unknown-elf/lib/linker.ld"
-       ln -s "$(root)/src/org/ibex/nestedvm/linker.ld" "$(usr)/mips-unknown-elf/lib/linker.ld"
-
-       if [ ! -e "$(usr)/mips-unknown-elf/include/getopt.h" ]; then \
-               echo '#include <unistd.h>' > "$(usr)/mips-unknown-elf/include/getopt.h"; \
-       fi
-
-       mips-unknown-elf-gcc -dumpspecs \
-               | sed '/startfile:$$/{n;s/crt0%O%s/crt0%O%s support%O%s support_aux%O%s/;};' \
-               | sed '/link_command:$$/{n;s/%{T\*}/%{T*} %{!T:-T linker.ld%s}/;};' \
-               > "$(usr)/lib/gcc-lib/mips-unknown-elf/$(version_gcc)/specs"
-
-       mkdir -p $(usr)
-       mkdir -p build/gcc-obj && cd build/gcc-obj && \
-               echo | ../gcc-$(version_gcc)/configure --prefix=$(usr) $(configure_gcc_step2) && \
-               $(MAKE) TARGET_CFLAGS="$(MIPS_CFLAGS)" GCC_FOR_TARGET=$(usr)/bin/mips-unknown-elf-gcc && \
-               $(MAKE) install
-       touch $@
-
-tasks/build_openbsdglob: tasks/download_openbsdglob tasks/build_newlib
-       @mkdir -p $(usr)/mips-unknown-elf/{include,lib}
-       cd build && gzip -dc ../download/openbsdglob.tar.gz | tar xf -
-       cd build/openbsdglob && \
-               mips-unknown-elf-gcc '-Dissetugid()=0' -DARG_MAX=65536 $(MIPS_CFLAGS) -I. -c -o glob.o glob.c && \
-               mips-unknown-elf-gcc -O2 -Wall -Werror -I. -c -o fnmatch.o fnmatch.c && \
-               mips-unknown-elf-ar cr libglob.a *.o && \
-               mips-unknown-elf-ranlib libglob.a && \
-               cp *.h $(usr)/mips-unknown-elf/include && \
-               cp *.a $(usr)/mips-unknown-elf/lib
-       touch $@
-
-tasks/build_regex: tasks/download_regex tasks/build_newlib
-       @mkdir -p $(usr)/mips-unknown-elf/{include,lib}
-       mkdir -p build/regex build/regex/fake
-       cd build/regex && \
-               sh ../../download/regex.shar && \
-               make CC=mips-unknown-elf-gcc CFLAGS="-I. $(MIPS_CFLAGS)" regcomp.o regexec.o regerror.o regfree.o && \
-               mips-unknown-elf-ar cr libregex.a regcomp.o regexec.o regerror.o regfree.o && \
-               mips-unknown-elf-ranlib libregex.a && \
-               cp regex.h $(usr)/mips-unknown-elf/include && \
-               cp libregex.a $(usr)/mips-unknown-elf/lib 
-       touch $@
-
-
-#
-# Tests
-# These are simply here for convenience. They aren't required 
-# to build or run mips2java
-#
-
-tasks/build_freetype: tasks/full_toolchain
-tasks/build_libjpeg: tasks/full_toolchain
-tasks/build_boehmgc: tasks/full_toolchain
-tasks/build_libmspack: tasks/full_toolchain
-tasks/build_freetype: tasks/full_toolchain
-
-version_libjpeg = 6b
-url_libjpeg = http://www.ijg.org/files/jpegsrc.v$(version_libjpeg).tar.gz
-
-version_libmspack = 20030726
-url_libmspack = http://www.kyz.uklinux.net/downloads/libmspack-$(version_libmspack).tar.gz
-patches_libmspack = libmspack.patch
-
-version_freetype = 2.1.4
-url_freetype = http://umn.dl.sourceforge.net/sourceforge/freetype/freetype-$(version_freetype).tar.gz
-patches_freetype = freetype.patch ft-nostdio.patch
-
-version_boehmgc = 6.3alpha2
-url_boehmgc = http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc$(version_boehmgc).tar.gz
-patches_boehmgc = boehm-gc.patch
-
-version_busybox = 1.00-pre9
-url_busybox = http://busybox.net/downloads/busybox-$(version_busybox).tar.gz
-patches_busybox = busybox.patch
-
-tasks/extract_libjpeg: tasks/download_libjpeg
-       mkdir -p build
-       cd build && \
-               gzip -dc ../download/jpegsrc.v$(version_libjpeg).tar.gz | tar xf - && \
-               mv jpeg-$(version_libjpeg) libjpeg-$(version_libjpeg) && \
-               rm -f libjpeg && \
-               ln -s libjpeg-$(version_libjpeg)  libjpeg
-       touch $@    
-
-tasks/build_libjpeg: tasks/patch_libjpeg
-       cd build/libjpeg-$(version_libjpeg) && \
-               ./configure && \
-               make CC="mips-unknown-elf-gcc" \
-                       AR="mips-unknown-elf-ar rc" \
-                       AR2="mips-unknown-elf-ranlib" \
-                       CFLAGS="$(MIPS_CFLAGS)" \
-                       LDFLAGS="$(MIPS_LDFLAGS)"
-       touch $@    
-
-tasks/extract_libmspack: tasks/download_libmspack
-       mkdir -p build
-       cd build && \
-               gzip -dc ../download/libmspack-$(version_libmspack).tar.gz | tar xf - && \
-               mv libmspack libmspack-$(version_libmspack) && \
-               rm -f libmspack && \
-               ln -s libmspack-$(version_libmspack)  libmspack
-       touch $@    
-
-tasks/build_libmspack: tasks/patch_libmspack tasks/full_toolchain
-       cd build/libmspack-$(version_libmspack)/mspack && \
-               make CC="mips-unknown-elf-gcc" \
-                       AR="mips-unknown-elf-ar" \
-                       RANLIB="mips-unknown-elf-ranlib" \
-                       OPTIM="$(MIPS_CFLAGS)"
-       touch $@    
-
-tasks/build_freetype: tasks/patch_freetype tasks/full_toolchain
-       cd build/freetype-$(version_freetype) && \
-               $(MAKE) setup ansi && \
-               $(MAKE) CC="mips-unknown-elf-gcc" \
-                   CFLAGS="-c $(MIPS_CFLAGS)" \
-                       AR="mips-unknown-elf-ar" \
-                       RANLIB="mips-unknown-elf-ranlib" && \
-               mips-unknown-elf-ranlib objs/libfreetype.a
-       touch $@    
-
-tasks/extract_boehmgc: tasks/download_boehmgc
-       mkdir -p build
-       cd build && \
-               rm -rf gc$(version_boehmgc) && \
-               gzip -dc ../download/gc$(version_boehmgc).tar.gz | tar xf - && \
-               rm -f boehmgc boehmgc-$(version_boehmgc) && \
-               ln -s gc$(version_boehmgc)  boehmgc && \
-               ln -s gc$(version_boehmgc)  boehmgc-$(version_boehmgc)
-       touch $@
-
-tasks/build_boehmgc: tasks/patch_boehmgc tasks/full_toolchain
-       cd build/gc$(version_boehmgc) && \
-               CC="mips-unknown-elf-gcc" CFLAGS="$(MIPS_CFLAGS)" LDFLAGS="$(MIPS_LDFLAGS)" \
-               ./configure --host=mips-unknown-elf --disable-shared --disable-threads && \
-               make && \
-               make gctest 
-       touch $@
-
-tasks/build_busybox: tasks/patch_busybox tasks/full_toolchain
-       cd build && \
-               rm -f busybox && \
-               ln -s busybox-$(version_busybox) busybox
-       cd build/busybox && $(MAKE) LDFLAGS="$(MIPS_LDFLAGS)" CFLAGS_EXTRA="$(MIPS_CFLAGS) -DNESTEDVM -g"
-       touch $@
-
-tasks/build_gcclass:
-       cd build &&  darcs get --verbose http://darcs.brianweb.net/gcclass
-       cd build/gcclass && make
-       touch $@
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/binutils-no64.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/binutils-no64.patch
deleted file mode 100644 (file)
index ca684f9..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-diff -ru ../binutils-2.14/bfd/config.bfd ./bfd/config.bfd
---- ../binutils-2.14/bfd/config.bfd    Mon Jun  2 16:35:20 2003
-+++ ./bfd/config.bfd   Mon Sep  1 01:06:32 2003
-@@ -777,6 +777,10 @@
-     targ_defvec=bfd_elf32_littlemips_vec
-     targ_selvecs="bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
-     ;;
-+  mips*-unknown-elf*)
-+    targ_defvec=bfd_elf32_bigmips_vec
-+    targ_selvecs=bfd_elf32_littlemips_vec
-+    ;;
-   mips*-*-elf* | mips*-*-rtems* | mips*-*-vxworks*)
-     targ_defvec=bfd_elf32_bigmips_vec
-     targ_selvecs="bfd_elf32_littlemips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
-Only in ./bfd: config.bfd.old
-Only in ./bfd: config.bfd~
-diff -ru ../binutils-2.14/ld/configure.tgt ./ld/configure.tgt
---- ../binutils-2.14/ld/configure.tgt  Thu Jun 12 10:25:52 2003
-+++ ./ld/configure.tgt Mon Sep  1 01:07:42 2003
-@@ -405,6 +405,7 @@
- mips*vr5000el-*-elf*) targ_emul=elf32l4300 ;;
- mips*vr5000-*-elf*)   targ_emul=elf32b4300 ;;
- mips*el-*-elf*)               targ_emul=elf32elmip ;;
-+mips*-unknown-elf*)     targ_emul=elf32ebmip ;;
- mips*-*-elf*)         targ_emul=elf32ebmip ;;
- mips*el-*-rtems*)     targ_emul=elf32elmip ;;
- mips*-*-rtems*)               targ_emul=elf32ebmip ;;
-Only in ./ld: configure.tgt.old
-Only in ./ld: configure.tgt~
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/boehm-gc.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/boehm-gc.patch
deleted file mode 100644 (file)
index 48103d3..0000000
+++ /dev/null
@@ -1,2879 +0,0 @@
-diff -ruN ../gc6.3alpha2/configure ./configure
---- ../gc6.3alpha2/configure   Wed Oct  1 19:34:32 2003
-+++ ./configure        Wed Nov 19 04:17:25 2003
-@@ -1,7 +1,7 @@
- #! /bin/sh
- # From configure.in Revision: 1.2 .
- # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.53 for gc 6.3alpha2.
-+# Generated by GNU Autoconf 2.57 for gc 6.3alpha2.
- #
- # Report bugs to <Hans.Boehm@hp.com>.
- #
-@@ -9,173 +9,6 @@
- # Free Software Foundation, Inc.
- # This configure script is free software; the Free Software Foundation
- # gives unlimited permission to copy, distribute and modify it.
--
--# Find the correct PATH separator.  Usually this is `:', but
--# DJGPP uses `;' like DOS.
--if test "X${PATH_SEPARATOR+set}" != Xset; then
--  UNAME=${UNAME-`uname 2>/dev/null`}
--  case X$UNAME in
--    *-DOS) lt_cv_sys_path_separator=';' ;;
--    *)     lt_cv_sys_path_separator=':' ;;
--  esac
--  PATH_SEPARATOR=$lt_cv_sys_path_separator
--fi
--
--
--# Check that we are running under the correct shell.
--SHELL=${CONFIG_SHELL-/bin/sh}
--
--case X$ECHO in
--X*--fallback-echo)
--  # Remove one level of quotation (which was required for Make).
--  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
--  ;;
--esac
--
--echo=${ECHO-echo}
--if test "X$1" = X--no-reexec; then
--  # Discard the --no-reexec flag, and continue.
--  shift
--elif test "X$1" = X--fallback-echo; then
--  # Avoid inline document here, it may be left over
--  :
--elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
--  # Yippee, $echo works!
--  :
--else
--  # Restart under the correct shell.
--  exec $SHELL "$0" --no-reexec ${1+"$@"}
--fi
--
--if test "X$1" = X--fallback-echo; then
--  # used as fallback echo
--  shift
--  cat <<EOF
--
--EOF
--  exit 0
--fi
--
--# The HP-UX ksh and POSIX shell print the target directory to stdout
--# if CDPATH is set.
--if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
--
--if test -z "$ECHO"; then
--if test "X${echo_test_string+set}" != Xset; then
--# find a string as large as possible, as long as the shell can cope with it
--  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
--    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
--    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
--       echo_test_string="`eval $cmd`" &&
--       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
--    then
--      break
--    fi
--  done
--fi
--
--if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
--   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
--   test "X$echo_testing_string" = "X$echo_test_string"; then
--  :
--else
--  # The Solaris, AIX, and Digital Unix default echo programs unquote
--  # backslashes.  This makes it impossible to quote backslashes using
--  #   echo "$something" | sed 's/\\/\\\\/g'
--  #
--  # So, first we look for a working echo in the user's PATH.
--
--  IFS="${IFS=         }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
--  for dir in $PATH /usr/ucb; do
--    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
--       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
--       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
--       test "X$echo_testing_string" = "X$echo_test_string"; then
--      echo="$dir/echo"
--      break
--    fi
--  done
--  IFS="$save_ifs"
--
--  if test "X$echo" = Xecho; then
--    # We didn't find a better echo, so look for alternatives.
--    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
--       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
--       test "X$echo_testing_string" = "X$echo_test_string"; then
--      # This shell has a builtin print -r that does the trick.
--      echo='print -r'
--    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
--       test "X$CONFIG_SHELL" != X/bin/ksh; then
--      # If we have ksh, try running configure again with it.
--      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
--      export ORIGINAL_CONFIG_SHELL
--      CONFIG_SHELL=/bin/ksh
--      export CONFIG_SHELL
--      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
--    else
--      # Try using printf.
--      echo='printf %s\n'
--      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
--       echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
--       test "X$echo_testing_string" = "X$echo_test_string"; then
--      # Cool, printf works
--      :
--      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
--         test "X$echo_testing_string" = 'X\t' &&
--         echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
--         test "X$echo_testing_string" = "X$echo_test_string"; then
--      CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
--      export CONFIG_SHELL
--      SHELL="$CONFIG_SHELL"
--      export SHELL
--      echo="$CONFIG_SHELL $0 --fallback-echo"
--      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
--         test "X$echo_testing_string" = 'X\t' &&
--         echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
--         test "X$echo_testing_string" = "X$echo_test_string"; then
--      echo="$CONFIG_SHELL $0 --fallback-echo"
--      else
--      # maybe with a smaller string...
--      prev=:
--
--      for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
--        if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
--        then
--          break
--        fi
--        prev="$cmd"
--      done
--
--      if test "$prev" != 'sed 50q "$0"'; then
--        echo_test_string=`eval $prev`
--        export echo_test_string
--        exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
--      else
--        # Oops.  We lost completely, so just stick with echo.
--        echo=echo
--      fi
--      fi
--    fi
--  fi
--fi
--fi
--
--# Copy echo and quote the copy suitably for passing to libtool from
--# the Makefile, instead of quoting the original, which is used later.
--ECHO=$echo
--if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
--   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
--fi
--
--
--
--if expr a : '\(a\)' >/dev/null 2>&1; then
--  as_expr=expr
--else
--  as_expr=false
--fi
--
--
- ## --------------------- ##
- ## M4sh Initialization.  ##
- ## --------------------- ##
-@@ -184,11 +17,13 @@
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-   emulate sh
-   NULLCMD=:
-+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-+  # is contrary to our usage.  Disable this feature.
-+  alias -g '${1+"$@"}'='"$@"'
- elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-   set -o posix
- fi
--# NLS nuisances.
- # Support unset when possible.
- if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-   as_unset=unset
-@@ -196,34 +31,42 @@
-   as_unset=false
- fi
--(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
--    { $as_unset LANG || test "${LANG+set}" != set; } ||
--      { LANG=C; export LANG; }
--(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
--    { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
--      { LC_ALL=C; export LC_ALL; }
--(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
--    { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
--      { LC_TIME=C; export LC_TIME; }
--(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
--    { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
--      { LC_CTYPE=C; export LC_CTYPE; }
--(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
--    { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
--      { LANGUAGE=C; export LANGUAGE; }
--(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
--    { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
--      { LC_COLLATE=C; export LC_COLLATE; }
--(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
--    { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
--      { LC_NUMERIC=C; export LC_NUMERIC; }
--(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
--    { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
--      { LC_MESSAGES=C; export LC_MESSAGES; }
-+
-+# Work around bugs in pre-3.0 UWIN ksh.
-+$as_unset ENV MAIL MAILPATH
-+PS1='$ '
-+PS2='> '
-+PS4='+ '
-+
-+# NLS nuisances.
-+for as_var in \
-+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+  LC_TELEPHONE LC_TIME
-+do
-+  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+    eval $as_var=C; export $as_var
-+  else
-+    $as_unset $as_var
-+  fi
-+done
-+
-+# Required to use basename.
-+if expr a : '\(a\)' >/dev/null 2>&1; 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
- # Name of the executable.
--as_me=`(basename "$0") 2>/dev/null ||
-+as_me=`$as_basename "$0" ||
- $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)$' \| \
-@@ -234,6 +77,7 @@
-         /^X\/\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-+
- # PATH needs CR, and LINENO needs CR and PATH.
- # Avoid depending upon Character Ranges.
- as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-@@ -244,15 +88,15 @@
- # The user is always right.
- if test "${PATH_SEPARATOR+set}" != set; then
--  echo "#! /bin/sh" >conftest.sh
--  echo  "exit 0"   >>conftest.sh
--  chmod +x conftest.sh
--  if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
-+  echo "#! /bin/sh" >conf$$.sh
-+  echo  "exit 0"   >>conf$$.sh
-+  chmod +x conf$$.sh
-+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-     PATH_SEPARATOR=';'
-   else
-     PATH_SEPARATOR=:
-   fi
--  rm -f conftest.sh
-+  rm -f conf$$.sh
- fi
-@@ -300,6 +144,8 @@
-   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-   test "x$as_lineno_1" != "x$as_lineno_2" &&
-   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-+           $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-+           $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-            CONFIG_SHELL=$as_dir/$as_base
-            export CONFIG_SHELL
-            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-@@ -372,6 +218,12 @@
- fi
- rm -f conf$$ conf$$.exe conf$$.file
-+if mkdir -p . 2>/dev/null; then
-+  as_mkdir_p=:
-+else
-+  as_mkdir_p=false
-+fi
-+
- as_executable_p="test -f"
- # Sed expression to map a string onto a valid CPP name.
-@@ -388,7 +240,166 @@
- IFS="         $as_nl"
- # CDPATH.
--$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
-+$as_unset CDPATH
-+
-+
-+# Find the correct PATH separator.  Usually this is `:', but
-+# DJGPP uses `;' like DOS.
-+if test "X${PATH_SEPARATOR+set}" != Xset; then
-+  UNAME=${UNAME-`uname 2>/dev/null`}
-+  case X$UNAME in
-+    *-DOS) lt_cv_sys_path_separator=';' ;;
-+    *)     lt_cv_sys_path_separator=':' ;;
-+  esac
-+  PATH_SEPARATOR=$lt_cv_sys_path_separator
-+fi
-+
-+
-+# Check that we are running under the correct shell.
-+SHELL=${CONFIG_SHELL-/bin/sh}
-+
-+case X$ECHO in
-+X*--fallback-echo)
-+  # Remove one level of quotation (which was required for Make).
-+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
-+  ;;
-+esac
-+
-+echo=${ECHO-echo}
-+if test "X$1" = X--no-reexec; then
-+  # Discard the --no-reexec flag, and continue.
-+  shift
-+elif test "X$1" = X--fallback-echo; then
-+  # Avoid inline document here, it may be left over
-+  :
-+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-+  # Yippee, $echo works!
-+  :
-+else
-+  # Restart under the correct shell.
-+  exec $SHELL "$0" --no-reexec ${1+"$@"}
-+fi
-+
-+if test "X$1" = X--fallback-echo; then
-+  # used as fallback echo
-+  shift
-+  cat <<EOF
-+
-+EOF
-+  exit 0
-+fi
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-+
-+if test -z "$ECHO"; then
-+if test "X${echo_test_string+set}" != Xset; then
-+# find a string as large as possible, as long as the shell can cope with it
-+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-+       echo_test_string="`eval $cmd`" &&
-+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-+    then
-+      break
-+    fi
-+  done
-+fi
-+
-+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-+   test "X$echo_testing_string" = "X$echo_test_string"; then
-+  :
-+else
-+  # The Solaris, AIX, and Digital Unix default echo programs unquote
-+  # backslashes.  This makes it impossible to quote backslashes using
-+  #   echo "$something" | sed 's/\\/\\\\/g'
-+  #
-+  # So, first we look for a working echo in the user's PATH.
-+
-+  IFS="${IFS=         }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+  for dir in $PATH /usr/ucb; do
-+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-+       test "X$echo_testing_string" = "X$echo_test_string"; then
-+      echo="$dir/echo"
-+      break
-+    fi
-+  done
-+  IFS="$save_ifs"
-+
-+  if test "X$echo" = Xecho; then
-+    # We didn't find a better echo, so look for alternatives.
-+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-+       test "X$echo_testing_string" = "X$echo_test_string"; then
-+      # This shell has a builtin print -r that does the trick.
-+      echo='print -r'
-+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-+       test "X$CONFIG_SHELL" != X/bin/ksh; then
-+      # If we have ksh, try running configure again with it.
-+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-+      export ORIGINAL_CONFIG_SHELL
-+      CONFIG_SHELL=/bin/ksh
-+      export CONFIG_SHELL
-+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-+    else
-+      # Try using printf.
-+      echo='printf %s\n'
-+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-+       echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-+       test "X$echo_testing_string" = "X$echo_test_string"; then
-+      # Cool, printf works
-+      :
-+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-+         test "X$echo_testing_string" = 'X\t' &&
-+         echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-+         test "X$echo_testing_string" = "X$echo_test_string"; then
-+      CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-+      export CONFIG_SHELL
-+      SHELL="$CONFIG_SHELL"
-+      export SHELL
-+      echo="$CONFIG_SHELL $0 --fallback-echo"
-+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-+         test "X$echo_testing_string" = 'X\t' &&
-+         echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-+         test "X$echo_testing_string" = "X$echo_test_string"; then
-+      echo="$CONFIG_SHELL $0 --fallback-echo"
-+      else
-+      # maybe with a smaller string...
-+      prev=:
-+
-+      for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-+        if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-+        then
-+          break
-+        fi
-+        prev="$cmd"
-+      done
-+
-+      if test "$prev" != 'sed 50q "$0"'; then
-+        echo_test_string=`eval $prev`
-+        export echo_test_string
-+        exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-+      else
-+        # Oops.  We lost completely, so just stick with echo.
-+        echo=echo
-+      fi
-+      fi
-+    fi
-+  fi
-+fi
-+fi
-+
-+# Copy echo and quote the copy suitably for passing to libtool from
-+# the Makefile, instead of quoting the original, which is used later.
-+ECHO=$echo
-+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-+fi
-+
- # Name of the host.
-@@ -402,6 +413,7 @@
- # Initializations.
- #
- ac_default_prefix=/usr/local
-+ac_config_libobj_dir=.
- cross_compiling=no
- subdirs=
- MFLAGS=
-@@ -458,6 +470,8 @@
- # include <unistd.h>
- #endif"
-+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE GC_VERSION CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE CCAS CCASFLAGS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GC_CFLAGS THREADLIBS POWERPC_DARWIN_TRUE POWERPC_DARWIN_FALSE EXTRA_TEST_LIBS target_all CPLUSPLUS_TRUE CPLUSPLUS_FALSE INCLUDES CXXINCLUDES addobjs addincludes addlibs addtests LN_S ECHO CPP EGREP LIBTOOL MY_CFLAGS USE_LIBDIR_TRUE USE_LIBDIR_FALSE LIBOBJS LTLIBOBJS'
-+ac_subst_files=''
- # Initialize some variables set by options.
- ac_init_help=
-@@ -881,6 +895,9 @@
-    { (exit 1); exit 1; }; }
-   fi
- fi
-+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-+   { (exit 1); exit 1; }; }
- srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
- ac_env_build_alias_set=${build_alias+set}
- ac_env_build_alias_value=$build_alias
-@@ -1080,7 +1097,7 @@
- # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
- # absolute.
- ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
--ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
-+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
- ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
- ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-@@ -1107,7 +1124,7 @@
- if $ac_init_version; then
-   cat <<\_ACEOF
- gc configure 6.3alpha2
--generated by GNU Autoconf 2.53
-+generated by GNU Autoconf 2.57
- Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
- Free Software Foundation, Inc.
-@@ -1122,7 +1139,7 @@
- running configure, to aid debugging if configure makes a mistake.
- It was created by gc $as_me 6.3alpha2, which was
--generated by GNU Autoconf 2.53.  Invocation command line was
-+generated by GNU Autoconf 2.57.  Invocation command line was
-   $ $0 $@
-@@ -1174,27 +1191,54 @@
- # 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_sep=
--for ac_arg
-+ac_must_keep_next=false
-+for ac_pass in 1 2
- do
--  case $ac_arg in
--  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
--  | --no-cr | --no-c | -n ) continue ;;
--  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
--  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
--    continue ;;
--  *" "*|*"    "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
--    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
--  esac
--  case " $ac_configure_args " in
--    *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
--    *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
--       ac_sep=" " ;;
--  esac
--  # Get rid of the leading space.
-+  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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-+    esac
-+    case $ac_pass in
-+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-+    2)
-+      ac_configure_args1="$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
-+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-+      # Get rid of the leading space.
-+      ac_sep=" "
-+      ;;
-+    esac
-+  done
- done
-+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
- # When interrupted or exit'd, cleanup temporary files, and complete
- # config.log.  We remove comments because anyway the quotes in there
-@@ -1205,6 +1249,7 @@
-   # Save into config.log some information that might help in debugging.
-   {
-     echo
-+
-     cat <<\_ASBOX
- ## ---------------- ##
- ## Cache variables. ##
-@@ -1227,6 +1272,35 @@
-     esac;
- }
-     echo
-+
-+    cat <<\_ASBOX
-+## ----------------- ##
-+## Output variables. ##
-+## ----------------- ##
-+_ASBOX
-+    echo
-+    for ac_var in $ac_subst_vars
-+    do
-+      eval ac_val=$`echo $ac_var`
-+      echo "$ac_var='"'"'$ac_val'"'"'"
-+    done | sort
-+    echo
-+
-+    if test -n "$ac_subst_files"; then
-+      cat <<\_ASBOX
-+## ------------- ##
-+## Output files. ##
-+## ------------- ##
-+_ASBOX
-+      echo
-+      for ac_var in $ac_subst_files
-+      do
-+      eval ac_val=$`echo $ac_var`
-+        echo "$ac_var='"'"'$ac_val'"'"'"
-+      done | sort
-+      echo
-+    fi
-+
-     if test -s confdefs.h; then
-       cat <<\_ASBOX
- ## ----------- ##
-@@ -1234,7 +1308,7 @@
- ## ----------- ##
- _ASBOX
-       echo
--      sed "/^$/d" confdefs.h
-+      sed "/^$/d" confdefs.h | sort
-       echo
-     fi
-     test "$ac_signal" != 0 &&
-@@ -1399,6 +1473,7 @@
-+
-     ## version must conform to [0-9]+[.][0-9]+(alpha[0-9]+)?
- ac_aux_dir=
-@@ -1743,15 +1818,15 @@
-   test -n "$AWK" && break
- done
--echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \${MAKE}" >&5
--echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
-+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
- set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
- if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-   echo $ECHO_N "(cached) $ECHO_C" >&6
- else
-   cat >conftest.make <<\_ACEOF
- all:
--      @echo 'ac_maketemp="${MAKE}"'
-+      @echo 'ac_maketemp="$(MAKE)"'
- _ACEOF
- # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
- eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-@@ -2116,9 +2191,7 @@
-     # However, it has the same basename, so the bogon will be chosen
-     # first if we set CC to just the basename; use the full file name.
-     shift
--    set dummy "$as_dir/$ac_word" ${1+"$@"}
--    shift
--    ac_cv_prog_CC="$@"
-+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-   fi
- fi
- fi
-@@ -2223,8 +2296,10 @@
- fi
--test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
--echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
-+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: no acceptable C compiler found in \$PATH
-+See \`config.log' for more details." >&2;}
-    { (exit 1); exit 1; }; }
- # Provide some information about the compiler.
-@@ -2249,14 +2324,12 @@
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2266,7 +2339,7 @@
- }
- _ACEOF
- ac_clean_files_save=$ac_clean_files
--ac_clean_files="$ac_clean_files a.out a.exe"
-+ac_clean_files="$ac_clean_files a.out 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.
-@@ -2285,26 +2358,39 @@
- # Be careful to initialize this variable, since it used to be cached.
- # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
- ac_cv_exeext=
--for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null;
--                ls a.out conftest 2>/dev/null;
--                ls a.* conftest.* 2>/dev/null`; do
-+# b.out is created by i960 compilers.
-+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-+do
-+  test -f "$ac_file" || continue
-   case $ac_file in
--    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;;
--    a.out ) # We found the default executable, but exeext='' is most
--            # certainly right.
--            break;;
--    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
--          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
--          export ac_cv_exeext
--          break;;
--    * ) break;;
-+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-+        ;;
-+    conftest.$ac_ext )
-+        # This is the source file.
-+        ;;
-+    [ab].out )
-+        # We found the default executable, but exeext='' is most
-+        # certainly right.
-+        break;;
-+    *.* )
-+        ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-+        # FIXME: I believe we export ac_cv_exeext for Libtool,
-+        # but it would be cool to find out if it's true.  Does anybody
-+        # maintain Libtool? --akim.
-+        export ac_cv_exeext
-+        break;;
-+    * )
-+        break;;
-   esac
- done
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
--{ { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5
--echo "$as_me: error: C compiler cannot create executables" >&2;}
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: C compiler cannot create executables
-+See \`config.log' for more details." >&2;}
-    { (exit 77); exit 77; }; }
- fi
-@@ -2331,9 +2417,11 @@
-       cross_compiling=yes
-     else
-       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
--If you meant to cross compile, use \`--host'." >&5
-+If you meant to cross compile, use \`--host'.
-+See \`config.log' for more details." >&5
- echo "$as_me: error: cannot run C compiled programs.
--If you meant to cross compile, use \`--host'." >&2;}
-+If you meant to cross compile, use \`--host'.
-+See \`config.log' for more details." >&2;}
-    { (exit 1); exit 1; }; }
-     fi
-   fi
-@@ -2341,7 +2429,7 @@
- echo "$as_me:$LINENO: result: yes" >&5
- echo "${ECHO_T}yes" >&6
--rm -f a.out a.exe conftest$ac_cv_exeext
-+rm -f a.out a.exe conftest$ac_cv_exeext b.out
- ac_clean_files=$ac_clean_files_save
- # Check the compiler produces executables we can run.  If not, either
- # the compiler is broken, or we cross compile.
-@@ -2361,9 +2449,10 @@
- # 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 `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
-+for ac_file in conftest.exe conftest conftest.*; do
-+  test -f "$ac_file" || continue
-   case $ac_file in
--    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
-+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-           export ac_cv_exeext
-           break;;
-@@ -2371,8 +2460,10 @@
-   esac
- done
- else
--  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5
--echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;}
-+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-+See \`config.log' for more details." >&2;}
-    { (exit 1); exit 1; }; }
- fi
-@@ -2390,14 +2481,12 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2414,16 +2503,19 @@
-   (exit $ac_status); }; then
-   for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-   case $ac_file in
--    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
-+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-        break;;
-   esac
- done
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
--{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5
--echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;}
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute suffix of object files: cannot compile
-+See \`config.log' for more details." >&2;}
-    { (exit 1); exit 1; }; }
- fi
-@@ -2440,14 +2532,12 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2474,7 +2564,8 @@
-   ac_compiler_gnu=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_compiler_gnu=no
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -2494,14 +2585,12 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2525,7 +2614,8 @@
-   ac_cv_prog_cc_g=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_prog_cc_g=no
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -2547,6 +2637,102 @@
-     CFLAGS=
-   fi
- fi
-+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-+if test "${ac_cv_prog_cc_stdc+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  ac_cv_prog_cc_stdc=no
-+ac_save_CC=$CC
-+cat >conftest.$ac_ext <<_ACEOF
-+#line $LINENO "configure"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+#include <stdarg.h>
-+#include <stdio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+/* 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;
-+}
-+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
-+# Don't try gcc -ansi; that turns off useful extensions and
-+# breaks some systems' header files.
-+# AIX                 -qlanglvl=ansi
-+# Ultrix and OSF/1    -std1
-+# HP-UX 10.20 and later       -Ae
-+# HP-UX older versions        -Aa -D_HPUX_SOURCE
-+# SVR4                        -Xc -D__EXTENSIONS__
-+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-+do
-+  CC="$ac_save_CC $ac_arg"
-+  rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+  (eval $ac_compile) 2>&5
-+  ac_status=$?
-+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); } &&
-+         { ac_try='test -s conftest.$ac_objext'
-+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); }; }; then
-+  ac_cv_prog_cc_stdc=$ac_arg
-+break
-+else
-+  echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.$ac_objext
-+done
-+rm -f conftest.$ac_ext conftest.$ac_objext
-+CC=$ac_save_CC
-+
-+fi
-+
-+case "x$ac_cv_prog_cc_stdc" in
-+  x|xno)
-+    echo "$as_me:$LINENO: result: none needed" >&5
-+echo "${ECHO_T}none needed" >&6 ;;
-+  *)
-+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-+    CC="$CC $ac_cv_prog_cc_stdc" ;;
-+esac
-+
- # Some people use a C++ compiler to compile C.  Since we use `exit',
- # in C++ we need to declare it.  In case someone uses the same compiler
- # for both compiling C and C++ we need to have the C++ compiler decide
-@@ -2579,15 +2765,13 @@
- do
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <stdlib.h>
- $ac_declaration
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2611,20 +2795,19 @@
-   :
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- continue
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- $ac_declaration
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2648,7 +2831,8 @@
-   break
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
- done
-@@ -2661,7 +2845,8 @@
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-@@ -2680,7 +2865,7 @@
- rmdir .deps 2>/dev/null
--ac_config_commands="$ac_config_commands depfiles"
-+          ac_config_commands="$ac_config_commands depfiles"
- am_make=${MAKE-make}
-@@ -2932,14 +3117,12 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -2966,7 +3149,8 @@
-   ac_compiler_gnu=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_compiler_gnu=no
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -2986,14 +3170,12 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -3017,7 +3199,8 @@
-   ac_cv_prog_cxx_g=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_prog_cxx_g=no
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -3050,15 +3233,13 @@
- do
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <stdlib.h>
- $ac_declaration
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -3082,20 +3263,19 @@
-   :
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- continue
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- $ac_declaration
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -3119,7 +3299,8 @@
-   break
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
- done
-@@ -3751,7 +3932,11 @@
- LIBS="-ldl  $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -3760,12 +3945,6 @@
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char dlopen ();
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -3789,7 +3968,8 @@
-   ac_cv_lib_dl_dlopen=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_lib_dl_dlopen=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -3936,6 +4116,13 @@
-     ;;
-  mips*-*-linux*)
-     ;;
-+ mips-unknown-elf*)
-+    machdep="mips2java_mach_dep.lo"
-+    cat >>confdefs.h <<\_ACEOF
-+#define MIPS2JAVA 1
-+_ACEOF
-+
-+    ;;
-  mips-*-*)
-     machdep="mips_sgi_mach_dep.lo"
-     cat >>confdefs.h <<\_ACEOF
-@@ -4595,18 +4782,28 @@
- do
-   # Use a header file that comes with gcc, so configuring glibc
-   # with a fresh cross-compiler works.
-+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+  # <limits.h> 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 >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
--#include <assert.h>
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-                      Syntax error
- _ACEOF
- if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
-+  grep -v '^ *+' conftest.er1 >conftest.err
-   rm -f conftest.er1
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-@@ -4623,7 +4820,8 @@
-   :
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-   # Broken: fails on valid input.
- continue
- fi
-@@ -4633,13 +4831,17 @@
-   # can be detected and how.
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <ac_nonexistent.h>
- _ACEOF
- if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
-+  grep -v '^ *+' conftest.er1 >conftest.err
-   rm -f conftest.er1
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-@@ -4657,7 +4859,8 @@
- continue
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-   # Passes both tests.
- ac_preproc_ok=:
- break
-@@ -4686,18 +4889,28 @@
- do
-   # Use a header file that comes with gcc, so configuring glibc
-   # with a fresh cross-compiler works.
-+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+  # <limits.h> 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 >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
--#include <assert.h>
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-                      Syntax error
- _ACEOF
- if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
-+  grep -v '^ *+' conftest.er1 >conftest.err
-   rm -f conftest.er1
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-@@ -4714,7 +4927,8 @@
-   :
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-   # Broken: fails on valid input.
- continue
- fi
-@@ -4724,13 +4938,17 @@
-   # can be detected and how.
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <ac_nonexistent.h>
- _ACEOF
- if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
-+  grep -v '^ *+' conftest.er1 >conftest.err
-   rm -f conftest.er1
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-@@ -4748,7 +4966,8 @@
- continue
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-   # Passes both tests.
- ac_preproc_ok=:
- break
-@@ -4761,8 +4980,10 @@
- if $ac_preproc_ok; then
-   :
- else
--  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5
--echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
-+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-+See \`config.log' for more details." >&2;}
-    { (exit 1); exit 1; }; }
- fi
-@@ -4773,6 +4994,21 @@
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+echo "$as_me:$LINENO: checking for egrep" >&5
-+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-+if test "${ac_cv_prog_egrep+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-+    then ac_cv_prog_egrep='grep -E'
-+    else ac_cv_prog_egrep='egrep'
-+    fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
-+ EGREP=$ac_cv_prog_egrep
-+
-+
- echo "$as_me:$LINENO: checking for ANSI C header files" >&5
- echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
- if test "${ac_cv_header_stdc+set}" = set; then
-@@ -4780,48 +5016,59 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <stdlib.h>
- #include <stdarg.h>
- #include <string.h>
- #include <float.h>
-+int
-+main ()
-+{
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
--if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
--  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+  (eval $ac_compile) 2>&5
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } >/dev/null; then
--  if test -s conftest.err; then
--    ac_cpp_err=$ac_c_preproc_warn_flag
--  else
--    ac_cpp_err=
--  fi
--else
--  ac_cpp_err=yes
--fi
--if test -z "$ac_cpp_err"; then
-+  (exit $ac_status); } &&
-+         { ac_try='test -s conftest.$ac_objext'
-+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+  (eval $ac_try) 2>&5
-+  ac_status=$?
-+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); }; }; then
-   ac_cv_header_stdc=yes
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
--  ac_cv_header_stdc=no
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_header_stdc=no
- fi
--rm -f conftest.err conftest.$ac_ext
-+rm -f 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 >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <string.h>
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
--  egrep "memchr" >/dev/null 2>&1; then
-+  $EGREP "memchr" >/dev/null 2>&1; then
-   :
- else
-   ac_cv_header_stdc=no
-@@ -4834,12 +5081,16 @@
-   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <stdlib.h>
- _ACEOF
- if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
--  egrep "free" >/dev/null 2>&1; then
-+  $EGREP "free" >/dev/null 2>&1; then
-   :
- else
-   ac_cv_header_stdc=no
-@@ -4855,13 +5106,18 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <ctype.h>
- #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') \
-+# define ISLOWER(c) \
-+                   (('a' <= (c) && (c) <= 'i') \
-                      || ('j' <= (c) && (c) <= 'r') \
-                      || ('s' <= (c) && (c) <= 'z'))
- # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-@@ -4894,11 +5150,12 @@
- else
-   echo "$as_me: program exited with status $ac_status" >&5
- echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ( exit $ac_status )
- ac_cv_header_stdc=no
- fi
--rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
- fi
- fi
-@@ -4933,7 +5190,11 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- $ac_includes_default
- #include <$ac_header>
-@@ -4953,7 +5214,8 @@
-   eval "$as_ac_Header=yes"
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- eval "$as_ac_Header=no"
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -4988,7 +5250,11 @@
- echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- $ac_includes_default
- #include <$ac_header>
- _ACEOF
-@@ -5007,7 +5273,8 @@
-   ac_header_compiler=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_header_compiler=no
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -5019,13 +5286,17 @@
- echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <$ac_header>
- _ACEOF
- if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
-+  grep -v '^ *+' conftest.er1 >conftest.err
-   rm -f conftest.er1
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-@@ -5042,7 +5313,8 @@
-   ac_header_preproc=yes
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-   ac_header_preproc=no
- fi
- rm -f conftest.err conftest.$ac_ext
-@@ -5055,14 +5327,32 @@
-     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
- echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+    (
-+      cat <<\_ASBOX
-+## ------------------------------------ ##
-+## Report this to bug-autoconf@gnu.org. ##
-+## ------------------------------------ ##
-+_ASBOX
-+    ) |
-+      sed "s/^/$as_me: WARNING:     /" >&2
-+    ;;
-   no:yes )
-     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
- echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
- echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+    (
-+      cat <<\_ASBOX
-+## ------------------------------------ ##
-+## Report this to bug-autoconf@gnu.org. ##
-+## ------------------------------------ ##
-+_ASBOX
-+    ) |
-+      sed "s/^/$as_me: WARNING:     /" >&2
-+    ;;
- esac
- echo "$as_me:$LINENO: checking for $ac_header" >&5
- echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-@@ -5403,7 +5693,7 @@
- case $host in
- *-*-irix6*)
-   # Find out which ABI we are using.
--  echo '#line 5406 "configure"' > conftest.$ac_ext
-+  echo '#line 5696 "configure"' > conftest.$ac_ext
-   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-   (eval $ac_compile) 2>&5
-   ac_status=$?
-@@ -5443,14 +5733,12 @@
-      cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -5474,7 +5762,8 @@
-   lt_cv_cc_needs_belf=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- lt_cv_cc_needs_belf=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -5777,14 +6066,12 @@
-     CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
-     cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -5823,7 +6110,8 @@
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-       lt_cv_prog_cc_pic_works=no
- fi
-@@ -5866,14 +6154,12 @@
-   LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -5897,7 +6183,8 @@
-   lt_cv_prog_cc_static_works=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-   LDFLAGS="$save_LDFLAGS"
-@@ -5939,7 +6226,7 @@
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
- compiler_c_o=no
--if { (eval echo configure:5942: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
-+if { (eval echo configure:6229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
-   # The compiler can only warn and ignore the option if not recognized
-   # So say no if there are warnings
-   if test -s out/conftest.err; then
-@@ -5981,14 +6268,12 @@
-   ac_objext=lo
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -6019,7 +6304,8 @@
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-   ac_objext="$save_objext"
-@@ -6067,14 +6353,12 @@
-   compiler_rtti_exceptions=no
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -6105,7 +6389,8 @@
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-   CFLAGS="$save_CFLAGS"
-@@ -7326,37 +7611,44 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* System header to define __stub macros and hopefully few prototypes,
--    which can conflict with char shl_load (); below.  */
--#include <assert.h>
-+    which can conflict with char shl_load (); below.
-+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+    <limits.h> exists even on freestanding compilers.  */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
- extern "C"
-+{
- #endif
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char shl_load ();
--char (*f) ();
--
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
--int
--main ()
--{
- /* 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_shl_load) || defined (__stub___shl_load)
- choke me
- #else
--f = shl_load;
-+char (*f) () = shl_load;
-+#endif
-+#ifdef __cplusplus
-+}
- #endif
-+int
-+main ()
-+{
-+return f != shl_load;
-   ;
-   return 0;
- }
-@@ -7376,7 +7668,8 @@
-   ac_cv_func_shl_load=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_func_shl_load=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -7395,7 +7688,11 @@
- LIBS="-ldld  $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -7404,12 +7701,6 @@
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char shl_load ();
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -7433,7 +7724,8 @@
-   ac_cv_lib_dld_shl_load=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_lib_dld_shl_load=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -7451,37 +7743,44 @@
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* System header to define __stub macros and hopefully few prototypes,
--    which can conflict with char dlopen (); below.  */
--#include <assert.h>
-+    which can conflict with char dlopen (); below.
-+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+    <limits.h> exists even on freestanding compilers.  */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
- extern "C"
-+{
- #endif
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char dlopen ();
--char (*f) ();
--
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
--int
--main ()
--{
- /* 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_dlopen) || defined (__stub___dlopen)
- choke me
- #else
--f = dlopen;
-+char (*f) () = dlopen;
-+#endif
-+#ifdef __cplusplus
-+}
- #endif
-+int
-+main ()
-+{
-+return f != dlopen;
-   ;
-   return 0;
- }
-@@ -7501,7 +7800,8 @@
-   ac_cv_func_dlopen=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_func_dlopen=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -7520,7 +7820,11 @@
- LIBS="-ldl  $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -7529,12 +7833,6 @@
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char dlopen ();
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -7558,7 +7856,8 @@
-   ac_cv_lib_dl_dlopen=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_lib_dl_dlopen=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -7578,7 +7877,11 @@
- LIBS="-lsvld  $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -7587,12 +7890,6 @@
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char dlopen ();
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -7616,7 +7913,8 @@
-   ac_cv_lib_svld_dlopen=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_lib_svld_dlopen=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -7636,7 +7934,11 @@
- LIBS="-ldld  $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -7645,12 +7947,6 @@
- /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
- char dld_link ();
--#ifdef F77_DUMMY_MAIN
--#  ifdef __cplusplus
--     extern "C"
--#  endif
--   int F77_DUMMY_MAIN() { return 1; }
--#endif
- int
- main ()
- {
-@@ -7674,7 +7970,8 @@
-   ac_cv_lib_dld_dld_link=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_cv_lib_dld_dld_link=no
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-@@ -7732,7 +8029,7 @@
-     lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-   lt_status=$lt_dlunknown
-   cat > conftest.$ac_ext <<EOF
--#line 7735 "configure"
-+#line 8032 "configure"
- #include "confdefs.h"
- #if HAVE_DLFCN_H
-@@ -7830,7 +8127,7 @@
-     lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-   lt_status=$lt_dlunknown
-   cat > conftest.$ac_ext <<EOF
--#line 7833 "configure"
-+#line 8130 "configure"
- #include "confdefs.h"
- #if HAVE_DLFCN_H
-@@ -8575,7 +8872,11 @@
- echo $ECHO_N "checking sys/dg_sys_info.h usability... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- $ac_includes_default
- #include <sys/dg_sys_info.h>
- _ACEOF
-@@ -8594,7 +8895,8 @@
-   ac_header_compiler=yes
- else
-   echo "$as_me: failed program was:" >&5
--cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
- ac_header_compiler=no
- fi
- rm -f conftest.$ac_objext conftest.$ac_ext
-@@ -8606,13 +8908,17 @@
- echo $ECHO_N "checking sys/dg_sys_info.h presence... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
--#include "confdefs.h"
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
- #include <sys/dg_sys_info.h>
- _ACEOF
- if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-   ac_status=$?
--  egrep -v '^ *\+' conftest.er1 >conftest.err
-+  grep -v '^ *+' conftest.er1 >conftest.err
-   rm -f conftest.er1
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-@@ -8629,7 +8935,8 @@
-   ac_header_preproc=yes
- else
-   echo "$as_me: failed program was:" >&5
--  cat conftest.$ac_ext >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-   ac_header_preproc=no
- fi
- rm -f conftest.err conftest.$ac_ext
-@@ -8642,14 +8949,32 @@
-     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: accepted by the compiler, rejected by the preprocessor!" >&5
- echo "$as_me: WARNING: sys/dg_sys_info.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&5
--echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&2;};;
-+echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&2;}
-+    (
-+      cat <<\_ASBOX
-+## ------------------------------------ ##
-+## Report this to bug-autoconf@gnu.org. ##
-+## ------------------------------------ ##
-+_ASBOX
-+    ) |
-+      sed "s/^/$as_me: WARNING:     /" >&2
-+    ;;
-   no:yes )
-     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: present but cannot be compiled" >&5
- echo "$as_me: WARNING: sys/dg_sys_info.h: present but cannot be compiled" >&2;}
-     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: check for missing prerequisite headers?" >&5
- echo "$as_me: WARNING: sys/dg_sys_info.h: check for missing prerequisite headers?" >&2;}
-     { echo "$as_me:$LINENO: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&5
--echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&2;};;
-+echo "$as_me: WARNING: sys/dg_sys_info.h: proceeding with the preprocessor's result" >&2;}
-+    (
-+      cat <<\_ASBOX
-+## ------------------------------------ ##
-+## Report this to bug-autoconf@gnu.org. ##
-+## ------------------------------------ ##
-+_ASBOX
-+    ) |
-+      sed "s/^/$as_me: WARNING:     /" >&2
-+    ;;
- esac
- echo "$as_me:$LINENO: checking for sys/dg_sys_info.h" >&5
- echo $ECHO_N "checking for sys/dg_sys_info.h... $ECHO_C" >&6
-@@ -8880,8 +9205,8 @@
- fi
--ac_config_files="$ac_config_files Makefile doc/Makefile include/Makefile"
--ac_config_commands="$ac_config_commands default"
-+                              ac_config_files="$ac_config_files Makefile doc/Makefile include/Makefile"
-+          ac_config_commands="$ac_config_commands default"
- 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
-@@ -8892,7 +9217,7 @@
- # 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 overriden when
-+# `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.
-@@ -8927,7 +9252,7 @@
-      t end
-      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-      : end' >>confcache
--if cmp -s $cache_file confcache; then :; else
-+if diff $cache_file confcache >/dev/null 2>&1; then :; else
-   if test -w $cache_file; then
-     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-     cat confcache >$cache_file
-@@ -8989,6 +9314,21 @@
- rm -f confdef2opt.sed
-+ac_libobjs=
-+ac_ltlibobjs=
-+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-+  # 1. Remove the extension, and $U if already installed.
-+  ac_i=`echo "$ac_i" |
-+         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-+  # 2. Add them.
-+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-+done
-+LIBOBJS=$ac_libobjs
-+
-+LTLIBOBJS=$ac_ltlibobjs
-+
-+
- if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-   { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
- Usually this means the macro was only invoked conditionally." >&5
-@@ -9038,11 +9378,12 @@
- # configure, is in config.log if it exists.
- debug=false
-+ac_cs_recheck=false
-+ac_cs_silent=false
- SHELL=\${CONFIG_SHELL-$SHELL}
- _ACEOF
- cat >>$CONFIG_STATUS <<\_ACEOF
--
- ## --------------------- ##
- ## M4sh Initialization.  ##
- ## --------------------- ##
-@@ -9051,11 +9392,13 @@
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-   emulate sh
-   NULLCMD=:
-+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-+  # is contrary to our usage.  Disable this feature.
-+  alias -g '${1+"$@"}'='"$@"'
- elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-   set -o posix
- fi
--# NLS nuisances.
- # Support unset when possible.
- if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-   as_unset=unset
-@@ -9063,34 +9406,42 @@
-   as_unset=false
- fi
--(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
--    { $as_unset LANG || test "${LANG+set}" != set; } ||
--      { LANG=C; export LANG; }
--(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
--    { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
--      { LC_ALL=C; export LC_ALL; }
--(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
--    { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
--      { LC_TIME=C; export LC_TIME; }
--(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
--    { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
--      { LC_CTYPE=C; export LC_CTYPE; }
--(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
--    { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
--      { LANGUAGE=C; export LANGUAGE; }
--(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
--    { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
--      { LC_COLLATE=C; export LC_COLLATE; }
--(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
--    { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
--      { LC_NUMERIC=C; export LC_NUMERIC; }
--(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
--    { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
--      { LC_MESSAGES=C; export LC_MESSAGES; }
-+
-+# Work around bugs in pre-3.0 UWIN ksh.
-+$as_unset ENV MAIL MAILPATH
-+PS1='$ '
-+PS2='> '
-+PS4='+ '
-+
-+# NLS nuisances.
-+for as_var in \
-+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+  LC_TELEPHONE LC_TIME
-+do
-+  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+    eval $as_var=C; export $as_var
-+  else
-+    $as_unset $as_var
-+  fi
-+done
-+
-+# Required to use basename.
-+if expr a : '\(a\)' >/dev/null 2>&1; 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
- # Name of the executable.
--as_me=`(basename "$0") 2>/dev/null ||
-+as_me=`$as_basename "$0" ||
- $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)$' \| \
-@@ -9101,6 +9452,7 @@
-         /^X\/\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-+
- # PATH needs CR, and LINENO needs CR and PATH.
- # Avoid depending upon Character Ranges.
- as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-@@ -9111,15 +9463,15 @@
- # The user is always right.
- if test "${PATH_SEPARATOR+set}" != set; then
--  echo "#! /bin/sh" >conftest.sh
--  echo  "exit 0"   >>conftest.sh
--  chmod +x conftest.sh
--  if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
-+  echo "#! /bin/sh" >conf$$.sh
-+  echo  "exit 0"   >>conf$$.sh
-+  chmod +x conf$$.sh
-+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-     PATH_SEPARATOR=';'
-   else
-     PATH_SEPARATOR=:
-   fi
--  rm -f conftest.sh
-+  rm -f conf$$.sh
- fi
-@@ -9168,6 +9520,8 @@
-   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-   test "x$as_lineno_1" != "x$as_lineno_2" &&
-   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-+           $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-+           $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-            CONFIG_SHELL=$as_dir/$as_base
-            export CONFIG_SHELL
-            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-@@ -9241,6 +9595,12 @@
- fi
- rm -f conf$$ conf$$.exe conf$$.file
-+if mkdir -p . 2>/dev/null; then
-+  as_mkdir_p=:
-+else
-+  as_mkdir_p=false
-+fi
-+
- as_executable_p="test -f"
- # Sed expression to map a string onto a valid CPP name.
-@@ -9257,7 +9617,7 @@
- IFS="         $as_nl"
- # CDPATH.
--$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
-+$as_unset CDPATH
- exec 6>&1
-@@ -9274,7 +9634,7 @@
- cat >&5 <<_CSEOF
- This file was extended by gc $as_me 6.3alpha2, which was
--generated by GNU Autoconf 2.53.  Invocation command line was
-+generated by GNU Autoconf 2.57.  Invocation command line was
-   CONFIG_FILES    = $CONFIG_FILES
-   CONFIG_HEADERS  = $CONFIG_HEADERS
-@@ -9314,6 +9674,7 @@
-   -h, --help       print this help, then exit
-   -V, --version    print version number, then exit
-+  -q, --quiet      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]
-@@ -9331,7 +9692,7 @@
- cat >>$CONFIG_STATUS <<_ACEOF
- ac_cs_version="\\
- gc config.status 6.3alpha2
--configured by $0, generated by GNU Autoconf 2.53,
-+configured by $0, generated by GNU Autoconf 2.57,
-   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
- Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-@@ -9352,25 +9713,25 @@
-   --*=*)
-     ac_option=`expr "x$1" : 'x\([^=]*\)='`
-     ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
--    shift
--    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
--    shift
-+    ac_shift=:
-+    ;;
-+  -*)
-+    ac_option=$1
-+    ac_optarg=$2
-+    ac_shift=shift
-     ;;
--  -*);;
-   *) # This is not an option, so the user has probably given explicit
-      # arguments.
-+     ac_option=$1
-      ac_need_defaults=false;;
-   esac
--  case $1 in
-+  case $ac_option in
-   # Handling of the options.
- _ACEOF
--cat >>$CONFIG_STATUS <<_ACEOF
--  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
--    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
--    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
--_ACEOF
- cat >>$CONFIG_STATUS <<\_ACEOF
-+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-+    ac_cs_recheck=: ;;
-   --version | --vers* | -V )
-     echo "$ac_cs_version"; exit 0 ;;
-   --he | --h)
-@@ -9385,13 +9746,16 @@
-   --debug | --d* | -d )
-     debug=: ;;
-   --file | --fil | --fi | --f )
--    shift
--    CONFIG_FILES="$CONFIG_FILES $1"
-+    $ac_shift
-+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-     ac_need_defaults=false;;
-   --header | --heade | --head | --hea )
--    shift
--    CONFIG_HEADERS="$CONFIG_HEADERS $1"
-+    $ac_shift
-+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-     ac_need_defaults=false;;
-+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-+    ac_cs_silent=: ;;
-   # This is an error.
-   -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-@@ -9406,6 +9770,20 @@
-   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
-+if \$ac_cs_recheck; then
-+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-+fi
-+
- _ACEOF
- cat >>$CONFIG_STATUS <<_ACEOF
-@@ -9450,6 +9828,9 @@
-   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
- fi
-+# Have a temporary directory for convenience.  Make it in the build tree
-+# simply because there is no reason to put it here, and in addition,
-+# creating and moving files from /tmp can sometimes cause problems.
- # Create a temporary directory, and hook for its removal unless debugging.
- $debug ||
- {
-@@ -9458,17 +9839,17 @@
- }
- # Create a (secure) tmp directory for tmp files.
--: ${TMPDIR=/tmp}
-+
- {
--  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
-+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-   test -n "$tmp" && test -d "$tmp"
- }  ||
- {
--  tmp=$TMPDIR/cs$$-$RANDOM
-+  tmp=./confstat$$-$RANDOM
-   (umask 077 && mkdir $tmp)
- } ||
- {
--   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
-+   echo "$me: cannot create a temporary directory in ." >&2
-    { (exit 1); exit 1; }
- }
-@@ -9590,10 +9971,13 @@
- s,@LN_S@,$LN_S,;t t
- s,@ECHO@,$ECHO,;t t
- s,@CPP@,$CPP,;t t
-+s,@EGREP@,$EGREP,;t t
- s,@LIBTOOL@,$LIBTOOL,;t t
- s,@MY_CFLAGS@,$MY_CFLAGS,;t t
- s,@USE_LIBDIR_TRUE@,$USE_LIBDIR_TRUE,;t t
- s,@USE_LIBDIR_FALSE@,$USE_LIBDIR_FALSE,;t t
-+s,@LIBOBJS@,$LIBOBJS,;t t
-+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
- CEOF
- _ACEOF
-@@ -9664,25 +10048,30 @@
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
--  { case "$ac_dir" in
--  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
--  *)                      as_incr_dir=.;;
--esac
--as_dummy="$ac_dir"
--for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
--  case $as_mkdir_dir in
--    # Skip DOS drivespec
--    ?:) as_incr_dir=$as_mkdir_dir ;;
--    *)
--      as_incr_dir=$as_incr_dir/$as_mkdir_dir
--      test -d "$as_incr_dir" ||
--        mkdir "$as_incr_dir" ||
--      { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
--echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
--   { (exit 1); exit 1; }; }
--    ;;
--  esac
--done; }
-+  { if $as_mkdir_p; then
-+    mkdir -p "$ac_dir"
-+  else
-+    as_dir="$ac_dir"
-+    as_dirs=
-+    while test ! -d "$as_dir"; do
-+      as_dirs="$as_dir $as_dirs"
-+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+         X"$as_dir" : 'X\(//\)[^/]' \| \
-+         X"$as_dir" : 'X\(//\)$' \| \
-+         X"$as_dir" : 'X\(/\)' \| \
-+         .     : '\(.\)' 2>/dev/null ||
-+echo X"$as_dir" |
-+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+        /^X\(\/\/\)$/{ s//\1/; q; }
-+        /^X\(\/\).*/{ s//\1/; q; }
-+        s/.*/./; q'`
-+    done
-+    test ! -n "$as_dirs" || mkdir $as_dirs
-+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+   { (exit 1); exit 1; }; }; }
-   ac_builddir=.
-@@ -9712,7 +10101,7 @@
- # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
- # absolute.
- ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
--ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
-+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
- ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
- ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-@@ -9842,7 +10231,7 @@
- # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
- # absolute.
- ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
--ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
-+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
- ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
- ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-@@ -9911,25 +10300,30 @@
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
--    { case $dirpart/$fdir in
--  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
--  *)                      as_incr_dir=.;;
--esac
--as_dummy=$dirpart/$fdir
--for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
--  case $as_mkdir_dir in
--    # Skip DOS drivespec
--    ?:) as_incr_dir=$as_mkdir_dir ;;
--    *)
--      as_incr_dir=$as_incr_dir/$as_mkdir_dir
--      test -d "$as_incr_dir" ||
--        mkdir "$as_incr_dir" ||
--      { { echo "$as_me:$LINENO: error: cannot create $dirpart/$fdir" >&5
--echo "$as_me: error: cannot create $dirpart/$fdir" >&2;}
--   { (exit 1); exit 1; }; }
--    ;;
--  esac
--done; }
-+    { if $as_mkdir_p; then
-+    mkdir -p $dirpart/$fdir
-+  else
-+    as_dir=$dirpart/$fdir
-+    as_dirs=
-+    while test ! -d "$as_dir"; do
-+      as_dirs="$as_dir $as_dirs"
-+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+         X"$as_dir" : 'X\(//\)[^/]' \| \
-+         X"$as_dir" : 'X\(//\)$' \| \
-+         X"$as_dir" : 'X\(/\)' \| \
-+         .     : '\(.\)' 2>/dev/null ||
-+echo X"$as_dir" |
-+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+        /^X\(\/\/\)$/{ s//\1/; q; }
-+        /^X\(\/\).*/{ s//\1/; q; }
-+        s/.*/./; q'`
-+    done
-+    test ! -n "$as_dirs" || mkdir $as_dirs
-+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
-+   { (exit 1); exit 1; }; }; }
-     # echo "creating $dirpart/$file"
-     echo '# dummy' > "$dirpart/$file"
-@@ -9958,8 +10352,11 @@
- # 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_cs_success=false
-+  $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.
-diff -ruN ../gc6.3alpha2/configure.in ./configure.in
---- ../gc6.3alpha2/configure.in        Mon Sep 29 14:13:34 2003
-+++ ./configure.in     Wed Nov 19 04:17:15 2003
-@@ -275,6 +275,10 @@
-     ;;
-  mips*-*-linux*) 
-     ;; 
-+ mips-unknown-elf*)
-+    machdep="mips2java_mach_dep.lo"
-+    AC_DEFINE(MIPS2JAVA)
-+    ;;
-  mips-*-*)
-     machdep="mips_sgi_mach_dep.lo"
-     AC_DEFINE(NO_EXECUTE_PERMISSION)
-diff -ruN ../gc6.3alpha2/include/private/gcconfig.h ./include/private/gcconfig.h
---- ../gc6.3alpha2/include/private/gcconfig.h  Wed Sep  3 14:16:01 2003
-+++ ./include/private/gcconfig.h       Wed Nov 19 04:47:25 2003
-@@ -115,7 +115,7 @@
- #    if defined(nec_ews) || defined(_nec_ews)
- #      define EWS4800
- #    endif
--#    if !defined(LINUX) && !defined(EWS4800)
-+#    if !defined(LINUX) && !defined(EWS4800) && !defined(MIPS2JAVA)
- #      if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__)
- #      define ULTRIX
- #      else
-@@ -1236,6 +1236,16 @@
- # ifdef MIPS
- #   define MACH_TYPE "MIPS"
-+
-+#   ifdef MIPS2JAVA
-+extern int _etext[];
-+extern int _end[];
-+#   define ALIGNMENT 4
-+#   define STACKBOTTOM 0x10000000
-+#   define DATASTART (_etext)
-+#   define DATAEND (_end)
-+#   endif /* MIPS2JAVA */
-+
- #   ifdef LINUX
-       /* This was developed for a linuxce style platform.  Probably   */
-       /* needs to be tweaked for workstation class machines.          */
-diff -ruN ../gc6.3alpha2/mips2java_mach_dep.s ./mips2java_mach_dep.s
---- ../gc6.3alpha2/mips2java_mach_dep.s        Wed Dec 31 19:00:00 1969
-+++ ./mips2java_mach_dep.s     Wed Nov 19 04:56:28 2003
-@@ -0,0 +1,43 @@
-+    .set    noreorder
-+    .text
-+    .align    2
-+    .globl  GC_push_regs
-+    .ent    GC_push_regs
-+GC_push_regs:
-+    subu $sp,$sp,24
-+    sw $31,20($sp)
-+    
-+    jal GC_push_one
-+    move $4,$1
-+    jal GC_push_one
-+    move $4,$16
-+    jal GC_push_one
-+    move $4,$17
-+    jal GC_push_one
-+    move $4,$18
-+    jal GC_push_one
-+    move $4,$19
-+    jal GC_push_one
-+    move $4,$20
-+    jal GC_push_one
-+    move $4,$21
-+    jal GC_push_one
-+    move $4,$22
-+    jal GC_push_one
-+    move $4,$23
-+    jal GC_push_one
-+    move $4,$26
-+    jal GC_push_one
-+    move $4,$27
-+    jal GC_push_one
-+    move $4,$28
-+    jal GC_push_one
-+    move $4,$29
-+    jal GC_push_one
-+    move $4,$30
-+    
-+    lw $31,20($sp)
-+      j $31
-+    addu $sp,$sp,24
-+    
-+    .end GC_push_regs
-diff -ruN ../gc6.3alpha2/os_dep.c ./os_dep.c
---- ../gc6.3alpha2/os_dep.c    Mon Sep 22 18:49:47 2003
-+++ ./os_dep.c Wed Nov 19 04:12:13 2003
-@@ -497,7 +497,7 @@
- #  if !defined(PCR) && !defined(AMIGA) && !defined(MSWIN32) \
-       && !defined(MSWINCE) \
-       && !defined(MACOS) && !defined(DJGPP) && !defined(DOS4GW) \
--      && !defined(NOSYS) && !defined(ECOS)
-+      && !defined(NOSYS) && !defined(ECOS) && !defined(MIPS2JAVA) \
- #   if defined(sigmask) && !defined(UTS4) && !defined(HURD)
-       /* Use the traditional BSD interface */
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/busybox.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/busybox.patch
deleted file mode 100644 (file)
index c766e45..0000000
+++ /dev/null
@@ -1,1041 +0,0 @@
-Only in .: .config
-Only in .: .config.cmd
-Only in .: .config~
-Only in .: .depend
-Only in .: BusyBox.class
-diff -ru ../busybox-1.00-pre9/Rules.mak ./Rules.mak
---- ../busybox-1.00-pre9/Rules.mak     2004-04-06 13:58:37.000000000 -0400
-+++ ./Rules.mak        2004-05-07 04:16:02.000000000 -0400
-@@ -79,7 +79,8 @@
- #CROSS_CFLAGS+=-nostdinc -I$(LIBCDIR)/include -I$(GCCINCDIR)
- #GCCINCDIR:=$(shell gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp")
--WARNINGS=-Wall -Wstrict-prototypes -Wshadow
-+WARNINGS=-Wall -Wstrict-prototypes -Wshadow -Wno-unused
-+LIBRARIES=-lglob -lregex
- CFLAGS=-I$(TOPDIR)include
- ARFLAGS=-r
-@@ -158,8 +159,8 @@
-     STRIPCMD:=/bin/true -Not_stripping_since_we_are_debugging
- else
-     CFLAGS+=$(WARNINGS) $(OPTIMIZATIONS) -D_GNU_SOURCE -DNDEBUG
--    LDFLAGS += -s -Wl,-warn-common
--    STRIPCMD:=$(STRIP) --remove-section=.note --remove-section=.comment
-+    LDFLAGS += -Wl,-warn-common
-+    STRIPCMD:= true
- endif
- ifeq ($(strip $(CONFIG_STATIC)),y)
-     LDFLAGS += --static
-diff -ru ../busybox-1.00-pre9/archival/tar.c ./archival/tar.c
---- ../busybox-1.00-pre9/archival/tar.c        2004-03-27 05:02:41.000000000 -0500
-+++ ./archival/tar.c   2004-05-07 01:16:41.000000000 -0400
-@@ -48,7 +48,9 @@
- #include <errno.h>
- #include <signal.h>
- #include <sys/wait.h>
-+#ifndef NESTEDVM
- #include <sys/socket.h>
-+#endif
- #include "unarchive.h"
- #include "busybox.h"
-diff -ru ../busybox-1.00-pre9/coreutils/cal.c ./coreutils/cal.c
---- ../busybox-1.00-pre9/coreutils/cal.c       2004-03-15 03:28:19.000000000 -0500
-+++ ./coreutils/cal.c  2004-05-07 01:19:34.000000000 -0400
-@@ -31,7 +31,9 @@
- #include <sys/types.h>
- #include <ctype.h>
-+#ifndef NESTEDVM
- #include <err.h>
-+#endif
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-diff -ru ../busybox-1.00-pre9/coreutils/date.c ./coreutils/date.c
---- ../busybox-1.00-pre9/coreutils/date.c      2004-04-06 05:38:18.000000000 -0400
-+++ ./coreutils/date.c 2004-05-07 03:14:51.000000000 -0400
-@@ -227,7 +227,11 @@
-               }
-               /* if setting time, set it */
-+#ifndef NESTEDVM
-               if (set_time && (stime(&tm) < 0)) {
-+#else
-+        if(0) {
-+#endif
-                       bb_perror_msg("cannot set date");
-               }
-       }
-diff -ru ../busybox-1.00-pre9/coreutils/dos2unix.c ./coreutils/dos2unix.c
---- ../busybox-1.00-pre9/coreutils/dos2unix.c  2004-03-15 03:28:20.000000000 -0500
-+++ ./coreutils/dos2unix.c     2004-05-07 04:11:32.000000000 -0400
-@@ -30,7 +30,9 @@
- #include <string.h>
- #include <getopt.h>
- #include <unistd.h>
-+#ifndef NESTEDVM
- #include <stdint.h>
-+#endif
- #include <fcntl.h>
- #include <sys/time.h>
- #include "busybox.h"
-diff -ru ../busybox-1.00-pre9/coreutils/env.c ./coreutils/env.c
---- ../busybox-1.00-pre9/coreutils/env.c       2003-11-07 06:20:21.000000000 -0500
-+++ ./coreutils/env.c  2004-05-07 01:21:10.000000000 -0400
-@@ -50,12 +50,13 @@
- #include <getopt.h>
- #include "busybox.h"
--
-+#ifdef NESTEDVM
- static const struct option env_long_options[] = {
-       { "ignore-environment", 0, NULL, 'i' },
-       { "unset", 1, NULL, 'u' },
-       { 0, 0, 0, 0 }
- };
-+#endif
- extern int env_main(int argc, char** argv)
- {
-diff -ru ../busybox-1.00-pre9/coreutils/ls.c ./coreutils/ls.c
---- ../busybox-1.00-pre9/coreutils/ls.c        2004-03-27 05:02:42.000000000 -0500
-+++ ./coreutils/ls.c   2004-05-08 02:33:40.000000000 -0400
-@@ -59,8 +59,10 @@
- #include <stdlib.h>
- #include <fcntl.h>
- #include <signal.h>
-+#ifndef NESTEDVM
- #include <termios.h>
- #include <sys/ioctl.h>
-+#endif
- #include "busybox.h"
- #ifdef CONFIG_SELINUX
- #include <fs_secure.h>
-@@ -988,8 +990,11 @@
- #endif
- #ifdef CONFIG_FEATURE_LS_COLOR
--      if (isatty(STDOUT_FILENO))
--              show_color = 1;
-+    {
-+        char *term = getenv("TERM");
-+        if (isatty(STDOUT_FILENO) && term && *term)
-+            show_color = 1;
-+    }
- #endif
-       /* process options */
-diff -ru ../busybox-1.00-pre9/coreutils/md5_sha1_sum.c ./coreutils/md5_sha1_sum.c
---- ../busybox-1.00-pre9/coreutils/md5_sha1_sum.c      2004-03-27 05:02:42.000000000 -0500
-+++ ./coreutils/md5_sha1_sum.c 2004-05-07 01:26:00.000000000 -0400
-@@ -20,7 +20,9 @@
- #include <fcntl.h>
- #include <limits.h>
- #include <stdio.h>
-+#ifndef NESTEDVM
- #include <stdint.h>
-+#endif
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
-diff -ru ../busybox-1.00-pre9/coreutils/rmdir.c ./coreutils/rmdir.c
---- ../busybox-1.00-pre9/coreutils/rmdir.c     2004-03-15 03:28:21.000000000 -0500
-+++ ./coreutils/rmdir.c        2004-05-07 01:25:41.000000000 -0400
-@@ -25,7 +25,9 @@
- #include <stdlib.h>
- #include <unistd.h>
-+#ifndef NESTEDVM
- #include <libgen.h>
-+#endif
- #include "busybox.h"
- extern int rmdir_main(int argc, char **argv)
-diff -ru ../busybox-1.00-pre9/include/busybox.h ./include/busybox.h
---- ../busybox-1.00-pre9/include/busybox.h     2004-03-15 03:28:38.000000000 -0500
-+++ ./include/busybox.h        2004-05-07 01:11:01.000000000 -0400
-@@ -33,7 +33,7 @@
- #include <sys/types.h>
- #if __GNU_LIBRARY__ < 5
--#ifndef __dietlibc__
-+#if !defined(__dietlibc__) && !defined(NESTEDVM)
- #error "Sorry, libc5 is not supported"
- #endif
- #endif
-@@ -48,7 +48,9 @@
- #include <dmalloc.h>
- #endif
-+#ifndef NESTEDVM
- #include <features.h>
-+#endif
- /* Pull in the utility routines from libbb */
- #include "libbb.h"
-Only in ./include: config
-Only in ./include: config.h
-diff -ru ../busybox-1.00-pre9/include/grp_.h ./include/grp_.h
---- ../busybox-1.00-pre9/include/grp_.h        2003-12-18 17:40:58.000000000 -0500
-+++ ./include/grp_.h   2004-05-07 03:32:36.000000000 -0400
-@@ -7,7 +7,9 @@
- #else
- #include <sys/types.h>
-+#ifndef NESTEDVM
- #include <features.h>
-+#endif
- #include <stdio.h>
-diff -ru ../busybox-1.00-pre9/include/libbb.h ./include/libbb.h
---- ../busybox-1.00-pre9/include/libbb.h       2004-03-15 03:28:38.000000000 -0500
-+++ ./include/libbb.h  2004-05-07 02:48:25.000000000 -0400
-@@ -24,22 +24,69 @@
- #ifndef       __LIBCONFIG_H__
- #define       __LIBCONFIG_H__    1
-+
-+#ifdef NESTEDVM
-+#include <sys/cdefs.h>
-+#include <sys/fcntl.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <unistd.h>
-+
-+#define WCOREDUMP(x) 0
-+
-+typedef char int8_t;
-+typedef unsigned char uint8_t;
-+typedef short int16_t;
-+typedef unsigned short uint16_t;
-+typedef int int32_t;
-+typedef unsigned int uint32_t;
-+typedef long long int64_t;
-+typedef unsigned long long uint64_t;
-+
-+struct option {
-+      const char *name;
-+      int has_arg;
-+      int *flag;
-+      int val;
-+};
-+
-+#include <stdarg.h>
-+
-+static char *strchrnul(const char *s, int c) {
-+    char *ret;
-+    ret = strchr(s,c);
-+    return ret ? ret : (char*)s + strlen(s);
-+}
-+
-+static char *stpcpy(char *dest, const char *src) {
-+    while((*dest = *src) != '\0') { dest++; src++; }
-+    return dest;
-+}
-+
-+#endif
-+
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <regex.h>
-+#ifndef NESTEDVM
- #include <termios.h>
- #include <stdint.h>
-+#endif
-+#ifndef NESTEDVM
- #include <netdb.h>
-+#endif
- #ifdef DMALLOC
- #include <dmalloc.h>
- #endif
-+#ifndef NESTEDVM
- #include <features.h>
-+#endif
- #include "config.h"
- #ifdef CONFIG_SELINUX
-@@ -123,8 +170,10 @@
- extern int bb_parse_mode( const char* s, mode_t* theMode);
- extern long bb_xgetlarg(const char *arg, int base, long lower, long upper);
-+#ifndef NESTEDVM
- extern unsigned long bb_baud_to_value(speed_t speed);
- extern speed_t bb_value_to_baud(unsigned long value);
-+#endif
- extern int get_kernel_revision(void);
-@@ -297,6 +346,7 @@
- extern int uncompress(int fd_in, int fd_out);
- extern int inflate(int in, int out);
-+#ifndef NESTEDVM
- extern struct hostent *xgethostbyname(const char *name);
- extern struct hostent *xgethostbyname2(const char *name, int af);
- extern int create_icmp_socket(void);
-@@ -304,6 +354,7 @@
- extern int xconnect(struct sockaddr_in *s_addr);
- extern unsigned short bb_lookup_port(const char *port, const char *protocol, unsigned short default_port);
- extern void bb_lookup_host(struct sockaddr_in *s_in, const char *host);
-+#endif
- //#warning wrap this?
- char *dirname (char *path);
-diff -ru ../busybox-1.00-pre9/include/pwd_.h ./include/pwd_.h
---- ../busybox-1.00-pre9/include/pwd_.h        2002-07-03 19:19:10.000000000 -0400
-+++ ./include/pwd_.h   2004-05-07 03:32:15.000000000 -0400
-@@ -7,7 +7,9 @@
- #else
- #include <sys/types.h>
-+#ifndef NESTEDVM
- #include <features.h>
-+#endif
- #include <stdio.h>
- /* The passwd structure.  */
-diff -ru ../busybox-1.00-pre9/libbb/Makefile.in ./libbb/Makefile.in
---- ../busybox-1.00-pre9/libbb/Makefile.in     2004-03-06 17:11:45.000000000 -0500
-+++ ./libbb/Makefile.in        2004-05-07 02:51:59.000000000 -0400
-@@ -24,28 +24,27 @@
- endif
- LIBBB_SRC:= \
--      bb_asprintf.c ask_confirmation.c change_identity.c chomp.c \
-+      bb_asprintf.c ask_confirmation.c chomp.c \
-       compare_string_array.c concat_path_file.c copy_file.c copyfd.c \
--      correct_password.c create_icmp_socket.c create_icmp6_socket.c \
--      device_open.c dump.c error_msg.c error_msg_and_die.c find_mount_point.c \
-+      device_open.c dump.c error_msg.c error_msg_and_die.c \
-       find_pid_by_name.c find_root_device.c fgets_str.c full_read.c \
-       full_write.c get_last_path_component.c get_line_from_file.c get_ug_id.c \
-       get_terminal_width_height.c hash_fd.c herror_msg.c herror_msg_and_die.c \
--      human_readable.c inet_common.c inode_hash.c interface.c isdirectory.c \
--      kernel_version.c last_char_is.c llist_add_to.c login.c loop.c \
--      make_directory.c mode_string.c module_syscalls.c mtab.c mtab_file.c \
-+      human_readable.c inode_hash.c isdirectory.c \
-+      last_char_is.c llist_add_to.c \
-+      make_directory.c mode_string.c \
-       my_getgrgid.c my_getgrnam.c my_getpwnam.c my_getpwnamegid.c \
-       my_getpwuid.c obscure.c parse_mode.c parse_number.c perror_msg.c \
--      perror_msg_and_die.c print_file.c get_console.c \
--      process_escape_sequence.c procps.c pwd2spwd.c pw_encrypt.c qmodule.c \
-+      perror_msg_and_die.c print_file.c \
-+      process_escape_sequence.c procps.c pwd2spwd.c qmodule.c \
-       read_package_field.c recursive_action.c remove_file.c \
--      restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.c \
--      safe_strncpy.c setup_environment.c simplify_path.c syscalls.c \
--      syslog_msg_with_name.c trim.c u_signal_names.c vdprintf.c verror_msg.c \
--      vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c \
--      xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
-+      run_shell.c safe_read.c safe_write.c \
-+      safe_strncpy.c simplify_path.c \
-+      trim.c u_signal_names.c vdprintf.c verror_msg.c \
-+      vperror_msg.c wfopen.c xgetcwd.c \
-+      xreadlink.c xregcomp.c xgetlarg.c \
-       get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
--      getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
-+      getopt_ulflags.c default_error_retval.c wfopen_input.c \
-       perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c \
-       warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c
-Only in ./libbb: Makefile.in~
-diff -ru ../busybox-1.00-pre9/libbb/get_terminal_width_height.c ./libbb/get_terminal_width_height.c
---- ../busybox-1.00-pre9/libbb/get_terminal_width_height.c     2004-03-23 18:15:35.000000000 -0500
-+++ ./libbb/get_terminal_width_height.c        2004-05-07 02:36:09.000000000 -0400
-@@ -24,8 +24,10 @@
- #include <fcntl.h>
- #include <unistd.h>
- #include <unistd.h>
-+#ifndef NESTEDVM
- #include <termios.h>
- #include <sys/ioctl.h>
-+#endif
- #include "busybox.h"
- /* It is perfectly ok to pass in a NULL for either width or for
-@@ -34,7 +36,11 @@
-  * which case you will always get 80x24 */
- void get_terminal_width_height(int fd, int *width, int *height)
- {
-+#ifdef NESTEDVM
-+    struct { int ws_row; int ws_col; } win = { 0, 0};
-+#else
-       struct winsize win = { 0, 0, 0, 0 };
-+#endif
- #ifdef CONFIG_FEATURE_AUTOWIDTH
-       if (ioctl(fd, TIOCGWINSZ, &win) != 0) {
-               win.ws_row = 24;
-diff -ru ../busybox-1.00-pre9/libbb/getopt_ulflags.c ./libbb/getopt_ulflags.c
---- ../busybox-1.00-pre9/libbb/getopt_ulflags.c        2004-02-05 08:49:29.000000000 -0500
-+++ ./libbb/getopt_ulflags.c   2004-05-07 04:00:35.000000000 -0400
-@@ -150,8 +150,14 @@
-     s--;
-   }
--  while ((c = getopt_long (argc, argv, applet_opts,
--                          bb_applet_long_options, NULL)) > 0) {
-+    
-+  while ((c = 
-+#ifdef NESTEDVM
-+          getopt(argc,argv,applet_opts)
-+#else
-+          getopt_long (argc, argv, applet_opts,bb_applet_long_options, NULL) 
-+#endif
-+  ) > 0) {
-       for (on_off = complementaly; on_off->opt != c; on_off++) {
-           if(!on_off->opt)
-                       bb_show_usage ();
-diff -ru ../busybox-1.00-pre9/libbb/hash_fd.c ./libbb/hash_fd.c
---- ../busybox-1.00-pre9/libbb/hash_fd.c       2004-03-15 03:28:42.000000000 -0500
-+++ ./libbb/hash_fd.c  2004-05-08 02:57:19.000000000 -0400
-@@ -20,18 +20,27 @@
-  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-  */
-+#ifndef NESTEDVM
- #include <byteswap.h>
- #include <endian.h>
-+#endif
- #include <fcntl.h>
- #include <limits.h>
- #include <stdio.h>
-+#ifndef NESTEDVM
- #include <stdint.h>
-+#endif
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include "busybox.h"
-+#ifdef NESTEDVM
-+#define __BYTE_ORDER BYTE_ORDER
-+#define __LITTLE_ENDIAN LITTLE_ENDIAN
-+#define __BIG_ENDIAN BIG_ENDIAN
-+#endif
- #ifdef CONFIG_SHA1SUM
- /*
-diff -ru ../busybox-1.00-pre9/libbb/procps.c ./libbb/procps.c
---- ../busybox-1.00-pre9/libbb/procps.c        2004-01-27 15:17:39.000000000 -0500
-+++ ./libbb/procps.c   2004-05-07 02:41:27.000000000 -0400
-@@ -12,7 +12,9 @@
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
-+#ifndef NESTEDVM
- #include <asm/page.h>
-+#endif
- #include "libbb.h"
-diff -ru ../busybox-1.00-pre9/libbb/run_shell.c ./libbb/run_shell.c
---- ../busybox-1.00-pre9/libbb/run_shell.c     2004-03-15 03:28:43.000000000 -0500
-+++ ./libbb/run_shell.c        2004-05-07 02:44:27.000000000 -0400
-@@ -33,7 +33,9 @@
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
-+#ifndef NESTEDVM
- #include <syslog.h>
-+#endif
- #include <ctype.h>
- #include "libbb.h"
- #ifdef CONFIG_SELINUX
-diff -ru ../busybox-1.00-pre9/libbb/u_signal_names.c ./libbb/u_signal_names.c
---- ../busybox-1.00-pre9/libbb/u_signal_names.c        2004-03-15 03:28:43.000000000 -0500
-+++ ./libbb/u_signal_names.c   2004-05-07 02:47:24.000000000 -0400
-@@ -21,6 +21,7 @@
-  * USA
-  */
-+#include <sys/types.h>
- #include <signal.h>
- #include <ctype.h>
- #include <string.h>
-diff -ru ../busybox-1.00-pre9/libbb/vdprintf.c ./libbb/vdprintf.c
---- ../busybox-1.00-pre9/libbb/vdprintf.c      2004-03-15 03:28:43.000000000 -0500
-+++ ./libbb/vdprintf.c 2004-05-07 03:22:03.000000000 -0400
-@@ -26,7 +26,17 @@
- #if (__GLIBC__ < 2)
--extern int vdprintf(int d, const char *format, va_list ap)
-+int dprintf(int d, const char *fmt, ...) {
-+    int ret;
-+    va_list ap;
-+    
-+    va_start (ap, fmt);
-+    ret = vdprintf (d, fmt, ap);
-+    va_end (ap);
-+    return ret;
-+}
-+
-+int vdprintf(int d, const char *format, va_list ap)
- {
-       char buf[BUF_SIZE];
-       int len;
-diff -ru ../busybox-1.00-pre9/libbb/xgetcwd.c ./libbb/xgetcwd.c
---- ../busybox-1.00-pre9/libbb/xgetcwd.c       2003-05-26 10:06:00.000000000 -0400
-+++ ./libbb/xgetcwd.c  2004-05-07 02:51:13.000000000 -0400
-@@ -11,6 +11,7 @@
- #include <unistd.h>
- #include <limits.h>
- #include <sys/param.h>
-+#include <sys/syslimits.h>
- #include "libbb.h"
- /* Amount to increase buffer size by in each try. */
-diff -ru ../busybox-1.00-pre9/libpwdgrp/setgroups.c ./libpwdgrp/setgroups.c
---- ../busybox-1.00-pre9/libpwdgrp/setgroups.c 2004-03-15 03:28:45.000000000 -0500
-+++ ./libpwdgrp/setgroups.c    2004-05-07 03:34:15.000000000 -0400
-@@ -24,17 +24,25 @@
- #include <errno.h>
- #include <unistd.h>
-+#ifndef NESTEDVM
- #include <features.h>
-+#endif
- #include <sys/types.h>
- /* Kernel headers before 2.1.mumble need this on the Alpha to get
-    _syscall* defined.  */
- #define __LIBRARY__
-+#ifndef NESTEDVM
- #include <sys/syscall.h>
-+#endif
- #include "grp_.h"
- int setgroups(size_t size, const gid_t * list)
- {
-+#ifndef NESTEDVM
-       return(syscall(__NR_setgroups, size, list));
-+#else
-+    return 0;
-+#endif
- }
-Only in .: nestedvm.config
-diff -ru ../busybox-1.00-pre9/procps/ps.c ./procps/ps.c
---- ../busybox-1.00-pre9/procps/ps.c   2004-03-15 03:29:03.000000000 -0500
-+++ ./procps/ps.c      2004-05-07 01:30:19.000000000 -0400
-@@ -27,8 +27,10 @@
- #include <fcntl.h>
- #include <ctype.h>
- #include <string.h>
-+#ifndef NESTEDVM
- #include <termios.h>
- #include <sys/ioctl.h>
-+#endif
- #include "busybox.h"
- #ifdef CONFIG_SELINUX
- #include <fs_secure.h>
-Only in ./scripts/config: conf
-Only in ./scripts/config: lex.zconf.c
-Only in ./scripts/config: lkc_defs.h
-Only in ./scripts/config: mconf
-Only in ./scripts/config: zconf.tab.c
-Only in ./scripts/config: zconf.tab.h
-Only in ./scripts: mkdep
-diff -ru ../busybox-1.00-pre9/shell/ash.c ./shell/ash.c
---- ../busybox-1.00-pre9/shell/ash.c   2004-04-07 05:34:26.000000000 -0400
-+++ ./shell/ash.c      2004-05-07 19:40:04.000000000 -0400
-@@ -67,7 +67,9 @@
- #include <sys/types.h>
- #include <sys/cdefs.h>
-+#ifndef NESTEDVM
- #include <sys/ioctl.h>
-+#endif
- #include <sys/param.h>
- #include <sys/resource.h>
- #include <sys/stat.h>
-@@ -90,8 +92,10 @@
- #include <paths.h>
- #include <setjmp.h>
- #include <signal.h>
-+#ifndef NESTEDVM
- #include <stdint.h>
- #include <sysexits.h>
-+#endif
- #include <time.h>
- #include <fnmatch.h>
-@@ -1403,7 +1407,9 @@
-       { BUILTIN_SPEC_REG      "trap", trapcmd },
-       { BUILTIN_REGULAR       "true", truecmd },
-       { BUILTIN_NOSPEC        "type", typecmd },
-+#ifndef NESTEDVM
-       { BUILTIN_NOSPEC        "ulimit", ulimitcmd },
-+#endif
-       { BUILTIN_REGULAR       "umask", umaskcmd },
- #ifdef CONFIG_ASH_ALIAS
-       { BUILTIN_REGULAR       "unalias", unaliascmd },
-@@ -2555,7 +2561,9 @@
-       int i;
-       intpending = 0;
-+#ifndef NESTEDVM
-       sigsetmask(0);
-+#endif
-       i = EXSIG;
-       if (gotsig[SIGINT - 1] && !trap[SIGINT]) {
-               if (!(rootshell && iflag)) {
-@@ -6702,7 +6710,11 @@
- #endif
-               }
-               st &= 0x7f;
-+#ifdef NESTEDVM
-+              col = fmtstr(s, 32, "signal %d",st);
-+#else
-               col = fmtstr(s, 32, strsignal(st));
-+#endif
-               if (WCOREDUMP(status)) {
-                       col += fmtstr(s + col, 16, " (core dumped)");
-               }
-@@ -7309,7 +7321,7 @@
- #endif
-       if (block == 0)
-               flags |= WNOHANG;
--      return wait3(status, flags, (struct rusage *)NULL);
-+    return waitpid((pid_t)-1,status,flags);
- }
- /*
-@@ -12683,6 +12695,8 @@
-       return 0;
- }
-+#ifndef NESTEDVM
-+
- /*
-  * ulimit builtin
-  *
-@@ -12864,7 +12878,7 @@
-       }
-       return 0;
- }
--
-+#endif /* NESTEDVM */
- #ifdef CONFIG_ASH_MATH_SUPPORT
-diff -ru ../busybox-1.00-pre9/util-linux/more.c ./util-linux/more.c
---- ../busybox-1.00-pre9/util-linux/more.c     2004-03-27 05:02:48.000000000 -0500
-+++ ./util-linux/more.c        2004-05-07 02:26:31.000000000 -0400
-@@ -32,7 +32,9 @@
- #include <signal.h>
- #include <stdlib.h>
- #include <unistd.h>
-+#ifndef NESTEDVM
- #include <sys/ioctl.h>
-+#endif
- #include "busybox.h"
---- ../busybox-1.00-pre9/.config       1969-12-31 19:00:00.000000000 -0500
-+++ .config    2004-05-08 02:10:25.000000000 -0400
-@@ -0,0 +1,393 @@
-+#
-+# Automatically generated make config: don't edit
-+#
-+HAVE_DOT_CONFIG=y
-+
-+#
-+# General Configuration
-+#
-+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
-+CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y
-+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
-+CONFIG_FEATURE_VERBOSE_USAGE=y
-+# CONFIG_FEATURE_INSTALLER is not set
-+# CONFIG_LOCALE_SUPPORT is not set
-+# CONFIG_FEATURE_DEVFS is not set
-+# CONFIG_FEATURE_DEVPTS is not set
-+# CONFIG_FEATURE_CLEAN_UP is not set
-+# CONFIG_FEATURE_SUID is not set
-+# CONFIG_SELINUX is not set
-+
-+#
-+# Build Options
-+#
-+CONFIG_STATIC=y
-+# CONFIG_LFS is not set
-+USING_CROSS_COMPILER=y
-+CROSS_COMPILER_PREFIX="mips-unknown-elf-"
-+EXTRA_CFLAGS_OPTIONS="-DNESTEDVM"
-+
-+#
-+# Installation Options
-+#
-+# CONFIG_INSTALL_NO_USR is not set
-+PREFIX="./_install"
-+
-+#
-+# Archival Utilities
-+#
-+# CONFIG_AR is not set
-+CONFIG_BUNZIP2=y
-+CONFIG_CPIO=y
-+# CONFIG_DPKG is not set
-+# CONFIG_DPKG_DEB is not set
-+CONFIG_GUNZIP=y
-+CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
-+CONFIG_GZIP=y
-+# CONFIG_RPM2CPIO is not set
-+# CONFIG_RPM is not set
-+CONFIG_TAR=y
-+CONFIG_FEATURE_TAR_CREATE=y
-+CONFIG_FEATURE_TAR_BZIP2=y
-+# CONFIG_FEATURE_TAR_FROM is not set
-+CONFIG_FEATURE_TAR_GZIP=y
-+# CONFIG_FEATURE_TAR_COMPRESS is not set
-+CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y
-+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
-+CONFIG_UNCOMPRESS=y
-+CONFIG_UNZIP=y
-+
-+#
-+# Common options for cpio and tar
-+#
-+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
-+
-+#
-+# Coreutils
-+#
-+CONFIG_BASENAME=y
-+CONFIG_CAL=y
-+CONFIG_CAT=y
-+CONFIG_CHGRP=y
-+CONFIG_CHMOD=y
-+CONFIG_CHOWN=y
-+CONFIG_CHROOT=y
-+CONFIG_CMP=y
-+CONFIG_CP=y
-+CONFIG_CUT=y
-+CONFIG_DATE=y
-+
-+#
-+# date (forced enabled for use with watch)
-+#
-+CONFIG_FEATURE_DATE_ISOFMT=y
-+CONFIG_DD=y
-+# CONFIG_DF is not set
-+CONFIG_DIRNAME=y
-+CONFIG_DOS2UNIX=y
-+CONFIG_UNIX2DOS=y
-+CONFIG_DU=y
-+CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y
-+CONFIG_ECHO=y
-+CONFIG_FEATURE_FANCY_ECHO=y
-+CONFIG_ENV=y
-+# CONFIG_EXPR is not set
-+CONFIG_FALSE=y
-+# CONFIG_FOLD is not set
-+CONFIG_HEAD=y
-+# CONFIG_FEATURE_FANCY_HEAD is not set
-+# CONFIG_HOSTID is not set
-+CONFIG_ID=y
-+CONFIG_INSTALL=y
-+# CONFIG_LENGTH is not set
-+CONFIG_LN=y
-+# CONFIG_LOGNAME is not set
-+CONFIG_LS=y
-+CONFIG_FEATURE_LS_FILETYPES=y
-+CONFIG_FEATURE_LS_FOLLOWLINKS=y
-+CONFIG_FEATURE_LS_RECURSIVE=y
-+CONFIG_FEATURE_LS_SORTFILES=y
-+CONFIG_FEATURE_LS_TIMESTAMPS=y
-+CONFIG_FEATURE_LS_USERNAME=y
-+CONFIG_FEATURE_LS_COLOR=y
-+CONFIG_MD5SUM=y
-+CONFIG_MKDIR=y
-+CONFIG_MKFIFO=y
-+CONFIG_MKNOD=y
-+CONFIG_MV=y
-+CONFIG_OD=y
-+CONFIG_PRINTF=y
-+CONFIG_PWD=y
-+# CONFIG_REALPATH is not set
-+CONFIG_RM=y
-+CONFIG_RMDIR=y
-+# CONFIG_SEQ is not set
-+CONFIG_SHA1SUM=y
-+CONFIG_SLEEP=y
-+# CONFIG_FEATURE_FANCY_SLEEP is not set
-+CONFIG_SORT=y
-+# CONFIG_STTY is not set
-+CONFIG_SYNC=y
-+CONFIG_TAIL=y
-+CONFIG_FEATURE_FANCY_TAIL=y
-+CONFIG_TEE=y
-+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
-+CONFIG_TEST=y
-+
-+#
-+# test (forced enabled for use with shell)
-+#
-+CONFIG_TOUCH=y
-+CONFIG_TR=y
-+CONFIG_TRUE=y
-+CONFIG_TTY=y
-+# CONFIG_UNAME is not set
-+CONFIG_UNIQ=y
-+CONFIG_USLEEP=y
-+# CONFIG_UUDECODE is not set
-+# CONFIG_UUENCODE is not set
-+CONFIG_WATCH=y
-+CONFIG_WC=y
-+# CONFIG_WHO is not set
-+CONFIG_WHOAMI=y
-+CONFIG_YES=y
-+
-+#
-+# Common options for cp and mv
-+#
-+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
-+
-+#
-+# Common options for ls and more
-+#
-+# CONFIG_FEATURE_AUTOWIDTH is not set
-+
-+#
-+# Common options for df, du, ls
-+#
-+CONFIG_FEATURE_HUMAN_READABLE=y
-+
-+#
-+# Common options for md5sum, sha1sum
-+#
-+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
-+
-+#
-+# Console Utilities
-+#
-+# CONFIG_CHVT is not set
-+CONFIG_CLEAR=y
-+# CONFIG_DEALLOCVT is not set
-+# CONFIG_DUMPKMAP is not set
-+# CONFIG_LOADFONT is not set
-+# CONFIG_LOADKMAP is not set
-+# CONFIG_OPENVT is not set
-+CONFIG_RESET=y
-+# CONFIG_SETKEYCODES is not set
-+
-+#
-+# Debian Utilities
-+#
-+# CONFIG_MKTEMP is not set
-+# CONFIG_PIPE_PROGRESS is not set
-+CONFIG_READLINK=y
-+# CONFIG_RUN_PARTS is not set
-+# CONFIG_START_STOP_DAEMON is not set
-+CONFIG_WHICH=y
-+
-+#
-+# Editors
-+#
-+CONFIG_AWK=y
-+CONFIG_FEATURE_AWK_MATH=y
-+CONFIG_PATCH=y
-+CONFIG_SED=y
-+# CONFIG_VI is not set
-+
-+#
-+# Finding Utilities
-+#
-+CONFIG_FIND=y
-+CONFIG_FEATURE_FIND_MTIME=y
-+CONFIG_FEATURE_FIND_PERM=y
-+CONFIG_FEATURE_FIND_TYPE=y
-+CONFIG_FEATURE_FIND_XDEV=y
-+# CONFIG_FEATURE_FIND_NEWER is not set
-+# CONFIG_FEATURE_FIND_INUM is not set
-+CONFIG_GREP=y
-+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
-+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
-+CONFIG_FEATURE_GREP_CONTEXT=y
-+CONFIG_XARGS=y
-+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
-+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
-+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
-+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
-+
-+#
-+# Init Utilities
-+#
-+# CONFIG_INIT is not set
-+# CONFIG_HALT is not set
-+# CONFIG_POWEROFF is not set
-+# CONFIG_REBOOT is not set
-+# CONFIG_MINIT is not set
-+# CONFIG_MESG is not set
-+
-+#
-+# Login/Password Management Utilities
-+#
-+CONFIG_USE_BB_PWD_GRP=y
-+# CONFIG_ADDGROUP is not set
-+# CONFIG_DELGROUP is not set
-+# CONFIG_ADDUSER is not set
-+# CONFIG_DELUSER is not set
-+# CONFIG_GETTY is not set
-+# CONFIG_LOGIN is not set
-+# CONFIG_PASSWD is not set
-+# CONFIG_SU is not set
-+# CONFIG_SULOGIN is not set
-+# CONFIG_VLOCK is not set
-+
-+#
-+# Miscellaneous Utilities
-+#
-+# CONFIG_ADJTIMEX is not set
-+# CONFIG_CROND is not set
-+# CONFIG_CRONTAB is not set
-+CONFIG_DC=y
-+# CONFIG_DEVFSD is not set
-+# CONFIG_LAST is not set
-+# CONFIG_HDPARM is not set
-+# CONFIG_MAKEDEVS is not set
-+# CONFIG_MT is not set
-+# CONFIG_RX is not set
-+CONFIG_STRINGS=y
-+# CONFIG_TIME is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Linux Module Utilities
-+#
-+# CONFIG_INSMOD is not set
-+# CONFIG_LSMOD is not set
-+# CONFIG_MODPROBE is not set
-+# CONFIG_RMMOD is not set
-+
-+#
-+# Networking Utilities
-+#
-+# CONFIG_FEATURE_IPV6 is not set
-+# CONFIG_ARPING is not set
-+# CONFIG_FTPGET is not set
-+# CONFIG_FTPPUT is not set
-+# CONFIG_HOSTNAME is not set
-+# CONFIG_HTTPD is not set
-+# CONFIG_IFCONFIG is not set
-+# CONFIG_IFUPDOWN is not set
-+# CONFIG_INETD is not set
-+# CONFIG_IP is not set
-+# CONFIG_IPCALC is not set
-+# CONFIG_IPADDR is not set
-+# CONFIG_IPLINK is not set
-+# CONFIG_IPROUTE is not set
-+# CONFIG_IPTUNNEL is not set
-+# CONFIG_NAMEIF is not set
-+# CONFIG_NC is not set
-+# CONFIG_NETSTAT is not set
-+# CONFIG_NSLOOKUP is not set
-+# CONFIG_PING is not set
-+# CONFIG_ROUTE is not set
-+# CONFIG_TELNET is not set
-+# CONFIG_TELNETD is not set
-+# CONFIG_TFTP is not set
-+# CONFIG_TRACEROUTE is not set
-+# CONFIG_VCONFIG is not set
-+# CONFIG_WGET is not set
-+
-+#
-+# udhcp Server/Client
-+#
-+# CONFIG_UDHCPD is not set
-+# CONFIG_UDHCPC is not set
-+
-+#
-+# Process Utilities
-+#
-+# CONFIG_FREE is not set
-+CONFIG_KILL=y
-+CONFIG_KILLALL=y
-+CONFIG_PIDOF=y
-+CONFIG_PS=y
-+# CONFIG_RENICE is not set
-+# CONFIG_TOP is not set
-+# CONFIG_UPTIME is not set
-+# CONFIG_SYSCTL is not set
-+
-+#
-+# Another Bourne-like Shell
-+#
-+CONFIG_FEATURE_SH_IS_ASH=y
-+# CONFIG_FEATURE_SH_IS_HUSH is not set
-+# CONFIG_FEATURE_SH_IS_LASH is not set
-+# CONFIG_FEATURE_SH_IS_MSH is not set
-+# CONFIG_FEATURE_SH_IS_NONE is not set
-+CONFIG_ASH=y
-+
-+#
-+# Ash Shell Options
-+#
-+# CONFIG_ASH_JOB_CONTROL is not set
-+CONFIG_ASH_ALIAS=y
-+CONFIG_ASH_MATH_SUPPORT=y
-+# CONFIG_ASH_GETOPTS is not set
-+# CONFIG_ASH_CMDCMD is not set
-+# CONFIG_ASH_MAIL is not set
-+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
-+# CONFIG_ASH_RANDOM_SUPPORT is not set
-+# CONFIG_HUSH is not set
-+# CONFIG_LASH is not set
-+# CONFIG_MSH is not set
-+
-+#
-+# Bourne Shell Options
-+#
-+# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
-+CONFIG_FEATURE_SH_STANDALONE_SHELL=y
-+# CONFIG_FEATURE_COMMAND_EDITING is not set
-+
-+#
-+# System Logging Utilities
-+#
-+# CONFIG_SYSLOGD is not set
-+# CONFIG_LOGGER is not set
-+
-+#
-+# Linux System Utilities
-+#
-+# CONFIG_DMESG is not set
-+# CONFIG_FBSET is not set
-+# CONFIG_FDFLUSH is not set
-+# CONFIG_FDFORMAT is not set
-+# CONFIG_FDISK is not set
-+# CONFIG_FREERAMDISK is not set
-+# CONFIG_FSCK_MINIX is not set
-+# CONFIG_MKFS_MINIX is not set
-+# CONFIG_GETOPT is not set
-+# CONFIG_HEXDUMP is not set
-+# CONFIG_HWCLOCK is not set
-+# CONFIG_LOSETUP is not set
-+# CONFIG_MKSWAP is not set
-+CONFIG_MORE=y
-+# CONFIG_FEATURE_USE_TERMIOS is not set
-+# CONFIG_PIVOT_ROOT is not set
-+# CONFIG_RDATE is not set
-+# CONFIG_SWAPONOFF is not set
-+# CONFIG_MOUNT is not set
-+# CONFIG_UMOUNT is not set
-+
-+#
-+# Debugging Options
-+#
-+# CONFIG_DEBUG is not set
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/freetype.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/freetype.patch
deleted file mode 100644 (file)
index caefc0d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- include/freetype/config/ftmodule.h Thu Jul 31 12:59:06 2003
-+++ include/freetype/config/ftmodule.h Thu Jul 31 12:59:17 2003
-@@ -1,4 +1,5 @@
- FT_USE_MODULE(autohint_module_class)
-+/*
- FT_USE_MODULE(cff_driver_class)
- FT_USE_MODULE(t1cid_driver_class)
- FT_USE_MODULE(pcf_driver_class)
-@@ -7,13 +8,15 @@
- FT_USE_MODULE(psnames_module_class)
- FT_USE_MODULE(pshinter_module_class)
- FT_USE_MODULE(ft_raster1_renderer_class)
-+*/
- FT_USE_MODULE(sfnt_module_class)
- FT_USE_MODULE(ft_smooth_renderer_class)
- FT_USE_MODULE(ft_smooth_lcd_renderer_class)
- FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
- FT_USE_MODULE(tt_driver_class)
-+/*
- FT_USE_MODULE(t1_driver_class)
- FT_USE_MODULE(t42_driver_class)
- FT_USE_MODULE(pfr_driver_class)
- FT_USE_MODULE(winfnt_driver_class)
--
-+*/
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/ft-nostdio.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/ft-nostdio.patch
deleted file mode 100644 (file)
index 6098c50..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
---- src/base/ftsystem.c.origf  Mon Dec 29 05:45:54 2003
-+++ src/base/ftsystem.c        Mon Dec 29 05:46:08 2003
-@@ -32,7 +32,8 @@
- #include FT_ERRORS_H
- #include FT_TYPES_H
--#include <stdio.h>
-+#include <fcntl.h>
-+#include <unistd.h>
- #include <stdlib.h>
-@@ -151,7 +152,7 @@
-   /* We use the macro STREAM_FILE for convenience to extract the       */
-   /* system-specific stream handle from a given FreeType stream object */
--#define STREAM_FILE( stream )  ( (FILE*)stream->descriptor.pointer )
-+#define STREAM_FD( stream )  ( (int)stream->descriptor.value )
-   /*************************************************************************/
-@@ -168,7 +169,7 @@
-   FT_CALLBACK_DEF( void )
-   ft_ansi_stream_close( FT_Stream  stream )
-   {
--    fclose( STREAM_FILE( stream ) );
-+    close(STREAM_FD(stream));
-     stream->descriptor.pointer = NULL;
-     stream->size               = 0;
-@@ -202,14 +203,14 @@
-                      unsigned char*  buffer,
-                      unsigned long   count )
-   {
--    FILE*  file;
-+    int fd;
--    file = STREAM_FILE( stream );
-+    fd = STREAM_FD( stream );
--    fseek( file, offset, SEEK_SET );
-+    if(lseek( fd, offset, SEEK_SET ) < 0) return 0;
--    return (unsigned long)fread( buffer, 1, count, file );
-+    return (unsigned long) read(fd,buffer,count);
-   }
-@@ -219,14 +220,14 @@
-   FT_Stream_Open( FT_Stream    stream,
-                   const char*  filepathname )
-   {
--    FILE*  file;
-+    int fd,n;
-     if ( !stream )
-       return FT_Err_Invalid_Stream_Handle;
--    file = fopen( filepathname, "rb" );
--    if ( !file )
-+    fd = open( filepathname, O_RDONLY);
-+    if (fd < 0)
-     {
-       FT_ERROR(( "FT_Stream_Open:" ));
-       FT_ERROR(( " could not open `%s'\n", filepathname ));
-@@ -234,11 +235,11 @@
-       return FT_Err_Cannot_Open_Resource;
-     }
--    fseek( file, 0, SEEK_END );
--    stream->size = ftell( file );
--    fseek( file, 0, SEEK_SET );
-+    n = lseek( fd, 0, SEEK_END );
-+    stream-> size = n < 0 ? 0 : n;
-+    lseek( fd, 0, SEEK_SET );
--    stream->descriptor.pointer = file;
-+    stream->descriptor.value   = fd;
-     stream->pathname.pointer   = (char*)filepathname;
-     stream->pos                = 0;
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/gcc-fdata-sections-bss.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/gcc-fdata-sections-bss.patch
deleted file mode 100644 (file)
index d921ae6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---- gcc/config/mips/mips.c.orig        Mon Dec 29 06:30:42 2003
-+++ gcc/config/mips/mips.c     Mon Dec 29 07:16:35 2003
-@@ -10535,11 +10535,13 @@
-   int len, size, sec;
-   const char *name, *prefix;
-   char *string;
--  static const char *const prefixes[4][2] = {
-+  static const char *const prefixes[6][2] = {
-     { ".text.", ".gnu.linkonce.t." },
-     { ".rodata.", ".gnu.linkonce.r." },
-     { ".data.", ".gnu.linkonce.d." },
--    { ".sdata.", ".gnu.linkonce.s." }
-+    { ".sdata.", ".gnu.linkonce.s." },
-+    { ".bss.", ".gnu.linkonce.b." },
-+    { ".sbss.", ".gnu.linkonce.sb." }
-   };
-   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
-@@ -10551,8 +10553,9 @@
-   if (TREE_CODE (decl) == FUNCTION_DECL)
-     sec = 0;
-   else if (DECL_INITIAL (decl) == 0
--           || DECL_INITIAL (decl) == error_mark_node)
--    sec = 2;
-+           || DECL_INITIAL (decl) == error_mark_node
-+           || initializer_zerop (DECL_INITIAL (decl)))
-+    sec = (size > 0 && size <= mips_section_threshold) ? 5 : 4;
-   else if ((TARGET_EMBEDDED_PIC || TARGET_MIPS16)
-       && TREE_CODE (decl) == STRING_CST
-       && !flag_writable_strings)
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/gcc-fixes.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/gcc-fixes.patch
deleted file mode 100644 (file)
index ab6a652..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-diff -urN ../gcc-3.3.1/gcc/builtin-attrs.def ./gcc/builtin-attrs.def
---- ../gcc-3.3.1/gcc/builtin-attrs.def Tue Mar  4 09:37:20 2003
-+++ ./gcc/builtin-attrs.def    Wed Aug 27 00:09:45 2003
-@@ -110,6 +110,7 @@
-                       ATTR_NOTHROW_LIST)
- /* Construct a tree for a format attribute.  */
-+#if 0
- #define DEF_FORMAT_ATTRIBUTE(TYPE, FA, VALUES)                                 \
-   DEF_ATTR_TREE_LIST (CONCAT4 (ATTR_,TYPE,_,VALUES), ATTR_NULL,                \
-                     CONCAT2 (ATTR_,TYPE), CONCAT2 (ATTR_LIST_,VALUES)) \
-@@ -128,6 +129,32 @@
- DEF_FORMAT_ATTRIBUTE(STRFTIME,3,3_0)
- DEF_FORMAT_ATTRIBUTE(STRFMON,3,3_4)
- #undef DEF_FORMAT_ATTRIBUTE
-+#else
-+DEF_ATTR_TREE_LIST (ATTR_PRINTF_1_0, ATTR_NULL, ATTR_PRINTF, ATTR_LIST_1_0)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_PRINTF_1_0, ATTR_FORMAT, ATTR_PRINTF_1_0, ATTR_NONNULL_1)
-+DEF_ATTR_TREE_LIST (ATTR_PRINTF_1_2, ATTR_NULL, ATTR_PRINTF, ATTR_LIST_1_2)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_PRINTF_1_2, ATTR_FORMAT, ATTR_PRINTF_1_2, ATTR_NONNULL_1)
-+DEF_ATTR_TREE_LIST (ATTR_PRINTF_2_0, ATTR_NULL, ATTR_PRINTF, ATTR_LIST_2_0)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_PRINTF_2_0, ATTR_FORMAT, ATTR_PRINTF_2_0, ATTR_NONNULL_2)
-+DEF_ATTR_TREE_LIST (ATTR_PRINTF_2_3, ATTR_NULL, ATTR_PRINTF, ATTR_LIST_2_3)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_PRINTF_2_3, ATTR_FORMAT, ATTR_PRINTF_2_3, ATTR_NONNULL_2)
-+DEF_ATTR_TREE_LIST (ATTR_PRINTF_3_0, ATTR_NULL, ATTR_PRINTF, ATTR_LIST_3_0)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_PRINTF_3_0, ATTR_FORMAT, ATTR_PRINTF_3_0, ATTR_NONNULL_3)
-+DEF_ATTR_TREE_LIST (ATTR_PRINTF_3_4, ATTR_NULL, ATTR_PRINTF, ATTR_LIST_3_4)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_PRINTF_3_4, ATTR_FORMAT, ATTR_PRINTF_3_4, ATTR_NONNULL_3)
-+DEF_ATTR_TREE_LIST (ATTR_SCANF_1_0, ATTR_NULL, ATTR_SCANF, ATTR_LIST_1_0)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_SCANF_1_0, ATTR_FORMAT, ATTR_SCANF_1_0, ATTR_NONNULL_1)
-+DEF_ATTR_TREE_LIST (ATTR_SCANF_1_2, ATTR_NULL, ATTR_SCANF, ATTR_LIST_1_2)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_SCANF_1_2, ATTR_FORMAT, ATTR_SCANF_1_2, ATTR_NONNULL_1)
-+DEF_ATTR_TREE_LIST (ATTR_SCANF_2_0, ATTR_NULL, ATTR_SCANF, ATTR_LIST_2_0)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_SCANF_2_0, ATTR_FORMAT, ATTR_SCANF_2_0, ATTR_NONNULL_2)
-+DEF_ATTR_TREE_LIST (ATTR_SCANF_2_3, ATTR_NULL, ATTR_SCANF, ATTR_LIST_2_3)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_SCANF_2_3, ATTR_FORMAT, ATTR_SCANF_2_3, ATTR_NONNULL_2)
-+DEF_ATTR_TREE_LIST (ATTR_STRFTIME_3_0, ATTR_NULL, ATTR_STRFTIME, ATTR_LIST_3_0)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_STRFTIME_3_0, ATTR_FORMAT, ATTR_STRFTIME_3_0, ATTR_NONNULL_3)
-+DEF_ATTR_TREE_LIST (ATTR_STRFMON_3_4, ATTR_NULL, ATTR_STRFMON, ATTR_LIST_3_4)
-+DEF_ATTR_TREE_LIST (ATTR_FORMAT_STRFMON_3_4, ATTR_FORMAT, ATTR_STRFMON_3_4, ATTR_NONNULL_3)
-+#endif
- /* Construct a tree for a format_arg attribute.  */
- #define DEF_FORMAT_ARG_ATTRIBUTE(FA)                                  \
-diff -urN ../gcc-3.3.1/gcc/config/mips/t-unknown ./gcc/config/mips/t-unknown
---- ../gcc-3.3.1/gcc/config/mips/t-unknown     Wed Dec 31 19:00:00 1969
-+++ ./gcc/config/mips/t-unknown        Mon Sep  1 01:19:35 2003
-@@ -0,0 +1,3 @@
-+MULTILIB_OPTIONS= 
-+MULTILIB_DIRNAMES = 
-+MULTILIB_MATCHES = 
-diff -urN ../gcc-3.3.1/gcc/config.gcc ./gcc/config.gcc
---- ../gcc-3.3.1/gcc/config.gcc        Fri Jun 27 07:44:22 2003
-+++ ./gcc/config.gcc   Sun Aug 31 12:39:12 2003
-@@ -1932,6 +1932,10 @@
-       target_cpu_default="MASK_64BIT|MASK_FLOAT64|MASK_GAS"
-       tm_defines="MIPS_ISA_DEFAULT=64 MIPS_CPU_STRING_DEFAULT=\\\"sb1\\\" MIPS_ABI_DEFAULT=ABI_O64"
-       ;;
-+mips*-unknown-elf*)
-+      tm_file="${tm_file} mips/elf.h"
-+      tmake_file="mips/t-elf mips/t-unknown"
-+        ;;
- mips-*-elf* | mipsel-*-elf*)
-       tm_file="${tm_file} mips/elf.h"
-       tmake_file=mips/t-elf
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/libmspack.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/libmspack.patch
deleted file mode 100644 (file)
index cb40f62..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- ../libmspack.orig/mspack/Makefile  Sat Jul 26 10:44:57 2003
-+++ mspack/Makefile    Sun Nov  2 17:12:35 2003
-@@ -1,12 +1,13 @@
- CC=gcc
- RM=rm -f
- AR=ar
-+RANLIB=ranlib
- WARNINGS=-Wall -Wsign-compare -Wconversion -pedantic
- LARGEFILE=-std=c99 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
- DEBUG=-g -DDEBUG
- OPTIM=-O3
--CFLAGS= $(WARNINGS) $(LARGEFILE) $(DEBUG) $(OPTIM) -I.
-+CFLAGS= $(WARNINGS) $(LARGEFILE) $(OPTIM) -I. #-DMSPACK_NO_DEFAULT_SYSTEM
- all: libmspack.a
-@@ -27,6 +28,7 @@
- libmspack.a: $(OBJS)
-       -$(RM) $@
-       $(AR) q $@ $(OBJS)
-+      $(RANLIB) $@
- .c.o:
-       $(CC) $(CFLAGS) -o $@ -c $<
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-malloc.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-malloc.patch
deleted file mode 100644 (file)
index fdf36be..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- newlib/libc/stdlib/mallocr.c.old   Sun Nov 23 18:41:21 2003
-+++ newlib/libc/stdlib/mallocr.c       Sun Nov 23 18:43:03 2003
-@@ -301,7 +301,8 @@
- #define SEPARATE_OBJECTS
- #define HAVE_MMAP 0
- #define MORECORE(size) _sbrk_r(reent_ptr, (size))
--#define MORECORE_CLEARS 0
-+#define MORECORE_CLEARS 1
-+#define malloc_getpagesize getpagesize()
- #define MALLOC_LOCK __malloc_lock(reent_ptr)
- #define MALLOC_UNLOCK __malloc_unlock(reent_ptr)
-@@ -310,7 +311,7 @@
- # undef WIN32
- #endif
--#ifndef _WIN32
-+#if !defined(_WIN32) && !defined(malloc_getpagesize)
- #ifdef SMALL_MEMORY
- #define malloc_getpagesize (128)
- #else
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-mips.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-mips.patch
deleted file mode 100644 (file)
index a01f0cc..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-diff -urN ../newlib-1.11.0.orig/libgloss/configure ./libgloss/configure
---- ../newlib-1.11.0.orig/libgloss/configure   Tue Nov 25 09:05:13 2003
-+++ ./libgloss/configure       Mon Nov 24 20:12:14 2003
-@@ -762,6 +762,9 @@
-   mips*-*-pe)
-       configdirs="wince"
-       ;;
-+  mips*-unknown-elf*)
-+        configdirs="${configdirs}"
-+        ;;
-   mips*-*-*)
-       configdirs="${configdirs} mips testsuite"
-       ;;
-@@ -818,7 +821,7 @@
- # Extract the first word of "gcc", so it can be a program name with args.
- set dummy gcc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:822: checking for $ac_word" >&5
-+echo "configure:825: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -848,7 +851,7 @@
-   # Extract the first word of "cc", so it can be a program name with args.
- set dummy cc; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:852: checking for $ac_word" >&5
-+echo "configure:855: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -897,7 +900,7 @@
- fi
- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
--echo "configure:901: checking whether we are using GNU C" >&5
-+echo "configure:904: checking whether we are using GNU C" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -906,7 +909,7 @@
-   yes;
- #endif
- EOF
--if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:913: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-   ac_cv_prog_gcc=yes
- else
-   ac_cv_prog_gcc=no
-@@ -921,7 +924,7 @@
-   ac_save_CFLAGS="$CFLAGS"
-   CFLAGS=
-   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
--echo "configure:925: checking whether ${CC-cc} accepts -g" >&5
-+echo "configure:928: checking whether ${CC-cc} accepts -g" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -953,7 +956,7 @@
- # Extract the first word of "ar", so it can be a program name with args.
- set dummy ar; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:957: checking for $ac_word" >&5
-+echo "configure:960: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -987,7 +990,7 @@
- # Extract the first word of "ranlib", so it can be a program name with args.
- set dummy ranlib; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:991: checking for $ac_word" >&5
-+echo "configure:994: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-diff -urN ../newlib-1.11.0.orig/libgloss/configure.in ./libgloss/configure.in
---- ../newlib-1.11.0.orig/libgloss/configure.in        Tue Nov 25 09:05:13 2003
-+++ ./libgloss/configure.in    Mon Nov 24 20:12:14 2003
-@@ -73,6 +73,9 @@
-   mips*-*-pe)
-       configdirs="wince"
-       ;;
-+  mips*-unknown-elf*)
-+        configdirs="${configdirs}"
-+        ;;
-   mips*-*-*)
-       configdirs="${configdirs} mips testsuite"
-       ;;
-diff -urN ../newlib-1.11.0.orig/newlib/configure.host ./newlib/configure.host
---- ../newlib-1.11.0.orig/newlib/configure.host        Tue Nov 25 09:05:13 2003
-+++ ./newlib/configure.host    Tue Nov 25 08:30:02 2003
-@@ -359,6 +359,9 @@
-   mips*-dec-*)
-       sys_dir=decstation
-       ;;
-+  mips-unknown-elf*)
-+        posix_dir=posix
-+        ;;
-   mmix-knuth-mmixware)
-       sys_dir=mmixware
-       ;;
-@@ -508,6 +511,10 @@
-       newlib_cflags="${newlib_cflags}"
-       syscall_dir=syscalls
-       ;;
-+  mips*-unknown-elf*)
-+       newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_GETTIMEOFDAY -DHAVE_FCNTL -DHAVE_OPENDIR -DWANT_PRINTF_LONG_LONG"
-+       syscall_dir=syscalls
-+        ;;
-   mmix-*)
-       syscall_dir=syscalls
-       # We need every symbol 32-bit aligned, so the invalid
-diff -urN ../newlib-1.11.0.orig/newlib/libc/include/paths.h ./newlib/libc/include/paths.h
---- ../newlib-1.11.0.orig/newlib/libc/include/paths.h  Thu Feb 17 14:39:46 2000
-+++ ./newlib/libc/include/paths.h      Tue Nov 25 09:48:09 2003
-@@ -3,5 +3,6 @@
- #define _PATH_DEV     "/dev/"
- #define _PATH_BSHELL    "/bin/sh"
-+#define _PATH_DEVNULL "/dev/null"
- #endif /* _PATHS_H_ */
-diff -urN ../newlib-1.11.0.orig/newlib/libc/include/stdlib.h ./newlib/libc/include/stdlib.h
---- ../newlib-1.11.0.orig/newlib/libc/include/stdlib.h Fri Dec  6 13:58:50 2002
-+++ ./newlib/libc/include/stdlib.h     Tue Nov 25 09:50:46 2003
-@@ -158,10 +158,12 @@
- _VOID _EXFUN(cfree,(_PTR));
- #else
- char *        _EXFUN(realpath,(const char *, char *));
-+#endif
- void  _EXFUN(unsetenv,(const char *__string));
- void  _EXFUN(_unsetenv_r,(struct _reent *, const char *__string));
- int   _EXFUN(random,(_VOID));
- long  _EXFUN(srandom,(unsigned __seed));
-+#ifdef __CYGWIN__
- char *  _EXFUN(ptsname, (int));
- int     _EXFUN(grantpt, (int));
- int     _EXFUN(unlockpt,(int));
-diff -urN ../newlib-1.11.0.orig/newlib/libc/include/sys/signal.h ./newlib/libc/include/sys/signal.h
---- ../newlib-1.11.0.orig/newlib/libc/include/sys/signal.h     Wed Jul 24 14:18:07 2002
-+++ ./newlib/libc/include/sys/signal.h Tue Nov 25 09:56:00 2003
-@@ -142,6 +142,8 @@
- int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset));
- #endif
-+int _EXFUN(kill, (int, int));
-+
- /* protos for functions found in winsup sources for CYGWIN */
- #if defined(__CYGWIN__) || defined(__rtems__)
- #undef sigaddset
-@@ -150,7 +152,6 @@
-    <sys/types.h> always defines pid_t to be int.  If that ever
-    changes, then we will need to do something else, perhaps along the
-    lines of <machine/types.h>.  */
--int _EXFUN(kill, (int, int));
- int _EXFUN(killpg, (pid_t, int));
- int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *));
- int _EXFUN(sigaddset, (sigset_t *, const int));
-diff -urN ../newlib-1.11.0.orig/newlib/libc/include/sys/stat.h ./newlib/libc/include/sys/stat.h
---- ../newlib-1.11.0.orig/newlib/libc/include/sys/stat.h       Sat Feb 23 15:46:28 2002
-+++ ./newlib/libc/include/sys/stat.h   Tue Nov 25 09:41:35 2003
-@@ -127,7 +127,7 @@
- int   _EXFUN(stat,( const char *__path, struct stat *__sbuf ));
- mode_t        _EXFUN(umask,( mode_t __mask ));
--#if defined(__rtems__) || defined(__CYGWIN__)
-+#if defined(__rtems__) || defined(__CYGWIN__) || 1
- int   _EXFUN(lstat,( const char *__path, struct stat *__buf ));
- int   _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev ));
- #endif
-diff -urN ../newlib-1.11.0.orig/newlib/libc/include/sys/unistd.h ./newlib/libc/include/sys/unistd.h
---- ../newlib-1.11.0.orig/newlib/libc/include/sys/unistd.h     Sun Aug 18 02:08:39 2002
-+++ ./newlib/libc/include/sys/unistd.h Tue Nov 25 09:46:58 2003
-@@ -158,9 +158,9 @@
- #endif
- char *        _EXFUN(mktemp, (char *));
- int     _EXFUN(sync, (void));
-+#endif
- int     _EXFUN(readlink, (const char *__path, char *__buf, int __buflen));
- int     _EXFUN(symlink, (const char *__name1, const char *__name2));
--#endif
- #define       F_OK    0
- #define       R_OK    4
-diff -urN ../newlib-1.11.0.orig/newlib/libc/include/sys/utime.h ./newlib/libc/include/sys/utime.h
---- ../newlib-1.11.0.orig/newlib/libc/include/sys/utime.h       2000-02-17 14:39:46.000000000 -0500
-+++ ./newlib/libc/include/sys/utime.h   2004-05-02 19:57:46.000000000 -0400
-@@ -15,6 +15,8 @@
-   time_t modtime; 
- };
-+extern int utime(const char *file, const struct utimbuf *buf);
-+
- #ifdef __cplusplus
- };
- #endif
-diff -rNu ../newlib-1.11.0.orig/newlib/libc/include/sys/dirent.h ./newlib/libc/include/sys/dirent.h
---- ../newlib-1.11.0.orig/newlib/libc/include/sys/dirent.h     2000-02-17 14:39:46.000000000 -0500
-+++ ./newlib/libc/include/sys/dirent.h 2004-05-03 01:17:15.000000000 -0400
-@@ -1,15 +1,29 @@
--/* <dirent.h> includes <sys/dirent.h>, which is this file.  On a
--   system which supports <dirent.h>, this file is overridden by
--   dirent.h in the libc/sys/.../sys directory.  On a system which does
--   not support <dirent.h>, we will get this file which tries to find
--   any other <dirent.h> which may be lurking around.  If there isn't
--   one, the user will get an error indicating that there is no
--   <dirent.h>.  */
--
- #ifdef __cplusplus
- extern "C" {
- #endif
--#include_next <dirent.h>
-+
-+#define MAXNAMLEN 4087
-+    
-+struct dirent {
-+    unsigned long d_reclen;
-+    unsigned long d_ino;
-+    char d_name[MAXNAMLEN+1];
-+};
-+
-+typedef struct {
-+    int dd_fd;
-+    char *dd_buf;
-+    long dd_loc;
-+    long dd_size;
-+    long dd_len;
-+} DIR;
-+
-+DIR *opendir (const char *);
-+struct dirent *readdir (DIR *);
-+int readdir_r(DIR *, struct dirent *, struct dirent **);
-+void rewinddir (DIR *);
-+int closedir (DIR *);
-+
- #ifdef __cplusplus
- }
- #endif
---- newlib/libc/include/sys/signal.h~  2004-05-07 02:06:28.000000000 -0400
-+++ newlib/libc/include/sys/signal.h   2004-05-07 02:06:28.000000000 -0400
-@@ -145,7 +145,7 @@
- int _EXFUN(kill, (int, int));
- /* protos for functions found in winsup sources for CYGWIN */
--#if defined(__CYGWIN__) || defined(__rtems__)
-+#if defined(__CYGWIN__) || defined(__rtems__) || 1
- #undef sigaddset
- #undef sigemptyset
- /* The first argument to kill should be pid_t.  Right now
---- newlib/libc/include/sys/signal.h.bak       2004-05-09 23:15:15.000000000 -0400
-+++ newlib/libc/include/sys/signal.h   2004-05-09 23:16:33.000000000 -0400
-@@ -148,6 +148,9 @@
- #if defined(__CYGWIN__) || defined(__rtems__) || 1
- #undef sigaddset
- #undef sigemptyset
-+
-+#include <sys/types.h>
-+
- /* The first argument to kill should be pid_t.  Right now
-    <sys/types.h> always defines pid_t to be int.  If that ever
-    changes, then we will need to do something else, perhaps along the
diff --git a/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-tzset.patch b/upstream/org.ibex.core/upstream/org.ibex.nestedvm/upstream/patches/newlib-tzset.patch
deleted file mode 100644 (file)
index bf16fa9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-===================================================================
-RCS file: /cvs/src/src/newlib/libc/time/tzset_r.c,v
-retrieving revision 1.2
-retrieving revision 1.3
-diff -u -r1.2 -r1.3
---- newlib/libc/time/tzset_r.c 2002/08/26 18:56:09     1.2
-+++ snewlib/libc/time/tzset_r.c        2003/06/03 18:42:09     1.3
-@@ -28,7 +28,8 @@
-         struct _reent *reent_ptr)
- {
-   char *tzenv;
--  int hh, mm, ss, sign, m, w, d, n;
-+  unsigned short hh, mm, ss, m, w, d;
-+  int sign, n;
-   int i, ch;
-   if ((tzenv = _getenv_r (reent_ptr, "TZ")) == NULL)
diff --git a/upstream/org.ibex.crypto/Makefile b/upstream/org.ibex.crypto/Makefile
deleted file mode 100644 (file)
index 9503004..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-JAVAC = javac
-sources = $(shell find src -name '*.java')
-classes = $(sources:src/%.java=build/%.class)
-dats = org/ibex/net/ssl/rootcerts.dat
-
-jar_sources = \
-       $(shell find src/org/ibex/crypto -name '*.java') \
-       src/org/ibex/net/SSL.java \
-       src/org/ibex/net/ssl/RootCerts.java
-jar_classes = $(jar_sources:src/%.java=build/%.class)
-jar = BriSSL.jar
-
-all: $(classes) $(dats:%=build/%)
-
-$(classes): $(sources)
-       @mkdir -p build
-       $(JAVAC) -d build $(sources)
-
-build/%.dat: src/%.dat
-       @mkdir -p `dirname $@`
-       cp $^ $@
-               
-$(jar): $(classes) 
-       cd build && jar cf ../$@  $(jar_classes:build/%.class=%*.class)
-       
-test: all
-       java -cp build org.ibex.net.ssl.Test www.paypal.com 443
-
-clean: 
-       rm -rf build/*
-
-# This stuff is only for Brian to use 
-# We should probably verify this file somehow
-tmp/.havecacertrs:
-       @mkdir -p tmp
-       wget -O - http://ftp.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_20020323.tar.gz | gzip -dc | tar -C tmp -xf-
-       cd tmp/ca-certificates/mozilla && \
-               make all \
-               for f in *.pem; do \
-                       openssl x509 -in "$$f" -out "$$f.der" -outform der; \
-               done
-       touch $@
-
-update-rootcerts: tmp/.havecacerts src/org/ibex/net/ssl/GenCompactCAList.java
-       java -cp build org.ibex.net.ssl.GenCompactCAList binary tmp/ca-certificates/mozilla/*.der > src/org/ibex/net/ssl/rootcerts.dat  
-       java -cp build org.ibex.net.ssl.GenCompactCAList class tmp/ca-certificates/mozilla/*.der > src/org/ibex/net/ssl/RootCerts.java
-
-sizecheck:
-       @for c in $(jar_classes); do \
-               for f in `echo $$c|sed 's,\.class$$,,;'`*.class; do gzip -c $$f; done | wc -c | tr -d '\n'; \
-               echo -e "\t`echo $$c | sed 's,build/org/ibex,,;s,\.class$$,,;s,/,.,g;'`"; \
-       done | sort -rn | awk '{ sum += $$1; print }  END { print sum,"Total"; }'
diff --git a/upstream/org.ibex.crypto/doc/COPYING b/upstream/org.ibex.crypto/doc/COPYING
deleted file mode 100644 (file)
index 6ecac4b..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-src/com/brian_web/*
--------------------
-src/com/brian_web/net/SSL.java is Copyright 2004 Brian Alliet and
-Copyright 2003 Adam Megacz. It is released under the GNU Lesser
-General Public License with the exception of the portion of clause 6a
-after the semicolon (aka the "obnoxious relink clause")
-
-src/com/brian_web/{x509,der} are Copyright 2004 Brian Alliet and
-Copyright 2000 The Legion Of The Bouncy Castle 
-(http://www.bouncycastle.org) and is released under the Bouncy
-Castle License below.
-
-The rest of src/com/brian_web is Copyright 2004 Brian Alliet
-are released under the GNU Lesser General Public License (below).
-
-src/org/bouncycastle/*
-----------------------
-src/org/bouncycastle is Copyright 2000 The Legion Of The Bouncy Castle
-(http://www.bouncycastle.org) and is released under the following license:
-
--- Bouncy Castle License --
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
--- End --
-
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/Base36.java
deleted file mode 100644 (file)
index bf5206b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.ibex.crypto;
-
-public class Base36 {
-    public static String encode(long l) {
-        StringBuffer ret = new StringBuffer();
-        while (l > 0) {
-            if ((l % 36) < 10) ret.append((char)(((int)'0') + (int)(l % 36)));
-            else ret.append((char)(((int)'A') + (int)((l % 36) - 10)));
-            l /= 36;
-        }
-        return ret.toString();
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/Base64.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/Base64.java
deleted file mode 100644 (file)
index f53b067..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.ibex.crypto;
-
-public class Base64
-{
-        private static final byte[] encodingTable =
-                {
-                    (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
-            (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
-            (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
-            (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
-                    (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
-            (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
-            (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
-            (byte)'v',
-                    (byte)'w', (byte)'x', (byte)'y', (byte)'z',
-                    (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6',
-            (byte)'7', (byte)'8', (byte)'9',
-                    (byte)'+', (byte)'/'
-                };
-
-        /**
-         * encode the input data producong a base 64 encoded byte array.
-         *
-         * @return a byte array containing the base 64 encoded data.
-         */
-        public static byte[] encode(
-                byte[]  data)
-        {
-                byte[]  bytes;
-                
-                int modulus = data.length % 3;
-                if (modulus == 0)
-                {
-                        bytes = new byte[4 * data.length / 3];
-                }
-                else
-                {
-                        bytes = new byte[4 * ((data.length / 3) + 1)];
-                }
-
-        int dataLength = (data.length - modulus);
-                int a1, a2, a3;
-                for (int i = 0, j = 0; i < dataLength; i += 3, j += 4)
-                {
-                        a1 = data[i] & 0xff;
-                        a2 = data[i + 1] & 0xff;
-                        a3 = data[i + 2] & 0xff;
-
-                        bytes[j] = encodingTable[(a1 >>> 2) & 0x3f];
-                        bytes[j + 1] = encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f];
-                        bytes[j + 2] = encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f];
-                        bytes[j + 3] = encodingTable[a3 & 0x3f];
-                }
-
-                /*
-                 * process the tail end.
-                 */
-                int     b1, b2, b3;
-                int     d1, d2;
-
-                switch (modulus)
-                {
-                case 0:         /* nothing left to do */
-                        break;
-                case 1:
-                        d1 = data[data.length - 1] & 0xff;
-                        b1 = (d1 >>> 2) & 0x3f;
-                        b2 = (d1 << 4) & 0x3f;
-
-                        bytes[bytes.length - 4] = encodingTable[b1];
-                        bytes[bytes.length - 3] = encodingTable[b2];
-                        bytes[bytes.length - 2] = (byte)'=';
-                        bytes[bytes.length - 1] = (byte)'=';
-                        break;
-                case 2:
-                        d1 = data[data.length - 2] & 0xff;
-                        d2 = data[data.length - 1] & 0xff;
-
-                        b1 = (d1 >>> 2) & 0x3f;
-                        b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f;
-                        b3 = (d2 << 2) & 0x3f;
-
-                        bytes[bytes.length - 4] = encodingTable[b1];
-                        bytes[bytes.length - 3] = encodingTable[b2];
-                        bytes[bytes.length - 2] = encodingTable[b3];
-                        bytes[bytes.length - 1] = (byte)'=';
-                        break;
-                }
-
-                return bytes;
-        }
-
-        /*
-         * set up the decoding table.
-         */
-        private static final byte[] decodingTable;
-
-        static
-        {
-                decodingTable = new byte[128];
-
-                for (int i = 'A'; i <= 'Z'; i++)
-                {
-                        decodingTable[i] = (byte)(i - 'A');
-                }
-
-                for (int i = 'a'; i <= 'z'; i++)
-                {
-                        decodingTable[i] = (byte)(i - 'a' + 26);
-                }
-
-                for (int i = '0'; i <= '9'; i++)
-                {
-                        decodingTable[i] = (byte)(i - '0' + 52);
-                }
-
-                decodingTable['+'] = 62;
-                decodingTable['/'] = 63;
-        }
-
-        /**
-         * decode the base 64 encoded input data.
-         *
-         * @return a byte array representing the decoded data.
-         */
-        public static byte[] decode(
-                byte[]  data)
-        {
-                byte[]  bytes;
-                byte    b1, b2, b3, b4;
-
-                if (data[data.length - 2] == '=')
-                {
-                        bytes = new byte[(((data.length / 4) - 1) * 3) + 1];
-                }
-                else if (data[data.length - 1] == '=')
-                {
-                        bytes = new byte[(((data.length / 4) - 1) * 3) + 2];
-                }
-                else
-                {
-                        bytes = new byte[((data.length / 4) * 3)];
-                }
-
-                for (int i = 0, j = 0; i < data.length - 4; i += 4, j += 3)
-                {
-                        b1 = decodingTable[data[i]];
-                        b2 = decodingTable[data[i + 1]];
-                        b3 = decodingTable[data[i + 2]];
-                        b4 = decodingTable[data[i + 3]];
-
-                        bytes[j] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[j + 1] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[j + 2] = (byte)((b3 << 6) | b4);
-                }
-
-                if (data[data.length - 2] == '=')
-                {
-                        b1 = decodingTable[data[data.length - 4]];
-                        b2 = decodingTable[data[data.length - 3]];
-
-                        bytes[bytes.length - 1] = (byte)((b1 << 2) | (b2 >> 4));
-                }
-                else if (data[data.length - 1] == '=')
-                {
-                        b1 = decodingTable[data[data.length - 4]];
-                        b2 = decodingTable[data[data.length - 3]];
-                        b3 = decodingTable[data[data.length - 2]];
-
-                        bytes[bytes.length - 2] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 1] = (byte)((b2 << 4) | (b3 >> 2));
-                }
-                else
-                {
-                        b1 = decodingTable[data[data.length - 4]];
-                        b2 = decodingTable[data[data.length - 3]];
-                        b3 = decodingTable[data[data.length - 2]];
-                        b4 = decodingTable[data[data.length - 1]];
-
-                        bytes[bytes.length - 3] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 2] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[bytes.length - 1] = (byte)((b3 << 6) | b4);
-                }
-
-                return bytes;
-        }
-
-        /**
-         * decode the base 64 encoded String data.
-         *
-         * @return a byte array representing the decoded data.
-         */
-        public static byte[] decode(
-                String  data)
-        {
-                byte[]  bytes;
-                byte    b1, b2, b3, b4;
-
-                if (data.charAt(data.length() - 2) == '=')
-                {
-                        bytes = new byte[(((data.length() / 4) - 1) * 3) + 1];
-                }
-                else if (data.charAt(data.length() - 1) == '=')
-                {
-                        bytes = new byte[(((data.length() / 4) - 1) * 3) + 2];
-                }
-                else
-                {
-                        bytes = new byte[((data.length() / 4) * 3)];
-                }
-
-                for (int i = 0, j = 0; i < data.length() - 4; i += 4, j += 3)
-                {
-                        b1 = decodingTable[data.charAt(i)];
-                        b2 = decodingTable[data.charAt(i + 1)];
-                        b3 = decodingTable[data.charAt(i + 2)];
-                        b4 = decodingTable[data.charAt(i + 3)];
-
-                        bytes[j] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[j + 1] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[j + 2] = (byte)((b3 << 6) | b4);
-                }
-
-                if (data.charAt(data.length() - 2) == '=')
-                {
-                        b1 = decodingTable[data.charAt(data.length() - 4)];
-                        b2 = decodingTable[data.charAt(data.length() - 3)];
-
-                        bytes[bytes.length - 1] = (byte)((b1 << 2) | (b2 >> 4));
-                }
-                else if (data.charAt(data.length() - 1) == '=')
-                {
-                        b1 = decodingTable[data.charAt(data.length() - 4)];
-                        b2 = decodingTable[data.charAt(data.length() - 3)];
-                        b3 = decodingTable[data.charAt(data.length() - 2)];
-
-                        bytes[bytes.length - 2] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 1] = (byte)((b2 << 4) | (b3 >> 2));
-                }
-                else
-                {
-                        b1 = decodingTable[data.charAt(data.length() - 4)];
-                        b2 = decodingTable[data.charAt(data.length() - 3)];
-                        b3 = decodingTable[data.charAt(data.length() - 2)];
-                        b4 = decodingTable[data.charAt(data.length() - 1)];
-
-                        bytes[bytes.length - 3] = (byte)((b1 << 2) | (b2 >> 4));
-                        bytes[bytes.length - 2] = (byte)((b2 << 4) | (b3 >> 2));
-                        bytes[bytes.length - 1] = (byte)((b3 << 6) | b4);
-                }
-
-                return bytes;
-        }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/DER.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/DER.java
deleted file mode 100644 (file)
index b683a05..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * org.ibex.der.* - By Brian Alliet
- * Copyright (C) 2004 Brian Alliet
- * 
- * Based on Bouncy Castle by The Legion Of The Bouncy Castle
- * Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-package org.ibex.crypto;
-import java.io.IOException;
-import java.io.*;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.math.BigInteger;
-
-public class DER {
-    public static class Null {
-        final static Null instance = new Null();
-        private Null() { /* noop */ }
-        public boolean equals(Object o) { return o == this; }
-    }
-
-    public static class TaggedObject {
-        public final Object object;
-        public final int tag;
-        public TaggedObject(int tag, Object object) { this.tag = tag; this.object = object; }
-    }
-
-    public static class UnknownObject {
-        public final byte[] data;
-        public final int tag;
-        public UnknownObject(int tag,byte[] data) { this.tag = tag; this.data = data; }
-    }
-
-    public static class BitString {
-        public final int paddingBits;
-        public final byte[] data;
-    
-        public BitString(int paddingBits, byte[] data) {
-            this.paddingBits = paddingBits;
-            this.data = data;
-        }
-    }
-
-    public static class Exception extends java.io.IOException {
-        public Exception(String s) { super(s); }
-    }
-
-    public static class InputStream extends FilterInputStream {
-        private static final int MAX_OBJECT_SIZE = 4*1024*1024;
-    
-        private int limit;
-        public int bytesLeft() { return limit < 0 ? Integer.MAX_VALUE : limit-pos; }
-        private int pos;
-        public int getPos() { return pos; }
-    
-        // hack around gcj bug
-        public static DER.InputStream New(java.io.InputStream is) { return new DER.InputStream(is); }
-        public InputStream(java.io.InputStream is) { this(is,-1); } 
-        public InputStream(java.io.InputStream is, int limit) {
-            super(is);
-            this.limit = limit;
-        }
-    
-        public int read() throws IOException {
-            if(limit >= 0 && pos >= limit) return -1;
-            int n = super.read();
-            if(n != -1) {
-                pos++;
-            }
-            return n;
-        }
-    
-        public int read(byte[] buf, int start, int len) throws IOException {
-            if(limit >= 0) {
-                if(pos >= limit) return -1;
-                len = Math.min(len,limit-pos);
-            }
-            int n = super.read(buf,start,len);
-            if(n != -1) {
-                pos += n;
-            }
-            return n;
-        }
-    
-        protected void readFully(byte[] buf) throws IOException {
-            int pos = 0;
-            int left = buf.length;
-            while(left > 0) {
-                int n = read(buf,pos,left);
-                if(n == -1) throw new EOFException();
-                pos += n;
-                left -=n;
-            }
-        }
-    
-        protected int readByte() throws IOException {
-            int n = read();
-            if(n == -1) throw new EOFException();
-            return n;
-        }
-    
-        // From bouncycastle
-        private int readLength() throws IOException {
-            int length = read();
-            if (length < 0) throw new IOException("EOF found when length expected");
-            if (length == 0x80) return -1;      // indefinite-length encoding
-            if (length > 127) {
-                int size = length & 0x7f;
-                length = 0;
-                for (int i = 0; i < size; i++) {
-                    int next = read();
-                    if (next < 0) throw new IOException("EOF found reading length");    
-                    length = (length << 8) + next;
-                }
-            }
-            return length;
-        }
-        
-        public InputStream getSequenceStream() throws IOException {
-            int tag = readByte();
-            int length = readLength();
-            if(length < 0) throw new Exception("Indefinite length objects not supported");
-            if(tag != (CONSTRUCTED|0x10)) throw new Exception("Constructed Sequence expected");
-            return new InputStream(this,length);
-        }
-    
-        private static final int CONSTRUCTED = 0x20;    
-        public Object readObject() throws IOException {
-            int tag = readByte();        
-            int length = readLength();
-            if(length < 0) throw new Exception("Indefinite length objects not supported");
-            if(length > MAX_OBJECT_SIZE) throw new Exception("Object too large");
-        
-            switch(tag) {
-                case 0x01: return buildBoolean(length); // Boolean
-                case 0x02: return buildInteger(length); // Integer
-                case 0x03: return buildBitString(length); // Bit String
-                case 0x04: return buildOctetString(length); // Octet String
-                case 0x05: return Null.instance; // NULL
-                case 0x06: return buildObjectIdentifier(length); // Object Identifier
-                
-                case 0x13: // PrintableString
-                    // It is incorrect to treat this as an IA5String but the T.61 standard is way too old and backwards
-                    // to be worth supporting
-                case 0x14: // T.61 String 
-                case 0x16: // IA5String
-                    return buildIA5String(length);
-                case 0x17: return buildTime(length,false);// UTC Time
-                case 0x18: return buildTime(length,true); // Generalizd Time
-                
-                case CONSTRUCTED | 0x10: // Constructed Sequence
-                case CONSTRUCTED | 0x11: // Constructed Set
-                    { 
-                        return buildSequence(length);
-                    }
-                default: {
-                    if((tag & 0x80) != 0) {
-                        if ((tag & 0x1f) == 0x1f) throw new Exception("Unsupported high tag ecountered");
-                        // tagged object - bottom 5 bits are tag
-                        if(length == 0)
-                            return new TaggedObject(tag&0x1,((tag & CONSTRUCTED) == 0) ? (Object)Null.instance : (Object)new Vector());
-                        if((tag & CONSTRUCTED) == 0)
-                            return new TaggedObject(tag&0x1f,buildOctetString(length));
-                 
-                        InputStream dis = new InputStream(this,length);
-                        Object o = dis.readObject();
-                        if(dis.bytesLeft() == 0) return new TaggedObject(tag&0x1f,o);
-                        Vector v = new Vector();
-                        v.addElement(o);
-                        return buildSequence(dis,v);
-                    } else {
-                        return new UnknownObject(tag,readBytes(length));
-                    }
-                }     
-            }
-        }
-
-        protected Vector buildSequence(int length) throws IOException { return buildSequence(new InputStream(this,length),new Vector()); }
-        protected Vector buildSequence(InputStream dis,Vector v) throws IOException {
-            try {
-                for(;;) v.addElement(dis.readObject());
-            } catch(EOFException e) { 
-                return v; 
-            }
-        }    
-    
-        protected byte[] readBytes(int length) throws IOException {
-            byte[] buf = new byte[length];
-            readFully(buf);
-            return buf;
-        }
-    
-        protected BigInteger buildInteger(int length) throws IOException { return new BigInteger(readBytes(length)); }
-    
-        // From bouncycastle
-        protected String buildObjectIdentifier(int length) throws IOException {
-            byte[] bytes = readBytes(length);
-            StringBuffer    objId = new StringBuffer();
-            int             value = 0;
-            boolean         first = true;
-
-            for (int i = 0; i != bytes.length; i++)
-                {
-                    int b = bytes[i] & 0xff;
-
-                    value = value * 128 + (b & 0x7f);
-                    if ((b & 0x80) == 0)             // end of number reached
-                        {
-                            if (first)
-                                {
-                                    switch (value / 40)
-                                        {
-                                            case 0:
-                                                objId.append('0');
-                                                break;
-                                            case 1:
-                                                objId.append('1');
-                                                value -= 40;
-                                                break;
-                                            default:
-                                                objId.append('2');
-                                                value -= 80;
-                                        }
-                                    first = false;
-                                }
-
-                            objId.append('.');
-                            objId.append(Integer.toString(value));
-                            value = 0;
-                        }
-                }
-            return objId.toString();
-        }
-    
-        protected String buildIA5String(int length) throws IOException {
-            byte[] buf = readBytes(length);
-            char[] buf2 = new char[buf.length];
-            for(int i=0;i<buf.length;i++) buf2[i] = (char)(buf[i]&0xff);
-            return new String(buf2);
-        }
-    
-        private static final SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
-        protected Date buildTime(int length, boolean generalized) throws IOException {
-            String s = buildIA5String(length);
-            if(!generalized && s.length() > 0) {
-                if(s.charAt(0) < '5') s = "20" + s;
-                else s = "19" + s;
-            }
-            switch(s.length()) {
-                case 13: s = s.substring(0,12) + "00GMT+00:00"; break; //  YYYYMMDDhhmmZ
-                case 15: s = s.substring(0,14) + "GMT+00:00";   break; // YYYYMMDDhhmmssZ
-                case 17: s = s.substring(0,12) + "00GMT" + s.substring(12,15) + ":" + s.substring(15,17); break;  // YYYYMMDDhhmm+hh'mm'
-                case 19: s = s.substring(0,14) + "GMT" + s.substring(14, 17) + ":" + s.substring(17, 19); // YYYYMMDDhhmmss+hh'mm'
-                default: throw new Exception("Unknown time format " + s);
-            }
-            try {
-                return dateF.parse(s);
-            } catch(ParseException e) {
-                throw new Exception("Coudln't parse time: " + e.getMessage());
-            }
-        }
-    
-        protected BitString buildBitString(int length) throws IOException {
-            if(length < 1) throw new Exception("bit string too short");
-            int padding = read();
-            if(padding == -1) throw new IOException("unexpected eof");
-            return new BitString(padding,readBytes(length-1));
-        }
-    
-        protected byte[] buildOctetString(int length) throws IOException { return readBytes(length); }
-    
-        protected Boolean buildBoolean(int length) throws IOException {
-            byte[] bytes = readBytes(length);
-            return bytes[0] != 0 ? Boolean.TRUE : Boolean.FALSE;
-        }
-    
-        /*
-          public static void main(String[] args) throws Exception {
-          InputStream is = new InputStream(new FileInputStream(args[0]));
-          try {
-          for(;;) dump(is.readObject(),"");
-          } catch(EOFException e) {
-          System.err.println("EOF");
-          }
-          }
-          public static void dump(Object o, String indent) {
-          if(o instanceof Vector) {
-          Vector v = (Vector) o;
-          System.out.println(indent + "Sequence/Set");
-          for(int i=0;i<v.size();i++) {
-          dump(v.elementAt(i),indent + i + ":  ");
-          }
-          } else if(o instanceof TaggedObject){
-          dump(((TaggedObject)o).object,indent + "Tagged object: ");
-          } else if(o instanceof byte[]) {
-          System.err.println(indent + "<Byte Array>");
-          } else {
-          System.err.println(indent + o.toString());
-          }
-          }*/
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/Digest.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/Digest.java
deleted file mode 100644 (file)
index c487ae8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/**
- * base implementation of MD4 family style digest as outlined in
- * "Handbook of Applied Cryptography", pages 344 - 347.
- */
-public abstract class Digest {
-    private byte[]  xBuf;
-    private int     xBufOff;
-    private long    byteCount;
-
-    protected Digest() { xBuf = new byte[4]; xBufOff = 0; }
-    public void update(byte in) {
-        xBuf[xBufOff++] = in;
-        if (xBufOff == xBuf.length) {
-            processWord(xBuf, 0);
-            xBufOff = 0;
-        }
-        byteCount++;
-    }
-
-    public void update(byte[] in, int inOff, int len) {
-        // fill the current word
-        while ((xBufOff != 0) && (len > 0)) {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-
-        // process whole words.
-        while (len > xBuf.length) {
-            processWord(in, inOff);
-            inOff += xBuf.length;
-            len -= xBuf.length;
-            byteCount += xBuf.length;
-        }
-
-        // load in the remainder.
-        while (len > 0) {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-    }
-
-    protected void finish() {
-        long    bitLength = (byteCount << 3);
-        // add the pad bytes.
-        update((byte)128);
-        while (xBufOff != 0) update((byte)0);
-        processLength(bitLength);
-        processBlock();
-    }
-
-    public void reset() {
-        byteCount = 0;
-        xBufOff = 0;
-        for ( int i = 0; i < xBuf.length; i++) xBuf[i] = 0;
-    }
-
-    protected abstract void processWord(byte[] in, int inOff);
-    protected abstract void processLength(long bitLength);
-    protected abstract void processBlock();
-    public abstract int getDigestSize();
-    public abstract void doFinal(byte[] out, int outOff);
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/HMAC.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/HMAC.java
deleted file mode 100644 (file)
index 22fb126..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.ibex.crypto;
-
-public class HMAC extends Digest {
-    private final Digest h;
-    private final byte[] digest;
-    private final byte[] k_ipad = new byte[64];
-    private final byte[] k_opad = new byte[64];
-    
-    public int getDigestSize() { return h.getDigestSize(); }
-    public HMAC(Digest h, byte[] key) {
-        this.h = h;
-        if(key.length > 64) {
-            h.reset();
-            h.update(key,0,key.length);
-            key = new byte[h.getDigestSize()];
-            h.doFinal(key,0);
-        }
-        digest = new byte[h.getDigestSize()];
-        for(int i=0;i<64;i++) {
-            byte b = i < key.length ? key[i] : 0;
-            k_ipad[i] = (byte)(b ^ 0x36);
-            k_opad[i] = (byte)(b ^ 0x5C);
-        }
-        reset();
-    }
-    public void reset() {
-        h.reset();
-        h.update(k_ipad,0,64);
-    }
-    public void update(byte[] b, int off, int len) { h.update(b,off,len); }
-    public void doFinal(byte[] out, int off){
-        h.doFinal(digest,0);
-        h.update(k_opad,0,64);
-        h.update(digest,0,digest.length);
-        h.doFinal(out,off);
-        reset();
-    }
-    protected void processWord(byte[] in, int inOff) {}
-    protected void processLength(long bitLength) {}
-    protected void processBlock() {}
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/MD2.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/MD2.java
deleted file mode 100644 (file)
index 1f546a2..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/* implementation of MD2
- * as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992
- */
-public class MD2 extends Digest
-{
-    private static final int DIGEST_LENGTH = 16;
-
-    /* X buffer */
-    private byte[]   X = new byte[48];
-    private int     xOff;
-    /* M buffer */
-    private byte[]   M = new byte[16];
-    private int     mOff;
-    /* check sum */
-    private byte[]   C = new byte[16];
-    //private int COff;
-
-    public MD2()
-    {
-        reset();
-    }
-
-    /**
-     * return the size, in bytes, of the digest produced by this message digest.
-     *
-     * @return the size, in bytes, of the digest produced by this message digest.
-     */
-    public int getDigestSize()
-    {
-        return DIGEST_LENGTH;
-    }
-    /**
-     * close the digest, producing the final digest value. The doFinal
-     * call leaves the digest reset.
-     *
-     * @param out the array the digest is to be copied into.
-     * @param outOff the offset into the out array the digest is to start at.
-     */
-    public void doFinal(byte[] out, int outOff)
-    {
-        // add padding
-        byte paddingByte = (byte)(M.length-mOff);
-        for (int i=mOff;i<M.length;i++)
-        {
-            M[i] = paddingByte;
-        }
-        //do final check sum
-        processCheckSum(M);
-        // do final block process
-        processBlock(M);
-
-        processBlock(C);
-
-        System.arraycopy(X,xOff,out,outOff,16);
-
-        reset();
-    }
-    /**
-     * reset the digest back to it's initial state.
-     */
-    public void reset()
-    {
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-        mOff = 0;
-        for (int i = 0; i != M.length; i++)
-        {
-            M[i] = 0;
-        }
-        //COff = 0;
-        for (int i = 0; i != C.length; i++)
-        {
-            C[i] = 0;
-        }
-    }
-    /**
-     * update the message digest with a single byte.
-     *
-     * @param in the input byte to be entered.
-     */
-    public void update(byte in)
-    {
-        M[mOff++] = in;
-
-        if (mOff == 16)
-        {
-            processCheckSum(M);
-            processBlock(M);
-            mOff = 0;
-        }
-    }
-
-    /**
-     * update the message digest with a block of bytes.
-     *
-     * @param in the byte array containing the data.
-     * @param inOff the offset into the byte array where the data starts.
-     * @param len the length of the data.
-     */
-    public void update(byte[] in, int inOff, int len)
-    {
-        //
-        // fill the current word
-        //
-        while ((mOff != 0) && (len > 0))
-        {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-
-        //
-        // process whole words.
-        //
-        while (len > 16)
-        {
-            System.arraycopy(in,inOff,M,0,16);
-            processCheckSum(M);
-            processBlock(M);
-            len -= 16;
-            inOff += 16;
-        }
-
-        //
-        // load in the remainder.
-        //
-        while (len > 0)
-        {
-            update(in[inOff]);
-            inOff++;
-            len--;
-        }
-    }
-    protected void processCheckSum(byte[] m)
-    {
-        int L = C[15];
-        for (int i=0;i<16;i++)
-        {
-            C[i] ^= S[(m[i] ^ L) & 0xff];
-            L = C[i];
-        }
-    }
-    protected void processBlock(byte[] m)
-    {
-        for (int i=0;i<16;i++)
-        {
-            X[i+16] = m[i];
-            X[i+32] = (byte)(m[i] ^ X[i]);
-        }
-        // encrypt block
-        int t = 0;
-
-        for (int j=0;j<18;j++)
-        {
-            for (int k=0;k<48;k++)
-            {
-                t = X[k] ^= S[t];
-                t = t & 0xff;
-            }
-            t = (t + j)%256;
-        }
-     }
-     // 256-byte random permutation constructed from the digits of PI
-    private static final byte[] S = {
-      (byte)41,(byte)46,(byte)67,(byte)201,(byte)162,(byte)216,(byte)124,
-      (byte)1,(byte)61,(byte)54,(byte)84,(byte)161,(byte)236,(byte)240,
-      (byte)6,(byte)19,(byte)98,(byte)167,(byte)5,(byte)243,(byte)192,
-      (byte)199,(byte)115,(byte)140,(byte)152,(byte)147,(byte)43,(byte)217,
-      (byte)188,(byte)76,(byte)130,(byte)202,(byte)30,(byte)155,(byte)87,
-      (byte)60,(byte)253,(byte)212,(byte)224,(byte)22,(byte)103,(byte)66,
-      (byte)111,(byte)24,(byte)138,(byte)23,(byte)229,(byte)18,(byte)190,
-      (byte)78,(byte)196,(byte)214,(byte)218,(byte)158,(byte)222,(byte)73,
-      (byte)160,(byte)251,(byte)245,(byte)142,(byte)187,(byte)47,(byte)238,
-      (byte)122,(byte)169,(byte)104,(byte)121,(byte)145,(byte)21,(byte)178,
-      (byte)7,(byte)63,(byte)148,(byte)194,(byte)16,(byte)137,(byte)11,
-      (byte)34,(byte)95,(byte)33,(byte)128,(byte)127,(byte)93,(byte)154,
-      (byte)90,(byte)144,(byte)50,(byte)39,(byte)53,(byte)62,(byte)204,
-      (byte)231,(byte)191,(byte)247,(byte)151,(byte)3,(byte)255,(byte)25,
-      (byte)48,(byte)179,(byte)72,(byte)165,(byte)181,(byte)209,(byte)215,
-      (byte)94,(byte)146,(byte)42,(byte)172,(byte)86,(byte)170,(byte)198,
-      (byte)79,(byte)184,(byte)56,(byte)210,(byte)150,(byte)164,(byte)125,
-      (byte)182,(byte)118,(byte)252,(byte)107,(byte)226,(byte)156,(byte)116,
-      (byte)4,(byte)241,(byte)69,(byte)157,(byte)112,(byte)89,(byte)100,
-      (byte)113,(byte)135,(byte)32,(byte)134,(byte)91,(byte)207,(byte)101,
-      (byte)230,(byte)45,(byte)168,(byte)2,(byte)27,(byte)96,(byte)37,
-      (byte)173,(byte)174,(byte)176,(byte)185,(byte)246,(byte)28,(byte)70,
-      (byte)97,(byte)105,(byte)52,(byte)64,(byte)126,(byte)15,(byte)85,
-      (byte)71,(byte)163,(byte)35,(byte)221,(byte)81,(byte)175,(byte)58,
-      (byte)195,(byte)92,(byte)249,(byte)206,(byte)186,(byte)197,(byte)234,
-      (byte)38,(byte)44,(byte)83,(byte)13,(byte)110,(byte)133,(byte)40,
-      (byte)132, 9,(byte)211,(byte)223,(byte)205,(byte)244,(byte)65,
-      (byte)129,(byte)77,(byte)82,(byte)106,(byte)220,(byte)55,(byte)200,
-      (byte)108,(byte)193,(byte)171,(byte)250,(byte)36,(byte)225,(byte)123,
-      (byte)8,(byte)12,(byte)189,(byte)177,(byte)74,(byte)120,(byte)136,
-      (byte)149,(byte)139,(byte)227,(byte)99,(byte)232,(byte)109,(byte)233,
-      (byte)203,(byte)213,(byte)254,(byte)59,(byte)0,(byte)29,(byte)57,
-      (byte)242,(byte)239,(byte)183,(byte)14,(byte)102,(byte)88,(byte)208,
-      (byte)228,(byte)166,(byte)119,(byte)114,(byte)248,(byte)235,(byte)117,
-      (byte)75,(byte)10,(byte)49,(byte)68,(byte)80,(byte)180,(byte)143,
-      (byte)237,(byte)31,(byte)26,(byte)219,(byte)153,(byte)141,(byte)51,
-      (byte)159,(byte)17,(byte)131,(byte)20
-    };
-
-
-    protected void processWord(byte[] in, int inOff) {}
-    protected void processLength(long bitLength) {}
-    protected void processBlock() {}
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/MD5.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/MD5.java
deleted file mode 100644 (file)
index 66f79b0..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/**
- * implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347.
- */
-public class MD5
-    extends Digest
-{
-    private static final int    DIGEST_LENGTH = 16;
-
-    private int     H1, H2, H3, H4;         // IV's
-
-    private int[]   X = new int[16];
-    private int     xOff;
-
-    /**
-     * Standard constructor
-     */
-    public MD5()
-    {
-        reset();
-    }
-
-    public int getDigestSize()
-    {
-        return DIGEST_LENGTH;
-    }
-
-    protected void processWord(
-        byte[]  in,
-        int     inOff)
-    {
-        X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8)
-            | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); 
-
-        if (xOff == 16)
-        {
-            processBlock();
-        }
-    }
-
-    protected void processLength(
-        long    bitLength)
-    {
-        if (xOff > 14)
-        {
-            processBlock();
-        }
-
-        X[14] = (int)(bitLength & 0xffffffff);
-        X[15] = (int)(bitLength >>> 32);
-    }
-
-    private void unpackWord(
-        int     word,
-        byte[]  out,
-        int     outOff)
-    {
-        out[outOff]     = (byte)word;
-        out[outOff + 1] = (byte)(word >>> 8);
-        out[outOff + 2] = (byte)(word >>> 16);
-        out[outOff + 3] = (byte)(word >>> 24);
-    }
-
-    public void doFinal(
-        byte[]  out,
-        int     outOff)
-    {
-        finish();
-
-        unpackWord(H1, out, outOff);
-        unpackWord(H2, out, outOff + 4);
-        unpackWord(H3, out, outOff + 8);
-        unpackWord(H4, out, outOff + 12);
-
-        reset();
-    }
-
-    /**
-     * reset the chaining variables to the IV values.
-     */
-    public void reset()
-    {
-        super.reset();
-
-        H1 = 0x67452301;
-        H2 = 0xefcdab89;
-        H3 = 0x98badcfe;
-        H4 = 0x10325476;
-
-        xOff = 0;
-
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-
-    /*
-     * rotate int x left n bits.
-     */
-    private int rotateLeft(
-        int x,
-        int n)
-    {
-        return (x << n) | (x >>> (32 - n));
-    }
-
-    /*
-     * F, G, H and I are the basic MD5 functions.
-     */
-    private int F(
-        int u,
-        int v,
-        int w)
-    {
-        return (u & v) | (~u & w);
-    }
-
-    private int G(
-        int u,
-        int v,
-        int w)
-    {
-        return (u & w) | (v & ~w);
-    }
-
-    private int H(
-        int u,
-        int v,
-        int w)
-    {
-        return u ^ v ^ w;
-    }
-
-    private int K(
-        int u,
-        int v,
-        int w)
-    {
-        return v ^ (u | ~w);
-    }
-
-    protected void processBlock()
-    {
-        int a = H1;
-        int b = H2;
-        int c = H3;
-        int d = H4;
-
-        //
-        // Round 1 - F cycle, 16 times.
-        //
-        a = rotateLeft((a + F(b, c, d) + X[ 0] + 0xd76aa478), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[ 1] + 0xe8c7b756), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[ 2] + 0x242070db), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[ 3] + 0xc1bdceee), 22) + c;
-        a = rotateLeft((a + F(b, c, d) + X[ 4] + 0xf57c0faf), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[ 5] + 0x4787c62a), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[ 6] + 0xa8304613), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[ 7] + 0xfd469501), 22) + c;
-        a = rotateLeft((a + F(b, c, d) + X[ 8] + 0x698098d8), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[ 9] + 0x8b44f7af), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[10] + 0xffff5bb1), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[11] + 0x895cd7be), 22) + c;
-        a = rotateLeft((a + F(b, c, d) + X[12] + 0x6b901122), 7) + b;
-        d = rotateLeft((d + F(a, b, c) + X[13] + 0xfd987193), 12) + a;
-        c = rotateLeft((c + F(d, a, b) + X[14] + 0xa679438e), 17) + d;
-        b = rotateLeft((b + F(c, d, a) + X[15] + 0x49b40821), 22) + c;
-
-        //
-        // Round 2 - G cycle, 16 times.
-        //
-        a = rotateLeft((a + G(b, c, d) + X[ 1] + 0xf61e2562), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[ 6] + 0xc040b340), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[11] + 0x265e5a51), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[ 0] + 0xe9b6c7aa), 20) + c;
-        a = rotateLeft((a + G(b, c, d) + X[ 5] + 0xd62f105d), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[10] + 0x02441453), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[15] + 0xd8a1e681), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[ 4] + 0xe7d3fbc8), 20) + c;
-        a = rotateLeft((a + G(b, c, d) + X[ 9] + 0x21e1cde6), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[14] + 0xc33707d6), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[ 3] + 0xf4d50d87), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[ 8] + 0x455a14ed), 20) + c;
-        a = rotateLeft((a + G(b, c, d) + X[13] + 0xa9e3e905), 5) + b;
-        d = rotateLeft((d + G(a, b, c) + X[ 2] + 0xfcefa3f8), 9) + a;
-        c = rotateLeft((c + G(d, a, b) + X[ 7] + 0x676f02d9), 14) + d;
-        b = rotateLeft((b + G(c, d, a) + X[12] + 0x8d2a4c8a), 20) + c;
-
-        //
-        // Round 3 - H cycle, 16 times.
-        //
-        a = rotateLeft((a + H(b, c, d) + X[ 5] + 0xfffa3942), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[ 8] + 0x8771f681), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[11] + 0x6d9d6122), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[14] + 0xfde5380c), 23) + c;
-        a = rotateLeft((a + H(b, c, d) + X[ 1] + 0xa4beea44), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[ 4] + 0x4bdecfa9), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[ 7] + 0xf6bb4b60), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[10] + 0xbebfbc70), 23) + c;
-        a = rotateLeft((a + H(b, c, d) + X[13] + 0x289b7ec6), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[ 0] + 0xeaa127fa), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[ 3] + 0xd4ef3085), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[ 6] + 0x04881d05), 23) + c;
-        a = rotateLeft((a + H(b, c, d) + X[ 9] + 0xd9d4d039), 4) + b;
-        d = rotateLeft((d + H(a, b, c) + X[12] + 0xe6db99e5), 11) + a;
-        c = rotateLeft((c + H(d, a, b) + X[15] + 0x1fa27cf8), 16) + d;
-        b = rotateLeft((b + H(c, d, a) + X[ 2] + 0xc4ac5665), 23) + c;
-
-        //
-        // Round 4 - K cycle, 16 times.
-        //
-        a = rotateLeft((a + K(b, c, d) + X[ 0] + 0xf4292244), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[ 7] + 0x432aff97), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[14] + 0xab9423a7), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[ 5] + 0xfc93a039), 21) + c;
-        a = rotateLeft((a + K(b, c, d) + X[12] + 0x655b59c3), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[ 3] + 0x8f0ccc92), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[10] + 0xffeff47d), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[ 1] + 0x85845dd1), 21) + c;
-        a = rotateLeft((a + K(b, c, d) + X[ 8] + 0x6fa87e4f), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[15] + 0xfe2ce6e0), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[ 6] + 0xa3014314), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[13] + 0x4e0811a1), 21) + c;
-        a = rotateLeft((a + K(b, c, d) + X[ 4] + 0xf7537e82), 6) + b;
-        d = rotateLeft((d + K(a, b, c) + X[11] + 0xbd3af235), 10) + a;
-        c = rotateLeft((c + K(d, a, b) + X[ 2] + 0x2ad7d2bb), 15) + d;
-        b = rotateLeft((b + K(c, d, a) + X[ 9] + 0xeb86d391), 21) + c;
-
-        H1 += a;
-        H2 += b;
-        H3 += c;
-        H4 += d;
-
-        //
-        // reset the offset and clean out the word buffer.
-        //
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/PKCS1.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/PKCS1.java
deleted file mode 100644 (file)
index 054f538..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.ibex.crypto;
-import java.security.SecureRandom;
-
-public class PKCS1 {
-    private final RSA rsa;
-    private final SecureRandom srand;
-    public PKCS1(RSA rsa) { this(rsa,new SecureRandom()); }
-    public PKCS1(RSA rsa,SecureRandom srand) { this.rsa = rsa; this.srand = srand; }
-    
-    public byte[] encode(byte[] in) {
-        int size = rsa.getInputBlockSize();
-        if(in.length > size -  11) throw new IllegalArgumentException("message too long");
-        byte[] buf = new byte[size];
-        byte[] rand = new byte[size - in.length - 2];
-        srand.nextBytes(rand);
-        for(int i=0;i<rand.length;i++) while(rand[i] == 0) rand[i] = (byte)srand.nextInt();
-        int p=0;
-        buf[p++] = 0x02;
-        System.arraycopy(rand,0,buf,p,rand.length);
-        p+=rand.length;
-        buf[p++]  = 0x0;
-        System.arraycopy(in,0,buf,p,in.length);
-
-        return rsa.process(buf);
-    }
-    
-    public byte[] decode(byte[] in) throws Exn {
-        byte[] buf = rsa.process(in);
-        if(buf.length < 10) throw new Exn("Data too short");
-        if(buf[0] != 2 && buf[0] != 1) throw new Exn("Data not in correct format " + (buf[0]&0xff));
-        int start = 9;
-        while(start < buf.length && buf[start] != 0) start++;
-        if(start == buf.length) throw new Exn("No null separator");
-        start++;
-        byte[] ret = new byte[buf.length - start];
-        System.arraycopy(buf,start,ret,0,ret.length);
-        return ret;
-    }
-    
-    public static class Exn extends Exception { public Exn(String s) { super(s); } }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/RC4.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/RC4.java
deleted file mode 100644 (file)
index be6f821..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.ibex.crypto;
-
-
-public class RC4 {
-    private final byte[] s = new byte[256];
-    private int x,y;
-    
-    public RC4(byte[] k) {
-        for(int i=0;i<256;i++) s[i] = (byte)i;
-        for(int i=0,j=0;i<256;i++) {
-            j = (j + (s[i]&0xff) + (k[i%k.length]&0xff))&0xff;
-            byte tmp = s[i];
-            s[i] = s[j];
-            s[j] = tmp;
-        }
-    }
-    
-    public void process(byte[] in, int ip, byte[] out, int op, int len) {
-        int x = this.x;
-        int y = this.y;
-        byte[] s = this.s;
-        for(int i=0;i<len;i++) {
-            x = (x + 1) & 0xff;
-            y = (y + (s[x]&0xff)) & 0xff;
-            byte tmp = s[x];
-            s[x] = s[y];
-            s[y] = tmp;
-            int t = ((s[x]&0xff) + (s[y]&0xff))&0xff;
-            int k = s[t];
-            out[op+i] = (byte)((in[ip+i]&0xff)^k);
-        }
-        this.x = x;
-        this.y = y;
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/RSA.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/RSA.java
deleted file mode 100644 (file)
index bc15cef..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.ibex.crypto;
-import java.math.BigInteger;
-import java.util.*;
-
-public class RSA {
-    private final BigInteger pq;
-    private final BigInteger e;
-    private final boolean reverse;
-    
-    public RSA(BigInteger pq, BigInteger e, boolean reverse) {
-        this.pq = pq;
-        this.e = e;
-        this.reverse = reverse;
-    }
-    
-    public int getInputBlockSize() { return (pq.bitLength()+7) / 8 - (reverse ? 0 : 1); }
-    public int getOutputBlockSize() { return (pq.bitLength()+7) / 8 - (reverse ? 1 : 0); }
-    
-    public byte[] process(byte[] in) {
-        // output block is the same size as the modulus (rounded up)
-        int outSize = getOutputBlockSize();
-        BigInteger t = new BigInteger(1,in);
-        BigInteger c = t.modPow(e,pq);
-        byte[] cbytes = c.toByteArray();
-        if(cbytes.length > outSize || (reverse && cbytes[0] == 0)) {
-            if(cbytes[0] != 0) throw new RuntimeException("should never happen");
-            byte[] buf = new byte[outSize];
-            System.arraycopy(cbytes,1,buf,0,outSize);
-            return buf;
-        } else if(!reverse && cbytes.length < outSize) {
-            // output needs to be exactly outSize in length
-            byte[] buf = new byte[outSize];
-            System.arraycopy(cbytes,0,buf,outSize-cbytes.length,cbytes.length);
-            return buf;
-        } else {
-            return cbytes;
-        }
-    }
-
-    public static class PublicKey {
-        public final BigInteger modulus;
-        public final BigInteger exponent;
-        
-        public PublicKey(Object o) {
-            Vector seq = (Vector) o;
-            modulus = (BigInteger) seq.elementAt(0);
-            exponent = (BigInteger) seq.elementAt(1);
-        }
-    }
-
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/SHA1.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/SHA1.java
deleted file mode 100644 (file)
index ab1af7e..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-/**
- * implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349.
- *
- * It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5
- * is the "endienness" of the word processing!
- */
-public class SHA1
-    extends Digest
-{
-    private static final int    DIGEST_LENGTH = 20;
-
-    private int     H1, H2, H3, H4, H5;
-
-    private int[]   X = new int[80];
-    private int     xOff;
-
-    /**
-     * Standard constructor
-     */
-    public SHA1()
-    {
-        reset();
-    }
-
-    public int getDigestSize()
-    {
-        return DIGEST_LENGTH;
-    }
-
-    protected void processWord(
-        byte[]  in,
-        int     inOff)
-    {
-        X[xOff++] = ((in[inOff] & 0xff) << 24) | ((in[inOff + 1] & 0xff) << 16)
-                    | ((in[inOff + 2] & 0xff) << 8) | ((in[inOff + 3] & 0xff)); 
-
-        if (xOff == 16)
-        {
-            processBlock();
-        }
-    }
-
-    private void unpackWord(
-        int     word,
-        byte[]  out,
-        int     outOff)
-    {
-        out[outOff]     = (byte)(word >>> 24);
-        out[outOff + 1] = (byte)(word >>> 16);
-        out[outOff + 2] = (byte)(word >>> 8);
-        out[outOff + 3] = (byte)word;
-    }
-
-    protected void processLength(
-        long    bitLength)
-    {
-        if (xOff > 14)
-        {
-            processBlock();
-        }
-
-        X[14] = (int)(bitLength >>> 32);
-        X[15] = (int)(bitLength & 0xffffffff);
-    }
-
-    public void doFinal(
-        byte[]  out,
-        int     outOff)
-    {
-        finish();
-
-        unpackWord(H1, out, outOff);
-        unpackWord(H2, out, outOff + 4);
-        unpackWord(H3, out, outOff + 8);
-        unpackWord(H4, out, outOff + 12);
-        unpackWord(H5, out, outOff + 16);
-
-        reset();
-    }
-
-    /**
-     * reset the chaining variables
-     */
-    public void reset()
-    {
-        super.reset();
-
-        H1 = 0x67452301;
-        H2 = 0xefcdab89;
-        H3 = 0x98badcfe;
-        H4 = 0x10325476;
-        H5 = 0xc3d2e1f0;
-
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-
-    private int f(
-        int    u,
-        int    v,
-        int    w)
-    {
-        return ((u & v) | ((~u) & w));
-    }
-
-    private int h(
-        int    u,
-        int    v,
-        int    w)
-    {
-        return (u ^ v ^ w);
-    }
-
-    private int g(
-        int    u,
-        int    v,
-        int    w)
-    {
-        return ((u & v) | (u & w) | (v & w));
-    }
-
-    private int rotateLeft(
-        int    x,
-        int    n)
-    {
-        return (x << n) | (x >>> (32 - n));
-    }
-
-    protected void processBlock()
-    {
-        //
-        // expand 16 word block into 80 word block.
-        //
-        for (int i = 16; i <= 79; i++)
-        {
-            X[i] = rotateLeft((X[i - 3] ^ X[i - 8] ^ X[i - 14] ^ X[i - 16]), 1);
-        }
-
-        //
-        // set up working variables.
-        //
-        int     A = H1;
-        int     B = H2;
-        int     C = H3;
-        int     D = H4;
-        int     E = H5;
-
-        //
-        // round 1
-        //
-        for (int j = 0; j <= 19; j++)
-        {
-            int     t = rotateLeft(A, 5) + f(B, C, D) + E + X[j] + 0x5a827999;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        //
-        // round 2
-        //
-        for (int j = 20; j <= 39; j++)
-        {
-            int     t = rotateLeft(A, 5) + h(B, C, D) + E + X[j] + 0x6ed9eba1;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        //
-        // round 3
-        //
-        for (int j = 40; j <= 59; j++)
-        {
-            int     t = rotateLeft(A, 5) + g(B, C, D) + E + X[j] + 0x8f1bbcdc;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        //
-        // round 4
-        //
-        for (int j = 60; j <= 79; j++)
-        {
-            int     t = rotateLeft(A, 5) + h(B, C, D) + E + X[j] + 0xca62c1d6;
-
-            E = D;
-            D = C;
-            C = rotateLeft(B, 30);
-            B = A;
-            A = t;
-        }
-
-        H1 += A;
-        H2 += B;
-        H3 += C;
-        H4 += D;
-        H5 += E;
-
-        //
-        // reset the offset and clean out the word buffer.
-        //
-        xOff = 0;
-        for (int i = 0; i != X.length; i++)
-        {
-            X[i] = 0;
-        }
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/crypto/X509.java b/upstream/org.ibex.crypto/src/org/ibex/crypto/X509.java
deleted file mode 100644 (file)
index 09db7be..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * com.brian_web.x509.* - By Brian Alliet
- * Copyright (C) 2004 Brian Alliet
- * 
- * Based on Bouncy Castle by The Legion Of The Bouncy Castle
- * Copyright (c) 2000 The Legion Of The Bouncy Castle 
- * (http://www.bouncycastle.org)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a 
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation 
- * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- * and/or sell copies of the Software, and to permit persons to whom the 
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDER.S BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- * DEALINGS IN THE SOFTWARE.
- */
-
-package org.ibex.crypto;
-
-import java.io.*;
-import java.util.*;
-
-public class X509 {
-    public static class Certificate {
-        public static final String RSA_ENCRYPTION           = "1.2.840.113549.1.1.1";
-        public static final String MD2_WITH_RSA_ENCRYPTION  = "1.2.840.113549.1.1.2";
-        public static final String MD4_WITH_RSA_ENCRYPTION  = "1.2.840.113549.1.1.3";
-        public static final String MD5_WITH_RSA_ENCRYPTION  = "1.2.840.113549.1.1.4";
-        public static final String SHA1_WITH_RSA_ENCRYPTION = "1.2.840.113549.1.1.5";
-    
-        public static final String BASIC_CONSTRAINTS = "2.5.29.19";
-    
-        private final byte[] certBytes;
-        private final byte[] tbsCertBytes;
-    
-        public final Number version;    
-        public final Number serialNo;
-        public final X509.Name issuer;
-        public final Date startDate;
-        public final Date endDate;
-        public final X509.Name subject;
-    
-        public final AlgorithmIdentifier publicKeyAlgorithm;
-        public final DER.BitString publicKey;
-    
-        public final Object issuerUniqueID;
-        public final Object subjectUniqueID;
-    
-        public final Vector extensions;
-    
-        public final DER.BitString signature;
-        public final AlgorithmIdentifier signatureAlgorithm;
-    
-        public final BC basicContraints;
-
-    
-        public Certificate(InputStream is) throws IOException {
-            int i;
-            RecordingInputStream certIS = new RecordingInputStream(is);
-            DER.InputStream certSequence = DER.InputStream.New(certIS).getSequenceStream();
-            RecordingInputStream tbsCertIS = new RecordingInputStream(certSequence);
-        
-            try {
-                Vector tbsSequence = (Vector) DER.InputStream.New(tbsCertIS).readObject();
-                tbsCertBytes = tbsCertIS.getBytes();
-                signatureAlgorithm = new AlgorithmIdentifier(certSequence.readObject());
-                signature = (DER.BitString) certSequence.readObject();
-            
-                i=0;
-                if(tbsSequence.elementAt(i) instanceof DER.TaggedObject)
-                    version = (Number)((DER.TaggedObject)tbsSequence.elementAt(i++)).object;
-                else
-                    version = new Integer(0);
-            
-                serialNo = (Number) tbsSequence.elementAt(i++);
-                AlgorithmIdentifier signatureAlgorithm2 = new AlgorithmIdentifier(tbsSequence.elementAt(i++));
-                if(!signatureAlgorithm2.equals(signatureAlgorithm))
-                    throw new DER.Exception("AlgoritmIdentifier mismatch " + signatureAlgorithm + " vs " + signatureAlgorithm2);
-                issuer = new X509.Name(tbsSequence.elementAt(i++));
-            
-                Vector validity = (Vector) tbsSequence.elementAt(i++);
-                startDate = (Date) validity.elementAt(0);
-                endDate = (Date) validity.elementAt(1);
-            
-                subject = new X509.Name(tbsSequence.elementAt(i++));
-            
-                Vector publicKeyInfo = (Vector) tbsSequence.elementAt(i++);
-                publicKeyAlgorithm = new AlgorithmIdentifier(publicKeyInfo.elementAt(0));
-                publicKey = (DER.BitString) publicKeyInfo.elementAt(1);
-          
-                Object issuerUniqueID_=null,subjectUniqueID_=null;
-                Vector extensions_=null;
-                for(;i < tbsSequence.size();i++) {
-                    DER.TaggedObject to = (DER.TaggedObject) tbsSequence.elementAt(i);
-                    switch(to.tag) {
-                        case 1: issuerUniqueID_ = to.object; break;
-                        case 2: subjectUniqueID_ = to.object; break;
-                        case 3: extensions_ = (Vector) to.object; break;
-                    }
-                }
-                issuerUniqueID = issuerUniqueID_;
-                subjectUniqueID = subjectUniqueID_;
-                extensions = extensions_;
-            
-                BC bc = null;
-            
-                if(extensions != null) {
-                    for(Enumeration e = extensions.elements(); e.hasMoreElements(); ) {
-                        Vector extension = (Vector) e.nextElement();
-                        String oid = (String) extension.elementAt(0);
-                        byte[] data = (byte[]) extension.elementAt(extension.size()-1);
-                        if(oid.equals(BASIC_CONSTRAINTS))
-                            bc = new BC(DER.InputStream.New(new ByteArrayInputStream(data)).readObject());
-                    }
-                }
-                basicContraints = bc;
-            } catch(RuntimeException e) {
-                e.printStackTrace();
-                throw new DER.Exception("Invalid x509 Certificate");
-            }
-            certBytes = certIS.getBytes();
-        }
-    
-    
-        public String getSubjectField(String fieldID) { return subject.get(fieldID); }
-        public String getCN() { return getSubjectField(X509.Name.CN); }
-    
-        public boolean isValid() {
-            Date now = new Date();
-            return !now.after(endDate) && !now.before(startDate);
-        }
-    
-        public RSA.PublicKey getRSAPublicKey() throws DER.Exception {
-            if(!RSA_ENCRYPTION.equals(publicKeyAlgorithm.id)) throw new DER.Exception("This isn't an RSA public key");
-            try {
-                return new RSA.PublicKey(DER.InputStream.New(new ByteArrayInputStream(publicKey.data)).readObject());
-            } catch(IOException e) {
-                throw new DER.Exception(e.getMessage());
-            } catch(RuntimeException e) {
-                throw new DER.Exception("Invalid RSA Public Key " + e.getMessage());
-            }
-        }
-    
-        public boolean isSignedBy(Certificate signer) throws DER.Exception {
-            return isSignedWith(signer.getRSAPublicKey());
-        }
-        public boolean isSignedWith(RSA.PublicKey rsapk) throws DER.Exception {
-            try {
-                Digest digest;
-                if(signatureAlgorithm.id.equals(MD5_WITH_RSA_ENCRYPTION)) digest = new MD5();
-                else if(signatureAlgorithm.id.equals(SHA1_WITH_RSA_ENCRYPTION)) digest = new SHA1();
-                else if(signatureAlgorithm.id.equals(MD2_WITH_RSA_ENCRYPTION)) digest = new MD2();
-                else throw new DER.Exception("Unknown signing algorithm: " + signatureAlgorithm.id);
-                        
-                PKCS1 pkcs1 = new PKCS1(new RSA(rsapk.modulus,rsapk.exponent,true));
-                byte[] d = pkcs1.decode(signature.data);
-            
-                Vector v = (Vector) DER.InputStream.New(new ByteArrayInputStream(d)).readObject();
-                byte[] signedDigest = (byte[]) v.elementAt(1);
-                            
-                if(signedDigest.length != digest.getDigestSize()) return false;
-            
-                digest.update(tbsCertBytes,0,tbsCertBytes.length);
-                byte[] ourDigest = new byte[digest.getDigestSize()];
-                digest.doFinal(ourDigest,0);
-            
-                for(int i=0;i<digest.getDigestSize();i++) if(ourDigest[i] != signedDigest[i]) return false;
-                return true;
-            }
-            catch(RuntimeException e) { e.printStackTrace(); return false; }
-            catch(PKCS1.Exn e) { e.printStackTrace(); return false; }
-            catch(IOException e) { e.printStackTrace(); return false; }
-        }
-    
-        public byte[] getMD5Fingerprint() { return getFingerprint(new MD5()); }
-        public byte[] getSHA1Fingerprint() { return getFingerprint(new SHA1()); }
-        public byte[] getFingerprint(Digest h) {
-            h.update(certBytes,0,certBytes.length);
-            byte[] digest = new byte[h.getDigestSize()];
-            h.doFinal(digest,0);
-            return digest;
-        }
-    
-        private class RecordingInputStream extends FilterInputStream {
-            public ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            private boolean on = true;
-            public void on() { on = true; }
-            public void off() { on = false; }
-            public RecordingInputStream(InputStream is) { super(is); }
-            public int read() throws IOException {
-                int n = super.read();
-                if(n != -1 && on) baos.write(n);
-                return n;
-            }
-            public int read(byte[] buf, int off, int len) throws IOException {
-                int n = super.read(buf,off,len);
-                if(n != -1 && on) baos.write(buf,off,n);
-                return n;
-            }
-            public byte[] getBytes() { return baos.toByteArray(); }
-        }
-    
-        public static class BC {
-            public final boolean isCA;
-            public final Number pathLenConstraint;
-            BC(Object o) {
-                Vector seq = (Vector) o;
-                isCA = seq.size() > 0 ? ((Boolean) seq.elementAt(0)).booleanValue() : false;
-                pathLenConstraint = seq.size() > 1 ? (Number) seq.elementAt(1) : null;
-            }
-        }
-    
-        public static class AlgorithmIdentifier {
-            public final String id;
-            public final Object parameters;
-        
-            AlgorithmIdentifier(Object o) {
-                Vector seq = (Vector) o;
-                id = (String) seq.elementAt(0);
-                parameters = seq.elementAt(1);
-            }
-            public boolean equals(Object o_) {
-                if(o_ == this) return true;
-                if(!(o_ instanceof AlgorithmIdentifier)) return false;
-                AlgorithmIdentifier o = (AlgorithmIdentifier) o_;
-                return o.id.equals(id) && o.parameters.equals(parameters);
-            }
-            public int hashCode() { return id.hashCode() ^ parameters.hashCode(); }
-        }
-    
-        /*public static void main(String[] args) throws Exception {
-          Certificate cert = new Certificate(new FileInputStream(args[0]));
-          System.err.println("CN: " + cert.getCN());
-          System.err.println("Subject: " + cert.subject);
-          System.err.println("Issuer: " + cert.issuer);
-          System.err.println("Start Date: " + cert.startDate);
-          System.err.println("End Date: " + cert.endDate);
-          System.err.println("SHA1 Fingerprint: " + prettyBytes(cert.getSHA1Fingerprint()));
-          RSA.PublicKey key = cert.getRSA.PublicKey();
-          System.err.println("Modulus: " + prettyBytes(key.modulus.toByteArray()));
-          System.err.println("Exponent: " + key.exponent);
-          System.err.println("Signature: " + prettyBytes(cert.signature.data));
-          }
-    
-          public static String prettyBytes(byte[] fp) {
-          StringBuffer sb = new StringBuffer(fp.length*3);
-          for(int i=0;i<fp.length;i++) {
-          if(i>0) sb.append(":");
-          sb.append("0123456789abcdef".charAt((fp[i] & 0xf0) >>> 4));
-          sb.append("0123456789abcdef".charAt((fp[i] & 0x0f) >>> 0));
-          }
-          return sb.toString();
-          }*/
-    }
-
-    public static class Name {
-        // Some common OIDs
-        public static final String C = "2.5.4.6";
-        public static final String O = "2.5.4.10";
-        public static final String T = "2.5.4.12";
-        public static final String SN = "2.5.4.5";
-        public static final String L = "2.5.4.7";
-        public static final String ST = "2.5.4.8";
-        public static final String OU = "2.5.4.11";
-        public static final String CN = "2.5.4.3";
-        public static final String E = "1.2.840.113549.1.9.1";
-    
-        private final Vector keys = new Vector();
-        private final Vector values = new Vector();
-    
-        public Name(Object seq_) throws DER.Exception {
-            try {
-                Vector seq = (Vector) seq_;
-                for(Enumeration e = seq.elements();e.hasMoreElements();) {
-                    Vector component = (Vector) ((Vector)e.nextElement()).elementAt(0);
-                    keys.addElement(component.elementAt(0));
-                    values.addElement(component.elementAt(1));
-                }
-            } catch(RuntimeException e) {
-                e.printStackTrace();
-                throw new DER.Exception("Invalid Name " + e.toString());
-            }
-        }
-    
-        public boolean equals(Object o_) {
-            if(o_ instanceof String) return toString().equals(o_);
-            if(!(o_ instanceof Name)) return false;
-            Name o = (Name) o_;
-            if(keys.size() != o.keys.size()) return false;
-            int size = keys.size();
-            for(int i=0;i<size;i++) {
-                String oid = (String) keys.elementAt(i);
-                String oid2 = (String) o.keys.elementAt(i);
-                if(!oid.equals(oid2)) return false;
-            
-                String val1 = (String) values.elementAt(i);
-                String val2 = (String) o.values.elementAt(i);
-                if(val1.equals(val2)) continue;
-            
-                val1 = val1.trim().toLowerCase();
-                val2 = val2.trim().toLowerCase();
-                if(val1.equals(val2)) continue;
-            
-                val1 = removeExtraSpaces(val1);
-                val2 = removeExtraSpaces(val2);
-                if(val1.equals(val2)) continue;
-            
-                return false;
-            }
-            return true;
-        }
-    
-        public int hashCode() { return keys.hashCode() ^ values.hashCode(); }
-    
-        public String get(String fieldID) {
-            int i = keys.indexOf(fieldID);
-            return i == -1 ? null : (String)values.elementAt(i);
-        }
-    
-        public String[] getOIDs() {
-            String[] ret = new String[keys.size()];
-            keys.copyInto(ret);
-            return ret;
-        }
-    
-        public String[] getValues() {
-            String[] ret = new String[values.size()];
-            values.copyInto(ret);
-            return ret;
-        }
-    
-        private static String removeExtraSpaces(String s) {
-            if(s.indexOf(' ') == -1) return s;
-            StringBuffer sb = new StringBuffer(s.length());
-            int l = s.length();
-            boolean inWhitespace = false;
-            for(int i=0;i<l;i++) {
-                if(s.charAt(i) == ' ') {
-                    if(inWhitespace) continue;
-                    inWhitespace = true;
-                } else if(inWhitespace) {
-                    inWhitespace = false;
-                }
-                sb.append(s.charAt(i));
-            }
-            return sb.toString();
-        }
-    
-        private final static Hashtable oidMap = new Hashtable();
-        static {
-            oidMap.put(Name.C,"C");
-            oidMap.put(Name.O,"O");
-            oidMap.put(Name.T,"T");
-            oidMap.put(Name.SN,"SN");
-            oidMap.put(Name.L,"L");
-            oidMap.put(Name.ST,"ST");
-            oidMap.put(Name.OU,"OU");
-            oidMap.put(Name.CN,"CN");
-            oidMap.put(Name.E,"E");
-        }
-    
-        public String toString() {
-            StringBuffer sb = new StringBuffer();
-            int size = keys.size();
-            for(int i=0;i<size;i++) {
-                if(sb.length() > 0) sb.append(",");
-                String fieldID = (String) keys.elementAt(i);
-                String fieldName = (String) oidMap.get(fieldID);
-                sb.append(fieldName != null ? fieldName : fieldID).append("=").append(values.elementAt(i));
-            }
-            return sb.toString();
-        }
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/net/SSL.java b/upstream/org.ibex.crypto/src/org/ibex/net/SSL.java
deleted file mode 100644 (file)
index 04519cd..0000000
+++ /dev/null
@@ -1,1010 +0,0 @@
-/*
- * org.ibex.net.SSL - By Brian Alliet
- * Copyright (C) 2004 Brian Alliet
- * 
- * Based on TinySSL by Adam Megacz
- * Copyright (C) 2003 Adam Megacz <adam@xwt.org> all rights reserved.
- * 
- * You may modify, copy, and redistribute this code under the terms of
- * the GNU Lesser General Public License version 2.1, with the exception
- * of the portion of clause 6a after the semicolon (aka the "obnoxious
- * relink clause")
- */
-
-package org.ibex.net;
-
-import org.ibex.crypto.*;
-import java.security.SecureRandom;
-
-import java.net.Socket;
-import java.net.SocketException;
-
-import java.io.*;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Random;
-import java.util.Vector;
-
-// FEATURE: Server socket
-
-public class SSL extends Socket {
-    private String hostname;
-    
-    private int negotiated;
-    
-    private boolean tls = true;
-    private boolean sha;
-    
-    private final DataInputStream rawIS;
-    private final DataOutputStream rawOS;
-    
-    private final InputStream sslIS;
-    private final OutputStream sslOS;
-    
-    private byte[] sessionID;
-
-    private Digest clientWriteMACDigest;        
-    private Digest serverWriteMACDigest;        
-    private byte[] masterSecret;
-    
-    private RC4 writeRC4;
-    private RC4 readRC4;
-    
-    private long serverSequenceNumber;
-    private long clientSequenceNumber;
-    
-    private int warnings;
-    private boolean closed;
-    
-    // These are only used during negotiation
-    private byte[] serverRandom;
-    private byte[] clientRandom;
-    private byte[] preMasterSecret;
-    
-    // Buffers
-    private byte[] mac;
-    
-    private byte[] pending = new byte[16384];
-    private int pendingStart;
-    private int pendingLength;
-
-    private byte[] sendRecordBuf = new byte[16384];
-    
-    private int handshakeDataStart;
-    private int handshakeDataLength;
-    private byte[] readRecordBuf = new byte[16384+20];   // 20 == sizeof(sha1 hash)
-    private byte[] readRecordScratch = new byte[16384+20];
-    
-    private ByteArrayOutputStream handshakesBuffer;
-    
-    // End Buffers
-    
-    // Static variables
-    private final static byte[] pad1 = new byte[48];
-    private final static byte[] pad2 = new byte[48];
-    private final static byte[] pad1_sha = new byte[40];
-    private final static byte[] pad2_sha = new byte[40];
-    
-    static {
-        for(int i=0; i<pad1.length; i++) pad1[i] = (byte)0x36;
-        for(int i=0; i<pad2.length; i++) pad2[i] = (byte)0x5C;
-        for(int i=0; i<pad1_sha.length; i++) pad1_sha[i] = (byte)0x36;
-        for(int i=0; i<pad2_sha.length; i++) pad2_sha[i] = (byte)0x5C;
-    }
-    
-    private final static Hashtable caKeys = new Hashtable();
-    private static VerifyCallback verifyCallback;
-    
-    //
-    // Constructors
-    //
-    public SSL(String host) throws IOException { this(host,443); }
-    public SSL(String host, int port) throws IOException { this(host,port,true); }
-    public SSL(String host, int port, boolean negotiate) throws IOException { this(host,port,negotiate,null); }
-    public SSL(String host, int port, State state) throws IOException { this(host,port,true,state); }
-    public SSL(String host, int port, boolean negotiate, State state) throws IOException {
-        super(host,port);
-        hostname = host;
-        rawIS = new DataInputStream(new BufferedInputStream(super.getInputStream()));
-        rawOS = new DataOutputStream(new BufferedOutputStream(super.getOutputStream()));
-        sslIS = new SSLInputStream();
-        sslOS = new SSLOutputStream();
-        if(negotiate) negotiate(state);
-    }
-
-    public synchronized void setTLS(boolean b) { if(negotiated!=0) throw new IllegalStateException("already negotiated"); tls = b; }
-    
-    public void negotiate() throws IOException { negotiate(null); }
-    public synchronized void negotiate(State state) throws IOException {
-        if(negotiated != 0) throw new IllegalStateException("already negotiated");
-        
-        handshakesBuffer = new ByteArrayOutputStream();
-        
-        try {
-            sendClientHello(state != null ? state.sessionID : null);
-            flush();
-            debug("sent ClientHello (" + (tls?"TLSv1.0":"SSLv3.0")+")");
-            
-            receiveServerHello();
-            debug("got ServerHello (" + (tls?"TLSv1.0":"SSLv3.0")+")");
-            
-            boolean resume = 
-                state != null && sessionID.length == state.sessionID.length && 
-                eq(state.sessionID,0,sessionID,0,sessionID.length);
-            
-            if(resume) 
-                negotiateResume(state);
-            else
-                negotiateNew();
-            
-            // we're done with these now
-            clientRandom = serverRandom = preMasterSecret = null;
-            handshakesBuffer = null;
-            
-            log("Negotiation with " + hostname + " complete (" + (tls?"TLSv1.0":"SSLv3.0")+")");
-        } finally {
-            if((negotiated & 3) != 3) {
-                negotiated = 0;
-                try { super.close(); } catch(IOException e) { /* ignore */ }
-                closed = true;
-            }
-        }
-    }
-    
-    private void negotiateResume(State state) throws IOException {
-        masterSecret = state.masterSecret;
-        
-        initCrypto();
-        log("initializec crypto");
-        
-        receiveChangeCipherSpec();
-        debug("Received ChangeCipherSpec");
-        negotiated |= 2;
-        receieveFinished();
-        debug("Received Finished");
-        
-        sendChangeCipherSpec();
-        debug("Sent ChangeCipherSpec");
-        negotiated |= 1;
-        sendFinished();
-        debug("Sent Finished");
-    }
-    
-    private void negotiateNew() throws IOException {
-        X509.Certificate[] certs = receiveServerCertificates();
-        debug("got Certificate");
-        
-        boolean gotCertificateRequest = false;
-        OUTER: for(;;) {
-            byte[] buf = readHandshake();
-            switch(buf[0]) {
-            case 14: // ServerHelloDone
-                if(buf.length != 4) throw new Exn("ServerHelloDone contained trailing garbage");
-                debug("got ServerHelloDone");
-                break OUTER;
-            case 13: // CertificateRequest
-                debug("Got a CertificateRequest message but we don't suport client certificates");
-                gotCertificateRequest = true;
-                break;
-            default:
-                throw new Exn("unknown handshake type " + buf[0]);
-            }
-        }
-        
-        if(gotCertificateRequest)
-            sendHandshake((byte)11,new byte[3]); // send empty cert list
-        
-        try {
-            if(!hostname.equalsIgnoreCase(certs[0].getCN()))
-                throw new Exn("Certificate is for " + certs[0].getCN() + " not " + hostname);
-            verifyCerts(certs);
-        } catch(Exn e) {
-            if(verifyCallback == null) throw e;
-            synchronized(SSL.class) {
-                if(!verifyCallback.checkCerts(certs,hostname,e)) throw e;
-            }
-        }
-        
-        computeMasterSecret();
-        
-        sendClientKeyExchange(certs[0]);
-        debug("sent ClientKeyExchange");
-        
-        initCrypto();
-        
-        sendChangeCipherSpec();
-        debug("sent ChangeCipherSpec");
-        negotiated |= 1;
-        sendFinished();
-        debug("sent Finished");
-        flush();
-        
-        receiveChangeCipherSpec();
-        debug("got ChangeCipherSpec");
-        negotiated |= 2;
-        receieveFinished();
-        debug("got Finished");
-    }
-    
-    public State getSessionState() {
-        if((negotiated&3)!=3 || !closed || warnings != 0) return null;
-        return new State(sessionID,masterSecret);
-    }
-    public boolean isActive() { return !closed; }
-    public boolean isNegotiated() { return (negotiated&3) == 3; }
-    
-    private void sendClientHello(byte[] sessionID) throws IOException {
-        if(sessionID != null && sessionID.length > 256) throw new IllegalArgumentException("sessionID");
-        // 2 = version, 32 = randomvalue, 1 = sessionID size, 2 = cipher list size, 4 = the two ciphers,
-        // 2 = compression length/no compression
-        int p = 0;
-        byte[] buf = new byte[2+32+1+(sessionID == null ? 0 : sessionID.length)+2+2+4];
-        buf[p++] = 0x03; // major version
-        buf[p++] = tls ? (byte)0x01 : (byte)0x00;
-        
-        clientRandom = new byte[32];
-        int now = (int)(System.currentTimeMillis() / 1000L);
-        new Random().nextBytes(clientRandom);
-        clientRandom[0] = (byte)(now>>>24);
-        clientRandom[1] = (byte)(now>>>16);
-        clientRandom[2] = (byte)(now>>>8);
-        clientRandom[3] = (byte)(now>>>0);
-        System.arraycopy(clientRandom,0,buf,p,32);
-        p += 32;
-        
-        buf[p++] = sessionID != null ? (byte)sessionID.length : 0;
-        if(sessionID != null && sessionID.length != 0) System.arraycopy(sessionID,0,buf,p,sessionID.length);
-        p += sessionID != null ? sessionID.length : 0;
-        buf[p++] = 0x00; // 4 bytes of ciphers
-        buf[p++] = 0x04;
-        buf[p++] = 0x00; // SSL_RSA_WITH_RC4_128_SHA
-        buf[p++] = 0x05;
-        buf[p++] = 0x00; // SSL_RSA_WITH_RC4_128_MD5
-        buf[p++] = 0x04; 
-        
-        buf[p++] = 0x01;
-        buf[p++] = 0x00;
-                
-        sendHandshake((byte)1,buf);
-        flush();
-    }
-    
-    private void receiveServerHello() throws IOException {
-        // ServerHello
-        byte[] buf = readHandshake();
-        if(buf[0] != 2) throw new Exn("expected a ServerHello message");
-        
-        if(buf.length < 6 + 32 + 1) throw new Exn("ServerHello too small");
-        if(buf.length < 6 + 32 + 1 + buf[6+32] + 3) throw new Exn("ServerHello too small " + buf.length+" "+buf[6+32]); 
-        
-        if(buf[4] != 0x03 || !(buf[5]==0x00 || buf[5]==0x01)) throw new Exn("server wants to use version " + buf[4] + "." + buf[5]);
-        tls = buf[5] == 0x01;
-        int p = 6;
-        serverRandom = new byte[32];
-        System.arraycopy(buf,p,serverRandom,0,32);
-        p += 32;
-        sessionID = new byte[buf[p++]&0xff];
-        if(sessionID.length != 0) System.arraycopy(buf,p,sessionID,0,sessionID.length);
-        p += sessionID.length;
-        int cipher = ((buf[p]&0xff)<<8) | (buf[p+1]&0xff);
-        p += 2;
-        switch(cipher) {
-            case 0x0004: sha = false; debug("Using SSL_RSA_WITH_RC4_128_MD5"); break;
-            case 0x0005: sha = true;  debug("Using SSL_RSA_WITH_RC4_128_SHA"); break;
-            default: throw new Exn("Unsupported cipher " + cipher);
-        }
-        mac = new byte[sha ? 20 : 16];
-        if(buf[p++] != 0x0) throw new Exn("unsupported compression " + buf[p-1]);
-    }
-    
-    private X509.Certificate[] receiveServerCertificates() throws IOException {
-        byte[] buf = readHandshake();
-        if(buf[0] != 11) throw new Exn("expected a Certificate message");
-        if((((buf[4]&0xff)<<16)|((buf[5]&0xff)<<8)|((buf[6]&0xff)<<0)) != buf.length-7) throw new Exn("size mismatch in Certificate message");
-        int p = 7;
-        int count = 0;
-        
-        for(int i=p;i<buf.length-3;i+=((buf[p+0]&0xff)<<16)|((buf[p+1]&0xff)<<8)|((buf[p+2]&0xff)<<0)) count++;
-        if(count == 0) throw new Exn("server didn't provide any certificates");
-        X509.Certificate[] certs = new X509.Certificate[count];
-        count = 0;
-        while(p < buf.length) {
-            int len = ((buf[p+0]&0xff)<<16)|((buf[p+1]&0xff)<<8)|((buf[p+2]&0xff)<<0);
-            p += 3;
-            if(p + len > buf.length) throw new Exn("Certificate message cut short");
-            certs[count++] = new X509.Certificate(new ByteArrayInputStream(buf,p,len));
-            p += len;
-        }
-        return certs;
-    }
-    
-    private void sendClientKeyExchange(X509.Certificate serverCert) throws IOException {
-        byte[] encryptedPreMasterSecret;
-        RSA.PublicKey pks = serverCert.getRSAPublicKey();
-        PKCS1 pkcs1 = new PKCS1(new RSA(pks.modulus,pks.exponent,false),random);
-        encryptedPreMasterSecret = pkcs1.encode(preMasterSecret);
-        byte[] buf;
-        if(tls) {
-            buf = new byte[encryptedPreMasterSecret.length+2];
-            buf[0] = (byte) (encryptedPreMasterSecret.length>>>8);
-            buf[1] = (byte) (encryptedPreMasterSecret.length>>>0);
-            System.arraycopy(encryptedPreMasterSecret,0,buf,2,encryptedPreMasterSecret.length);
-        } else {
-            // ugh... netscape didn't send the length bytes and now every SSLv3 implementation
-            // must implement this bug
-            buf = encryptedPreMasterSecret;
-        }
-        sendHandshake((byte)16,buf);
-    }
-    
-    private void sendChangeCipherSpec() throws IOException {
-        sendRecord((byte)20,new byte[] { 0x01 });
-    }
-    
-    private void computeMasterSecret() {
-        preMasterSecret = new byte[48];
-        preMasterSecret[0] = 0x03; // version_high
-        preMasterSecret[1] = tls ? (byte) 0x01 : (byte) 0x00; // version_low
-        randomBytes(preMasterSecret,2,46);
-        
-        if(tls) {
-            masterSecret = tlsPRF(48,preMasterSecret,getBytes("master secret"),concat(clientRandom,serverRandom));
-        } else {
-            masterSecret = concat(new byte[][] {
-                    md5(new byte[][] { preMasterSecret,
-                            sha1(new byte[][] { new byte[] { 0x41 }, preMasterSecret, clientRandom, serverRandom })}),
-                            md5(new byte[][] { preMasterSecret,
-                                    sha1(new byte[][] { new byte[] { 0x42, 0x42 }, preMasterSecret, clientRandom, serverRandom })}),
-                                    md5(new byte[][] { preMasterSecret,
-                                            sha1(new byte[][] { new byte[] { 0x43, 0x43, 0x43 }, preMasterSecret, clientRandom, serverRandom })})
-            } );    
-        }
-    }
-    
-    public void initCrypto() {
-        byte[] keyMaterial;
-        
-        if(tls) {
-            keyMaterial = tlsPRF(
-                    (mac.length + 16 + 0)*2, // MAC len + key len + iv len
-                    masterSecret,
-                    getBytes("key expansion"),
-                    concat(serverRandom,clientRandom)
-            );
-        } else {
-            keyMaterial = new byte[] { };
-            for(int i=0; keyMaterial.length < 72; i++) {
-                byte[] crap = new byte[i + 1];
-                for(int j=0; j<crap.length; j++) crap[j] = (byte)(((byte)0x41) + ((byte)i));
-                keyMaterial = concat(new byte[][] { keyMaterial,
-                        md5(new byte[][] { masterSecret,
-                                sha1(new byte[][] { crap, masterSecret, serverRandom, clientRandom }) }) });
-            }            
-        }
-
-        byte[] clientWriteMACSecret = new byte[mac.length];
-        byte[] serverWriteMACSecret = new byte[mac.length];
-        byte[] clientWriteKey = new byte[16];
-        byte[] serverWriteKey = new byte[16];
-        
-        int p = 0;
-        System.arraycopy(keyMaterial, p, clientWriteMACSecret, 0, mac.length); p += mac.length;
-        System.arraycopy(keyMaterial, p, serverWriteMACSecret, 0, mac.length); p += mac.length;
-        System.arraycopy(keyMaterial, p, clientWriteKey, 0, 16); p += 16; 
-        System.arraycopy(keyMaterial, p, serverWriteKey, 0, 16); p += 16;
-        
-        Digest inner;
-        
-        writeRC4 = new RC4(clientWriteKey);
-        inner = sha ? (Digest)new SHA1() : (Digest)new MD5();
-        clientWriteMACDigest = tls ? (Digest) new HMAC(inner,clientWriteMACSecret) : (Digest)new SSLv3HMAC(inner,clientWriteMACSecret);
-        
-        readRC4 = new RC4(serverWriteKey);
-        inner = sha ? (Digest)new SHA1() : (Digest)new MD5();
-        serverWriteMACDigest = tls ? (Digest)new HMAC(inner,serverWriteMACSecret) : (Digest)new SSLv3HMAC(inner,serverWriteMACSecret);
-    }
-    
-    private void sendFinished() throws IOException {
-        byte[] handshakes = handshakesBuffer.toByteArray();
-        if(tls) {
-            sendHandshake((byte)20, tlsPRF(
-                    12,
-                    masterSecret,
-                    getBytes("client finished"),
-                    concat(md5(handshakes),sha1(handshakes))));
-            
-        } else {
-            sendHandshake((byte)20, concat(new byte[][] { 
-                    md5(new byte[][] { masterSecret, pad2, 
-                                       md5(new byte[][] { handshakes, new byte[] { (byte)0x43, (byte)0x4C, (byte)0x4E, (byte)0x54 },
-                                                          masterSecret, pad1 }) }),
-                    sha1(new byte[][] { masterSecret, pad2_sha,
-                                       sha1(new byte[][] { handshakes, new byte[] { (byte)0x43, (byte)0x4C, (byte)0x4E, (byte)0x54 },
-                                                          masterSecret, pad1_sha } ) })
-                }));
-        }
-    }
-        
-    private void receiveChangeCipherSpec() throws IOException {    
-        int size = readRecord((byte)20);
-        if(size == -1) throw new Exn("got eof when expecting a ChangeCipherSpec message");
-        if(size != 1 || readRecordBuf[0] != 0x01) throw new Exn("Invalid ChangeCipherSpec message");
-    }
-    
-    private void receieveFinished() throws IOException {
-        byte[] handshakes = handshakesBuffer.toByteArray();
-        byte[] buf = readHandshake();
-        if(buf[0] != 20) throw new Exn("expected a Finished message");
-        byte[] expected;
-        
-        if(tls) {
-            if(buf.length != 4 + 12) throw new Exn("Finished message too short");
-            expected = tlsPRF(
-                    12,masterSecret,
-                    getBytes("server finished"),
-                    concat(md5(handshakes),sha1(handshakes)));
-        } else {
-            if(buf.length != 4 + 16 +20) throw new Exn("Finished message too short");
-            expected = concat(new byte[][] {
-                    md5(new byte[][] { masterSecret, pad2,
-                            md5(new byte[][] { handshakes, new byte[] { (byte)0x53, (byte)0x52, (byte)0x56, (byte)0x52 },
-                                    masterSecret, pad1 }) }),
-                                    sha1(new byte[][] { masterSecret, pad2_sha,
-                                            sha1(new byte[][] { handshakes, new byte[] { (byte)0x53, (byte)0x52, (byte)0x56, (byte)0x52 },
-                                                    masterSecret, pad1_sha } ) } ) } );
-        }
-        if(!eq(expected,0,buf,4,expected.length)) throw new Exn("server finished message mismatch");
-    }
-    
-    private void flush() throws IOException { rawOS.flush(); }
-
-    private void sendHandshake(byte type, byte[] payload) throws IOException {
-        if(payload.length > (1<<24)) throw new IllegalArgumentException("payload.length");
-        byte[] buf = new byte[4+payload.length];
-        buf[0] = type;
-        buf[1] = (byte)(payload.length>>>16);
-        buf[2] = (byte)(payload.length>>>8);
-        buf[3] = (byte)(payload.length>>>0);
-        System.arraycopy(payload,0,buf,4,payload.length);
-        handshakesBuffer.write(buf);
-        sendRecord((byte)22,buf);
-    }
-    
-    private void sendRecord(byte proto, byte[] buf) throws IOException { sendRecord(proto,buf,0,buf.length); }
-    private void sendRecord(byte proto, byte[] payload, int off, int totalLen) throws IOException {
-        int macLength = (negotiated & 1) != 0 ? mac.length : 0;
-        while(totalLen > 0) {
-            int len = min(totalLen,16384-macLength);
-            rawOS.writeByte(proto);
-            rawOS.writeShort(tls ? 0x0301 : 0x0300);
-            if((negotiated & 1) != 0) {
-                computeMAC(proto,payload,off,len,clientWriteMACDigest,clientSequenceNumber);
-                // FEATURE: Encode in place
-                writeRC4.process(payload,off,sendRecordBuf,0,len);
-                writeRC4.process(mac,0,sendRecordBuf,len,macLength);
-                rawOS.writeShort(len + macLength);
-                rawOS.write(sendRecordBuf,0, len +macLength);
-                clientSequenceNumber++;
-            } else {
-                rawOS.writeShort(len);
-                rawOS.write(payload,off,len);
-            }
-            totalLen -= len;
-            off += len;
-        }
-    }
-    
-    private byte[] readHandshake() throws IOException {
-        if(handshakeDataLength == 0) {
-            handshakeDataStart = 0;
-            handshakeDataLength = readRecord((byte)22);
-            if(handshakeDataLength == -1) throw new Exn("got eof when expecting a handshake packet");
-        }
-        byte[] buf = readRecordBuf;
-        int len = ((buf[handshakeDataStart+1]&0xff)<<16)|((buf[handshakeDataStart+2]&0xff)<<8)|((buf[handshakeDataStart+3]&0xff)<<0);
-        // Handshake messages can theoretically span multiple records, but in practice this does not occur
-        if(len > handshakeDataLength) {
-            sendAlert(true,10); // 10 == unexpected message
-            throw new Exn("handshake message size too large " + len + " vs " + (handshakeDataLength-handshakeDataStart));
-        }
-        byte[] ret = new byte[4+len];
-        System.arraycopy(buf,handshakeDataStart,ret,0,ret.length);
-        handshakeDataLength -= ret.length;
-        handshakeDataStart += ret.length;
-        handshakesBuffer.write(ret);
-        return ret;
-    }
-    
-    private int readRecord(byte reqProto) throws IOException {
-        int macLength = (negotiated & 2) != 0 ? mac.length : 0;
-        for(;;) {
-            byte proto;
-            int version, len;
-            
-            try {
-                proto = rawIS.readByte();
-            } catch(EOFException e) {
-                // this may or may not be an error. it is up to the application protocol
-                closed = true;
-                super.close();
-                throw new PrematureCloseExn();
-            }
-            try {
-                version = rawIS.readShort();
-                if(version != 0x0300 && version != 0x0301) throw new Exn("invalid version ");
-                len = rawIS.readShort();
-                if(len <= 0 || len > 16384+((negotiated&2)!=0 ? macLength : 0)) throw new Exn("invalid length " + len);
-                rawIS.readFully((negotiated&2)!=0 ? readRecordScratch : readRecordBuf,0,len);
-            } catch(EOFException e) {
-                // an EOF here is always an error (we don't pass the EOF back on to the app
-                // because it isn't a "legitimate" eof)
-                throw new Exn("Hit EOF too early");
-            }
-            
-            if((negotiated & 2) != 0) {
-                if(len < macLength) throw new Exn("packet size < macLength");
-                // FEATURE: Decode in place
-                readRC4.process(readRecordScratch,0,readRecordBuf,0,len);
-                computeMAC(proto,readRecordBuf,0,len-macLength,serverWriteMACDigest,serverSequenceNumber);
-                for(int i=0;i<macLength;i++)
-                    if(mac[i] != readRecordBuf[len-macLength+i])
-                        throw new Exn("mac mismatch");
-                len -= macLength;
-                serverSequenceNumber++;
-            }
-            
-            if(proto == reqProto) return len;
-            
-            switch(proto) {
-                case 21: { // ALERT
-                    if(len != 2) throw new Exn("invalid lengh for alert");
-                    int level = readRecordBuf[0];
-                    int desc = readRecordBuf[1];
-                    if(level == 1) {
-                        if(desc == 0) { // CloseNotify
-                            debug("Server requested connection closure");
-                            try {
-                                sendCloseNotify();
-                            } catch(SocketException e) { /* incomplete close, thats ok */ }
-                            closed = true;
-                            super.close();
-                            return -1;
-                        } else {
-                            warnings++;
-                            log("SSL ALERT WARNING: desc: " + desc);
-                        }
-                    } else if(level == 2) {
-                        throw new Exn("SSL ALERT FATAL: desc: " +desc);
-                    } else {
-                        throw new Exn("invalid alert level");
-                    }
-                    break;
-                }
-                case 22: { // Handshake
-                    int type = readRecordBuf[0];
-                    int hslen = ((readRecordBuf[1]&0xff)<<16)|((readRecordBuf[2]&0xff)<<8)|((readRecordBuf[3]&0xff)<<0);
-                    if(hslen > len - 4) throw new Exn("Multiple sequential handshake messages received after negotiation");
-                    if(type == 0) { // HellloRequest
-                        if(tls) sendAlert(false,100); // politely refuse, 100 == NoRegnegotiation
-                    } else {
-                        throw new Exn("Unexpected Handshake type: " + type);
-                    }
-                }
-                default: throw new Exn("Unexpected protocol: " + proto);
-            }
-        }
-    }
-    
-    private static void longToBytes(long l, byte[] buf, int off) {
-        for(int i=0;i<8;i++) buf[off+i] = (byte)(l>>>(8*(7-i)));
-    }
-    private void computeMAC(byte proto, byte[] payload, int off, int len, Digest digest, long sequenceNumber) {
-        if(tls) {
-            longToBytes(sequenceNumber,mac,0);
-            mac[8] = proto;
-            mac[9] = 0x03; // version
-            mac[10] = 0x01;
-            mac[11] = (byte)(len>>>8);
-            mac[12] = (byte)(len>>>0);
-            
-            digest.update(mac,0,13);
-            digest.update(payload,off,len);
-            digest.doFinal(mac,0);
-        } else {
-            longToBytes(sequenceNumber, mac, 0);
-            mac[8] = proto;
-            mac[9] = (byte)(len>>>8);
-            mac[10] = (byte)(len>>>0);
-            
-            digest.update(mac, 0, 11);
-            digest.update(payload, off, len);
-            digest.doFinal(mac, 0);
-        }
-    }
-    
-    private void sendCloseNotify() throws IOException { sendRecord((byte)21, new byte[] { 0x01, 0x00 }); }
-    private void sendAlert(boolean fatal, int message) throws IOException {
-        byte[] buf = new byte[] { fatal ? (byte)2 :(byte)1, (byte)message };
-        sendRecord((byte)21,buf);
-        flush();
-    }
-    
-    //
-    // Hash functions
-    //
-    
-    // Shared digest objects
-    private MD5 masterMD5 = new MD5();
-    private SHA1 masterSHA1 = new SHA1();
-    
-    private byte[] md5(byte[] in) { return md5( new byte[][] { in }); }
-    private byte[] md5(byte[][] inputs) {
-        masterMD5.reset();
-        for(int i=0; i<inputs.length; i++) masterMD5.update(inputs[i], 0, inputs[i].length);
-        byte[] ret = new byte[masterMD5.getDigestSize()];
-        masterMD5.doFinal(ret, 0);
-        return ret;
-    }
-    
-    private byte[] sha1(byte[] in)  { return sha1(new byte[][] { in }); }
-    private byte[] sha1(byte[][] inputs) {
-        masterSHA1.reset();
-        for(int i=0; i<inputs.length; i++) masterSHA1.update(inputs[i], 0, inputs[i].length);
-        byte[] ret = new byte[masterSHA1.getDigestSize()];
-        masterSHA1.doFinal(ret, 0);
-        return ret;
-    }
-    
-    /*  RFC-2246
-     PRF(secret, label, seed) = P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);
-     L_S = length in bytes of secret;
-     L_S1 = L_S2 = ceil(L_S / 2);
-     
-     The secret is partitioned into two halves (with the possibility of
-     one shared byte) as described above, S1 taking the first L_S1 bytes
-     and S2 the last L_S2 bytes.
-     
-     P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +
-     HMAC_hash(secret, A(2) + seed) +
-     HMAC_hash(secret, A(3) + seed) + ...
-     
-     A(0) = seed
-     A(i) = HMAC_hash(secret, A(i-1))
-     */           
-    private byte[] tlsPRF(int size,byte[] secret, byte[] label, byte[] seed) {
-        if(size > 112) throw new IllegalArgumentException("size > 112");
-        seed = concat(label,seed);
-        
-        int half_length = (secret.length + 1) / 2;
-        byte[] s1 = new byte[half_length];
-        System.arraycopy(secret,0,s1,0,half_length);
-        byte[] s2 = new byte[half_length];
-        System.arraycopy(secret,secret.length - half_length, s2, 0, half_length);
-
-        Digest hmac_md5 = new HMAC(new MD5(),s1);
-        Digest hmac_sha = new HMAC(new SHA1(),s2);
-        
-        byte[] md5out = new byte[112];
-        byte[] shaout = new byte[120];
-        byte[] digest = new byte[20];
-        int n;
-        
-        n = 0;
-        hmac_md5.update(seed,0,seed.length);
-        hmac_md5.doFinal(digest,0);
-        
-        // digest == md5_a_1
-        while(n < size) {
-            hmac_md5.update(digest,0,16);
-            hmac_md5.update(seed,0,seed.length);
-            hmac_md5.doFinal(md5out,n);
-            hmac_md5.update(digest,0,16);
-            hmac_md5.doFinal(digest,0);
-            n += 16;
-        }
-        
-        n = 0;
-        hmac_sha.update(seed,0,seed.length);
-        hmac_sha.doFinal(digest,0);
-        
-        while(n < size) {
-            hmac_sha.update(digest,0,20);
-            hmac_sha.update(seed,0,seed.length);
-            hmac_sha.doFinal(shaout,n);
-            hmac_sha.update(digest,0,20);
-            hmac_sha.doFinal(digest,0);
-            n += 20;
-         }
-            
-        byte[] ret = new byte[size];
-        for(int i=0;i<size;i++) ret[i] = (byte)(md5out[i] ^ shaout[i]);
-        return ret;
-    }
-
-    public static class SSLv3HMAC extends Digest {
-        private final Digest h;
-        private final byte[] digest;
-        private final byte[] key;
-        private final int padSize;
-        
-        public int getDigestSize() { return h.getDigestSize(); }
-        
-        public SSLv3HMAC(Digest h, byte[] key) {
-            this.h = h;
-            this.key = key;
-            switch(h.getDigestSize()) {
-                case 16: padSize = 48; break;
-                case 20: padSize = 40; break;
-                default: throw new IllegalArgumentException("unsupported digest size");
-            }
-            digest = new byte[h.getDigestSize()];
-            reset();
-        }
-        public void reset() {
-            h.reset();
-            h.update(key,0,key.length);
-            h.update(pad1,0,padSize);
-        }
-        public void update(byte[] b, int off, int len) { h.update(b,off,len); }
-        public void doFinal(byte[] out, int off){
-            h.doFinal(digest,0);
-            h.update(key,0,key.length);
-            h.update(pad2,0,padSize);
-            h.update(digest,0,digest.length);
-            h.doFinal(out,off);
-            reset();
-        }
-        protected void processWord(byte[] in, int inOff) {}
-        protected void processLength(long bitLength) {}
-        protected void processBlock() {}
-    }
-    
-    //
-    // Static Methods
-    //
-    
-    private static SecureRandom random = new SecureRandom();
-    public static synchronized void randomBytes(byte[] buf, int off, int len) {
-        byte[] bytes =  new byte[len];
-        random.nextBytes(bytes);
-        System.arraycopy(bytes,0,buf,off,len);
-    }
-    
-    public static byte[] concat(byte[] a, byte[] b) { return concat(new byte[][] { a, b }); }
-    public static byte[] concat(byte[] a, byte[] b, byte[] c) { return concat(new byte[][] { a, b, c }); }
-    public static byte[] concat(byte[][] inputs) {
-        int total = 0;
-        for(int i=0; i<inputs.length; i++) total += inputs[i].length;
-        byte[] ret = new byte[total];
-        for(int i=0,pos=0; i<inputs.length;pos+=inputs[i].length,i++)
-            System.arraycopy(inputs[i], 0, ret, pos, inputs[i].length);
-        return ret;
-    }
-    
-    public static byte[] getBytes(String s) {
-        try {
-            return s.getBytes("US-ASCII");
-        } catch (UnsupportedEncodingException e) {
-            return null; // will never happen
-        }
-    }
-    
-    public static boolean eq(byte[] a, int aoff, byte[] b, int boff, int len){
-        for(int i=0;i<len;i++) if(a[aoff+i] != b[boff+i]) return false;
-        return true;
-    }
-    
-    //
-    // InputStream/OutputStream/Socket interfaces
-    //
-    public OutputStream getOutputStream() { return sslOS; }
-    public InputStream getInputStream() { return sslIS; }
-    public synchronized void close() throws IOException {
-        if(!closed) {
-            if(negotiated != 0) {
-                sendCloseNotify();
-                flush();
-                // don't bother sending a close_notify back to the server 
-                // this is an incomplete close which is allowed by the spec
-            }
-            super.close();
-            closed = true;
-        }
-    }
-    
-    private int read(byte[] buf, int off, int len) throws IOException {
-        if(pendingLength == 0) {
-            if(closed) return -1;
-            int readLen = readRecord((byte)23);
-            if(readLen == -1) return -1; // EOF
-            len = min(len,readLen);
-            System.arraycopy(readRecordBuf,0,buf,off,len);
-            if(readLen > len) System.arraycopy(readRecordBuf,len,pending,0,readLen-len);
-            pendingStart = 0;
-            pendingLength = readLen - len;
-            return len;
-        } else {
-            len = min(len,pendingLength);
-            System.arraycopy(pending,pendingStart,buf,off,len);
-            pendingLength -= len;
-            pendingStart += len;
-            return len;
-        }
-    }
-    
-    private void write(byte[] buf, int off, int len) throws IOException {
-        if(closed) throw new SocketException("Socket closed");
-        sendRecord((byte)23,buf,off,len);
-        flush();
-    }
-    
-    private class SSLInputStream extends InputStream {
-        public int available() throws IOException {
-            synchronized(SSL.this) {
-                return negotiated != 0 ? pendingLength : rawIS.available();
-            }
-        }
-        public int read() throws IOException {
-            synchronized(SSL.this) {
-                if(negotiated==0) return rawIS.read();
-                if(pendingLength > 0) {
-                    pendingLength--;
-                    return pending[pendingStart++];
-                } else {
-                    byte[] buf = new byte[1];
-                    int n = read(buf);
-                    return n == -1 ? -1 : buf[0]&0xff;
-                }
-            }
-        }
-        public int read(byte[] buf, int off, int len) throws IOException {
-            synchronized(SSL.this) {
-                return negotiated!=0 ? SSL.this.read(buf,off,len) : rawIS.read(buf,off,len);
-            }
-        }
-        public long skip(long n) throws IOException {
-            synchronized(SSL.this) {
-                if(negotiated==0) return rawIS.skip(n);
-                if(pendingLength > 0) {
-                    n = min((int)n,pendingLength);
-                    pendingLength -= n;
-                    pendingStart += n;
-                    return n;
-                }
-                return super.skip(n);
-            }
-        }
-    }
-    
-    private class SSLOutputStream extends OutputStream {
-        public void flush() throws IOException { rawOS.flush(); }
-        public void write(int b) throws IOException { write(new byte[] { (byte)b }); }
-        public void write(byte[] buf, int off, int len) throws IOException {
-            synchronized(SSL.this) {
-                if(negotiated!=0)
-                    SSL.this.write(buf,off,len);
-                else
-                    rawOS.write(buf,off,len);
-            }
-        }
-    }
-    
-    public static class Exn extends IOException { public Exn(String s) { super(s); } }
-    public static class PrematureCloseExn extends Exn {
-        public PrematureCloseExn() { super("Connection was closed by the remote WITHOUT a close_noify"); }
-    }
-    
-    public static boolean debugOn = false;
-    private static void debug(Object o) { if(debugOn) System.err.println("[BriSSL-Debug] " + o.toString()); }
-    private static void log(Object o) { System.err.println("[BriSSL] " + o.toString()); }
-            
-    private static void verifyCerts(X509.Certificate[] certs) throws DER.Exception, Exn {
-        try {
-            verifyCerts_(certs);
-        } catch(RuntimeException e) {
-            e.printStackTrace();
-            throw new Exn("Error while verifying certificates: " + e);
-        }
-    }
-    
-    private static void verifyCerts_(X509.Certificate[] certs) throws DER.Exception, Exn {
-        boolean ignoreLast = false;
-        for(int i=0;i<certs.length;i++) {
-            debug("Cert " + i + ": " + certs[i].subject + " ok");
-            if(!certs[i].isValid())
-                throw new Exn("Certificate " + i + " in certificate chain is not valid (" + certs[i].startDate + " - " + certs[i].endDate + ")");
-            if(i != 0) {
-                X509.Certificate.BC bc = certs[i].basicContraints;
-                if(bc == null) {
-                    if(i == certs.length - 1) {
-                        ignoreLast = true;
-                        break;
-                    }
-                    throw new Exn("CA-cert lacks Basic Constraints");
-                } else {
-                    if(!bc.isCA) throw new Exn("non-CA certificate used for signing");
-                    if(bc.pathLenConstraint != null && bc.pathLenConstraint.longValue() < i-1) throw new Exn("CA cert can't be used this deep");
-                }
-            }
-            if(i != certs.length - 1) {
-                if(!certs[i].issuer.equals(certs[i+1].subject))
-                    throw new Exn("Issuer for certificate " + i + " does not match next in chain");
-                if(!certs[i].isSignedBy(certs[i+1]))
-                    throw new Exn("Certificate " + i + " in chain is not signed by the next certificate");
-            }
-        }
-        
-        X509.Certificate cert = certs[ignoreLast ? certs.length - 2 : certs.length-1];
-        
-        RSA.PublicKey pks = (RSA.PublicKey) caKeys.get(cert.issuer);
-        if(pks == null) throw new Exn("Certificate is signed by an unknown CA (" + cert.issuer + ")");
-        if(!cert.isSignedWith(pks)) throw new Exn("Certificate is not signed by its CA");
-        log("" + cert.subject + " is signed by " + cert.issuer);
-    }
-    
-    public static void addCACert(byte[] b) throws IOException { addCACert(new ByteArrayInputStream(b)); }
-    public static void addCACert(InputStream is) throws IOException { addCACert(new X509.Certificate(is)); }
-    public static void addCACert(X509.Certificate cert) throws DER.Exception { addCAKey(cert.subject,cert.getRSAPublicKey()); }
-    public static void addCAKey(X509.Name subject, RSA.PublicKey pks)  {
-        synchronized(caKeys) {
-            if(caKeys.get(subject) != null)
-                throw new IllegalArgumentException(subject.toString() + " already exists!");
-            caKeys.put(subject,pks);
-        }
-    }
-    
-    static {
-        try {
-            // This will force a <clinit> which'll load the certs
-            Class.forName("org.ibex.net.ssl.RootCerts");
-            log("Loaded root keys from org.ibex.net.ssl.RootCerts");
-        } catch(ClassNotFoundException e) {
-            InputStream is = SSL.class.getClassLoader().getResourceAsStream("org.ibex/net/ssl/rootcerts.dat");
-            if(is != null) {
-                try {
-                    addCompactCAKeys(is);
-                    log("Loaded root certs from rootcerts.dat");
-                } catch(IOException e2) {
-                    log("Error loading certs from rootcerts.dat: " + e2.getMessage()); 
-                }
-            }
-        }
-    }
-        
-    public static int addCompactCAKeys(InputStream is) throws IOException {
-        synchronized(caKeys) {
-            try {
-                Vector seq = (Vector) new DER.InputStream(is).readObject();
-                for(Enumeration e = seq.elements(); e.hasMoreElements();) {
-                    Vector seq2 = (Vector) e.nextElement();
-                    X509.Name subject = new X509.Name(seq2.elementAt(0));
-                    RSA.PublicKey pks = new RSA.PublicKey(seq2.elementAt(1));
-                    addCAKey(subject,pks);
-                }
-                return seq.size();
-            } catch(RuntimeException e) {
-                e.printStackTrace();
-                throw new IOException("error while reading stream: " + e);
-            }
-        }
-    }
-    
-    public static synchronized void setVerifyCallback(VerifyCallback cb) { verifyCallback = cb; }
-    
-    // State Info
-    public static class State {
-        byte[] sessionID;
-        byte[] masterSecret;
-        State(byte[] sessionID, byte[] masterSecret) {
-            this.sessionID = sessionID;
-            this.masterSecret = masterSecret;
-        }
-    }
-    
-    public interface VerifyCallback {
-        public boolean checkCerts(X509.Certificate[] certs, String hostname, Exn exn);
-    }
-    
-    // Helper methods
-    private static final int min(int a, int b) { return a < b ? a : b; }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/net/ssl/GenCompactCAList.java b/upstream/org.ibex.crypto/src/org/ibex/net/ssl/GenCompactCAList.java
deleted file mode 100644 (file)
index e15a194..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.ibex.net.ssl;
-
-import java.io.*;
-//import org.bouncycastle.asn1.*;
-//import org.bouncycastle.asn1.x509.*;
-
-public class GenCompactCAList {
-    /*
-    public static void main(String[] args) throws Exception {
-        if(args.length < 2) throw new Exception("Usage: GenCAList format file(s)");
-        String format = args[0];
-        DER.EncodableVector vec = new DEREncodableVector();
-        for(int i=1;i<args.length;i++) {
-            X509.CertificateStructure x509 = new X509.CertificateStructure((ASN1Sequence) new ASN1InputStream(new FileInputStream(args[i])).readObject());
-            X509.Name subject = x509.getSubject();
-            SubjectPublicKeyInfo pki = x509.getSubjectPublicKeyInfo();
-            RSA.PublicKeyStructure rsa = new RSA.PublicKeyStructure((ASN1Sequence) pki.getPublicKey());
-            DER.EncodableVector vec2 = new DEREncodableVector();
-            vec2.add(subject);
-            vec2.add(rsa);
-            vec.add(new DERSequence(vec2));
-        }
-        if(format.equals("binary")) {
-            DER.OutputStream dos = new DEROutputStream(System.out);
-            dos.writeObject(new DERSequence(vec));
-            dos.close();
-        } else if(format.equals("class")){
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DER.OutputStream dos = new DEROutputStream(baos);
-            dos.writeObject(new DERSequence(vec));
-            dos.close();
-            baos.close();            
-            byte[] buf = baos.toByteArray();
-            StringBuffer sb = new StringBuffer();
-            for(int i=0;i<buf.length;i+=7) {
-                long l = 0;
-                for(int j=0;j<7;j++) {
-                    l <<= 8;
-                    byte b = (i+j < buf.length) ? buf[i+j] : -1;
-                    l |= (b & 0xffL);
-                }
-                for(int j=0;j<8;j++) {
-                    char c = (char) ((l>>>(7*(7-j)))&0x7f);
-                    if(c=='\n') sb.append("\\n"); 
-                    else if(c=='\r') sb.append("\\r");
-                    else if(c=='\\') sb.append("\\\\");
-                    else if(c=='"') sb.append("\\\"");
-                    else if(c >= 32 && c <= 126) sb.append(c);
-                    else sb.append("\\" +  toOctal3(c));
-                }
-            }
-            System.out.println("package org.ibex.net.ssl;");
-            System.out.println("public final class RootCerts {");
-            System.out.println("    private final static String DATA = \"" + sb.toString() + "\";");
-            System.out.print(
-                    "    static {\n" +
-                    "        try {\n" + 
-                    "            org.ibex.net.SSL.addCompactCAKeys(new java.io.ByteArrayInputStream(unpack(DATA)));\n" + 
-                    "        } catch(Exception e) {\n" + 
-                    "            System.err.println(\"Error loading root CA keys: \" + e.getMessage());\n" + 
-                    "        }\n" +
-                    "    }\n");
-            System.out.println("    public static void load() {   }");  // force clinit
-            System.out.print(
-                    "    private static byte[] unpack(String s) {\n" + 
-                    "        int len = s.length();\n" + 
-                    "        if(len % 8 != 0) throw new IllegalArgumentException(\"not a multiple of 8\");\n" + 
-                    "        byte[] ret = new byte[(len / 8) * 7];\n" + 
-                    "        for(int i=0; i<len; i += 8) {\n" + 
-                    "            long l = 0;\n" + 
-                    "            for(int j=0;j<8;j++) {\n" + 
-                    "                l <<= 7;\n" + 
-                    "                l |= (s.charAt(i + j) & 0x7fL);\n" + 
-                    "            }\n" + 
-                    "            int base = (i / 8) * 7;\n" + 
-                    "            for(int j=6; j>=0; j--) {\n" + 
-                    "                ret[base + j] = (byte)(l & 0xff);\n" + 
-                    "                l >>>= 8;\n" + 
-                    "            }\n" + 
-                    "        }\n" + 
-                    "        return ret;\n" + 
-                    "    }");
-            System.out.println("}");
-        } else {
-            throw new Error("unknown format");
-        }
-    }
-    
-    private final static String toOctal3(int n) {
-        char[] buf = new char[3];
-        for(int i=2;i>=0;i--) {
-            buf[i] = (char) ('0' + (n & 7));
-            n >>= 3;
-        }
-        return new String(buf);
-    }
-    */
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/net/ssl/RootCerts.java b/upstream/org.ibex.crypto/src/org/ibex/net/ssl/RootCerts.java
deleted file mode 100644 (file)
index 18438a0..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.ibex.net.ssl;
-public final class RootCerts {
-    private final static String DATA = "\030 Oi\031B\004\001M\014\020\030ID\0260\004A@5(\020\014\023\001\025*3\010,`\011\003\000jP  &\002\"\020f\021\031@\"\006\001U @8L\024W0\\m\006K9Nt7[F\0219@*\006\001U @PL\034A!\020%d*\r\036M\026\010\011\024r\014\\1\014L\002p0\r*\004\001Db\004\n\011\002.\"Piti\001$o7]\004\004\032\004b$\030\010@`I*\014HC=aP\010$\002\026\nX,Fk%\\@2\032,w\033%Nt9\035.7!9Fo6L\020 \010(\005\002\000@ \013\016L#`<U(08!\031K\002P@\016\0206\006F\036y\022;UX\rS\006V7Sv\007\034C3@1\"\r#_<f4\024,eA+\026)a\014`(\0034D$`\033\005 *J%C%\035V\032[~p6(t\021NIq>4\nHEq?\037L\014\027H{ajbF\036G^\013I0h_F\037\011@A&:@*zgGl\017=5x=q(\030:BLZ\016T[\032}4\"K{\003\031^\004\nh~yVzLF(,r\036\011\002 hJ\031\035:rYad\025\ngPV/\000s*_}Z}VBYv9\026\034G\013\007:')i^nsg-b\003TN\011!32\022*e6F1\033g\004UF;3K_K\026[\010>\005f\011W\014)&\nZ\002S\017\"e,m\037\014ogh\000B-Jt\024\026:2T>%%'o~x o\027W\011#i;H/\037y1P\011c\"gT\0241!\001\001\001\000`\020\000\004a\002\000_f\006yD\0260\004A@5(\020\014\023\001\024hS\010P`\022\003\000jP (&\013 Y\014E#Ijs:\010\010\024\021DL0\022\001@5(\020\026\023\016P,F\"Qdu9]\004\004+ahe9\033L\026a\001(T(\010\011f+Qno9\032f\022\021@@\006\001U @\030L2A2\031\nG\023Uft\020\021/\007#\025dn0[\004\004\032\004@R7[nC\004\010\002\n\001 @\020\010\002ow\r\014|o\020\000\010-\034x\011e_4?<6\003y[/hG6g7S1\011N/$\024S\017Y\034~zJ^$}P\030kG\017gy-U\002k-\027\024e\013(\005A\022zmKR_mc\025?\033N\005Qqz\"AV\\\nl?A\036?t\014Sg&+\021\020*:8ex=q\035M\020\007@u1C*/\005\021yt\036Bj(7\032yR:^\005YiN\031$qc3(\030\001,8N:8\003a@*G&Pi\023\006\022\nZ2`O\021jg$|\0231_g'|\026K>wW!5m4'\023\017-w\033(\025{I4q\004\rv7K\026HYP%\006\1778\000^\ra$N-V@prmE\025\004.\021:*>mvM6\023],fDhK>$W]!@\004_S\006ri5\026\0041\r^N3GUNUOW\032)kQVpQ-K6iPMq-Jp{}{}\025jO*4-\011` \030\004\000\001\030 @\027)AJ1\005L\001\0200\r*\004\003\004`%\032\024b\024\030\004@`\032T\010\n\011Bh\026#\021(r:\\nB\002\005\0041\016L\00300\r*\004\005DbD\013\021HT9\035.7!\001(T(\010\011f+Qno9\032f\022\011@>\006\001U @\030L0A2\031\nG\023Uft\020\020mF\013Mf \030H\0104\011\001$o7]\006\010\020\004\024\002A\000 \020\004Z-T\020R,\016\023/PA\003C\033l'\0038\023\021s8\023.\037wV'\004!&:{j\006-ZtPAm6)\013\016\\x=Hh\006bo\000Z(\ry\002eJ\"\nw\006\021\001^uSm\037xZV`E9n\031\032:\025\027\004\03704<`\004o)vF\035S\1771N+GJ{^lVbm5:\027%R:\036CF7IH~pA$S\026\0136\0320\004#n\023}\031\020W\014~\004]b-L\\R]\021yE;\021y`\001D.=1g_RK_5\026rb\0252H\037#+\031S^oK\036\026upa[\026\011\002-_,j54$\0310\005B.!\036]\004\022\033\024h+]^\013\032\036[Bv\034fTDL:\030tW[TIU\0173\033i\016\013I]\0101L:HpKw/DM\031\\1aWC\005xcG4*h\016.,|3d\\7Zp$\030l,5lI~cx\0119\025\0318??&@@0\010\000\0020A\000.C\003\020b\013\030\002 `\032T\010\006\011@J4)D(0\011\001@5(\020\024\023\005P,F\"Qdu9]\004\004\n\010b\035\030\006``\032T\010\013\011E\010\026#\021(r:\\nB\002Q(P\020\023LW#]^r5L$\003\000x\014\003*A\0001\030]\002d2\025\016'+Mh (\035,&c%F !P$\005\023=^t\030 @\020P\n\004\001\000@\035\021QB\037\003D\005\030\022\006`y\033GFo`\033RwZ4thj/b\035B\006\0042\005\r\024^f*\020\n^Vl>J+;Sr\033;h9eh7\026\177I}y.adf\014x9xq;\024h\017`CE\0223\002\020a\1776&9\036Xp\014\\\016\027|uc\002aAz\016=\007L!v\031\027@~_,'>M\010\036\023}GtZ\022g7\0346'\021{\003*QI\034`; \001ScyE\011nvG8\011g]fD2Bax\010|_cCgn\007\034\177J\031\024\\\026[\004\027fH0\006[\010Kzllj{#\177n\037>(&jtwVw\020\000F\036O\007k\0253y;+QH\010Y\027.8dR?\010lo\011\004\020@R-D=wFB\007vjR\022\r\001@9O@>,\017sgI\010y7 \016\\Q\013k2e\r\024\005k\001UZ.\027'h\020#(uL Y4Q\034X\020cS}\003\003z\002\001@ \000\011B\004\001;L\014s\010,`\011\003\000jP \030&\002)Q&\021!@$\006\001U @PL\026A2\031\nG\023Uft\020\020(#\010t`\033\003\000jP ,&\024 Y\014E#Ijs:\010\nE\"@@N2]\016v{IV1\021L\004\0200\r*\004\001Dc$\013\021HT9\035.7!\001\"u0[\r\0263%Jd\020\020h\022\002I^o:\014\020 \010(\005\002\000@ \016 z5~n\002+(=\022>G_\004+z|\020i[1\017\017\027E_R0Z{\001Aa+\010\026\177x\035G\017.\025u\010[]Tx6#R\011\006\005THT\003BR\010B<8EI\177\021\004S+L98/\0043n\026UMN\001,|+T7N`xR}Ad\023kF\177\rs\032\017\005\\Q}\025:Sk\035Br\004U?>l=Rc8\025(\0375GD3 7\\\004WqyRJ?Cd-G>Z\010\010fE\031O\006TD\"fB%qz:m)?\034z\001uP/x\022n\007`Lq-^\005$_\016[\035+Q0\006\0351>?`\177E\013\037d\022'YC_\011E OW\037hK\"\037@`t:o\011;\037>M\001mR\001B,!oC\021`UF_\000S8e\033\002-j]\020\017G\032t8 \031Ll[:IMT\027D$k![i7\014St4\016{\"6v*\000\177L\013mKK\0271i\001\000`\020\000\004a\002\000GF\010\014<b\013\030\002 `\032T\010\006\011@JU\031DN0\022A@5(\020\024\023\017\020-V+IRc0[D\004+a`r2\\n2\002\r^m8\030-gI0@I7\030ec\011\030`$\003\000jP ,&\035 [,W\023%Fa7\010\010WCAde9\\d\005#\025Fh7\033mF{\035Re9L%s\0014\014\003*A\0001\031\031\002m2\\M\026\033\005\\ \"^\016\007\023\025fs\020\020lW\023QRf4Xl\027#\024@A:]\r\006{IRt<L\020\030H\n\003\001\0002>$LJ\013J~E%\033(\032lDv?\021\n\037J\rN\177E\011r r%ya\010x\034r\017>]\0322\027\001'3**8$)\031.]-MJ<5\031\036AP\"n\023/Z\000)d*#zD_\004\024\000_\033\025\014\034x/r7-\031s^H\177Rd\037\\\022V\r\037 0\0017DbE\021L\003\002:&\017\\<f\007|[l\030=\011e[yZ\017\006\033\0313)dmln\010VdH\033\013\037\020\020\014\002\000\000L\020 \r\034a\001K\014!3\000$\014\003*A\000a\030\011*S\030If\002(\030\006U\002\002B1r\005Ze9\032,6\0138@E<\034\016&+Mf ![mW\003\005\\y\026\010\011\026s\014\\1\023\014\004@0\r*\004\005DcT\0135Jr4Xl\026q\001\nx8\034LW\033L@T2Xm\006s=Xo3Z,W\031Dl0\032\001@5(\020\006\023\026P-V+IRc0[D\004+a`r2\\n2\002\035Xo1\030-B\002\rJr:\032,fK\rBt2H\010\027+QPo9\032.GIB\004\001\005\000P \010\004\001p\022\011LbwoVJ9\\*8J\037\026&\036\024r)\"3\025BBm!_F\r/=\027JCvPbnWWC\000\0017jA6H)^qU\004\\f\0231m\n\034*&i3-(e14;\002u$\001@Q\013\005\011(# _\036RVs |\031q\0250Q47E\022I2e\027\036H\0350m\177\011\017kpz)t\033z\017J\023F\014iuW\002@2_?F\013>[\03393u\025vcgym\033R\021\007i\0315u\037D\ru$r/zb\034HS<kF\020'\00582\030f\n~\014*Z+.X\026 :9S*e^2\0020o;(=vw8<i\013Y)%\002g+e\026oD\"o6y@p\000\007_\032yIAZ3d&gW~\0251cVY\021ZZwd\005C=\034\006,-\030(ec\021\011Q9-~G{fY2Rh\033g7E\\*K7T@\026x+\017Xm<~(H\010}5P\020\014\002\000\000L\020 \013\\`g\030Bf\000H\030\006U\002\001B0\022%\n1\011\014\002\0000\r*\004\005\004a\024\023\005Xt4[-w\023\024b\023\030\004 `\032T\010\013\011BH7K\011Jr*\034NW\033Pb/\030\013 `\032T\010\003\011IH&\0131hi6[n&)\001\006y1\031.%#Ijs:\010\0106{\021J )Z,vs%\\g\020\024Mv{Pa\002\000B@(\020\004\002\000d\0343!@J\034zm~3/b\006_Xy=\001\030u4\177~3MgMV$LPXl'l_!\034s\000<V-gO\nF}B=qD[\035'p'\020Ei\000\034zP*Fh_hQ6<\013V>g!\017s\002<\022\002\035SU/rTw\000/]\016]\025a^\032=\023\014;\032mZ jI\003Wz$N^\r\010\024P+!wi8-v3BD\027\022@c\\3u\022\002\035:n\"G;\010ZNv=;gT\023CIlZ#]N/.@M!daU,\004\023WDz,\001UA\035\026\0079CZqjC=/L&Q,Hg\013O\024\021D;WN;\023oP\010FN4\002k\020I\026\003v~|A~h@\001\007\000Xl\036;j=4\013\036\n\035a\032-\020\011K6<vj$E\024\005F+R\033i\014q\023\177@b]kF\\,dm\002\".\034g@`fa8dk2l6>xJ`]6h\010\006\001\000\000&\010\017<`a\030Bf\000H\030\006U\002\001B0\022%\n1\011\014\002\0000\r*\004\005\004a\024\023\005Xt4[-w\023\024b\023\030\004 `\032T\010\013\011BH7K\011Jr*\034NW\033Pb)\030\011``\032T\010\003\011H\010&\0131hi6[n&)\001\006y1\031.%#Ijs:\010\011V{\011Rl2H\n&{=h0@b (\014\004\001#6l'\00553y5+\010;l\004A:&#`Xgl<? Bce{^SB\034\016|DAy\"`/\\i\024V}\010D 2?PD9q|+6\032-+FS\001\026G#\n n5^Aj/`Ju\036\002/\026f\011\r\026\006)#ZF+UjEItG\0206\011^\000Z\"P\027XmBh$c^\004)%q\030$\035q\011@^0=>\"\017^Kw4R]O-\n\001jZ\0274\"\030@@0\010\000\0020A\000-#\002hb\013\030\002 `\032T\010\006\011@I\024)D$0\010\001@5(\020\024\023\004PL\026cQRm7\\LS\010L`\021\003\000jP ,&\n!^,&+I(r:\\nC\011\010` \003\000jP \014&\031!\030-G#%Zo9\031$\004\033eDe9\025\016'+Mh )\033mw!B\004\001\005\000P \010\004\001#\002.d*\\`zWt\011N)UUsT\024x\\\036DV\0011X8k8q,S\03227t\025o6`\011\002[;2A;\034bQ\030_k$#4\022uN\0352\014w\000A\025@*'\\!oS\016#x{Uf\02155\002<w\037 \"@St9LS\n\032-rca:2C%((0e\016WVV%CbS)0rRg\\\017aM/_rR\011Kx!^U`px#x\001\026(\rKM8;\034QMtwk>\035KOEPD!\022\002=\026\003\005$W\027L\017uZL\005~-\033P:d\005T,F\023\006\037VJcp$\001Gjvd\006=<p^W/(\003W\027PCr\177~\025vZ7OIdlr:snu\0227gIH\013\027\023o\027\022#)Ocr$`B\\\003f%\033n\030uls[PcS..t1LwV@`cp<#.k\177r=\016.JPj:6!\\\023FG\020\020\014\002\000\000L\020 \rda\001T\014!3\000$\014\003*A\000a\030\011\006A\030Bf\000H\030\006U\002\002\0020\022=\0341\010\014\001`0\r*\004\003D`u#=do7\035\rs\010``\026\003\000jP (&\017!\030-fZ\025\\g4[LR\002%\\c\027\014%\023\001\034\014\003*A\0011\031\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\021\r\0273%fi7[F\021\031@\"\006\001U @\030L\024b0[M6+9Ni7\031&\022\001@<\006\004JPdD\033n\r\000B \0210EFa \030L\026s-Jn3Z-f)9Fo6L\020 \010(\005\002\000@ \r<\013PM \011:\177B\023\027bPuH,< .VmL\036u<\010B3^\034)U\0251EB\003yu\036_/ \023&#\nC{z<G\033f:ww*nP\030G\013\014\030(Ndo\033*I=%st}:\007^bvdReLm\036IMov95t\017Vhe\011D$B\011\025\017\0262\0275b\027,?53\r\023\024dL?p\016brlMIt+'\031q\031\023yj\016:\0353)M`/=,_\005#8V`C>O^#_3B\005\011zC+qW2\025\023\\*55.Ayu^\032xN\003\027-G6{ZO#$o\011UAF\007\017>J\037\")o\03038\016S\\CoD@D\\#\003m T\004\032\007s\013i+KGC\006W>\000e\013 `\rCE\031>rTJ\031Iq6\n\007pO(=\006\034-MH`.2V2W(yMa|%1m\021O \025cy{77869\025\001\000`\020\000\004a\002\000RF\010\rlb\013\030\002 `\032T\010\006\011@H$)D\"0\007A@5(\020\016\023\004\020N'+Mfe6\034f\021\031@\"\006\001U @PL\024B2[\n6K\035\\ '\025F\023A@l\006\001U @XL^B2[\n6K\035\\ 'XM&+\rh (\035,&c%fh4[Lr\002\rJr:\032,fK\rBt2H\010\027+QPo9\032.GIDJ0\021A@5(\020\006\023\016\020LVbMRg7\010\011v\023)Jc:\010\n\007+\011Xi9Z\r\026s\034@C L$3\001\004\014\011\025!I\0107\\\032\001\004@\"a#]Jb6X.7#\025d@1\031-G\033%Nn\027\030LS\004\006\022\002@` \014!8?6_{P$\006ws7\027\020:Yp\026bZh\011OF\022T\007\033~2l\035r/_~t&?h=f\021OH6ApIqm_\013evlY|JE~m\027E@\002}0--BH<?\\g2+#XD\016vgOY,\020\002`\021\000('p\014IGl*H\007\005_:)X\020{\010h5i`\022`D\025`,hYX\030~3?9\021)oPO$t5l!IPd>\013U\"D\004\003\000@\000\023\004\010\002B\030 63\010,`\011\003\000jP \030&\002!\021&\021\011@\036\006\001U @8L\020B9\035.7\033\025Xs\030Df\001\010\030\006U\002\002B0R\011Jl)Z,vq\001\034V\030M\006\003\020\030\006U\002\002b2Z\011Jl)Z,vq\001&e1].&)\001&e9\035LW\021\001\006e9\035\r\0263%Fa:\031$\004\013Uhh7\\M\027#db!\030\007``\032T\010\003\011F\010&+1&i3[D\005\033\025Fu9\031$\005\033\025dv2\\D\004\032\004b#\030\010 `I*\014HC=aP\010$\002\026\n\035lV\0235Bs:\031.$\003\011Jl9Z,vq9De\030 1\020\024\006\002\000k\000\"'DKp\004!\037y\0349\n\007|>\021n\003\001-\022\013\037\rH\011\001#4!9`j?\026\023\"\026 0\n?}:MF\022,dvm\026f=\034]kZ@\033mfto\0141\n8\014e8\002SY\037fD@E_i( :\032\026XuY@C\020$\014p\n\011<E\026\011\020\013~b\0241;-'BF\0311E9G\032X\026\000o \003\037xb\002##(2Cyw\022_Vn{|&RN` \030\004\000\001\030 @\033IB\003(\030Bf\000H\030\006U\002\001B0\022\r\0021\005L\001\0200\r*\004\004\004`$z8b\020\030\003@`\032T\010\007\011AjF{I^n:\033f\021A@,\006\001U @PL\036C2\\ND+9Ni7\031$\004K9F.\030J&\0028\030\006U\002\002b2\002\rJr:\032,fK\rBt4[mb\002\005jt4\033n&KQr \"\032.fKMRo7\014\"3\000D\014\003*A\0001\030)Fe9\035\014Vs\035Rn2L$\003\000x\014\011\025!I\0107\\\032\001\004@\"a\013\rB@1Y.'#\025\\g4[LRs\r^m\030 @\020P\n\004\001\000@\035Z&]\"\024PZ<Vo[_]\037]\006g*b7^\0320Lo\011Ig,Oi\r\001S\005O0.Zq~\003N$|G\010#\0317\025]\031?\035f%g$1a#zL\013D\021Zm\037\021$AxHHhhjQ:\030\021\007\020\035Fj[.6?\014gPu!i\010us\013\026%i]l#Fsd2Zc@ hw\021kD$pR\000-=3Hlj)\027\036L \032aL=\017)`\003\016HsNn\037S3.\000Sbx\001\010I2r1\004p\177C73(**mk3\0321\022*\001-G\021!,\\0FH\\P\013\002\n3\"?!_u\177s\037\014T O\030z\005\002\007\035`~('e\035o0rN`)\006b80bF\013\001Q\006*M!]\003\024UnP\r:d-_uymE=0R\005t\005u#1u8}YYB{q\010l5:u\021Yi%,{\023E\004sG\023s</\"\036\002\001@ \000\011B\003{\030\033&\020Y@\022\006\001U @0L\004D\"L#C\000h\014\003*A\001!\030M\010e:]\0166\033!J *\031-F+-^m\020\020(s\010t`\033\003\000jP ,&\024*\031-F*MJc\020\025\016'+Mh !Y-g#\025d1\020L\003p0\r*\004\001Dc\004#\025jt9Xm\006)\001(e6\031-6{4@R7[nB\002\r\0020@b (\014\004\001]\002K\037\020-Nr\022kZ.\037?),0\004\025bD\033nv\032N\033%u;\007/bzQ\r>qY\003\026{\031\031n\016\006e9R\005\000IBCPp|#FYSu\023A0G+\032vh\014\030J_5\\w2S>hF\001t\004El*Qy?_t$+t+}|\005.ik-\000=\005L\011W\0314!IJV\022\020\\\001\022g\021%_C\003P\000\r/\017qW=\024 \031\017\010\035\007\0309D@@0\010\000\0020@tF\0041D\0260\004A@5(\020\014\023\001\025*3\011\020`\"\003\000jP (&\033\"\032,vKQBl\020\024m\026;9Bt:\\LR\002Qdu9]\004\004\033<\\1\010L\001p0\r*\004\005Da\004\"M(C H\010S\011B\003\007\001 0\020\005\001Y\001TsfAq\023;~C\n\031Mt\014_y/5\010-\027!h`3\004s\0000rRQ\011\032-s\nVrI9\000\001\007vNJb\"\rdIL?3\003$#s\026lT';!NedJ:\0207`nk\007\177{C=|.l\034oM\017@Li^\037\034GPx>\000\0316\016%\010'8Z*TSy\022MvhT;p\011\030\000e\000U\016p\004\00412\003j\"hMhv\033-/+!5b\002\000@f\010\020\006t0@j&\020Y@\022\006\001U @0L\004u9L!S\000,\014\003*A\001\001\030\021*t0Z\006\0219@*\006\001U @8L\034S0[\016B\0021Bk2H\0106KQr1\022\014\004 0\r*\004\005\004c4#%Ni:\030-B\002MRg7\030.G+IJ *\034NW\033P@C7KF\021\011@\036\006\001U @XL\020D)U\0104\011\00101\030EF\001 \030\006U\002\000b0j\021&T\020\024Mv{Q\006A\020\026\006\023\011\004`\037\003\002%(2\"\rw\006@!\020\010X$c0P\014FK\035fi3]\016'+Mh.1[mS\004\010\002\n\001 @\020\010\003%F\023-\\z)w\003D45*\006zO\no$Da\033E<XHFE\r*\030]>Z|teg)?0(1422\177q\033TUa|PF\0363gI\017n[o,K4\np31Iw$DFunB\0034n\002GZ25\\+\010\031N}\026 wp,l\\l Y\024\017#\005\026\030\022Cr\025+ lja\002\017\031Ah\035]\036)JA\"hh\000e[\014\002}#l\024V\004&5\006J8#K\010,WBN\0265ET\013?-\004sr\023\004&)\017[\026\011\024VI\033\036k\\\011l,\037S\022zI\010}Q\033\036\005.\"KH^+yd?Bg2F\020CL<Hh5W8\003@\025v<pH\003Iu\0167\030\022|9\0212\020\032 k>\r\026Hi[\025fQca3FiKg'\033\037]\024e\001\0020+\010\014p\021l~Gg9\013Y2\002k4M*HCg\011XD IY8n^  \030\004\000\001\030 :#\002\030b\013\030\002 `\032T\010\006\011@JU\031DH0\021\001@5(\020\024\023\rQ\r\026;%ha6\010\n6K\035\\a:\035.&)\001(r:\\nB\002\r^.\030D&\000x\030\006U\002\002b0B\021&T!P$\004)Ha\001C@P\030\010\002\177\023GEr.yL&\030uD\017tpZ\177\177\003#e(-q=y\022)DHEX\0077`pkp\032o\"oW\037H.S\030G81`joY [a\034\"vNu \003ag\007\026hA(DFB~sz;BRG\n\017yms\027a(8}ir32\031<c-=}r$O\177$\nO^B4\007LclJ,0\\b\023\035m)]^#\011vaCdBVh\031\035sd+8\0066)\035\001\000 3\004\010\003:\030 5\023\010,`\011\003\000jP \030&\002:\\f\020i@\026\006\001U @@L\010U:\030-\003\010\\`\025\003\000jP \034&\016)X-G!\001\030a5Y$\004\033%hy\030I\006\002\020\030\006U\002\002B1Z\021Rg4]\014\026a\001&i3[L\027#Ude\020\025\016'+Mh ![ec\010D`\017\003\000jP ,&\010\"\024jD\032\004@X\031\014\"c\000P\014\003*A\0001\0305\010S*\010\n&{=hC H\013\003\021DB0\017AA\022T\031\021\006{C \020H\004,\0221X(\006#%Ns4YnG\023Uft\027\030mviB\004\001\005\000P \010\004\001\\:|\021L\003V-\032`\030Cr7_\011aM:\\\0053M7\031f@(J@\"mUSvC  `s\022%\036\0248\016\013jw=\024\026G\007~5+c1y&t\r\036BL>d`^k8mk*3\025*IOi\024\000r-g\026`\005M\003b_K-2r+<_#OrThw\003cq\004\014_|N~By6v\005cs\021/\\\002.\000D\017{%N\004\023{\021.$JFI\027Jb4w\034^p\001%=\031BuW(\n\013'2\024\005\\(d20`\011[<NOz.Lk+\033(-\033T kPTB\r3\\[j\034*\026{\007\017kn\024\026\025\031PP)9\031s\r\036)\005m'hc\020]-ey:lchK~Cmf\035w>?\027\001FM\026\0342A\024&hy\007d\nB^lW\010FBvUVnAnO\033CYJHm\002%\026#\014E9}Qnh,2\014DeB;0\020\014\002\000\000L\020 \np`L\030Bf\000H\030\006U\002\001B0\023\rB1\011\014\002\0000\r*\004\005\004a\024)5\006e9\035\r\0263db\022\030\004\000`\032T\010\013\011B)\024!\001\006e7\035\014W\021D*0\011A@5(\020\006\023\006\021%T\033\025dt4YO\022\002\r\0020A\000! \024\010\002\001\000.S:3F\000U:\022%\025+X7G\033%&\002aH\022Qw\014\024F[\"\016Gl\n\001!;}_(M\010\026jX\007%.P\021(c(\010\005|m8\004\007\020(f\rI\\\027\000$A\023y4\016\0270hE\\9.V\017,1\rMi]Ef\"7#X\0224!e\034egJOf\"\003>lUc!)HEnl\r9~\031\025iE\022Lqa\n[ \005*&\016$ey\002dEb3em\036[z\034\0260ta>56Z'\033\177!37\002mR\001K&\036F_dB~Mi@\035\\|3~O\034~o'G@\034\r$_j3pR6&T*Y\033_\007\"\033nG\006\nx\007M\033\023\001LKg=0L-\0212U\006\020X>:\026\035\023e?wCUT@MQ\023e1b=K=\032#AAB\014\017M\013T\177d)\\kXNc\\@'B2y<\025G\rjh\025h4\rW[*\032\013nB,\004\003\000@\000\023\004\010\002\\\030\023\006\020Y@\022\006\001U @0L\004c0L\"#\000@\014\003*A\001!\030%\n-!Y.'#%Ly\030DF\001\000\030\006U\002\002b0J%\010 !Y-g#\025d1\nL\00200\r*\004\001DaD)5\006e9\035\r\0263d@R L\020 \010(\005\002\000@ \reBn%}{AKVbFr\"\003e*\037\r\020\004h}\006\007 \030\020\016/Mxs5^\005\032\022RuFZ&2\000\rE~/\006|.\027t{$\006PQW}ds\001~01W\006r}4OVl\n*\0002\001^U)J@\0332^>+Ts\016n\031[4 r=CEPg\014]sa\032dv9#8O\024R`K=\0249\003KL\022\036\034\0160m\0318i\025\020&h:r!0;oK \003vRb\013a/8\021\035\004\027wc\nc\014\014 nvV\030\016\007C-?F\021\007?OWxVso!\002A,yO\025\031}pr7W!%\034\034~UYu/\0179^+\034&;M3'&\024\023ra\017\033:UD;3yVJGi7G[*?D\035o0\002\n<XA!3&E8bp#\"*uu\030T`8WF#E@eC1[\030%-0`5\014-gj>c\010Q?BDaj\031{\001\000`\020\000\004a\002\000Pf\010\rPb\024\030\004@`\032T\010\n\011BhVsQdu9]\005fs\025h1 \014\007`0\r*\004\005E\006w;]n.2[NG\023Uft\027\033LW!=\016C!P+t\032A& 4[L6{I`.\020\030O\022\003IJf\027\010\005\006c%Zi:\034d\006c%Bb\027\n&\022)@F\006\001U @XL8(1J$\003\021@`0\020\021-g#Ijs:\013Mf+P@L4[-\027#\025H1\031L\006\0200\r*\004\001De$+9hr:\\nBs9Jt\020\020mFK\025\\t\020\020lW\023QRf4Xl\027#%^n\020\020.W#!^r4]\017\023\004\006\022\002@` \011\033Ri6r1)=5\005P\17715=O:E/39\022S\017.B\023IVXyTiU\"jB5\025\\K!ro\\:b\035\\\036\\\\\022\024\"?\nPK\004WJ%9\177\016\001blr{\\2\025\0224D$\013`\014__j)i[_f\007<K\025\011<NIWtU\002A\\XKkU$\010Ug?cpz6fYfVm\022R%,o,o/dOdJYzc|J\000^y\r\017R\\\024\004\003\000@\000\023\004\010\002I\030 7#\010P`\022\003\000jP (&\013\"[NG\023Uft\027\033LW!D~0\036A@5(\020\026\024\033\035nw99Jn:\034NW\033P\\n2]\005u\032M\030_!T\n2\003%\\c7\\N\002q\001Dy\020\034LV18@(6\032-VKQf 6\032,\026\0218R1\022L\00400\r*\004\005DcBC\014R \031\014\006\003\001\001\nn:\034NW\033P\\n2]\004\004c%Zi:\031,C\011h`8\003\000jP \014&1\"[NG\023Uft\027\033LW!\001&e1].&)\001&e9\035LW\021\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\030 1\020\024\006\002\000cp+tsGcNx\030\020`~I0\177iLrrh^Du\030-2f!\030^haQ\025:CWL\0003M\nys\027\016\"M\\|m\036t\020\016\033U5\"*\032\002l^\177U\0173U.WF$\rDV\014}\013%Pa,HE-\032M\011d)N=+\0360v .\023rl|\034\001{N\033}\037\032\\@h\030\005Yjg\011Bs~B\\mH.@\006ms\030)Z7\035Cty^\031\002\011b  \030\004\000\001\030 @\034)B\0034\030E\006\001\020\030\006U\002\002B0Z\025\\t9\035.7!9\\e:\014(\003\001x\014\003*A\0011!]nw;KLVsQdu9]\005fs\025h/!T\n5yH`4\034\010\r\026s\r^r8\013D\006\023d@r2YEb\001!Xi6Z.G\031\001Xi0XEbIDJ0\021A@5(\020\026\023\016\n\0142I\000b9\034N$\004+9hr:\\nBs9Jt\020\023\r\026k%he2\014&3\001D\014\003*A\0001\031)\nn:\034NW\033P\\n2]\004\004\033\025dt4YM\026\033\005hi7[D\004\013Uhh7\\M\027#d@(\031\014\006CA$a\002\000B@(\020\004\002\000VS):HJ\r2u(d\0008T,d\025\ni=\r|\026J&c]X\003ZJg[^\010\014\003M\005H40\0335\031/:^\\\035S\003,N\026\032N_\0023P8>[[GY~)\020(\036X`5\030kvqL5R`?\010\010\031\\Ui(\002 \001~tJ(3PA&g\010\005}0w<u+Mr0om;)I+BE\020i*n.2(\033g\\EiL\014q\177\027[B'\002vDR#\037n\002Q=Dhlr~\032?<8F,\013A7R,dd\016f3n)bW^\032f*M:<k'\026,y$\007y\027i\n\013\026Q\021N\002LJXWvdd&\003\\I@\035k[?ww\020BUA\005\030\n?\027Z\"HiC8fSxz\014]=\036B[o<\001\016\nHJA8\002 &Io\001dK\"#?|\021z9lU\005A\007\023;vy\033\037C\014\010,&2\raVjp\000~\010\010\006\001\000\000&\010\020\005,0@r&\020Y@\022\006\001U @0L\004U)L\"C\000H\014\003*A\001!\030-\nn:\034NW\033P\\n2]\006\024AA\014\006\001U @XP~w;]ef+9hr:\\nBs9Jt\027PmFK\025\\t/Ph\025z%\\f7Kh5\002L@i7\030mw\023@\\ 1\036$\007\023\025L.\020\033\r\026k%hs\020\033\r\026\013\010\\1\022L\00400\r*\004\005DcBC\014R \030N'\023I\001\nn:\034NW\033P\\n2]\004\004c%Zi:\031,C\011L`1\003\000jP \014&*\"[NG\023Uft\027\033LW!\001\006l4Y-g!\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\030 0p\024\006\002\000d\016S\025qD/_V\011my\003oH\031\177Q43&\0137AT\023~\006G*\011}O]/\034~\006\024QJ+xu8\r\016dO+0!Zk4\177\033^\010{Y^0\022K3Xa\033w_R\006\014\n\032If<U|>v\0369C=\003Y.Go\016V\022;\035a7*SPY~\037L-j|F*n\0035\000tj,XV#F\000E\026h\034\020Iol9\004oC_F9@*'\031\036^{b` \010\014a\002\000T\006\010\016\014b\013\030\002 `\032T\010\006\011@JU\031D(0\011\001@5(\020\024\023\005Q-g#Ijs:\013Mf+Pb;\030\016 `\032T\010\013\011LNw;\\\\e7\035\016'+Mh.7\031.Bz\r S\020\032-f\033=dp\027\010\014'I\001de3\013D\002C1Rm4]\0162\0031Ra1\013E\023\011\024`#\003\000jP ,&\034\024\030e\022\001Dr9\034H\010VsQdu9]\005fs\025h &\032-VKQJd\030NF\003@\030\006U\002\000b3\n\025\\t9\035.7!9\\e:\010\n6+\rjr2H\n6+Ile9\010\0106+Ihi3\032,6\013QRo7\010\010\027+QPo9\032.GIB\003\007\001 0\020\0064Q\003\032\025\0038OL\037/\033d&\037}<b`dj\035\013\020AQmOyr37D\024d]Q~P \\~##S8R8f\002&\006\025\016 l [Y\017fB)}rfqi`\003\023z\035L{F\r%\r\025d\025_\0226SM2As\001=\026Z3?_\004Jl\n2\"3\023#dL\033\007 \004+j4MY?\016o\014!\177~n\011\025FrA^A\016-8\rD,\0310n*K7\031\006\002\000@f\010\016t`O\030Bf\000H\030\006U\002\001B0\022U&1\010\014\001`0\r*\004\005\004`t+Eji3\030/\003\0118`,\003\000jP ,&%\"\\.VK\031Bx\020\024\016&+5Ru6H\0106+Ihi3\032,6\013QJ  ].FC=di:\036&\010\014$\005\001@@\031j\010\032\034\006f\002\001<\014\032Q^\0205!PvD\033DOzM-MO\0042#P\rxT\"H\011^N\005Ao\033\027fR<fn^kW<~\031\0260?X[<U3SqJ!PJ~=4$+x\022\020zcv4JpF\006\034zB8]`\027MHG.e~do!\">ky\007IO3fF\023\024\030}l\0225@^),\014pCa=L#&+\022x.Wz-Ej5\177_\004\014\005X\010\006\001\000\000&\010\016p`N\030Bf\000H\030\006U\002\001B0\022U&1\010\014\001`0\r*\004\005\004`t+Eji3\030/\003\0114`+\003\000jP ,&$\"\\.VK\031Bx\020\024lV\033Ude\020\020lW\023QRf4Xl\027#\024@A:]\r\006{IRt<L\020\030H\n\003\001\0000+[\naN\0101;T\011Q4>\0106d\"FD`\024\036\1776@FxN\010b\020pz\027f:>\005p.\000\037\0028ilq\"RP#\022Yq5Tkp-O\026g@/h \024;}]\000B=N\010\000(O~>~\000fu\007:-J|\021|\001a\031\nUr17D\037\0275-x&A\0149L&V&\nbD<;WJzns\r\n{bv+u\006KFP\007NQ\016=|)}p1w\020\020\014\002\000\000L\020\036AA41\005L\001\0200\r*\004\003\004`%*Lb\034\030\006@`\032T\010\n\011DhW\013URf0^\004\005\033\025Fu9\031$\004K9F.\030K&\002X\030\006U\002\000b2\"\025bu4YL\027A\001&e1].&)\001\016l7XL\026a\001JB:\\m\026s\025fs\020\020h\022iDa\001D@P\030\010\002ug\013d\000&-DhU\036\0228%\016W?'hMq}\017\036\002s TL\011\\vB\027\023\036\025\\=GP&J\014V]qN\032:\027v~)Si4sL(kNOn\024s\rW\034|\035~\000lfj>M1/\001w|f5&\035\nbG\001\003zN\"Dt\022\036\033\021%RR\010pmp8Y\006=dEej\013\034\0064g\035\037hrn\\\024f!\016\017Ccs\001\\vN\031p\\.#\006a\001\000`\020\000\004a\001pL\n3\010,`\011\003\000jP \030&\002*Tf\021a@4\006\001U @PL&E8]-\0263\005p )Y,7+IJ $[L2qDL0\022\001@5(\020\006\023\016Q.\027+%La<\010\n6+\rjr2H\014T\023Ufi7\031.7\031\001\006A\026L&\010\014$\005\001@@\031bxfx\027[]{i\035%>Z\006Eis h\031\030z\010[\025NS\010h#<\026C.\026\n\003\0201Ut-\024BQ\"P=12`l27xJ\006\023\023s}(g\025\"&gi\035AJPpQ\007&\022\034\r\rHh\001\\ZP6(.phC\025|TIE*k\n\017\034\023hoS7p.\032uCWg/EpX\0350\014E$',_\"\035sS:V_\025\016\014 \025@${\177#t`\030\010\006\001\000\000&\010\016p`N\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ad+Eji3\030/\002\002MJc:\\LS\011\030`$\003\000jP ,&\035\"\\.VK\031Bx\020\024lV\033Ude\020\031('+MRn2\\n2\002\r\002-\031\014\020\030H\n\003\001\0009\007\023LL<R\003\006e\0037be#\024q=XuH#=\177:|{#S\005\017\177A<}Lt\r?\0112\007pwK-Q\022,B\035vEf\011E5\026\022d`\022\r\017\024\010k\024\016LEFXM\013\\\0246 8\014U$\0066M\026/q\016\0239|\011s[P$CH\0344\036\027\030+\n\000H\027eRwxZ_(nqf\007\031\0039js\027))uL+(I\024''\017<~\001UVoH7P\020\014\002\000\000L\020 \025da\001T\014!3\000$\014\003*A\000a\030\011\006A\030Bf\000H\030\006U\002\002\0020\022=\0341\010\014\001`0\r*\004\003D`u#=do7\035\rs\010``\026\003\000jP (&\017#\033n'\"\025\\g4[LR\002%\\c\027\014%\023\001\034\014\003*A\0011\031\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\021\r\0273%fi7[F\021\031@\"\006\001U @\030L\024f7\\NF+9Ni7\031&\022\001@<\006\004JPdD\033n\r\000B \0210EFa \031Mw\023QJn3Z-f)9Fo6L\020 \020(\005\002\001\000 \014U{\014nN\000xqk?8F\rhi\001aoRb@\022\014Pu\006l{]o`\033,\032BP\025\034yzW&W\024\022Rn>\021;Q\007&#-\035]VGY\024W-{\034y\020\016iN-8\021FY\022U#\0075Q\"M\034iI:\027\027s~ #k\016R\027/o\0215Ug.g@yq\021oitZi0r\0230oj\n8g5\032Wz;\021Q\007\\l.Rr@4\034|.)\014\027D=\024t\030\035AX%\033\016,\000\026$-\006\002\017\006hAW8\027hHy\004Z2 H\020\027;q\004<pN~|v\024\\\011\021sav\002g\03531O\026La],\007KW1\022b\016\017\007\033#D&FS;3l8\030\014;\022\006 \006R\0368mwy\004yva3,oAdG\007!W\\p\006=&\016\010YaH/G\011+K\n`WU\\WB\025[9869z0\007\003dQ\021\014,\001{\004=q\n\031\003lky\027\0307Of\013h\005\023J6\013^\000E\014T/\"({@\024pY\033\020>\035<+<n[\006d(~WC\027Z`\020\020)(\\\010\020\003z2L\032G_q\035G.G\031(%/V6&\003y\003z>\024EL\016E@\016=\001SK%\025dFP{(Z|(@Eh\027\0335L\010n&\031\023h&\022\017i\034C2V`\024]P~_=*09SUr\005\034(NtRY8zI\031)Np*`CF$z\020S[pqCA\036\016,K7\010\020\001PgEz\033\\J3\036*:\010\rvm-\022\037PoVjUb97\016Y\027\025:\035\017ydu\031n \037cU\033HQh\010\032 A\r\011'\011`c\034Xw?@63\031\036Gl9\024\0307}\\\0273\"dRq\031E\002\037yy65\022=5MZOm;\021/lLt\027wB\003DwP\007#\003\nAo\007K\035S>aiM\010\010\006\001\000\000&\010\020\004\0060:L!3\000$\014\003*A\000a\030\011*S\030F\006\0010\030\006U\002\002B0z\035(E\020\020mw\023A^r0]\r\026{8b'\030\011 `\032T\010\013\011GHu\"\024@C<XLW\022Qdu9]\004\005\033=Xu:\032-vsLX $[L2qDF0\020A@5(\020\006\023\r\021jD)\001\006y1\031.%#Ijs:\010\010vc=Da6\010\n&{=h0@b (\014\004\001\025\007h\026o\002B9h=1q\014nt.\016\027,\022M\000lz\016{%\030\010TS\016\006d$\022|EaH\032=\037MCbOB7\024\034l\007}J.S\003gj?K51\024i+qVl!O\000s;6).=d1e)#G\025i8\002sY\010.?fR,k\016AZd5\005*\022\000'\0364p~\001BUaUD\035\013xia5)\033$M\0058\022\020\003xH+G<m\003p)<vbL@@0\010\000\0020@wf\005\011D\0260\004A@5(\020\014\023\001\022J\003\010|`\035\003\000jP (&\026!^,&+I(r:\\nB\002)Bp0[EB\002%\\c\027\014$\023\000|\014\003*A\0001\030a\006y1\031.%#Ijs:\010\011$\nA\002N\020\024Mv{P@C L\020\030H\n\003\001\000-u_f)\016\020;\"?V=3Hs\003\037\020\024Xw-5>\003Hz\1772LT:j\030Ok\026_gd,6\026aPk\r{n,E9 \026!-7NOvqp.C\021B$c|\"\037n$wU}yM\030C.\026~c5\023SH6<\027H\001,h]+-Ay0v\037dK\021D\035@\010Bu .:68fu\"C1$+H_*+U<@>\r\007b:NA{as!\004g.]p\020\014\002\000\000L\020\036AA41\005L\001\0200\r*\004\003\004`$R@b\037\030\007 `\032T\010\n\011EH7K\011Jr*\034NW\033P@J0\\\014\026q0@I7\030ec\011(`(\003\000jP \014&!!^,&+I(r:\\nB\002)\002P SD\005\033\025Fu9\031$\005\033\025dv2\\D\004\032\004a\001D@P\030\010\002X&Qh7\006{+\000,\011>;3\010\026%g~~ZH\rRqU\02552\017WA\006e~\004B\\W3790wF6\031]\037/\000\017\017y\021\\6\0309y3sd#b\032\011Q\037gOK\006&JCa?\004x(\007\020[\n|\022w\007b(l\031XZ\177\032_C\016\037\007L\\slt/j\"uE=*TkQNo;/H[KF\030]Ps\022\035_\020\0228\0344\001\"\013i\027\031\002mI\001\000`\020\000\004a\002\000`\006\007\001D\0260\004A@5(\020\014\023\001\025*3\010``\026\003\000jP (&\017#U\010R\002\r^r8\033n&\013QRo7\014$s\001\024\014\003*A\0011\030y\016T\"H\0107K\011Jr*\034NW\033P@S7[\016W#%^n9K\004\004K9F.\030GF\001`\030\006U\002\000b1*\035(E\020\020o\026\023\025dT9\035.7!\001$o7]\004\003)B\004\001\005\000P \010\004\001<\011\033GxSqu\027\000{\003kYe4\002z\036\010J\022 7\016=R*'UavGYkrI[>w\026}\nm&*rp\034J\034wk|$\024\"@;J\177d0\013;8'rsH\0235#CW\025\016.*_@\031fZS:q\027,r \032\n1\rA{~\\Ei$w\017Na\001\006.{a@]vk0pz\025J\036\036&A)Uy:\035L{\034\177\026G\014z\013v5YZR,\177b\037\014\013|\026T\025\032G(\rPFyl*\010%\002i\016C(x3e\\nwx~\007W\\\026(\035-K\003m\032%7!<1f\006\014<$\033$-Bsr9\025-[~4\016?=sN{\006|9\010gW*>\014e}\003\037s\016yQ\026\036q\003\031[mdpg\001E\034\005@\034m\013U95$-\010\011T\023\033\025u+_\nL\017nG\0261{8\037MK(\037y|#-z\016i^,~\031?D\020\020\014\002\000\000L\020\035\031A\n1\005L\001\0200\r*\004\003\004`%*Lb\030\030\005@`\032T\010\n\011Chu\"\024@C7\\N\006{IBt4[mc\010p`\032\003\000jP \014&\023#U\010R\002\rrb2\\JG\023Uft\020\024Mv{Pa\001D@P\030\010\002qf'n[9Cqb|WQ\026}\030=\rY292<\n\n\035G]\0221S)5ugEo<P)E3FXKa gn?'\037hA\0264\021,\036\033J#8?%|\014e&Sz+\177j\025J(zZ\022\032\005X4\023\032\0238T\014hWo?\013\005O`)ze+ HYBw\005\010D]\"=\013*co<Y6\177sTT#H,a\023\000\036HIi++4\r\0001N8J\022xp\003\001\000`\020\000\004a\002\000[f\005yD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021!@$\006\001U @XL\026P0\\NFs\025ds\020\020h\023\010|`\035\003\000jP \014&\026#[\rv\023\005XS4Ymb\002ABr:\033LW\023L@C L\020 \010(\005\002\000@ \r\0213p2V\022B'Q_\020)Hi5hc8<\016`\r\0068G\024fq\013\007\017\010##\006\030\032\024\005a1zc\024A\023v\031T|\001xc\004&\\3%w\030\001+ \0004!Yg&\014e\000\004 NF\017av7\013UG<\031.q\rs\0300\016(\001R;'Zx\024\033L\007R\026|{\177:_[\020Pk\013\037Y\177\032\neL\020zDt`\036@\0019g%\002gTklM\"[X@h^i\r]IEgszl\004K\005mQ\002\000F$\000VnxrvSFEW=1\025Sr\033$Va,C\026\000O\014c<Q(\004J\014$+\0261W#\"E\003!,scjA\003\0067H\ro7w\035S\014xf,d?[\032/\033#rGU%,7\006\013oAw#\022rnM@\014!\026\ny\013;f)L\nBP\023\025#\013Z}}_`/\017KD8F/\013\"Y)4`YG\023\010\035\013\nV=\001\000`\020\000\004a\002\000_&\006iD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021Y@2\006\001U @XL$P9\032-V\013Ir ![\014\027\033L@1\020\020h\023\011\030`$\003\000jP \014&\035#[\rv\023\005XS4Ymb\002Adi6X.'I\001\006l0\\n2\001D@C L\020 \010(\005\002\000@ \013i\000jGhJ\032`E\014$9\021Qa[k@BR\007\025f\031-\030hW5{\017d\033g\006\006)\022\031[eVC\031^v\003s\025s\037W7\034MRs\\E\020A\023I8|h\030\001!&[\027\002fm\035\017yL=\0102Z\035'>\020X\017f]oOiJ&\n\021r\032:Q<\006\nY\nm!#\007W\026.M$\011-s/.YAP0\024\0268u\032MlZ=\002,k~QNwl|\030)C|rb9\\w=N<X uJ\030\034 \017F[\032)s6{\"\013$\017w]4|Bt2\033dp1y\027}\007)S;}\021\020WF$\035hH`\026\002@F\027f?y&`D\011w*\033LhK-\025VMsL\013mL%K^b+N@~\022a\026\027/!c\030Sp]\013jVY3J\1778@?W*Ao&_k\004Ol3\003H%?]SB\006;\177FV\011\\Im#h\023E9\021)\001\000`\020\000\004a\002\000_&\006iD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021Y@2\006\001U @XL$P9\032-V\013Ir ![\014\027\033L@2\020\020h\023\011\030`$\003\000jP \014&\035#[\rv\023\005XS4Ymb\002Adi6X.'I\001\006l0\\n2\001H@C L\020 \010(\005\002\000@ \011\0243}oz\0211a:\005]|l/d\026},\r\035)0%@\004t\177\016Bn\017tT>{ 1JY$I\036\\ZA=\016N\022V%\177a45'M\nmzjg0 \"?\r2c\027L:9juXw:q&|~m;\024\0208\002\027m\034H\r\001R-=\177/O\\v7SB<v\r\"\033JT\017{x\011mv\027\177\0348Cqt\004V_0NKSc\023\0222\025@\005\177w\007!L%!VO:Z\nnFpP\022(=u\002$t\\$\034~a\020.{K#2\022$\035\003!|q\030$6\026\007\000st(>\017$l`\000k>\0367$v9\025b]\rC[>\024l\025Jg\014D\027)?D]=(\000-{B:,o0J8fq^&Tj\014p\037#R(t}pl\005Yfs[95kp~|f;\011x\031\034K\1778\024\036h\032ek\004\003\031K\002fz\023\r\000)I\037M\025\006w\001\000`\020\000\004a\002\000_&\006iD\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021Y@2\006\001U @XL$P9\032-V\013Ir ![\014\027\033L@3\020\020h\023\011\030`$\003\000jP \014&\035#[\rv\023\005XS4Ymb\002Adi6X.'I\001\006l0\\n2\001L@C L\020 \010(\005\002\000@ \011\ny,ek0\030\000$r~Gb\027\0177QD\003y,%S\036\030r\010/n\025QzoU3\001jPlejj'\014:rU\0368G\002Q\010\005\014\014I3({WqNx5-t'W\033r[H/\0256#>oaWP\032\0246tY\024uJ]p*=KD\0020lH::\nHc\025L\020So%;9\002\032\005$k/\007nHH#(8~\013#f6\001\034\177us^L[npR1Xi<xj Q%y_\014{a\0119\022\027,{\037 \037\017\022(\013>\024.\0147\034\017\0242\031}Cv \177\"\002)I'\023h={\035,o^@j\007deO$\\O\022\026`\011]\004k?\010o>1^\030\037\005~\016x-H\026+yUH7E\021*!p9\022;afD\"xPWmk\1773p~c0-\021\026;LDDP\n@(jWW=,@3]dm;\0118ZqP\023Jw\030;)@uW\001\000`\020\000\004a\002\000Yf\0059D\0260\004A@5(\020\014\023\001\020HS\010d`\027\003\000jP (&\020#[\rv\023\005XS4Ymb\0039l-9X&\021\001@\034\006\001U @XL\016R7[nB\002\r\0021\rL\003\0200\r*\004\001Db$;1^b0[\n6K\035\\ )\033mw!\001\006A\030 @\020P\n\004\001\000@\033 w\0323\rg(|4|)}{xbp2+/TH\017|%+\005f*\021\002/>\006\036GDg33cMn<6H\025{QXL:5/\024`\014Z_'\016-\0112u1b1`\007PO!#\0064+\r'~\033]$1 \025\016;j\016v\020]w~:*/\024E{`6u&S\0049<C9|H\036NUUcY\"'%1dpo\003\017\021\006JlTMbijKC2\023LM~'LW\027{\011zDGI\023b-Vn\035\ri\032\021CQFqhk\023T\035\006t\0061-+5YU<\005RZ\027'\020\n\034:~\" M\036s*$b8)h7<\017\r\026XX\026\0319;bv\035X|A\021UB*6tC\034{\033]\027\027\002\036\"\"(XbgM:c. IA\014@dWQ#*I\r3\020UWAM\037ra+\002l\014Pi <\027OS>=D\026G?Ur)'oy\034C\036\002\001@ \000\011B\004\001\\L\020\032AD\0260\004A@5(\020\014\023\001\020h\023\010,`\011\003\000jP  &\002'SF\021\001@\034\006\001U @8L\016T7\\MvsQ^1\014\014\002`0\r*\004\005\004atk\005Rl\"[LvK9J $[L2qDR0\023A@5(\020\026\023\020\020lW\023QRf4Xl\027#%^n\020\020.W#!^r4]\017\022\002\021Rv4\\m\026{8b\023\030\004 `\032T\010\003\011BMV\013%Xe7\031m\026s\024b \030\007@`I*\014HC=aP\010$\002\026\010Xl\024\0035Bi6\031-f;%\\e\027\030mviB\004\001\005\000P \010\004\001)<gv\024}\027\017c\"fOji]=Q&;\023'.GT.=?{kf\020\031\014I}&7uQ>S\rn\034b]e\022&\\>-+!^:1-\013\013pMc!v)W\037w\005Oakz5\1775Z\023=}a\r(\r\0246Q,dP\034%\031)nL'H&\014\031O\033v('h&`h\006aB[\r,YcBE\000k%\013q{\rY~\025X\027\177Lc 2b#nseLTV?blJ\014*9fhPtX\020\002\006E;i\024\011=U*K4V6h5k\036EW\036/0\016\021\023G\036aQ Vo\014AE$'~%*\\M28S]g[(\013>\020;eMS\021+\027\010{\001z\0342\016H]\030sN*R\013S\027<]x8@\027\026\030$#Z12]T\002`\031.FB1^k/a8\031pmC\032\005S\032z\031:>\001V\025v6Ua(G_\016q\0076O1o\020\020\014\002\000\000L\020 \n,a\001^\014!3\000$\014\003*A\000a\030\011\010E\030D\006\000p\030\006U\002\002\0020:!Bm1\035.&9D 0\007\001@5(\020\016\023\003R\014\026k\011jr3L'#\001`\014\003*A\001!\031E(C\020\025\016'+MhC2[NF+H@f7\\D\005\033\025Fu9\032.GI\001Rn\020\021\014\027#\004@N2]\016v{IVs\020\021mV\022 b\"\030\010\000`\032T\010\013\011F*D\031\001(r:\\nD\033\025\\t2\\D\004\0331Bs9H\006\002\002\r\0021\024L\004p0$U\006$!^ph\004\022\001\013\006L6+Ihi3\032,6\013QJ@:\034NW\033QFe7\035\014W\0219He\030 1\020\024\006\002\000o_<ku\177+p\027[)`vGA\r\005_g5'\"\025bX'e\014,+\r9YLd\177)\037\024\032&\025\002&]RdFYG);\037PB\013%@Ej\016\010i\034Bh\030G@G7[5Ie0I(0N 3\023w\010eO\031:(OC~\0071\013\021r\0143\\(C+.7Co$794\0140`W\037QU4P~@\020A,\002\0176Mk:Qb\014g\034u|U\177kH~f(` \030\004\000\001\030 @\024YB\003<\030Bf\000H\030\006U\002\001B0\022\021\n1\010\014\001`0\r*\004\004\004`tC\005Zb:\\Ls\010@`\016\003\000jP \034&\007$\030-V\023Udg\030NF\003@\030\006U\002\002B3\nQ\006 *\034NW\033Q\006e7\035\014W\021\001Lo9\010\n6+\rjr4]\017\022\003%\\ \"\030.F\011\001\034e:\035mw\023-f #[,$ADD0\020\001@5(\020\026\023\014U\0102\002Qdu9]\0106+9he9\010\0106c\005fs\020\014$\004\032\004b)\030\011``I*\014HC=aP\010$\002\026\r\030lW\023QRf4Xl\027#\025\000t9\035.7#\rJn:\031.\"s\021J0@b (\014\004\0010\024zvG5N]W[\026vEw\036{cXg\011\020\"]7!Uv/q\030o{:0j{\016;G>-\000%\013U\n!z#w],($@x\n\017V\"\027!>\035\000R\177&\000\021tRRf\\C$I\0069<eTQdE\005G\026d\004\020S\003%.t\"p\013(6\033*=p\032\nwiET$FQ2sqE|h3\014Mb#7X2\0332(\034W@bDd(l\034Pn@6\017@@0\010\000\0020A\000)3\004\006x1\005L\001\0200\r*\004\003\004`$\"\024b\020\030\003@`\032T\010\010\011Ai\006\0135Du9\031f\021\001@\034\006\001U @8L\016H0[,'+IN1\035\014\007\0000\r*\004\005\004f\025\"\014@T9\035.7\"\rJn:\031.\"\003\031^r\020\024lV\033Udi:\036$\006K8@D0]\014\022\0029Jt;[n&[L@G6XI\003\011\010` \003\000jP ,&\031*\020d\005#Ijs:\020lVsQJr\020\020mF\013Mf \031\010\0104\011DR0\023AA\022T\031\021\006{C \020H\004,\0321Y.'#%Li1X.F*\001hr:\\nF\033\025\\t2\\Ef#\024a\001D@P\030\010\00348t;& \001%c\003\000C7x`\0079Zc+'\032%&\024/jbkFB}!F1=,kn*\"\"v*CU\016\\{3(lP4rw\026IX<\011E/\025V-ca!3\000r$NA5\031 \0277no_7\034\016\030Rp\005)|S/\"Z\026ZO!2=\rR\004VW\0237:B-.\026^?_\005D{p)Fl\017<kc\022OV\"lpgF9{~\025s5:q\036\r\001\000`\020\000\004a\002\000Rf\010\rpb\013\030\002 `\032T\010\006\011@HD)D 0\007\001@5(\020\020\023\003R\014\026k\011jr3L\"\003\0008\014\003*A\000q\030\035\020a6XNW\023\034b:\030\016\000`\032T\010\n\011L*D\031\001(r:\\nD\033\025\\t2\\D\0063=d )Y,7+IRt<H\r\026q\001\010a:\030$\004s\025hw7\\M7\031\001\016m1\022\006\022\021@@\006\001U @XL2T!H\nG\023Uft!Y-g#\025d ![\014\027\033L@3\020\020h\023\011$`'\003\002%(2\"\rw\006@!\020\010X4c2\\NFK\031Rc0]\014T\003Qdu9]\0146+9he9\013LF)B\003\011\001 0\020\005ZiA\032A%`l7Y  \032C@q\036LPI\032j\001X\037<.s]YN\006ky\004T\027QF\033(VMlS@'0G\002\013y#/\034P\002mqX\003Z\177]\020.=Wjm\027TXO?WLt\031Q)3*b-&pGH%%\030mH?)J,q\024\n\0258i\"\r_]{\\0ctaVaTU8ztO\0345p\024>8\025VW$Q\0266w)IOi#O%\003]n\002\001@ \000\011B\004\001%L\020\033aD\0260\004A@5(\020\014\023\001\021\010S\010@`\016\003\000jP  &\007$\030-V\023Udg\030D\006\000p\030\006U\002\001b0:!Bm1\035.&9Dt0\034\001@5(\020\024\023\030U\0102\002Qdu9]\0106+9he9\010\014f{H@S2XnW\023%hy\020\032-b\002\021Bt0H\011f+Qno9\032n2\002\035Zb$\014$#\001\000\014\003*A\0011\030e(C\020\025\016'+MhC2[NF+H@C6\030.7\031\000h !P&\022I@N\006\004JPdD\033n\r\000B \0210iFe9\035\r\0263%Fa:\031(\007#Ijs:\030lVsQJr\027\031\014S\004\006\022\002@` \013y=GV\033\036v nM+u2\033\034b*w\r4d\005\027\")b\007k+\030TU-%K#z\010s\034\022.sPfU\014z5\016A#TLe77\022{-;l]U`IiCbmAu\024ie\023!d\014&0T\036ERw<\rma^@7\025x\027KJF`U.NahJ\022S-?\000+w\004\022\023bRE}av\026\031Vuq2\"\027vLz3+C(tRL(|~&bT\004\003\000@\000\023\004\010\002Z\030 93\010,`\011\003\000jP \030&\002-\020&\021)@&\006\001U @@L\030W2\\nF+I\\ !X.\006)D$0\010\001@5(\020\016\023\004Pl\027\003\024@T7]mc\010h`\030\003\000jP (&\021*\032\014\027;QJ ![mg\033UXt4[Ls\011 `&\003\000jP ,&\037!Y.'#%Li1X.FK=\\ )Y.'3%Fe9H\010FKYRs4[mc\011\004`\037\003\000jP \014&\030*\032\014\027;QJ (\031.'\033=\\a6\010\010&\013MRc\020\020h\023\011 `&\003\002%(2\"\rw\006@!\020\010X2p2\\N6{9Bl\026XL\027\033%F@:\032\014\027;QJ.1[mS\004\006\022\002@` \013er&S6p\n\004|\010+f$%\006Z2j|o!>At?9nu971TLn,WP\036\032LQ}#34Br\0270\\D\007KZXE\014M\027`F{fy-\004\030Mm\r\022\001h^\023\027p\r'\005:+\001t\004\034\035\023b\021vP?\0303)\007\014GSD\004(b?T\026\007\007.{]\013|@\nD.*`Y89\000m<<9q'^\024^BHOXm6\030hod9\031\004\004\003\000@\000\023\004\010\002`\030 :\023\010,`\011\003\000jP \030&\002-\020&\021)@&\006\001U @@L\030W2\\nF+I\\ !X.\006)D$0\010\001@5(\020\016\023\004Pl\027\003\024@T7]mc\010h`\030\003\000jP (&\021*\032\014\027;QJ ![mg\033UXt4[Ls\011 `&\003\000jP ,&\037!Y.'#%Li1X.FK=\\ )Y.'3%Fe9H\010FKYRs4[mc\011\020`\"\003\000jP \014&\033*\032\014\027;QJ (\031.'\033=\\a6\010\010g\023\025Jm0Z-B\002\r\0021\025L\005\0200$U\006$!^ph\004\022\001\013\007\016\006+Ifo7\030-Bk\031de2[,\026K1\000t4\030.w#\024\\c7[&\010\014$\005\001@@\032FN_)0J\031\0137\017%\017X\006\0246nSJ#0B\027ORh6\036{\0117pR+TPt\035\020EF\031\036?\025=R}wpf\016\035C:T=mg\035\0262\006X!#9\011,>9Q~B4\036q\017P\007\n0\002G\007<=_\031$\031=-u0\013g7/2\024QW-gSp\031%%U/p0dR\177O&Dm+*v8\022\002\r)F\036cZQf\022\037kg7e-1\003KH\010\006\001\000\000&\010\020\005<0@sf\020Y@\022\006\001U @0L\004Z L\"S\000L\014\003*A\001\001\0301.e9]\014W\0238@C0\\\014S\010H`\020\003\000jP \034&\011!X.\006)\001(o;[F\021Q@0\006\001U @PL\"T4\030.w#\024@C7[N7+1hi7\031f\022A@L\006\001U @XL>C2\\NFK\031Rc0]\r\026{8@S2\\NfK\rJs\020\021\r\0273%fi7[F\022\031@B\006\001U @\030L4T4\030.w#\024@P2\\N6{9Bl\020\024\016&+5Ru6H\0104\011DT0\024\001A\022T\031\021\006{C \020H\004,\0338\031.'\033=\\a6\013.\007\023\025Zi:[(\007#!Bw:\031%f\033=Z0@b (\014\004\001I36?\000:\023\0379F\013^\n\017<&E6\001;}q\034,Q\033\020\"\026c0wm\177\004\017Q\024{K\033!&_f\001G\006f[\\g$E9\035P\031\rrHET\0336l|~$&g+\010\0117.doH5|7HcgWG1\030\"S@q\007<,Bh\020nVj+=bU2&\037x|\000p>\031Yq\001\024\021:};@\016J\030\006f\023D\"S])7rL7&d\025K5\010:@@0\010\000\0020A\000+S\004\007\0341\005L\001\0200\r*\004\003\004`%R\004b\025\030\004``\032T\010\010\011C\nv+Mhe9\033D\004\033\005`e\030DF\001\000\030\006U\002\001b0J\rBp2H\nF{]\\1\016L\00300\r*\004\005\004bE#!Bw:\031$\004\033=\\s:[\016FK9N 1Xf\022A@L\006\001U @XL>C2\\NFK\031Rc0]\r\026{8@S2\\NfK\rJs\020\021\r\0273%fi7[F\022\011@>\006\001U @\030L0T4\030.w#\024@P9\031-VKUZ )Y.'3\025d !P&\022A@L\006\004JPdD\033n\r\000B \0210e`r2[-\027+4Zs2\\Nf+I\000t4\030.w#\024\\c7[&\010\014$\005\001@@\032#1YU\013kpK9vj\002A1#g\016r$\010Uk4\035q`n*\026#{c\004ATtRz\nm 4<v/u\025\\:|\032\033\036\013}sk#\025j\002&{y0M\010BQl&z\006>Bt\rI\001BG\036R'KKJ@\011bq\034\014^>BU\027sdD76B\024S8\021\037\027K<?M(u\0069mHe\032c\021\011\002o01\raf?U\001q_\"\011\033g '#C8\010\006\001\000\000&\010\020\005&0@q\006\020Y@\022\006\001U @0L\004Z L\"S\000L\014\003*A\001\001\0301.e9]\014W\0238@C0\\\014S\010H`\020\003\000jP \034&\011!X.\006)\001(o;[F\021i@6\006\001U @PL(T4\030.w#\024@C7[N7+1hi7\031d\006\033\014b(\030\011@`\032T\010\013\011Gh6+Ihi3\032,6\013QRo7\010\n6+Ili1Y.2\002\021Rv4\\m\026{8b\031\030\005``\032T\010\003\011D\nFC\005nt2H\n6+Ile9\010\0104\011DL0\022\001A\022T\031\021\006{C \020H\004,\0279Y.'3\025d-1Y.'#M\000t4\030.w#\024\\c7[&\010\014$\005\001@@\032:\"A]H\177UM>6=;6u\003\r\007*\036E*a6PB/rQt#T;(-T@tJ!C`{W\023i\004\030>P34`n\nF .JK\000bmS3\031w\011T\014\"\016\031_u{Fd\004\\\030_uEV)[\013i\034Ao('\002\011\"\0119?O\0206p\005\004\024g.L!wX?)\005ZTOW85G\007\001dlVv\013Frh{oMG,\025UL\"\0115Pph\010\006\001\000\000&\010\020\00440@bf\020Y@\022\006\001U @0L\004Z L\"S\000L\014\003*A\001\001\0301.e9]\014W\0238@C0\\\014S\010P`\022\003\000jP \034&\013\"\035.&\023\005\\v4[\rF)D\0360\006A@5(\020\024\023\003\025\r\006\013]he\030G&\001X\030\006U\002\002b1\"QPa;]\014R\002\rJr:\032,fK\rBt4[mc\010|`\035\003\000jP \014&\026*\032\014\027;QJ *\032-V+Mha6\\\r\026s\034@C L\020\030H\n\003\001\0005E5CaBEC\024}##m#\034vl\034bp`\035~p\027u\002>NiIp\037\013\024pX\034s*\030\030\027\177Z>.tNPR Ty[#A\014<\034{\011\024\r\026[tckgY!G'A\003ir%md\037o\002GN0k\020 \017l|Q_<oRK\\vl\024qHp]=%\003`&)\017\033\001,5\013y>\0078Qy\013,8d@\013$A\003\030}W}_U\\]\n|\"\006p\020\014\002\000\000L\020 C\034`W\030Cf\000h\030\006U\002\002B02QPa;]\014S\011\004`\037\003\000jP ,&\030*\032\014\027;QJ *[M\0273\025ds0[\004\004\032\004@R7[nC\011\004`\037\003\000jP \014&\030*\032\014\027;QJ *[M\0273\025ds0[\004\004\032\004@R7[nC\004\010\020\n\001 A\000\010\003E\011\002[87}6M\011\035?w<>6:7Xx:\"\010z6a\025\005<wZ]\036U\0364\027?Ndz>S/\035K%5'\032\013\000]0[K{\ny#h@.\027WSro6d!gM{#om)p**\030q\032\034-4[,!Vb\037_(_kSm\020TY\0074S\025K\035'-T\036CTztp}p\025E&qYNI\026>K<]wm\017{EjV V&^YM4f(|Z*\030+\003\014g\034kA\013<[\014Jc\022\033\017w\037eVUR\\d\026%\003H\025(\034N\011om|hnD\020)P\010yt\032\026/uN,\032?dG\177\035sH\003NdU>vH\014L\0177n\00602em|JJ\025=\005TNxUh!\014J\011\031DVVPymDEv)\020\0031=:\017|C=S\037\024'U(hB\030n\007\002g<U3\0375)$n255K\027\"8\0070'a[\036\037V:@<\005)\013:v;{\021moS\036y\021\0337\0258\017k\031\004)gCqSwD\013kD5F4Is\021rM \021\"(\001@M\026Fc.]\013\r0t=\020$x\026*=&ey\023G\037%(<&&\030-CS /\"!Y\017\016`WAo_d*x\0025AeNf:X3\030Z)!$d2d\036\027\0267ZjVp[\030a\".,R,d \"#)*GkOvb\030i@wKK\\$\005><\004+gUQ\016\027\022C8;i\013\"zX\0344KEh\026U7\013_ WaHQ=g\006HXu\010o~\036M|&\010{Db\006YM\004xz}tfA\023q\"hNVBgH*it^\034f\033\003ri_\024Wt\001*%&T0YDan\016\002a4R\036\037T\016qs4TTr\025!)\011bCEZYT'2k\\\017_m\014~\011!\\\017pMT\030\026F\177T;x8F9J&xd9jE\037xFys\032\031B4Cl\0201W%&|D[$9LJ\022\017Jv\025ojD@B \r^PgDk}j\007?>)\031\n\0042{R\177o\020FI\034&$\0141\010QA\014L^\014\005\031\"t\"\016bQT|b\r^q\005=fP[XTLr|.>vSP\036I\037dWjH\026o\031\023owpH]\027\031&+\"\021\003s>t\030}Qr2~U\010W\016\n|BT[S}v\0035\014f|%\rNW,\003t7mg4I\033N?gE>b2\010\016aRH\020\004\024?G>$Q\014\014Q1\010c\000?\ra*lr_\023rA\031\030mx\010\022.%\004%{\011\035Z7)<\036\0013\007bgFwpw\025>\017Zg~j\011#;)\024Bzq\"g(CuK\022HM/\003\034j:\021\011]\000\027'\007\n{&m\005\022\026f*\\\022>r\034\rA?\013TQCeOs\024!>\027\007\\\035\003R\037JIril2eY#;F7wH\024\000z%$G#'ba(0@]m%s\013lpFbC\"A\013!OF\006^cj\024\016vk-\014J a:Y\002}r-b;\032q\014\035\001\npZ\034&'a*2}[r2fioY\020p\"~)XXN?$\017zdPV23oG\005\003Zq. n:r\016\024\022L02\0245\016\020i\033+M{|^$fWEz\17774|2MbZCrR\026\\+vKqZ=\024\001K\002>DV\0219hH\rrE(ek76?=W0\023rSCmV\017\n\r\177a~\r\004\nQ\016;Pi'%L\\0\\\007V\003Z\021E$\n\\\034\021\025'\177\017P\023\027\0240\010o:8\026%\016}`}8$::\014\025g\003_ f\006sco\0040y7u\003-]KE\030\033q]\004i=0`A]4Li#\030V]8d&\021\"92'<\026~}c\035}Mf&nViX\031*`KRwD&5}tPv\025\"~\000\004(\020EL'Fl\020Ty?\036C'\017\r\017\016\020j|t@4Kn\013G2DF\022?=6FQl8Yn${\036C\0357\022ST#\023p\"L|$\016\024Y\021\027eDWQo\035bg-\000|\020\010n\002\\Wrs\013bZ\034\010qS&[N\023&?]`\035=\026AD\006=D\017BO\030 \0229}5{1%\"L\022f\037\033J\\\032SI\005DvZc(|H8]_4>%_JW*Tt^[E\021\002+\025d-a\022#\025\030l\rq\\G4\0000Zm@Dsz9ZB;\030\017SoJ\035D)\n45B)d.\006t\022)0\036H)\035rpK3X[\014\014p0\027\026\004~fa$\023\000Gz''s|Aw0\177%+[\035\022Q@2*D986IbVo\034\\/x'\005\003Cps\005(I\001$.ACmCI}\026-\013+\005_\001\022X\0009}\023;\030\030~\005\\\005\020Q}.<\\\036'L)h9Z;@\002?@\027*E\027:2X\177O\r-aarTZ4k\001\020p\011\002%\036K\005\013m/]P\022\r<gpb3\007O;\027*e0c=g\036JFR_\r14\036lZ\0245{29q=%^mJ\035h}\007O\035IY\003T4Ja`R>C`o\022Du+cL\021.(\001\025\003F\r\nn\026+#y8=\010\020\007\033\007\016%M1\037)f8\026[\027.<UXd@\000^ N\021laN?8;\004`6!@y\011trD\006a\013x_gB\000cXU\000J\0022R.c=.gVc!dj%\002\036(Vjx\0037\027\010\004>3)\020\014gQ\004\025\030e\004rGeByA\023M*L%n\001\"\006\016\027,\n\00068K!}Tq1\006I\007U<X\022w:$0\\'[}x@\003\013C\002.\rC2Q7(\007Bi5Sng~M'\"\014@T2c@\0174h\034 \011\\Kn=@a|gLA\011p7q!GBfsT\004vg\026\033~T]eIdNwSA\022gv#}&}w:5\004}+=h@4\005\032RU\023x_/Hg\035\007:j^\027)[gs\\$?\011\016\016\026u\011cIF,h,959&NCj,Y?M6\000\007u6i~\020doWTPn\177!{\027q\023w4P Me%\013\177._XVO#H\003Bef\010yG\005\0315\013`\020\014t>L(w\007HVWo?q\016\177\013#^[Ut6\007,$J\\w\nGa]/\002L\011NN\005M\017}js|D\003h\1778\011\010r .\031#Y5'\035n\017\nhbevh\r\013\021W\rmX\000cFYfz\002%1QKa}J\023e#8\013Snp:\\2h\016ghX\037Uf<lkBO\011zkT\027_\025QGP\010K(Q@\034a\rq\\\0372\005!\033Zv1?SnLi\\^dR8uaQ&)*6=N\"\033C\000\035];\035\177msUC|7)w,3N&\024N>2n\017.\022Sg\027N3\r8|D\017>gB6qR\0014\r\031'&N?G~Bi!qL*e/1tD_L+\006\0168]K7<4A|m\006a\037mQ?k\010-\r[`%\024vv;v\032\014.\026o79 \0045\"\036@M\031!\007H5L\002uiJp)\032nNmQl(J;\006\013\n'b$<O\023&6z\031V\010lL)\006Fwi{\022\025FK\026=Rf_\022\032(S\030EMy\0329\\\022L&E\024P$-2v0\037[)\026*\036\013\\\002\027T#=d\016Il8\0115\r !B27y\024\030\0119xc9>E\026-q`DgW  \030\004\000\001\030 @\033yB\003.\030Bf\000H\030\006U\002\001B0\022\r\0021\005L\001\0200\r*\004\004\004`$z8b\020\030\003@`\032T\010\007\011AjF{I^n:\033f\021Q@0\006\001U @PL\"T9\030,F+I\nn3Z-f)\001\022n1KF\022I@N\006\001U @XL@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\010FKYRs4[mc\010T`\023\003\000jP \014&\014:\034L\026#\025de7\031m\026s\024b\"\030\010\000`I*\014HC=aP\010$\002\026\011Xl\024\003Qda2\031.&+9Ni7\031%f\033=Z0A\000! \024\010\002\001\0003d_J\001\0379$7v8\006gk?>:>GL?D\024\007\026-q5a\nHZe)\177-m\177F\037\023/\011;V&#e\177%*8]U\0078/=\017}xWP3.<Z\024\036<,\005\030@A\034Z<D\026\031z\016=< Aq_8M\020\036jEo\022Z#n0FYdd\027n\014*\034miD?b^(\007uV\013>Q)I;%+dN2$sj\004pM\020\n\010b\020LY`\021+M\002yd\037~1et\007#=2&!v\007Qpv\004\016w\"z]O)*\024W8\035i|t\027\004\024\036\020P$X_\006\013|f(\036<:W})Q>%I[I\033\021\026=;/\006amoxDjPw\020&Q\r\037MGXLA*\021\0047n2p\022\003\026qx\007(\007\000\006\0273G\ns\034|e\007qR\011U|$*u|[^\034\037j%&ya\007;\0002k\032\033\0024Vd\010I)<\004\003\000@\000\023\004\007x07\014!3\000$\014\003*A\000a\030\011*S\030I&\002\030\030\006U\002\002B1bU\\i:\031,B\002Mha:\031.2\002A^s:\030-B\002MJr;\032,6)D20\013A@5(\020\026\023\010\035nw99js8\034ef\033=Z/!T\n3\010t`\033\003\000jP \014&\024*Tj\005\031\001 r7Y\016V\033QRo7\010\0104\011\000b0@b (\014\004\001Fk.={\022LqJi\035aFaXP0a4\005\000\023abN\006b(,:dO3H\002\004}$]4\036[\036\010D\003-iFFjj\030_\"Mm(iZg(_Xz*\027Jh\037\037`mb\022>A=t\014\013\0111J^\177&Qa\024\013t\004\034=kt\177v;GozUT<<sI\036\0263Z1\021S?+XHT\004BE\036XQ\nB\005\177aW0\014?'2b\024*#}_P'@@0\010\000\0020@}\006\0061D\0260\004A@5(\020\014\023\001\025*3\011\024`#\003\000jP (&\034*[M\027#\025H )]\014\027#\025f (\033n7#\005X )Y.'3%Fe\030F&\0018\030\006U\002\002b1\003]nw\027\035.7\003L\\c7[%t\032A&1\nL\00200\r*\004\001DaE*M S\020\024Mv{P@C L\020\030H\n\003\001\000-u\022-1GZX$Yy!Z`\004\177EMg0\0217uc\017\023|5e\004&*~r7\014\024\"edX$xF\021=\033\177\nO\004RITEOj\0379\rSF&.}(1!\032s^\036\033%F7U&}o9\ne=JDyzx6MS+n$rle\017tyo\026q\003Xp(\017\031i(}Ro`G\001\026\026\\f_zaf_y\022\006^*\021\027P?5 \001t\021[X\022v\032\020\020\014\002\000\000L\020 \n(a\001]L$C\001\010\014\003*A\000q\030m,a6\032(6+Ih +\030-FK\021Bt4[mb\0029Jt;[n&YD.0\nA@5(\020\024\023\007\025L\026c%\006e9\035\005B\002%\\c\027\014&S\001L\014\003*A\0011\0311,a6\032(6+Ih ![\014\027\033L@1\020\024\rvc%Fy\020\025L\026c%Ha:\032-vq\001\002u:\032\rw\023%hy\030H&\001x\030\006U\002\000b1C!ht8\016Er{]nw\027\035L\026c%Fe9\035\005f\033=Z/\030H\006\001p\030\022*C\022\020o84\002\011\000EB\026K9Lo \035L\026c%Fe9\035\005f\033=Z0@b (\014\004\001X,`O(Mb-:S\013m\006z`]'*\007\000fwSU\r$/\006\031 _as'/\026+AV$vX4\024Z(\007.\000\001DD!H#q\177\010Hs<p\037k?4FDor;SQ?g%D\000u2h7)_\005EB:\032Gtg\177\016p2\006@j\001n\001k;H)Q!\0207\030\036pa~H\n0;DV\002Cc\004opA\002h\\jW$5lrP\0073Qn\003:?8@@0\010\000\0020A\000)#\004\006v1\022\014\004 0\r*\004\003Dc53\005Xi!Y.'!\001,a6\032,F\013QRo7\010\011f+Qno9\032f\0219@*\006\001U @PL\034V0[\r\024\033\025dt\026\010\011\026s\014\\1\032L\00600\r*\004\005DeE3\005Xi!Y.'!\001\006l0\\n2\001H@P7[\r\026\033d@V0[\r\026#\005hi7[D\004\013Uhh7\\M\027#db!\030\007``\032T\010\003\011F\r\007#Q`:\027Knw;\\\\v0[\r\026\033\025dt\027\030mvi<b \030\007@`I*\014HC=aP\010$\002\026\010Z-f3=\000v0[\r\026\033\025dt\027\030mviB\003\011\001 0\020\0068tqe95<Bf$Ukj{\007 ;snl}JT:eJG\007\001*]g.06\036\027\n5nLaO\034;\027T\014'Z%!\002$FX)=3>7*\"j3MTk\037+%M%KT$DeR\"48P7m8\030*Pw~8y\0325b\013s\000p$# Rlr63|gu+p6?Z\027lG\031SG4\011/pv'c4\022\177Md|\rM\007;w^mbs'n\002\001@ \000\011B\004\001%\014\020\033YDH0\021\001@5(\020\016\023\rUL\026c%\006e9\035\004\0053\005Xi2\030.FK=\\ '\031.G;=dk\030Ef\001(\030\006U\002\002B0rYBl4PlW\023PX $[L2qDj0\031A@5(\020\026\023\026\025L\026c%\006e9\035\004\004\0331Bs9H\0062\002A^l4Xo\022\002YBl4Y\014\027#%^n\020\020.W#!^r4]\017\023\011\004`\037\003\000jP \014&\0304\035\016G\001h^/;]nrsYBl4XlW\023P\\c7[%s\011\000`\036\003\002%(2\"\rw\006@!\020\010X\"i7\031Mt\003YBl4XlW\023P\\c7[&\010\014$\005\001@@\0349BF,\034t56\0204\005TWa\\NY\035/\037\036S?\03612K,-&gfT% \\\004&Ai\030Q`Su;M|{=-;_\033\034\"IL?9BI<<v\004J/ll\022\033K~\004\004 c\011\024BB0`Z;\0336\025gO;^O\004\016\032\014#\016[MP-\\UBq\016\n{US\031/\036G\002\027\016W\010*0$L\n4tJfK]|-h6\023\007gSq4\nSx\010\006\001\000\000&\010\020\005\0020@lF\022!@D\006\001U @8L6V0[\r\024\033\025dt\020\025L\026c%Ha:\032-vq\001\034e:\035mw\023,b\027\030\005 `\032T\010\n\011CJf\0131RC2\\NBa\001\022n1KF\022a@T\006\001U @XLFC6\030.7\031\000b +\030-FK\021Bt4[mb\002\005jt4\033n&KQr \026H\011t\032M 1\020L\003p0\r*\004\001Dc\006CQhp\035\013ew;]n.;\030-FK\rJr:\013Mf+P^1\020\014\003`0$U\006$!^ph\004\022\001\013\004-\026s\031^@;\030-FK\rJr:\013L6{4a\001D@P\030\010\003\017\014\027ix4\004\034v=kq\023%@QH\naB\007\026\020k\037Ruj>\026KR\025J\007\026Nle\011$Nh<xGUWq&\016.t:=\021'\007-c8\000\005o*f\0229nL0[\021/d\000l-)J\017\")$(I$VPG![4TDslL:u)v\027\037\023\177=}\004He\036x(;-&*\001\025g7#Ko\017B\033s\007\n<\016\177`)oh'\1771A\177iEY\001\000`\020\000\004a\001vL\013s\010,`\011\003\000jP \030&\002*Tf\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\033L\006P0\r*\004\005Ded\0331Bs9H\006B\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\030 1\020\024\006\002\000h,N_3c!.-\024\036NJBS\037F5}y\014Qahi\011\022\0074&\013Vok\034`\010\\e\000x'24=r4eNGrzu\177S\006:Xd\010Mv\000XNA\001Im#\002$tB|S\013b{|\026C\006vTyq\000tQN_O6G{\011^y\014\n3%#w}'K\003\n\036J.N{Y+\036\036\023\\p'M5\034M\033v0g7Ve\033<6f}\001(\007Gp#j  \030\004\000\001\030 =S\002|b\013\030\002 `\032T\010\006\011@JU\031D.0\nA@5(\020\024\023\007\025LW\023%&i3[EB\002%\\c\027\014&s\001T\014\003*A\0011\0319\006l0\\n2\001D@P:XMFK\014@P9\032-V\013Ir !Y.'#%Li1X.FK=\\  ].FC=di:\036&\010\014$\005\001@@\034QM}[#+\030%YJ!cv3wW\030o.o\036C \001)\010;t8\022khhD\013JsT(\0232\"t\032\037f\031-`eC VB\006\020yP\0326\020P\\{{\"`rk70>a.VQ(\037jB 44c,?l\006M<<hgD\0029Q GDN\"UM\021{`\005\000m7\010y\011&v6dXkL/\003.-C^t\0339J`{\030.E\"yFUnQY{-X\010\006\001\000\000&\010\020\005 0@p&\020Y@\022\006\001U @0L\004U)L\"s\000T\014\003*A\001!\0309,e9\032*6K\035\\,\020\022-f\0318b<\030\016@`\032T\010\013\011Lh6c\005fs\020\014$\005\003UDl4Xd\005\003IRm0\\O\022\002\rJr:\032,fK\rBt4[mb\002\005jt4\033n&KQr \026H\010s\021Dt0\034\001@5(\020\026\023\030J\0142I\000b9\034N\004\0053\025di)Z,vq0@I7\030eb\0014@F7\\D\006\013Uhh7\\M\027S\025H :\\lR\003=\\l<L#s\000t\014\003*A\0011\030Y,e9\032*6K\035\\ *\034NW\033P@N2]\016v{IV0@b (\014\004\001*h.Wa16q\003j2Z }ql1e%\033\001lN\030V\001/\033\026xi^R\033\033NU0)+SoPpr\010EK\n?#wR\016yV2\037FpC$T\013\035 M=9\027.-]U\026'p\nM[\031'{<^\021)5\020`n8J0W\037H\"ztel:8>x\031\004G5\027\033+\r\033vmCm\"a7)Ox>#E7rM\033D\014#T\011 /N9\021uWg:@@0\010\000\0020A\000;3\004\007\0241\005L\001\0200\r*\004\003\004`%*Lb\027\030\005 `\032T\010\n\011CJf+IRS4Ymba\001\022n1KF\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030NF\003@\030\006U\002\002b3\011!F)\020\014'\023Id@V2\\M\025\033%Nn\026\010\011\026s\014\\ \026H\010f{H@a:]\r\006{IRz2Y\004\007+MJ 7[MGIE\n0!A@5(\020\006\023\036\025LW\023%&i3[D\004\0331Bs9H\006\022\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\013$\0049La\002\000B@(\020\004\002\000na\032KMSs'l<`GDs<=n\033\00216eu]\022\024,l\006\034LY\006k\000`F\n)Q\031G~\010\031T>n\rr\033jS8*N*\011}|#45l\005xao\002\022JWcP\013\001u\r\016\0378{\014\01736)H\014\016=_r\0100Voy\011DHApN\000]FV\030Hm]3/\000\020!ZFU454#0&Y+\020IJ@54\177J\n8\025LU4\014\035Jx_\011oG@`\177pOw)-\031Lm?PyI\007U:\177\017JM>I2xmO\rl}\000&\000\r.\004z\017\022|gK2T\014-N9]d]3nYB4_Qs;\032s`2?\021z+MY&{-*r\0035$1Gvt)],9\\$\\QJ#`\026g6\037\035m\032pzY\017\001\nA\011*|\014OQbV\021\014\016wm*Shc\rS\"Tm\010T<\033{\025W\037K\035Z\023h\010\006\001\000\000&\010\020\004l0@if\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\017L\003P0\r*\004\005Dbe3\025di)Z,vq\001(r:\\nB\0029Jt;[n&YDv0\034A@5(\020\026\023\031\025\014W\0235f 7YD\007+MJ 0]\004\006CQhp9NEr{]nw\027\035LW\023%fi3[Ef\033=Z/)\024\010\022\001!F)\030\014\006\022q@X\006\001U @\030LJC6\030.7\031\000b (\035,&c%F (\034M\026k\005dy\020\023h5\032@@R2\\n\006{9He9\014\020\030H\n\003\001\000.=Ushtw/sKsRKyM2=n\033+=U\026c\0262%,Q:/-KX\021\017(M\neip\023gY4Do\036B2\177u4Ql^fr2+\000'\037A\0006R[\003\003\0268-u]%(P\022\022Xbsi\031!-MjB!\004b\037P^\003\0075\036bpm\010Z\006Wx\016b 1^\1774mz\014\003.\011<9#Hf\021a\n\036z\032o\023l &<_\024m,c:\000P\020\014\002\000\000L\020\036iA>1\005L\001\0200\r*\004\003\004`%*Lb\027\030\005 `\032T\010\n\011CJf+IRS4Ymba\001\022n1KF\0239@j\006\001U @XL\\C6\030.7\031\000d (\035,&c%F (\034M\026k\005dy\020\020lW\023QRf4Xl\027#%^n\020\020.W#!^r4]\017\023\004\006\022\002@` \0132j\027#\006ZD8\034\001WO\034a~B\010Lf\006&\0114.jT%\027bip\013Oj\007A\020(\037\"xT\032|PX\r7sdYz\003\003g*wX6oXt_ry!$_A_)<#jox3\007p\005'roBG\026)!\"]\rQM$wd\014D\007;\n`\0225g/OL\004\033\007suM\025|\177RmB\036U!\002\023\021\003\030q\017\006qu\006$D8\022<u_r\024`\000|\004\003\000@\000\023\004\010\002P\030 8\023\010,`\011\003\000jP \030&\002*Tf\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\036\014\007 0\r*\004\005Df4\0331Bs9H\006\"\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\013$\0049Hb:\030\016\000`\032T\010\013\011L%\006\031$@1\034N'\002\002YJr4Tm\026;8X $[L2q\000Z #\033n\"\003\005jt4\033n&KiJd\020\035.6)\001^n6\036&\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030 1\020\024\006\002\000Sb\000\022\013PYg\r\000~\011G\006.<\007H!\017\014s7\027tf_L\020\020\014\023_\027j,F0<,\011\025EK@\005R,f&#zmB-.<A\036!\031g\002{L.A\002g#\005\004\011K\025&O$\023tcj *\"\013\004#'R[\017\000:E{\030[\031\0363>2'\003}<o\"1q\0366zhh7js\006dU\036+\026\022_T#\007\013,HTa\177\006[\036Rh9[N?]` \030\004\000\001\030 @\035YB\003J\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ae3\025di)Z,vq0@I7\030ec\010|`\035\003\000jP ,&\026+\031.&JMRg7\010\nG\023Uft\020\023LW#]^r5L'#\001`\014\003*A\0011\031DPc\024H\006\023Idr +\031.&JMRg7\013\004\004K9F.\020\013$\0043=d 0].FC=di=\031,B\003Ufe\020\033mfcdbE\030\020``\032T\010\003\011O\nf+IRS4Ymb\002\rXa9\\d\003\021\001 u1\033\r\026\031\001 r4[,\027\023d@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\005R\002\034f0A\000! \024\010\002\001\000+a n\013*,mYw\022o\026('ni7n\005A\033\017YX*cfYyCz3'h6.E\010q8;\n#'\0135q/x\0322\035 ^#\0161=,Zu57E\027q\0068N\023O\001(yYEt\023l\007{\035\030\010o\013VK\010\177\004:\002\006SC&\000g/n<\007H\003]cI\rnR@Y\005^\017\022V4S\030QF\006\"{\005u\"0\004nyoaR\007d3\000A\005\02552\01366\027 f\014[[?u\000UY\024\003E5;\031\r;S8r\0026N1;;m\011\024* \036\004 *k\0255S#)4\0311f\020F=\017f?dg ,cG1A\010wXcvi>\\W6vj\034I(i\034n4\003M435\026MjGk\016C3J!\002MAP1:\02420.mi+\014c|Z\031`B5\006oy\0113E|D,\nB|\010}y\006^b*\011B\017b\022W\003t$\004\003\000@\000\023\004\010\0026\030 4s\010\\`\025\003\000jP (&\016+\031.&JMRg7\013\004\004K9F.\030Gf\001h\030\006U\002\002b12YJr4Tm\026;8@T9\035.7!\001\034e:\035mw\023,b;\030\016 `\032T\010\013\011LJF+IZs\020\033lb\003Ufe\020\030.B\003!ht8\034g\"y=nw;KNf+IRs4Ymbs\r^m\027TJ\004\011\000Pc\024L\006\003\0118`,\003\000jP \014&%![\014\027\033L@2\020\024\016V\0231Rc\020\024\016&K5Br<H\011t\032M  )\031.7\003=\\d2\\F\010\014$\005\001@@\032\014S\014ba?Q\006G`\025z\013\036ZR\014[e\026w\005\017i<9\017K@1\013/icx}\010Cd:\ng!\032IChRi\004+:\004R@GxdoS\011\177\030T\016\022j{Hnm\017\0165\025\005\023\004\031`\034\001\001\033W.=\013]UOF7S\024C\"b1JME!{\032E\017bI*.gEd\001\"hc>i\037x-++\nw?9V\006r\035:\0036(b\021;\011~'\177\030\030\010\006\001\000\000&\010\0174`_\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ae3\025di)Z,vq0@I7\030ec\011\\`5\003\000jP ,&.![\014\027\033L@3\020\024\016V\0231Rc\020\024\016&K5Br<H\0106+Ihi3\032,6\013QRo7\010\010\027+QPo9\032.GIB\003\011\001 0\020\006%8YO<C8P\004)4\0107`D\006oFWWZHT\004>\010\014\005t&=Nd#Ow\000K\001y\027n*T\021\000ZW0\006\037<\037si\035f4\000U\010o]52\013\"1Q8w\021\037\031t&1NW\016Hso'P^\007.|\025\020c#D\006|`\037xV\010kw\001$m$da\\{\014hAK)i0^9v|}M?DD)O8v\n{!z\023EHL2KP\026B\026N\002\001@ \000\011B\004\001(\014\020\034\011D\0260\004A@5(\020\014\023\001\025*3\010\\`\025\003\000jP (&\016+\031.&JMRg7\013\004\004K9F.\030O\006\003P\030\006U\002\002b3\032\rXa9\\d\003\031\001 u1\033\r\026\031\001 r4[,\027\023d@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\005R\002\034d1\035\014\007\0000\r*\004\005Df\022C\014R \030N'\023A\001,e9\032*6K\035\\,\020\022-f\0318@-\020\021Mw\021\001Bu:\032\rw\023%te2\010\016W\033\024@o7\033\017\023\010|`\035\003\000jP ,&\026+\031.&JMRg7\010\nG\023Uft\020\023LW#]^r5L\020\030H\n\003\001\0003\013m\010E:\\4t\025=\035eTLLGk\031AB\034\026BH\010fj\034\177TBH\020N\0136gxR;!O\010\\\036;|i\177\022._\003OB\030~'c\017\037\"#|XeYN\034d \001\r\014\014\002rd\016\021.|>a]uJJ'E\007 iW<\007u\013S5\007\021JchU:y}E}rT@'/U\027\033U\006\006}l\002G\031\014y]b^6d4X?\011Xt9\011'W\014p\020\014\002\000\000L\020 \016la\001e\014!3\000$\014\003*A\000a\030\011*S\030Ef\001(\030\006U\002\002B0rYJr4Tm\026;8X $[L2qD>0\016A@5(\020\026\023\013\025LW\023%&i3[D\005#Ijs:\010\011f+Qno9\032f\023Q@p\006\001U @XLb(1J$\003\011dr9\020\025LW\023%&i3[EB\002%\\c\027\010\005R\002\031^r\020\030.W#!^r4^LV!\001js2H\rvs1r1\"L\01000\r*\004\001DgE3\025di)Z,vq\001\006l0\\n2\001L@P:XMFK\014@P9\032-V\013Ir !Y.'#%Li1X.FK=\\  ].FC=di:\036$\002i\001\0163\030 @\020P\n\004\001\000@\031;Tq%|<\007c!s<679o?\014K.(\022\030\023~\0032\037kPHB^Q>\"Ja`EH\004on\024aH9.b\006\004\"\006>jeFu\033j\021 c_\"m4Ta,i\014r23!h^\024K7\001\000\010Xh^Y\032#&y\003\013Y\025P,.yP,3QXgWWp!\022!9l\\Ng\031\033\\\032tL*\0348/\004\004i<1^I\"\035\006d\025.\021\r:/n\031\030\"TQ\0212e,\017\0240Dz\033ME\017Z*@\017owK\025.>\nH\014`A>+\023_jHr}!\r\027x\004\\/v\010\024+(yNn5]\r7q\0034le#\006L,U1\0367!&\\\016:S_\003\010,\013Sr+pgC=B;3U\177;+ez iT#\030S\023e=\030z9s\010oUBY3`w\031&$:\006kahI&[cK\034x\032$v\025W\"M\013J^.\002\001@ \000\011B\004\001\033\014\020\0329D.0\nA@5(\020\024\023\007\025LW\023%&i3[EB\002%\\c\027\014#s\000t\014\003*A\0011\030Y,e9\032*6K\035\\ *\034NW\033P@N2]\016v{IV1\035L\007\0200\r*\004\005Df%#\025dm9H\rv1\001js2H\014\027!\001Pt:\034\0163Q<^w;]eg3\025di9Z,vq9Fo6Kj%\002\004@(1J&\003\001D\\0\026\001@5(\020\006\023\022PmF\013Mf \031H\n\007+\011Xi1H\n\007\023%Za9\036$\004z\r&P\020\024LW\033A^n2\031.#\004\006\022\002@` \017\017\020\020\016Ann^\032#K8mi^\013M/R<11kc*o \002*\004;\014NE-9;\022w\032[kMM]=A@&Y}VX\002LZb8scx}eZ\031\024soX\"y{vl\030]7\034\036@>5aw\0350\007c([ZxF\020y|\021\030\\Gk!OYgF}V3C\004\"-\023\024es\007o'A ^?\002v`B\r\177BE3?GK<\013ZZ\\\005B[JT\004\003\000@\000\023\004\010\002P\030 8\023\010,`\011\003\000jP \030&\002*Tf\0219@*\006\001U @PL\034V2\\M\025\033%Nn\026\010\011\026s\014\\1\036\014\007 0\r*\004\005Df4\0331Bs9H\006B\002Ajb6\032,2\002Adi6X.'I\001\006e9\035\r\0263%Fa:\032-vq\001\002u:\032\rw\023%hy\020\013$\0049Hb:\030\016\000`\032T\010\013\011L%\006\031$@1\034N'\002\002YJr4Tm\026;8X $[L2q\000Z #\033n\"\003\005jt4\033n&KiJd\020\035.6)\001^n6\036&\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030 1\020\024\006\002\000]<\034L\177g\011.BU\027\020:_s\017b_m\001\017c\010\027X\021\033N\031AgU\025\030E+FC\030\034vJ\0137uuU\\Yd$LR\005D<~\000@\033xp,1J\0012w3:E-^X\"vb8a\006x\024&rRC\017(1 ;EZ*UAP-\rnY?JWbl%4\003C6Z&h1a}t\006\037l\000zHz22q^8P,bcQ\030\035!Z81cf\000\024G` \030\004\000\001\030 @\035YB\003J\030Bf\000H\030\006U\002\001B0\022U&1\013L\002P0\r*\004\005\004ae3\025di)Z,vq0@I7\030ec\010|`\035\003\000jP ,&\026+\031.&JMRg7\010\nG\023Uft\020\023LW#]^r5L'#\001`\014\003*A\0011\031DPc\024H\006\023Idr +\031.&JMRg7\013\004\004K9F.\020\013$\0043=d 0].FC=di=\031,B\003Ufe\020\033mfcdbE\030\020``\032T\010\003\011O\nf+IRS4Ymb\002\rXa9\\d\003!\001 u1\033\r\026\031\001 r4[,\027\023d@C2\\NFK\031Rc0]\r\026{8@A:]\r\006{IRt<H\005R\002\034f0A\000! \024\010\002\001\000+9:(ESF,j~\030}T2\017+3YK(|AdO\011DT_\001feDV;m\004\017Iu\007m7:oEyh\020\177\034N@3\\|\"HC\0274Jh\023[H\0130OiC.T<TXl\027\004*k7Lc6J6\002z*\022&\003r8iZ#dAvB\014R{\014SD\n`<\"^s(V\024T\020nh\031[U\035\013\031p\0107\nG\034,\011!#\014f5`]\0019O\023:?\035y+\003t,1\030riy\032K\010R\003\\ Kri\024q\000\0200\026xy9Fq:,`F\003y\020\006m\0331\026\027:\005O@Ff8\006YTi_+\022#-vqn\027L'\016\r\026%ZP\013alR!lmf\004\177ul.>Nd\013\rR\036e#^.\001\037\004dv44! \014jkQ5O\003-Uo'\027\177\001\014\010<81M\014e\006P}\0239~F\014\033\032[\177IK2~x\014\004\003\000@\000\023\004\007R0/L!3\000$\014\003*A\000a\030\011*S\030H\006\001p\030\006U\002\002B1:I&A\020\021\014\027#\004@S2XnW\023%hy\026\010\011\026s\014\\1\027\014\005@0\r*\004\005DdU\033\025Fu9\031$\005\033\025dv2\\D\004\033\025dt4YM\026\033\005hi7[D\004\013Uhh7\\M\027#da\001B@O`\004K\034z`kP3rjU\011AUuB(\005l\014VkQba_\035k\032^\014E \017K\004 \0249\033|<\021bE A\r\020Z\0147*z6\022\010\nZv4 3 -\011\027I%I,b\022YY\010\003c~x\ne[\004\003Y.\001\033El>M]iN\032B\022VL\022\027\021m\034R\032\011KI!\nf8\036\nu)\025!1f:4`V\0319f8m8\031i\016.t[Vd\007O0\020\014\002\000\000L\020 \0114a\001O\014\"s\000T\014\003*A\001!\0309,e9\032*6K\035\\,\020\022-f\0318b\037\030\007 `\032T\010\013\011EJf+IRS4Ymb\002Qdu9]\004\004s\025hw7\\M3\011l`9\003\000jP ,&2*\031.&kL@o3\010\016W\033\024@a:\010\r\007#Q`s\035\013ew;]n.;\031.&KMRg7\013L6{4^R(\020$\002C\014R0\030\014$S\001\014\014\003*A\0001\030q&e1].&)\001&e9\035LW\021\001\036C)T\004\005\023\025fp7[LF+Ha\001D@P\030\010\002pQLY\020Pw:f\n4<\027v\033X:Sz\177\024\027D0gnO}\027cNj6\017&Qu\030y\003PK\"/9lkn!Q\030:\022\014!\025w\011\0247W_4L;\177\\\177r+-&\033dW3\034,\030\036\006jQ\\B\000\011\035D\"S\r$cI6=O0\003\037D=\023/P!\036\024qk3!K'E4rH*i\025\"q\026\036:h\023W\034e;\001iV=B^lk\\\0101\026\037\001\000`\020\000\004a\002\000M\006\010\r\024b\027\030\005 `\032T\010\n\011CJf+IRS4Ymba\001\022n1KF\021y@:\006\001U @XL,V2\\M\025\033%Nn\020\025\016'+Mh '\031.G;=dk\030Nf\003H\030\006U\002\002b3\022QJr6\\d\006{\030@u9Y$\006\013P@h:\035\016\007\031h^/;]nrsYJr4\\m\026;8\\c7[%w\023AB \024\030e\023\001@b,\030\n@`\032T\010\003\011Hjf+IRS4Ymb\002QRm2H\n7#\005Zp4[Lr\002\005jt4\033n&KQr !P&\010\014$\005\001@@\032!LuOB\000\010+\026\026:h\011\021\021\r\030W`JZm{![9Y|Np.rCt@K\007a\030(rNfzT\\\030yBcuS4\031M^C8\0365AnP\nOg\001q\035P$w\020ItFQ?Q\030!#S6\n_2y\023\001Q\001\030\0374\032r(B\003\024^AiyfY('oKU\013~.!\014F]);g\013PDCs<d\010(Jnt=\004@\026\025$\0177;\023\007(\010\006\001\000\000&\010\020\005:0&L!3\000$\014\003*A\000a\030\011*S\030C&\000X\030\006U\002\002B0\"Y\022S L%s\0014\014\003*A\0011\031\031,i9X$\004K9he9\033L\027#%^n0[\004\005\033\025dv4XlR\002\005fs7Xm\026\013QRo7\014\020 \010(\005\002\000@ \014(u\032s e<\022\005QXlg\031}'(\032YD\0020L\002x\"%O\020;-jN%b&+(_]Ul\031xJB9\037OH;O\"%=S\n+4mp/?G(Z-BwBO f\036q4H\021EjH\\\025`#Q\020G`pz #\001H4\034\025ek.x ;aJ5Kw\0028e8Vf.m\014L\n8J1\022Mty\"\032\n`#{T\r\024t26hPMf\011\026$B/4\"T\r4\022RX&C\0355)vt\n#\022\037,\025zr\007`;\027Y\031Qr9\036ms#%\000\030=Q\177s('\033u`\037jJH \004fJBqU\001\"x+AkX\032_\003%pi2\036\032q'8'XQ|_w+\004plj\011V-;\"\020\0313C]>\r~y\016M:Y\011'&mL|\0050Y\0335Lw\025l\"p\\ Ll#([|r\016Jn{\177#4;91w\001\000`\020\000\004a\002\000\\&\006\011D\0260\004A@5(\020\014\023\001\025*3\0104`\013\003\000jP (&\004+\022*4\011D^0\026A@5(\020\026\023\023\025M\027\033\004@I7\035\014W\0239Bt4[mf\0130@S2\\NfK\rJ  \\n6{\rRa:\032-vqD$0\010\001@5(\020\006\023\004Qj\002\002I^o:\010\006#\004\010\002\n\001 @\020\010\002R\0018-5,\"\003a+5\011L\027Hd\001|_ffuH2^o2\006\177\rTV($4Lb\027\006+FV:(Bu;\0218 \0038:n{Fn;{jx\026NA\023$XA\032\177\"]E\011.,\016Rh\\HiqPL\016'9iVU`\nmD Qa}[$/i\rxF9Soe#L=(\026\025+\007-]\031s-\0214P\020kuZNph\\\031\011=sE|,\002NK\016_Z\003\007%\014\017^0|5\034|?Ku\031QHJ\013wd\n7Qk=YV\017MlD\006vaI\03468E`\011^eg\017EDr\177AQKZ#x- \025Ggm\017p!5\024`%d9\0116v?.=\034b26XaHTtc\016z\"u-\005\030\"\036\r\006$7aJW]\n}s41Uzlv(O%+;\004kC#K\022RX2Bm\014@ny\003;XM\030`\014\030ddjg` \030\004\000\001\030 @\027\011AB1\005L\001\0200\r*\004\003\004`%*Lb\r\030\002``\032T\010\n\011A\ndJM\0021\027L\005P0\r*\004\005Dde3%fa\020\022-g#\025dn0]\r\026{9Bl\020\024lW\023YRc2H\010\027\033M^c4X.FK=\\1\011\014\002\0000\r*\004\001Da\024:@@R7[nB\001La\002\000B@(\020\004\002\000];\010;ASU#3wnpH|4\020Q\007U\024tU\030tsC\033Ff\0321PU~Br$iO#$E\014HL>&\022\027{q}F8 \004Ea8\ra>x)L+sD\026\027\027RK3~J.\024Zn&c\007\010uIT\010Lu2\021]#Z3IR+\\_\034*C6T^\034G#/Z\0308\023\002U%7#at \020\034\005:~[\0022^Fldn~NX;,z7},F$\013\031\017\001b5;HI4\003^h\004P\022L\025\\fIAy9\032q4@7H\006\007R\001[4y\034kw\005<}uo0\nD\030'c\177 \034H:=C5)GaZGLBp>.#\\BFbU\026\011\00331l+,\027g\003Qg'lI>}\007l\013C\032^\007\003\037GPJCf!\037KSD-cTEH7\013zm\006-ma\006\025r~\011\032\036)B\024~.,:'J%bIC(\010\006\001\000\000&\010\017<`a\030Bf\000H\030\006U\002\001B0\022U&1\006L\00100\r*\004\005\004`E2%&A\030Kf\002h\030\006U\002\002b22YRs0H\011\026sQJr7\030.FK=\\a6\010\n6+Ili1Y$\004\013Mfo1Z,\027#%^n\030DF\001\000\030\006U\002\000b0J\035  )\033mw!\000h0@b (\014\004\0018u|\021z\007\033cc\000\017kg\024z\\\004\007}\011|v+4b\031z]eV\013\003v\027\016\021\033 7\037!W.&\033\037vMG[1\rH\0302\000a\034\016A+pp\003 \014F|\177[I[\0221ftjyOi4-F]\002Fy\031g\033|\"O\017\000/`\n\022\035D us%'*\\\032$\021o=eS6nSA|_U\005eDZnajBu\r\032@GR+\033G7:0\023]\033 @@0\010\000\0020@{f\006\011D\0260\004A@5(\020\014\023\001\025*3\0104`\013\003\000jP (&\004+\022*4\011D^0\026A@5(\020\026\023\023\025M\027\033\004@I7\035\014W\0239Bt4[mf\0130@S2\\NfK\rJ  \\n6{\rRa:\032-vqD$0\010\001@5(\020\006\023\004Qj\002\002I^o:\010\006S\004\006\022\002@` \nh\001]rP\037\006\021\010q\0030\033cp:\022\017\027\027/@D\010H5]<\025,>\032+\023_XG\022Zg\024v<n\017fU\017L\024\007,`Im('\025LH8fKd\020>\025bO}P\000y\016XSap3p\026\023pX#:^JL\n^m\003QPo\0117x\006\\\007J])eC\022B\"~\035D(fN\036\004v]3Gxk\037-\003GP.\017U\032YFL\033Ldc,7b&Y\014\004\003\000@\000\023\004\010\003\035\030 1C\010,`\011\003\000jP \030&\002*Tf\020i@\026\006\001U @@L\010U:\030-\003\010\\`\025\003\000jP \034&\016)X-G!\001\030a5Y$\004\033%hy\030F\006\0010\030\006U\002\002B0zaFe9\035\004\004*h@b<H\010E\032Pb\030\030\005@`\032T\010\003\011Ck\006\033\025dt\020\021+\"\003\011r \"\024jC\011\004`\037\003\002%(2\"\rw\006@!\020\010X$c0P\014FK\035fi3]\016'+Mh.1[mS\004\010\002\n\001 @\020\010\002ZT\0147VK\177^[h:*]X[r\037Bj\035#-,\022s61?\021\036\177\022.aI>c[G\0054G\032'S`1\013wSu\016\031;D,\017w\r(\002w8\03540\0165\005\023A\003.' 6\n\011\032\016\177R\014(E\0270\025e*5mM\031E-r\036\016\031>VT/yE\013*T'\026iAm'\033C\022+h\024\035\0308j\011Z\010xDuh6\002\000{6\002??GQ}\177 \000E6h\0075\0301%\nij{2K\004\001\013f\016x|*\003F\r-\r\"W\032_)k\000\025L~`*I>6c:\017z\003zC~:9\006\004\005@|t\010.LEP%/qWx9gS\025\000\030\005\013|\014Y@sWVm9X-g0!nnG\034O2\022C17W\026T\035rV9\\p,\034oc2\023N\030C3\005\034tvy_k\r:>\035\032%kU-+:)\024%\r}$|w\034  \030\004\000\001\030 @\024Y@v1\020L\003p0\r*\004\005\004c\005C\rJr:\010\011\026sQJr7\030.FK=\\a6\010\011\026s\014\\1\013\014\002@0\r*\004\005DaUC\rJr:\010\n&{=h !P&\010\020\004\024\002A\000 \020\005\"haEG#CtAvp\031\020\rXh[\02450X6^\027l+Iz\010+h\010o\036\"N+\025;[\003! \031wB\025\030h\022\017\035FB:NR\017L,=eU\025&EBTN]\\yR;!\001;w\017\025`VWD\004\022;-$jc]A($\031\011\177?8\027Z2E\025*(\020\022r4L>O?\036P\005\000hF^r\023\002 S '\013+\000djz\r1LTL\010SB\037.t\0142'\026cooEFK0YpZ?UH\030>Q\"^(8\021K\006E\020\0043Vrj\024(ZLun jDW;/I~\006\034 IWlH=hj~Y\002J\035R\032\nD1J}\030YA\024=\r\025[&=d\036\004}l\005\005Aj ox&\022-[\"\033a\007#wN`2W\"M6`Of:\020BO92`f)/\033U\014S&E>G\001HUoEL9*RCEQ\022bKh@@0\010\000\0020@sF\004\001DB0\017A@5(\020\024\023\014\026\0146+Ih $[NF+I\\a:\032-vs\005X $[L2qD60\014A@5(\020\026\023\011\026\0146+Ih )\033mw!\001\006A\020\014&\003\021Pa\001D@P\030\010\003->\033b\"\032M\013nG\026\nYvP\000Le\024\021\024HW\023= !U3\024#.xn\\1yl3\016mSt\033xYA,I\021\\'T+SE\021^\032\010\004\027V[%EDLTXN\0339\005B\025\036)r#[L\"-@o|;\011N,k3vg$DX`Ob@R\016\001\007\014TJ\016\031 \017HV\006\034+\010jU#q\030\026w2D\016)\034WI\016K\031a\001\027\016\023+he{k\001\000`\020\000\004a\002\000SF\003qDB0\017A@5(\020\024\023\014\026\0146+Ih $[NF+I\\a:\032-vs\005X $[L2qD20\013A@5(\020\026\023\010\026\0146+Ih )\033mw!\001\006A\020\035F\023\004\010\002\n\001 @\020\010\003\003\022U|Vc)X\004H\007a>Dq>\004efR\027k\r\\{3=kW#\021R\014<L/\177\013\005wwBf=A\0319a9\rRHin\016\"\011fH\031nC]\017lnLJq|\030\037%\027(Aip&.=2|\017\036sG\032,J\035:bV\177\035Ef!L`{\02055OJJ'\026< &#j#\rU|8C`\030|v]dg\013Dva\"\007tK)\"\016O\003p]LGf`2dI[0!&fE\032j\034u'\017{GH\031UX6\035\004\027\036sJ\007\006\036o\023\004j\033\001x.\011ar\026f_\004#\027yoQH\177\032[u&\030[J\031z5#9\0178Z+3\023p\001U<\0061\025}mvA3\001~p\\p\001b:F\024a|^!^jU|\034c\027ci\027\020C#\036B~(\036j xx\006?4\002P\0307/iw,r\1771\020/(R&b\025]\021M${` \030\004\000\001\030 :\023\002\014b!\030\007``\032T\010\n\011F\013\006\033\025dt\020\022-g#\025dn0]\r\026{9Bl\020\022-f\0318b\036\030\007\000`\032T\010\013\011E+\006\033\025dt\020\024Mv{P@C H\016c\011\000b0\031\r\006\010\014$\005\001@@\024pN\017%)S\006.\016a'RE=M\\\016Q{\023\0318\020\032\0333\003i]\021qk\027Lt=%_\r,0\007\033\000.6\020\n>6ElFxh\0318\032\025)\030\014so9Qcpt\031LgzI\024@(\023\027%\007\n\032\014 \036L\005:_\031\033z\037zHD\0023vsj7\022g'Q\035d5\007#9=\001x0pp\016;06Dw=<#\017B)bqO>\025\007/yExU\0179wh\010\006\001\000\000&\010\020\005T0-\014!3\000$\014\003*A\000a\030\011.W\030DF\001\000\030\006U\002\002B0K\011JT)\025*5#\025H1\rL\003\0200\r*\004\001Db&\023\025(R*TjF+\020@R7[nB\002\r\002s\030FF\001@\030\006U\002\000b1\013\011JT)\025*5#\025H )\033mw!\001\006A\030 @\020P\n\004\001\000@\032K#Mt\023\005\016\nP\rz\022Vpe\023m%y5k%\r\016Q[\004SDpk!\006\001\005pH\177m\032\017Ry\003\r0Q\020~G7\022X}?\0229V}\037j\037\r/_AMufxuyVz%\026='K-`t\014t\030<\035t<\177\037hM9v\023#Xh;>JTyr\004_\005O\037\011\n&`2\034e,q.\037{\010\023\017U11|c\002@s%5g\003xUe?Q%vw\007\"_b?\005@dgVTd\023\034@r-4k|\014,$m>c~\031\007 c8fqpE3M\007_%<9\rr\033->i\002fgM-\014\034X]_\011\032\177|tv\000d\022s{]M\177~.0:;1T<;W4aQ\034j:1~V!z\027\013eZ}zAe|k_o\0116IoC\021Az\031\001\\\\q\0017R,CN\031n1<C0\0117\030uDUXGD\000h5Z'\023\n\002\001@ \000\017\177\177\177";
-    static {
-        try {
-            org.ibex.net.SSL.addCompactCAKeys(new java.io.ByteArrayInputStream(unpack(DATA)));
-        } catch(Exception e) {
-            System.err.println("Error loading root CA keys: " + e.getMessage());
-        }
-    }
-    public static void load() { /* force clinit  */ }
-    private static byte[] unpack(String s) {
-        int len = s.length();
-        if(len % 8 != 0) throw new IllegalArgumentException("not a multiple of 8");
-        byte[] ret = new byte[(len / 8) * 7];
-        for(int i=0; i<len; i += 8) {
-            long l = 0;
-            for(int j=0;j<8;j++) {
-                l <<= 7;
-                l |= (s.charAt(i + j) & 0x7fL);
-            }
-            int base = (i / 8) * 7;
-            for(int j=6; j>=0; j--) {
-                ret[base + j] = (byte)(l & 0xff);
-                l >>>= 8;
-            }
-        }
-        return ret;
-    }}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/net/ssl/SwingVerifyCallback.java b/upstream/org.ibex.crypto/src/org/ibex/net/ssl/SwingVerifyCallback.java
deleted file mode 100644 (file)
index 832ef2f..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.ibex.net.ssl;
-
-import javax.swing.*;
-
-import java.awt.*;
-
-import org.ibex.net.SSL;
-import org.ibex.crypto.*;
-
-public class SwingVerifyCallback extends JDialog implements SSL.VerifyCallback {
-    private Component owner;
-    
-    public SwingVerifyCallback(Component owner) {
-        this.owner = owner;
-    }
-    /*
-        super(owner,"Certificate Verification",true);
-        setModal(true);
-        
-        JTextPane tp = new JTextPane();
-        doc = tp.getStyledDocument();
-        JScrollPane sp = new JScrollPane();
-        sp.setPreferredSize(new Dimension(400,300));
-        sp.setViewportView(tp);
-        sp.setAutoscrolls(false);
-
-        this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
-        JComponent bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT));
-        JButton accept = new JButton("Accept");
-        JButton reject = new JButton("Reject");
-        accept.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
-            accepted = true; 
-            hide();
-        }});
-        reject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
-            accepted = false; 
-            hide();
-        }});
-        bottom.add(accept);
-        bottom.add(reject);
-        getContentPane().add(BorderLayout.CENTER,sp);
-        getContentPane().add(BorderLayout.SOUTH,bottom);
-        pack();
-    }*/
-    
-    public static String prettyFingerprint(byte[] fp) {
-        StringBuffer sb = new StringBuffer(fp.length*3);
-        for(int i=0;i<fp.length;i++) {
-            if(i>0) sb.append(":");
-            sb.append("0123456789abcdef".charAt((fp[i] & 0xf0) >>> 4));
-            sb.append("0123456789abcdef".charAt((fp[i] & 0x0f) >>> 0));
-        }
-        return sb.toString();
-    }
-    
-    public synchronized boolean checkCerts(X509.Certificate[] certs, String hostname, SSL.Exn exn) {
-        final boolean[] ret = new boolean[1];
-        JTextArea ta = new JTextArea();
-        ta.append("Subject: " + certs[0].subject + "\n");
-        ta.append("Issuer: " + certs[0].issuer + "\n");
-        ta.append("Start Date: " + certs[0].startDate + "\n");
-        ta.append("End Date: " + certs[0].endDate + "\n");
-        ta.append("MD5: " + prettyFingerprint(certs[0].getMD5Fingerprint()) + "\n");
-        ta.append("SHA1: " + prettyFingerprint(certs[0].getSHA1Fingerprint()) + "\n");
-        ta.setEditable(false);
-        ta.setOpaque(false);
-        JScrollPane sp = new JScrollPane(ta);
-        sp.setPreferredSize(new Dimension(300,150));
-        final Object[] messages = new Object[] {
-                "The SSL Certificate the server presented could not be verified.",
-                exn.getMessage(),
-                sp,
-        };
-        Runnable r = new Runnable() { public void run() {
-            int n = JOptionPane.showOptionDialog(
-                    owner,
-                    messages,
-                    "Confirm Server Certificate",
-                    0,
-                    JOptionPane.WARNING_MESSAGE,
-                    null, 
-                    new Object[] { "Accept", "Reject" },
-                    "Accept");
-            ret[0] = n == 0;
-                    
-        } };
-        if(SwingUtilities.isEventDispatchThread()) {
-            r.run();
-        } else {
-            try {
-                SwingUtilities.invokeAndWait(r);
-            } catch(Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return ret[0];
-    }
-
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/net/ssl/Test.java b/upstream/org.ibex.crypto/src/org/ibex/net/ssl/Test.java
deleted file mode 100644 (file)
index aa43ccb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.ibex.net.ssl;
-
-import org.ibex.net.SSL;
-import java.io.*;
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        SSL.debugOn = true;
-        if(args.length < 2) { System.err.println("Usage: SSL host port"); }
-        String host = args[0];
-        int port = Integer.parseInt(args[1]);
-        SSL ssl = new SSL(host,port);
-        //ssl.setTLS(false);
-        ssl.getOutputStream().write(SSL.getBytes("GET / HTTP/1.0\r\nHost: " + host + "\r\n\r\n"));
-        cat(ssl.getInputStream());
-        ssl.close();
-        
-        // try to resume
-        ssl = new SSL(host,port,ssl.getSessionState());
-        ssl.getOutputStream().write(SSL.getBytes("GET / HTTP/1.0\r\nHost: " + host + "\r\n\r\n"));
-        cat(ssl.getInputStream());
-        ssl.close();
-    }
-    private static void cat(InputStream is) throws IOException {
-        BufferedReader br = new BufferedReader(new InputStreamReader(is));
-        String line;
-        int count = 100;
-        try {
-            while((line = br.readLine()) != null && --count >= 0) System.out.println(line);
-        } catch(SSL.PrematureCloseExn e) { /* ignore */ }
-    }
-}
diff --git a/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat b/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat
deleted file mode 100644 (file)
index c97bfab..0000000
Binary files a/upstream/org.ibex.crypto/src/org/ibex/net/ssl/rootcerts.dat and /dev/null differ