Move toolchain/jill projects in toolchain/jack git project

Bug: 22252617
Change-Id: Ie3a094410c5566ac17944a4092fcfe634d765c84
diff --git a/asm4/Android.mk b/asm4/Android.mk
deleted file mode 100644
index f94485c..0000000
--- a/asm4/Android.mk
+++ /dev/null
@@ -1,130 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#
-# asm
-#
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-# Excludes
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/attrs%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/commons%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/optimizer%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/tree%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/util%,,$(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/xml%,,$(LOCAL_SRC_FILES))
-
-LOCAL_MODULE := asm-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-analysis
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/tree/analysis)
-
-LOCAL_MODULE := asm-analysis-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-tree-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-commons
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/commons)
-
-LOCAL_MODULE := asm-commons-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-tree-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-tree
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/tree)
-# Excludes
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/tree/analysis%,, $(LOCAL_SRC_FILES))
-
-LOCAL_MODULE := asm-tree-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-util
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/util)
-
-LOCAL_MODULE := asm-util-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-analysis-4.1-jack asm-tree-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-xml
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src/org/objectweb/asm/xml)
-
-LOCAL_MODULE := asm-xml-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_LIBRARIES := asm-4.1-jack asm-util-4.1-jack
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-#
-# asm-all
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-# Excludes
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/attrs%,, $(LOCAL_SRC_FILES))
-LOCAL_SRC_FILES := $(patsubst src/org/objectweb/asm/optimizer%,, $(LOCAL_SRC_FILES))
-
-LOCAL_MODULE := asm-all-4.1-jack
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-
diff --git a/asm4/LICENSE.txt b/asm4/LICENSE.txt
deleted file mode 100644
index 4d19185..0000000
--- a/asm4/LICENSE.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-
- ASM: a very small and fast Java bytecode manipulation framework
- Copyright (c) 2000-2011 INRIA, France Telecom
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, 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. Neither the name of the copyright holders nor the names of its
-    contributors may be used to endorse or promote products derived from
-    this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, 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.
diff --git a/asm4/NOTICE b/asm4/NOTICE
deleted file mode 100644
index d0cd82d..0000000
--- a/asm4/NOTICE
+++ /dev/null
@@ -1,28 +0,0 @@
-
- ASM: a very small and fast Java bytecode manipulation framework
- Copyright (c) 2000-2005 INRIA, France Telecom
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, 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. Neither the name of the copyright holders nor the names of its
-    contributors may be used to endorse or promote products derived from
-    this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, 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.
diff --git a/asm4/README.android b/asm4/README.android
deleted file mode 100644
index b0614bb..0000000
--- a/asm4/README.android
+++ /dev/null
@@ -1,6 +0,0 @@
-URL: http://asm.ow2.org/
-Version: 4.1
-License: BSD
-Description: "ASM is an all purpose Java bytecode manipulation and analysis framework."
-
-Direct link: svn://svn.forge.objectweb.org/svnroot/asm/tags/ASM_4_1
diff --git a/asm4/README.txt b/asm4/README.txt
deleted file mode 100644
index b4c0a05..0000000
--- a/asm4/README.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, 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. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, 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 directory is the base directory of the product.
-It contains(*) the following items:
-
-- archive: ant files to build the jar(s) of the product,
-- build.properties: properties to configure the build process,
-- build.xml: main ant file to build the product,
-- config: external libraries required only for building the product,
-- doc: documentation of the product,
-- etc: scripts to run the product,
-- examples: examples of use of the product,
-- externals: external libraires required for running the product,
-- jdoc: ant files to build the javadoc documentation(s) of the product,
-- sr': sources of the product,
-- test: tests of the product,
-- web: source of the web site of the product.
-
-(*) some items may not be present, depending on the product.
-
diff --git a/asm4/archive/README.txt b/asm4/archive/README.txt
deleted file mode 100644
index 35155ac..0000000
--- a/asm4/archive/README.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, 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. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, 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 directory contains ant files to build the jars of the product.
-The following rules describe the convention to write such files:
-
-- An ant file must build only one jar file.
-
-- The name of the ant file must be the name of the jar it builds:
-  org-foo-bar.xml must build org-foo-bar.jar.
-
-- Among the elements which are included into a jar, you must specify
-  a manifest. It is adviced to store the manifest file in this directory.
-  The manifest file can be shared by several jars. The name of the manifest
-  file must be similar to the name of the jar file.
-
-- Only the default task is called on each ant file.
-
-- The jar file must be produced into the ${dist.lib} directory.
-
-Sample ant file:
-
-<project name="foo" default="dist">
-  <target name="dist">
-    <jar jarfile="${out.dist.lib}/foo.jar"
-         basedir="${out.build}"
-         manifest="${archive}/foo.mf">
-         
-      ...
-      
-    </jar>
-  </target>
-</project>
diff --git a/asm4/archive/asm-all.bnd b/asm4/archive/asm-all.bnd
deleted file mode 100644
index b654794..0000000
--- a/asm4/archive/asm-all.bnd
+++ /dev/null
@@ -1,60 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM all classes
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM all classes with debug info
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.all
-
-Export-Package: \
-  !org.objectweb.asm.optimizer.*,\
-  org.objectweb.asm.*;version=${product.artifact}
-
-Import-Package: \
-  javax.xml.transform.*;resolution:="optional",\
-  org.xml.sax.*;resolution:="optional"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-all.pom b/asm4/archive/asm-all.pom
deleted file mode 100644
index d4f123b..0000000
--- a/asm4/archive/asm-all.pom
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.ow2.asm</groupId>
-    <artifactId>asm-parent</artifactId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM All</name>
-  <groupId>org.ow2.asm</groupId>
-  <artifactId>asm-all</artifactId>
-  <packaging>jar</packaging>
-  
-</project>
diff --git a/asm4/archive/asm-all.xml b/asm4/archive/asm-all.xml
deleted file mode 100644
index 3d82865..0000000
--- a/asm4/archive/asm-all.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-all" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-all.bnd"
-            output="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-all.pom" toFile="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-
-    <echo file="${out.dist.lib}/all/README.txt">It is highly recommended to use only the necessary ASM jars for your
-application instead of using the asm-all jar, unless you really need
-all ASM packages.</echo>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/all/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/asm4/archive/asm-analysis.bnd b/asm4/archive/asm-analysis.bnd
deleted file mode 100644
index a05c03b..0000000
--- a/asm4/archive/asm-analysis.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM static code analysis framework
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM static code analysis framework
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.analysis
-
-Export-Package: \
-  org.objectweb.asm.tree.analysis;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-analysis.pom b/asm4/archive/asm-analysis.pom
deleted file mode 100644
index 47273a1..0000000
--- a/asm4/archive/asm-analysis.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Analysis</name>
-  <artifactId>asm-analysis</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-tree</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-analysis.xml b/asm4/archive/asm-analysis.xml
deleted file mode 100644
index c3ecd65..0000000
--- a/asm4/archive/asm-analysis.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-analysis" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-analysis.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-analysis.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-commons.bnd b/asm4/archive/asm-commons.bnd
deleted file mode 100644
index fde93b2..0000000
--- a/asm4/archive/asm-commons.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM commons classes
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM commons classes
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.commons
-
-Export-Package: \
-  org.objectweb.asm.commons;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-commons.pom b/asm4/archive/asm-commons.pom
deleted file mode 100644
index eaccb73..0000000
--- a/asm4/archive/asm-commons.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Commons</name>
-  <artifactId>asm-commons</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-tree</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-commons.xml b/asm4/archive/asm-commons.xml
deleted file mode 100644
index 95129a7..0000000
--- a/asm4/archive/asm-commons.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-commons" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-commons.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-commons.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-debug-all.bnd b/asm4/archive/asm-debug-all.bnd
deleted file mode 100644
index 194e6a1..0000000
--- a/asm4/archive/asm-debug-all.bnd
+++ /dev/null
@@ -1,60 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM all classes with debug info
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM all classes with debug info
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.all.debug
-
-Export-Package: \
-  !org.objectweb.asm.optimizer.*,\
-  org.objectweb.asm.*;version=${product.artifact}
-
-Import-Package: \
-  javax.xml.transform.*;resolution:="optional",\
-  org.xml.sax.*;resolution:="optional"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-debug-all.pom b/asm4/archive/asm-debug-all.pom
deleted file mode 100644
index ad88584..0000000
--- a/asm4/archive/asm-debug-all.pom
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.ow2.asm</groupId>
-    <artifactId>asm-parent</artifactId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Debug All</name>
-  <groupId>org.ow2.asm</groupId>
-  <artifactId>asm-debug-all</artifactId>
-  <packaging>jar</packaging>
-  
-</project>
diff --git a/asm4/archive/asm-debug-all.xml b/asm4/archive/asm-debug-all.xml
deleted file mode 100644
index 865e5e5..0000000
--- a/asm4/archive/asm-debug-all.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-debug-all" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-      classpath="${out.build}/tmp"
-      eclipse="true"
-      failok="false"
-      exceptions="true"
-      files="archive/asm-debug-all.bnd"
-      output="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-debug-all.pom" toFile="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-
-    <echo file="${out.dist.lib}/all/README.txt">It is highly recommended to use only the necessary ASM jars for your
-application instead of using the asm-all jar, unless you really need
-all ASM packages.</echo>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <mkdir dir="${out.dist.lib}/all"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/all/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/all/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/asm4/archive/asm-parent.pom b/asm4/archive/asm-parent.pom
deleted file mode 100644
index 0f30c8e..0000000
--- a/asm4/archive/asm-parent.pom
+++ /dev/null
@@ -1,163 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
-                        http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <parent>
-    <artifactId>ow2</artifactId>
-    <groupId>org.ow2</groupId>
-    <version>1.3</version>
-  </parent>
- 
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>asm-parent</artifactId>
-  <groupId>org.ow2.asm</groupId>
-  <version>@product.artifact@</version>
-  <packaging>pom</packaging>
-
-  <name>ASM</name>
-  <description>A very small and fast Java bytecode manipulation framework</description>
-  <url>http://asm.objectweb.org/</url>
-  
-  <organization>
-    <name>ObjectWeb</name>
-    <url>http://www.objectweb.org/</url>
-  </organization>
-  <inceptionYear>2000</inceptionYear>
-  
-  <licenses>
-    <license>
-      <name>BSD</name>
-      <url>http://asm.objectweb.org/license.html</url>
-    </license>
-  </licenses>
-
-  <developers>
-    <developer>
-      <name>Eric Bruneton</name>
-      <id>ebruneton</id>
-      <email>ebruneton@free.fr</email>
-      <roles>
-        <role>Creator</role>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-    <developer>
-      <name>Eugene Kuleshov</name>
-      <id>eu</id>
-      <email>eu@javatx.org</email>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-    <developer>
-      <name>Remi Forax</name>
-      <id>forax</id>
-      <email>forax@univ-mlv.fr</email>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <scm>
-    <connection>scm:svn:svn://svn.forge.objectweb.org/svnroot/asm/trunk</connection>
-    <developerConnection>scm:svn:svn+ssh://${maven.username}@svn.forge.objectweb.org/svnroot/asm/trunk</developerConnection>
-    <url>http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/asm/trunk/</url>
-  </scm>
-  
-  <issueManagement>
-    <url>http://forge.objectweb.org/tracker/?group_id=23</url>
-  </issueManagement>
-
-  <dependencyManagement>
-    <dependencies>
-
-      <dependency>
-        <artifactId>asm</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-tree</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-analysis</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-commons</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-util</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <dependency>
-        <artifactId>asm-xml</artifactId>
-        <groupId>${project.groupId}</groupId>
-        <version>${project.version}</version>
-      </dependency>
-
-    </dependencies>
-  </dependencyManagement>
-
-  <mailingLists>
-    <mailingList>
-      <name>ASM Users List</name>
-      <subscribe>sympa@objectweb.org?subject=subscribe%20asm</subscribe>
-      <unsubscribe>sympa@objectweb.org?subject=unsubscribe%20asm</unsubscribe>
-      <post>asm@objectweb.org</post>
-      <archive>http://www.objectweb.org/wws/arc/asm</archive>
-    </mailingList>
-    <mailingList>
-      <name>ASM Team List</name>
-      <subscribe>sympa@objectweb.org?subject=subscribe%20asm-team</subscribe>
-      <unsubscribe>sympa@objectweb.org?subject=unsubscribe%20asm-team</unsubscribe>
-      <post>asm-team@objectweb.org</post>
-      <archive>http://www.objectweb.org/wws/arc/asm-team</archive>
-    </mailingList>
-  </mailingLists>
-
-</project>
diff --git a/asm4/archive/asm-parent.xml b/asm4/archive/asm-parent.xml
deleted file mode 100644
index 11381f7..0000000
--- a/asm4/archive/asm-parent.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-parent" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <copy file="${archive}/asm-parent.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-tree.bnd b/asm4/archive/asm-tree.bnd
deleted file mode 100644
index d869914..0000000
--- a/asm4/archive/asm-tree.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM Tree class visitor
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM Tree class visitor
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.tree
-
-Export-Package: \
-  org.objectweb.asm.tree;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-tree.pom b/asm4/archive/asm-tree.pom
deleted file mode 100644
index 624120b..0000000
--- a/asm4/archive/asm-tree.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Tree</name>
-  <artifactId>asm-tree</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-tree.xml b/asm4/archive/asm-tree.xml
deleted file mode 100644
index 527a9ef..0000000
--- a/asm4/archive/asm-tree.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-tree" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-tree.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-tree.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-util.bnd b/asm4/archive/asm-util.bnd
deleted file mode 100644
index dfc4c99..0000000
--- a/asm4/archive/asm-util.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM Utilities
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM Utilities
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.util
-
-Export-Package: \
-  org.objectweb.asm.util;version=${product.artifact}
-
-Import-Package: \
-  org.objectweb.asm.*;version:="[${product.artifact},${product.artifact}]"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-util.pom b/asm4/archive/asm-util.pom
deleted file mode 100644
index 065ddd8..0000000
--- a/asm4/archive/asm-util.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Util</name>
-  <artifactId>asm-util</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-tree</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-util.xml b/asm4/archive/asm-util.xml
deleted file mode 100644
index b20b783..0000000
--- a/asm4/archive/asm-util.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-util" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-util.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-util.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm-xml.bnd b/asm4/archive/asm-xml.bnd
deleted file mode 100644
index 03e7439..0000000
--- a/asm4/archive/asm-xml.bnd
+++ /dev/null
@@ -1,61 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM XML classes
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: Eugene Kuleshov
-Class-Path: asm-${product.artifact}.jar asm-util-${product.artifact}.jar asm-attrs-${product.artifact}.jar
-Main-Class: org.objectweb.asm.xml.Processor
-
-Bundle-Name: ASM xml classes
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm.xml
-
-Export-Package: \
-  org.objectweb.asm.xml;version=${product.artifact}
-
-Import-Package: \
-  javax.xml.transform.*;resolution:="optional",\
-  org.xml.sax.*;resolution:="optional"
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm-xml.pom b/asm4/archive/asm-xml.pom
deleted file mode 100644
index a95e658..0000000
--- a/asm4/archive/asm-xml.pom
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM XML</name>
-  <artifactId>asm-xml</artifactId>
-  <packaging>jar</packaging>
-  
-  <dependencies>
-    <dependency>
-      <artifactId>asm-util</artifactId>
-      <groupId>org.ow2.asm</groupId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/asm4/archive/asm-xml.xml b/asm4/archive/asm-xml.xml
deleted file mode 100644
index c7a123d..0000000
--- a/asm4/archive/asm-xml.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm-xml" default="dist">
-
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm-xml.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm-xml.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/archive/asm.bnd b/asm4/archive/asm.bnd
deleted file mode 100644
index d9abde8..0000000
--- a/asm4/archive/asm.bnd
+++ /dev/null
@@ -1,56 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-
-Implementation-Title:  ASM
-Implementation-Version: ${product.artifact}
-Implementation-Vendor: France Telecom R&D
-
-Bundle-Name: ASM
-Bundle-Vendor: France Telecom R&D
-Bundle-Version: ${product.artifact}
-Bundle-DocURL:  http://asm.objectweb.org
-Bundle-SymbolicName: org.objectweb.asm
-
-Export-Package: \
-  org.objectweb.asm;version=${product.artifact}, \
-  org.objectweb.asm.signature;version=${product.artifact}
-
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-
--removeheaders:\
-  ANNV,\
-  DSTAMP,\
-  FRAMESV,\
-  RESIZEV,\
-  SIGV,\
-  TODAY,\
-  TSTAMP,\
-  WRITERV
diff --git a/asm4/archive/asm.pom b/asm4/archive/asm.pom
deleted file mode 100644
index 2f57353..0000000
--- a/asm4/archive/asm.pom
+++ /dev/null
@@ -1,44 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <artifactId>asm-parent</artifactId>
-    <groupId>org.ow2.asm</groupId>
-    <version>@product.artifact@</version>
-  </parent>
-
-  <name>ASM Core</name>
-  <artifactId>asm</artifactId>
-  <packaging>jar</packaging>
-  
-</project>
diff --git a/asm4/archive/asm.xml b/asm4/archive/asm.xml
deleted file mode 100644
index 47e7b9e..0000000
--- a/asm4/archive/asm.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm" default="dist">
-  
-  <target name="dist" depends="build-jar,build-snapshot"/>
-
-  <target name="build-jar">
-    <taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${config}/biz.aQute.bnd.jar"/>
-    <bnd
-            classpath="${out.build}"
-            eclipse="true"
-            failok="false"
-            exceptions="true"
-            files="archive/asm.bnd"
-            output="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar"/>
-
-    <copy file="${archive}/asm.pom" toFile="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.name@" value="${ant.project.name}"/>
-    <replace file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" token="@product.artifact@" value="${product.artifact}"/>
-  </target>
-
-  <target name="build-snapshot" if="product.snapshot">
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.jar" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.jar"/>
-    <copy file="${out.dist.lib}/${ant.project.name}-${product.artifact}.pom" toFile="${out.dist.lib}/${ant.project.name}-SNAPSHOT.pom"/>
-    <echo file="${out.dist.lib}/${ant.project.name}-snapshot-version" message="${product.build.time}"/>
-  </target>
-
-</project>
diff --git a/asm4/build.properties b/asm4/build.properties
deleted file mode 100644
index 6aade18..0000000
--- a/asm4/build.properties
+++ /dev/null
@@ -1,126 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-# Some information about the product
-
-product.name    asm
-product.version 4.1
-# product.snapshot yes
-
-plugin.version 3.3.0
-
-
-###############################################################################
-# BUILD
-###############################################################################
-
-# Wich compiler do you want to use ?
-# jikes is faster than javac but keeps line numbers in compiled classes, even
-# with the -O option (javac removes line numbers and local variable names with
-# this option, resulting in smaller classes)
-
-build.compiler modern
-
-# Build class path (classes needed to build the project)
-# Class path for the ObjectWeb utility Ant tasks (version 1.3.2 or higher)
-# See http://forge.objectweb.org/projects/monolog
-
-# objectweb.ant.tasks.path ow_util_ant_tasks.jar
-
-###############################################################################
-# TESTS (PERFORMANCE COMPARISONS WITH BCEL AND SERP)
-###############################################################################
-
-# Class path for the BCEL library (version 5.2)
-# See http://jakarta.apache.org/bcel
-
-# bcel.path bcel.jar
-
-# Class path for the AspectJ library that contains the modified BCEL version 
-# (version 1.5) See http://www.eclipse.org/aspectj
-
-# aspectj.path aspectjweaver.jar
-
-# Class path for the SERP library (version 1.14.2)
-# See http://serp.sourceforge.net
-
-# serp.path serp.jar
-
-# Class path for the Javassist library (version 3.6.GA)
-# See http://www.csg.is.titech.ac.jp/~chiba/javassist
-
-# javassist.path javassist.jar
-
-# Class path for the Janino compiler (version 2.5.11)
-# See http://www.janino.net/
-
-# janino.path janino.jar
-
-# Class paths for Cobertura (version 1.9)
-
-# corbertura.path cobertura.jar
-# cobertura.runtime.path cobertura.jar
-
-# Class paths for Kawa (version 1.9.1)
-
-# kawa.runtime.path kawa.jar
-
-# Class paths for CSG Bytecode
-
-# csg-bytecode.runtime.path csg-bytecode.jar
-
-# Class paths for Cojen (version 2.0)
-
-# cojen.runtime.path cojen.jar
-
-# Class paths for JBET (version 3-R1)
-
-# jbet.runtime.path jbet.jar
-
-# Class paths for JClassLib
-
-# jclasslib.runtime.path jclasslib.jar
-
-# Class paths for Jiapi
-
-# jiapi.runtime.path jiapi.jar
-
-# Class paths for mozilla.classfile (version 1_7R1)
-
-# rhino.runtime.path rhino.jar
-
-###############################################################################
-# DOCUMENTATION
-###############################################################################
-
-# URLs of external Javadocs (JDK)
-
-jdk.url     http://java.sun.com/j2se/1.4.2/docs/api
-
diff --git a/asm4/build.xml b/asm4/build.xml
deleted file mode 100644
index 3e8b729..0000000
--- a/asm4/build.xml
+++ /dev/null
@@ -1,715 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="ASM" default="compile" xmlns:m2="urn:maven-artifact-ant">
-
-	<!-- ==================================== -->
-	<!-- ======== PROPERTY DEFINITION ======= -->
-	<!-- ==================================== -->
-
-	<property file="${user.home}/asm-build.properties" />
-	<property file="build.config" />
-	<property file="build.properties" />
-
-	<property name="src" value="${basedir}/src" />
-	<property name="test" value="${basedir}/test" />
-	<property name="doc" value="${basedir}/doc" />
-	<property name="jdoc" value="${basedir}/jdoc" />
-	<property name="web" value="${basedir}/web" />
-	<property name="examples" value="${basedir}/examples" />
-	<property name="examples.common" value="${examples}/common" />
-	<property name="config" value="${basedir}/config" />
-	<property name="archive" value="${basedir}/archive" />
-
-	<property name="out" value="${basedir}/output" />
-	<property name="out.build" value="${out}/build" />
-	<property name="out.instr" value="${out}/instr" />
-	<property name="out.dist" value="${out}/dist" />
-	<property name="out.dist.lib" value="${out.dist}/lib" />
-	<property name="out.dist.doc" value="${out.dist}/doc" />
-	<property name="out.dist.jdoc" value="${out.dist.doc}/javadoc" />
-	<property name="out.dist.examples" value="${out.dist}/examples" />
-	<property name="out.dist.externals" value="${out.dist}/externals" />
-	<property name="out.test" value="${out}/test" />
-	<property name="out.tmp" value="${out}/tmp" />
-	<property name="out.zip" value="${out}/zip" />
-
-	<property name="maven-staging-repository-id" value="ow2.release" />
-	<property name="maven-staging-repository-url" value="http://repository.ow2.org/nexus/service/local/staging/deploy/maven2" />
-
-	<target name="properties">
-		<condition property="examples.exist">
-			<available file="${examples}" />
-		</condition>
-
-		<condition property="web.exist">
-			<available file="${web}/build.xml" />
-		</condition>
-
-		<condition property="paths.configured">
-			<and>
-				<isset property="objectweb.ant.tasks.path" />
-			</and>
-		</condition>
-
-		<condition property="passphrase.configured">
-			<and>
-				<isset property="passphrase" />
-			</and>
-		</condition>
-
-		<condition property="product.shrink">
-			<not>
-				<isset property="product.noshrink" />
-			</not>
-		</condition>
-
-		<condition property="SIGV" value="false" else="true">
-			<isset property="nosignatures" />
-		</condition>
-		<condition property="SIG" value="-signatures" else="">
-			<isset property="nosignatures" />
-		</condition>
-		<condition property="ANNV" value="false" else="true">
-			<isset property="noannotations" />
-		</condition>
-		<condition property="ANN" value="-annotations" else="">
-			<isset property="noannotations" />
-		</condition>
-		<condition property="FRAMESV" value="false" else="true">
-			<isset property="noframes" />
-		</condition>
-		<condition property="FRAMES" value="-frames" else="">
-			<isset property="noframes" />
-		</condition>
-		<condition property="WRITERV" value="false" else="true">
-			<isset property="nowriter" />
-		</condition>
-		<condition property="WRITER" value="-writer" else="">
-			<isset property="nowriter" />
-		</condition>
-		<condition property="RESIZEV" value="false" else="true">
-			<isset property="noresize" />
-		</condition>
-		<condition property="RESIZE" value="-resize" else="">
-			<isset property="noresize" />
-		</condition>
-	</target>
-
-	<!-- ================================== -->
-	<!-- ========  INITIALIZATION   ======= -->
-	<!-- ================================== -->
-
-	<target name="check" unless="paths.configured">
-		<echo message="The 'build.properties' file must be configured" />
-		<fail />
-	</target>
-
-	<target name="init" depends="properties,check">
-
-		<path id="classpath">
-			<pathelement location="${out.build}" />
-		</path>
-
-		<path id="cobertura.classpath">
-			<pathelement path="${cobertura.path}" />
-		</path>
-
-		<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
-
-		<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant">
-			<classpath>
-				<pathelement location="test/lib/maven-ant-tasks-2.1.3.jar" />
-			</classpath>
-		</typedef>
-
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========    COMPILE    ========== -->
-	<!-- =================================== -->
-
-	<target name="compile-init">
-		<mkdir dir="${out.build}/tmp" />
-		<condition property="config.uptodate">
-			<uptodate srcfile="${src}/org/objectweb/asm/ClassReader.java" targetfile="${out.build}/tmp/org/objectweb/asm/ClassReader.java" />
-		</condition>
-		<copy todir="${out.build}/tmp">
-			<fileset dir="${src}">
-				<include name="**/*" />
-			</fileset>
-		</copy>
-	</target>
-
-	<target name="compile-config" unless="config.uptodate">
-		<replace dir="${out.build}/tmp">
-			<include name="**/ClassReader.java" />
-			<replacefilter token="SIGNATURES = true" value="SIGNATURES = ${SIGV}" />
-			<replacefilter token="ANNOTATIONS = true" value="ANNOTATIONS = ${ANNV}" />
-			<replacefilter token="FRAMES = true" value="FRAMES = ${FRAMESV}" />
-			<replacefilter token="WRITER = true" value="WRITER = ${SIGV}" />
-			<replacefilter token="RESIZE = true" value="RESIZE = ${RESIZEV}" />
-		</replace>
-	</target>
-
-	<target name="compile-debug" depends="init,compile-init,compile-config">
-		<javac destdir="${out.build}/tmp" debug="on" source="1.5" target="1.5">
-			<classpath>
-				<pathelement location="${out.build}/tmp" />
-			</classpath>
-			<src path="${out.build}/tmp" />
-			<include name="**/*.java" />
-		</javac>
-	</target>
-
-	<target name="shrink" depends="compile-debug" if="product.shrink">
-		<echo message="Shrinking" />
-		<java classname="org.objectweb.asm.optimizer.Shrinker">
-			<classpath>
-				<pathelement location="${out.build}/tmp" />
-			</classpath>
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${SIG}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${ANN}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${FRAMES}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${WRITER}.properties" />
-			<arg value="${src}/org/objectweb/asm/optimizer/shrink${RESIZE}.properties" />
-			<arg value="${out.build}/tmp" />
-			<arg value="${out.build}" />
-		</java>
-	</target>
-
-	<target name="noshrink" depends="compile-debug" if="product.noshrink">
-		<copy todir="${out.build}">
-			<fileset dir="${out.build}/tmp" />
-		</copy>
-	</target>
-
-	<target name="compile" depends="compile-debug,shrink,noshrink" />
-
-	<!-- =================================== -->
-	<!-- ==========      TEST     ========== -->
-	<!-- =================================== -->
-
-	<target name="test" depends="compile">
-		<condition property="asm.test" value="${java.home}/lib/rt.jar,${out.test}/cases">
-			<not>
-				<isset property="asm.test" />
-			</not>
-		</condition>
-		<ant antfile="${test}/build.xml" target="test" inheritRefs="true" />
-	</target>
-
-	<target name="test.report">
-		<junitreport todir="${out.test}/reports">
-			<fileset dir="${out.test}/reports">
-				<include name="TEST-*.xml" />
-			</fileset>
-			<report todir="${out.test}/reports" />
-		</junitreport>
-	</target>
-
-	<target name="coverage" depends="compile">
-		<delete file="cobertura.ser" />
-		<delete dir="${out.instr}" />
-		<cobertura-instrument todir="${out.instr}">
-			<ignore regex="java.lang.Error" />
-			<fileset dir="${out.build}/tmp">
-				<include name="**/*.class" />
-				<exclude name="**/optimizer/*.class" />
-				<exclude name="**/xml/Processor*.class" />
-				<exclude name="**/*Test*.class" />
-			</fileset>
-		</cobertura-instrument>
-		<copy todir="${out.instr}" preservelastmodified="yes">
-			<fileset dir="${out.build}/tmp" />
-		</copy>
-		<property name="coverage" value="yes" />
-		<property name="classes" value="${out.instr}" />
-		<property name="asm.test.class" value="pkg" />
-		<condition property="asm.test" value="${out.test}/cases">
-			<not>
-				<isset property="asm.test" />
-			</not>
-		</condition>
-		<condition property="test.type" value="conform">
-			<not>
-				<isset property="test.type" />
-			</not>
-		</condition>
-		<ant antfile="${test}/build.xml" target="test" inheritRefs="true" />
-	</target>
-
-	<target name="coverage.check" depends="init">
-		<cobertura-check branchrate="100" linerate="100">
-		</cobertura-check>
-	</target>
-
-	<target name="coverage.report" depends="init">
-		<cobertura-report destdir="${out}/coverage" srcdir="${src}" format="xml" />
-		<cobertura-report destdir="${out}/coverage">
-			<fileset dir="${src}">
-				<include name="**/*.java" />
-				<exclude name="**/asm/optimizer/**/*.java" />
-			</fileset>
-		</cobertura-report>
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========      DIST     ========== -->
-	<!-- =================================== -->
-
-	<target name="dist.init">
-		<mkdir dir="${out.dist}" />
-		<mkdir dir="${out.dist.doc}" />
-		<mkdir dir="${out.dist.jdoc}" />
-		<mkdir dir="${out.dist.lib}" />
-	</target>
-
-	<target name="dist.version">
-		<tstamp>
-			<format property="product.build.time" pattern="yyyyMMdd.HHmmss" />
-		</tstamp>
-
-		<condition property="product.artifact" value="${product.version}">
-			<not>
-				<isset property="product.snapshot" />
-			</not>
-		</condition>
-		<condition property="product.artifact" value="${product.build.time}">
-			<isset property="product.snapshot" />
-		</condition>
-
-		<condition property="plugin.artifact" value="${plugin.version}">
-			<not>
-				<isset property="product.snapshot" />
-			</not>
-		</condition>
-		<condition property="plugin.artifact" value="${plugin.version}.${product.build.time}">
-			<isset property="product.snapshot" />
-		</condition>
-	</target>
-
-	<target name="jar" depends="dist.init,dist.version,compile,shrink">
-		<ant antfile="${archive}/asm.xml" />
-		<ant antfile="${archive}/asm-all.xml" />
-		<ant antfile="${archive}/asm-analysis.xml" />
-		<ant antfile="${archive}/asm-commons.xml" />
-		<ant antfile="${archive}/asm-debug-all.xml" />
-		<ant antfile="${archive}/asm-parent.xml" />
-		<ant antfile="${archive}/asm-tree.xml" />
-		<ant antfile="${archive}/asm-util.xml" />
-		<ant antfile="${archive}/asm-xml.xml" />
-		<java classname="org.objectweb.asm.optimizer.JarOptimizer">
-			<classpath>
-				<pathelement location="${out.build}" />
-			</classpath>
-			<!--arg value="${src}/org/objectweb/asm/optimizer/jdk1.2.2_017.txt.gz"/-->
-			<arg value="${src}/org/objectweb/asm/optimizer/jdk1.3.1_19.txt.gz" />
-			<arg value="-nodebug" />
-			<arg value="${out.dist.lib}" />
-		</java>
-	</target>
-
-	<target name="jdoc" depends="init,dist.init">
-		<copy todir="${out.dist.doc}" preservelastmodified="yes" includeEmptyDirs="false">
-			<fileset dir="${doc}">
-				<include name="**/*" />
-				<exclude name="**/*.fig" />
-			</fileset>
-		</copy>
-		<ant antfile="${jdoc}/user.xml" />
-	</target>
-
-	<target name="examples" depends="init,dist.init" if="examples.exist">
-		<mkdir dir="${out.dist.examples}" />
-		<copy todir="${out.dist.examples}" preservelastmodified="yes" includeEmptyDirs="yes">
-			<fileset dir="${examples}">
-				<exclude name="common" />
-				<exclude name="common/**/*" />
-			</fileset>
-		</copy>
-
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/adapt" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/analysis" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/annotations" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/attributes" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/compile" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/compile-indy" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/dependencies" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/helloworld" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/jasmin" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/jbfc" preservelastmodified="yes" />
-		<copy file="${examples}/common/build.xml" toDir="${out.dist.examples}/xml" preservelastmodified="yes" />
-
-		<copy toDir="${out.dist.examples}" preservelastmodified="yes">
-			<fileset dir="${examples.common}">
-				<include name="**/*" />
-				<exclude name="build.xml" />
-			</fileset>
-		</copy>
-		<replace dir="${out.dist.examples}/etc" token="@product.version@" value="${product.version}" />
-
-		<copy todir="${out.dist}">
-			<fileset dir=".">
-				<include name="externals/*.jar" />
-			</fileset>
-		</copy>
-	</target>
-
-	<!--
-  <target name="eclipse.generate" depends="dist.version">  	
-  </target>
-
-  <target name="eclipse.plugin" depends="jar,eclipse.generate">
-    <jar zipfile="${out}/org.objectweb.asm_${plugin.artifact}.jar">
-      <zipfileset dir="${basedir}">
-        <include name="plugin.xml"/>
-        <include name="META-INF/MANIFEST.MF"/>      	
-        <include name="**/asm-${product.artifact}.jar"/>
-        <include name="**/asm-tree-${product.artifact}.jar"/>
-        <include name="**/asm-analysis-${product.artifact}.jar"/>
-        <include name="**/asm-util-${product.artifact}.jar"/>
-        <include name="**/asm-commons-${product.artifact}.jar"/>
-        <include name="**/asm-attrs-${product.artifact}.jar"/>
-      </zipfileset>
-      <manifest>
-        <attribute name="Bundle-ManifestVersion" value="2"/>
-        <attribute name="Bundle-Name" value="ASM Framework"/>
-        <attribute name="Bundle-SymbolicName" value="org.objectweb.asm;singleton:=true"/>
-        <attribute name="Bundle-Version" value="${plugin.artifact}"/>
-        <attribute name="Bundle-ClassPath" value="output/dist/lib/asm-${product.artifact}.jar,
-output/dist/lib/asm-tree-${product.artifact}.jar,
-output/dist/lib/asm-analysis-${product.artifact}.jar,
-output/dist/lib/asm-commons-${product.artifact}.jar,
-output/dist/lib/asm-attrs-${product.artifact}.jar,
-output/dist/lib/asm-util-${product.artifact}.jar"/>
-        <attribute name="Bundle-Vendor" value="ObjectWeb.org"/>
-        <attribute name="Bundle-Localization" value="plugin"/>
-        <attribute name="Export-Package" value="org.objectweb.asm,
-org.objectweb.asm.attrs,
-org.objectweb.asm.commons,
-org.objectweb.asm.signature,
-org.objectweb.asm.tree,
-org.objectweb.asm.tree.analysis,
-org.objectweb.asm.util,
-org.objectweb.asm.xml"/>
-        <attribute name="Eclipse-AutoStart" value="true"/>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="eclipse.feature" depends="eclipse.plugin">
-    <echo file="${out}/feature.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<feature id="org.objectweb.asm.feature" label="ASM Framework"
-      version="${plugin.artifact}" provider-name="ObjectWeb.org">
-
-   <description url="http://asm.objectweb.org/eclipse/asm/index.html">
-Feature contains ASM Java bytecode manipulation framework runtime.
-   </description>
-
-   <copyright>
-Copyright (c) 2000-2011 INRIA, France Telecom.
-All rights reserved.
-   </copyright>
-
-   <license>
-Copyright (c) 2000-2011 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, 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. Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-   </license>
-
-   <url>
-      <update label="ASM Framework" url="http://download.forge.objectweb.org/eclipse-update/site.xml"/>
-   </url>
-
-   <plugin id="org.objectweb.asm" download-size="0" install-size="0" version="${plugin.artifact}"/>
-
-</feature>]]></echo>
-
-    <jar jarfile="${out}/org.objectweb.asm.feature_${plugin.artifact}.jar">
-      <fileset file="${out}/feature.xml"/>
-    </jar>
-  </target>
-  
-  <target name="eclipse.site" depends="eclipse.feature">
-    <echo file="${out}/site.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-<site>
-   <description url="http://asm.objectweb.org/eclipse/asm/index.html">
-      ASM Framework
-   </description>
-   
-   <feature url="features/org.objectweb.asm.feature_${plugin.artifact}.jar" id="org.objectweb.asm.feature" version="${plugin.artifact}">
-      <category name="asm"/>
-   </feature>
-
-   <category-def name="asm" label="ASM Framework"/>
-      
-   <archive path="plugins/org.objectweb.asm_${plugin.artifact}.jar" url="http://download.forge.objectweb.org/asm/org.objectweb.asm_${plugin.artifact}.jar"/>
-</site>]]></echo>
-    
-    <zip zipfile="${out}/org.objectweb.asm.update_${plugin.artifact}.zip">
-      <zipfileset dir="${out}" includes="site.xml"/>
-      <zipfileset dir="${out}" includes="org.objectweb.asm.feature_${plugin.artifact}.jar" prefix="features"/>
-      <zipfileset dir="${out}" includes="org.objectweb.asm_${plugin.artifact}.jar"  prefix="plugins"/>
-    </zip>
-  </target>
-  -->
-
-	<target name="dist" depends="jar,sigtest,jdoc,examples">
-		<zip zipFile="${out.dist}/src.zip" basedir="${src}" excludes="**/optimizer/**/*" />
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========    EXAMPLES   ========== -->
-	<!-- =================================== -->
-
-	<target name="example" depends="jar,examples">
-		<ant inheritAll="false" dir="${out.dist.examples}/${example.name}" target="execute" />
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========     ZIP       ========== -->
-	<!-- =================================== -->
-
-	<!-- creates zip files of the different distribution (source, binaries) -->
-
-	<target name="zip" depends="dist">
-		<mkdir dir="${out.zip}" />
-		<tar destfile="${out.zip}/${product.name}-${product.version}.tar.gz" compression="gzip">
-			<tarfileset dir="${basedir}" prefix="${product.name}-${product.version}">
-				<exclude name="build.config" />
-				<exclude name="config/**" />
-				<exclude name="config" />
-				<exclude name="**/externals/**" />
-				<exclude name="**/externals" />
-				<exclude name="**/lib/**" />
-				<exclude name="**/lib" />
-				<exclude name="eclipse/**" />
-				<exclude name="eclipse" />
-				<exclude name="web/**" />
-				<exclude name="web" />
-				<exclude name="**/output/**" />
-				<exclude name="**/output" />
-				<exclude name="CVSROOT/**" />
-				<exclude name="CVSROOT" />
-			</tarfileset>
-		</tar>
-		<zip zipFile="${out.zip}/${product.name}-${product.version}-bin.zip">
-			<zipfileset dir="${out.dist}" prefix="${product.name}-${product.version}" />
-		</zip>
-		<jar jarfile="${out.zip}/${product.name}-${product.version}-javadoc.jar" basedir="${out.dist}/doc/javadoc/user">
-			<fileset dir="${out.dist}/doc/javadoc/user" />
-		</jar>
-		<jar jarfile="${out.zip}/${product.name}-${product.version}-sources.jar" basedir="${src}">
-			<fileset dir="${src}" excludes="**/optimizer/**/*" />
-		</jar>
-	</target>
-	
-	<!-- ================================== -->
-	<!-- =====  BINARY COMPATIBILITY   ==== -->
-	<!-- ================================== -->
-
-	<target name="sigtest-setup" depends="jar">
-		<ant antfile="${test}/build.xml" target="sigtest-setup" inheritRefs="true" />
-	</target>
-
-	<target name="sigtest" depends="jar">
-		<ant antfile="${test}/build.xml" target="sigtest" inheritRefs="true" />
-	</target>
-
-	<!-- =================================== -->
-	<!-- ==========     CLEAN     ========== -->
-	<!-- =================================== -->
-
-	<!-- remove all directories -->
-
-	<target name="clean.web" if="web.exist">
-		<ant dir="${web}" target="clean" />
-	</target>
-
-	<target name="clean" depends="properties,clean.web">
-		<delete dir="${out.build}" />
-		<delete dir="${out.dist}" />
-		<delete dir="${out.tmp}" />
-		<delete dir="${out.zip}" />
-		<delete dir="${out.test}" />
-		<delete dir="${out.instr}" />
-	</target>
-
-	<!-- ==================================== -->
-	<!-- ==========     HELP       ========== -->
-	<!-- ==================================== -->
-
-	<target name="help">
-		<echo message="The available targets are the following:" />
-		<echo message="  compile: compiles the product into ${out.build}" />
-		<echo message="  dist: creates the product's distributions into ${out.dist}" />
-		<echo message="  zip: creates the product's distributions zip files into ${out.zip}" />
-		<echo message="  clean: removes all generated files." />
-		<echo message="  jar: creates all jars in ${out.dist.lib}" />
-		<echo message="  test: run all tests" />
-		<echo message="" />
-		<echo message="There are some options to run tests:" />
-		<echo message="  -Dtest.group=&lt;group name&gt;  Only a group of test: The default target of" />
-		<echo message="    the xml file is called the test.group contains the xml file name with" />
-		<echo message="    directory ex: ant -Dtest.group=conform/toto test =&gt; calls the default" />
-		<echo message="    target of the file ${test}/conform/toto.xml" />
-		<echo message="  -Dtest.type=&lt;type name&gt;  Only a type of test: conform, deviance, stress," />
-		<echo message="    thread or perf. The test.type properties contains the directory name of" />
-		<echo message="    the test type ex: ant -Dtest.type=conform test" />
-		<echo message="  -Dtest.name=&lt;test name&gt;  Only a single test. The target &lt;test name&gt; is called" />
-	</target>
-
-	<target name="maven.deploy.check" unless="passphrase.configured">
-		<echo message="The 'passphrase' property must be configured" />
-		<fail />
-	</target>
-
-	<target name="maven.deploy" depends="init,dist.version,maven.deploy.check">
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-parent-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-parent-${product.artifact}.pom" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-		
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-analysis-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-analysis-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-commons-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-commons-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-tree-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-tree-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-util-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-util-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/asm-xml-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/asm-xml-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/all/asm-all-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/all/asm-all-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-
-		<m2:mvn>
-			<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
-			<arg value="-Durl=${maven-staging-repository-url}" />
-			<arg value="-DrepositoryId=${maven-staging-repository-id}" />
-			<arg value="-DpomFile=${out.dist.lib}/all/asm-debug-all-${product.artifact}.pom" />
-			<arg value="-Dfile=${out.dist.lib}/all/asm-debug-all-${product.artifact}.jar" />
-			<arg value="-Djavadoc=${out.zip}/${product.name}-${product.version}-javadoc.jar" />
-			<arg value="-Dsources=${out.zip}/${product.name}-${product.version}-sources.jar" />
-			<arg value="-Pow2-release" />
-			<arg value="-Dgpg.passphrase=${passphrase}" />
-		</m2:mvn>
-	</target>
-
-</project>
diff --git a/asm4/doc/README.txt b/asm4/doc/README.txt
deleted file mode 100644
index 23ea440..0000000
--- a/asm4/doc/README.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, 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. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, 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 directory contains the documentation of the product.
diff --git a/asm4/examples/adapt/etc/execute.properties b/asm4/examples/adapt/etc/execute.properties
deleted file mode 100644
index e7fea9d..0000000
--- a/asm4/examples/adapt/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname Adapt
-run.parameters ArraySet
diff --git a/asm4/examples/adapt/src/Adapt.java b/asm4/examples/adapt/src/Adapt.java
deleted file mode 100644
index 011f364..0000000
--- a/asm4/examples/adapt/src/Adapt.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * @author Eric Bruneton
- */
-public class Adapt extends ClassLoader {
-
-    @Override
-    protected synchronized Class<?> loadClass(final String name,
-            final boolean resolve) throws ClassNotFoundException {
-        if (name.startsWith("java.")) {
-            System.err.println("Adapt: loading class '" + name
-                    + "' without on the fly adaptation");
-            return super.loadClass(name, resolve);
-        } else {
-            System.err.println("Adapt: loading class '" + name
-                    + "' with on the fly adaptation");
-        }
-
-        // gets an input stream to read the bytecode of the class
-        String resource = name.replace('.', '/') + ".class";
-        InputStream is = getResourceAsStream(resource);
-        byte[] b;
-
-        // adapts the class on the fly
-        try {
-            ClassReader cr = new ClassReader(is);
-            ClassWriter cw = new ClassWriter(0);
-            ClassVisitor cv = new TraceFieldClassAdapter(cw);
-            cr.accept(cv, 0);
-            b = cw.toByteArray();
-        } catch (Exception e) {
-            throw new ClassNotFoundException(name, e);
-        }
-
-        // optional: stores the adapted class on disk
-        try {
-            FileOutputStream fos = new FileOutputStream(resource + ".adapted");
-            fos.write(b);
-            fos.close();
-        } catch (IOException e) {
-        }
-
-        // returns the adapted class
-        return defineClass(name, b, 0, b.length);
-    }
-
-    public static void main(final String args[]) throws Exception {
-        // loads the application class (in args[0]) with an Adapt class loader
-        ClassLoader loader = new Adapt();
-        Class<?> c = loader.loadClass(args[0]);
-        // calls the 'main' static method of this class with the
-        // application arguments (in args[1] ... args[n]) as parameter
-        Method m = c.getMethod("main", new Class<?>[] { String[].class });
-        String[] applicationArgs = new String[args.length - 1];
-        System.arraycopy(args, 1, applicationArgs, 0, applicationArgs.length);
-        m.invoke(null, new Object[] { applicationArgs });
-    }
-}
-
-class TraceFieldClassAdapter extends ClassVisitor implements Opcodes {
-
-    private String owner;
-
-    public TraceFieldClassAdapter(final ClassVisitor cv) {
-        super(Opcodes.ASM4, cv);
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        owner = name;
-        super.visit(version, access, name, signature, superName, interfaces);
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        FieldVisitor fv = super
-                .visitField(access, name, desc, signature, value);
-        if ((access & ACC_STATIC) == 0) {
-            Type t = Type.getType(desc);
-            int size = t.getSize();
-
-            // generates getter method
-            String gDesc = "()" + desc;
-            MethodVisitor gv = cv.visitMethod(ACC_PRIVATE, "_get" + name,
-                    gDesc, null, null);
-            gv.visitFieldInsn(GETSTATIC, "java/lang/System", "err",
-                    "Ljava/io/PrintStream;");
-            gv.visitLdcInsn("_get" + name + " called");
-            gv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
-                    "(Ljava/lang/String;)V");
-            gv.visitVarInsn(ALOAD, 0);
-            gv.visitFieldInsn(GETFIELD, owner, name, desc);
-            gv.visitInsn(t.getOpcode(IRETURN));
-            gv.visitMaxs(1 + size, 1);
-            gv.visitEnd();
-
-            // generates setter method
-            String sDesc = "(" + desc + ")V";
-            MethodVisitor sv = cv.visitMethod(ACC_PRIVATE, "_set" + name,
-                    sDesc, null, null);
-            sv.visitFieldInsn(GETSTATIC, "java/lang/System", "err",
-                    "Ljava/io/PrintStream;");
-            sv.visitLdcInsn("_set" + name + " called");
-            sv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
-                    "(Ljava/lang/String;)V");
-            sv.visitVarInsn(ALOAD, 0);
-            sv.visitVarInsn(t.getOpcode(ILOAD), 1);
-            sv.visitFieldInsn(PUTFIELD, owner, name, desc);
-            sv.visitInsn(RETURN);
-            sv.visitMaxs(1 + size, 1 + size);
-            sv.visitEnd();
-        }
-        return fv;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                exceptions);
-        return mv == null ? null : new TraceFieldCodeAdapter(mv, owner);
-    }
-}
-
-class TraceFieldCodeAdapter extends MethodVisitor implements Opcodes {
-
-    private String owner;
-
-    public TraceFieldCodeAdapter(final MethodVisitor mv, final String owner) {
-        super(Opcodes.ASM4, mv);
-        this.owner = owner;
-    }
-
-    @Override
-    public void visitFieldInsn(final int opcode, final String owner,
-            final String name, final String desc) {
-        if (owner.equals(this.owner)) {
-            if (opcode == GETFIELD) {
-                // replaces GETFIELD f by INVOKESPECIAL _getf
-                String gDesc = "()" + desc;
-                visitMethodInsn(INVOKESPECIAL, owner, "_get" + name, gDesc);
-                return;
-            } else if (opcode == PUTFIELD) {
-                // replaces PUTFIELD f by INVOKESPECIAL _setf
-                String sDesc = "(" + desc + ")V";
-                visitMethodInsn(INVOKESPECIAL, owner, "_set" + name, sDesc);
-                return;
-            }
-        }
-        super.visitFieldInsn(opcode, owner, name, desc);
-    }
-}
diff --git a/asm4/examples/adapt/src/ArraySet.java b/asm4/examples/adapt/src/ArraySet.java
deleted file mode 100644
index 3548cd6..0000000
--- a/asm4/examples/adapt/src/ArraySet.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-
-/**
- * @author Eric Bruneton
- */
-public class ArraySet {
-
-    private int[] values = new int[3];
-
-    private int size;
-
-    public boolean contains(final int v) {
-        for (int i = 0; i < size; ++i) {
-            if (values[i] == v) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public void add(final int v) {
-        if (!contains(v)) {
-            if (size == values.length) {
-                System.err.println("[enlarge]");
-                int[] newValues = new int[values.length + 3];
-                System.arraycopy(values, 0, newValues, 0, size);
-                values = newValues;
-            }
-            values[size++] = v;
-        }
-    }
-
-    public void remove(final int v) {
-        int i = 0;
-        int j = 0;
-        while (i < size) {
-            int u = values[i];
-            if (u != v) {
-                values[j++] = u;
-            }
-            ++i;
-        }
-        size = j;
-    }
-
-    // test method
-
-    public static void main(final String[] args) {
-        ArraySet s = new ArraySet();
-        System.err.println("add 1");
-        s.add(1);
-        System.err.println("add 1");
-        s.add(1);
-        System.err.println("add 2");
-        s.add(2);
-        System.err.println("add 4");
-        s.add(4);
-        System.err.println("add 8");
-        s.add(8);
-        System.err.println("contains 3 = " + s.contains(3));
-        System.err.println("contains 1 = " + s.contains(1));
-        System.err.println("remove 1");
-        s.remove(1);
-        System.err.println("contains 1 = " + s.contains(1));
-    }
-}
diff --git a/asm4/examples/analysis/etc/execute.properties b/asm4/examples/analysis/etc/execute.properties
deleted file mode 100644
index b560b40..0000000
--- a/asm4/examples/analysis/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname Analysis
-run.parameters
diff --git a/asm4/examples/analysis/src/Analysis.java b/asm4/examples/analysis/src/Analysis.java
deleted file mode 100644
index 3e319eb..0000000
--- a/asm4/examples/analysis/src/Analysis.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.VarInsnNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.BasicValue;
-import org.objectweb.asm.tree.analysis.BasicVerifier;
-import org.objectweb.asm.tree.analysis.Frame;
-import org.objectweb.asm.tree.analysis.SourceInterpreter;
-import org.objectweb.asm.tree.analysis.SourceValue;
-import org.objectweb.asm.util.TraceMethodVisitor;
-import org.objectweb.asm.util.Textifier;
-
-/**
- * @author Eric Bruneton
- */
-public class Analysis implements Opcodes {
-
-    public static void main(final String[] args) throws Exception {
-        ClassReader cr = new ClassReader("Analysis");
-        ClassNode cn = new ClassNode();
-        cr.accept(cn, ClassReader.SKIP_DEBUG);
-
-        List<MethodNode> methods = cn.methods;
-        for (int i = 0; i < methods.size(); ++i) {
-            MethodNode method = methods.get(i);
-            if (method.instructions.size() > 0) {
-                if (!analyze(cn, method)) {
-                    Analyzer<?> a = new Analyzer<BasicValue>(
-                            new BasicVerifier());
-                    try {
-                        a.analyze(cn.name, method);
-                    } catch (Exception ignored) {
-                    }
-                    final Frame<?>[] frames = a.getFrames();
-
-                    Textifier t = new Textifier() {
-                        @Override
-                        public void visitMaxs(final int maxStack,
-                                final int maxLocals) {
-                            for (int i = 0; i < text.size(); ++i) {
-                                StringBuffer s = new StringBuffer(
-                                        frames[i] == null ? "null"
-                                                : frames[i].toString());
-                                while (s.length() < Math.max(20, maxStack
-                                        + maxLocals + 1)) {
-                                    s.append(' ');
-                                }
-                                System.err.print(Integer.toString(i + 1000)
-                                        .substring(1)
-                                        + " "
-                                        + s
-                                        + " : "
-                                        + text.get(i));
-                            }
-                            System.err.println();
-                        }
-                    };
-                    MethodVisitor mv = new TraceMethodVisitor(t);
-                    for (int j = 0; j < method.instructions.size(); ++j) {
-                        Object insn = method.instructions.get(j);
-                        ((AbstractInsnNode) insn).accept(mv);
-                    }
-                    mv.visitMaxs(0, 0);
-                }
-            }
-        }
-    }
-
-    /*
-     * Detects unused xSTORE instructions, i.e. xSTORE instructions without at
-     * least one xLOAD corresponding instruction in their successor instructions
-     * (in the control flow graph).
-     */
-    public static boolean analyze(final ClassNode c, final MethodNode m)
-            throws Exception {
-        Analyzer<SourceValue> a = new Analyzer<SourceValue>(
-                new SourceInterpreter());
-        Frame<SourceValue>[] frames = a.analyze(c.name, m);
-
-        // for each xLOAD instruction, we find the xSTORE instructions that can
-        // produce the value loaded by this instruction, and we put them in
-        // 'stores'
-        Set<AbstractInsnNode> stores = new HashSet<AbstractInsnNode>();
-        for (int i = 0; i < m.instructions.size(); ++i) {
-            AbstractInsnNode insn = m.instructions.get(i);
-            int opcode = insn.getOpcode();
-            if ((opcode >= ILOAD && opcode <= ALOAD) || opcode == IINC) {
-                int var = opcode == IINC ? ((IincInsnNode) insn).var
-                        : ((VarInsnNode) insn).var;
-                Frame<SourceValue> f = frames[i];
-                if (f != null) {
-                    Set<AbstractInsnNode> s = f.getLocal(var).insns;
-                    Iterator<AbstractInsnNode> j = s.iterator();
-                    while (j.hasNext()) {
-                        insn = j.next();
-                        if (insn instanceof VarInsnNode) {
-                            stores.add(insn);
-                        }
-                    }
-                }
-            }
-        }
-
-        // we then find all the xSTORE instructions that are not in 'stores'
-        boolean ok = true;
-        for (int i = 0; i < m.instructions.size(); ++i) {
-            AbstractInsnNode insn = m.instructions.get(i);
-            int opcode = insn.getOpcode();
-            if (opcode >= ISTORE && opcode <= ASTORE) {
-                if (!stores.contains(insn)) {
-                    ok = false;
-                    System.err.println("method " + m.name + ", instruction "
-                            + i + ": useless store instruction");
-                }
-            }
-        }
-        return ok;
-    }
-
-    /*
-     * Test for the above method, with three useless xSTORE instructions.
-     */
-    public int test(int i, int j) {
-        i = i + 1; // ok, because i can be read after this point
-
-        if (j == 0) {
-            j = 1; // useless
-        } else {
-            try {
-                j = j - 1; // ok, because j can be accessed in the catch
-                int k = 0;
-                if (i > 0) {
-                    k = i - 1;
-                }
-                return k;
-            } catch (Exception e) { // useless ASTORE (e is never used)
-                j = j + 1; // useless
-            }
-        }
-
-        return 0;
-    }
-}
diff --git a/asm4/examples/annotations/build.xml b/asm4/examples/annotations/build.xml
deleted file mode 100644
index e149280..0000000
--- a/asm4/examples/annotations/build.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="Examples" default="compile">
-
-  <!-- directory definition -->
-
-  <property name="src"          value="${basedir}/src"/>
-  <property name="build"        value="${basedir}/build"/>
-
-  <property file="${basedir}/../etc/build.properties"/>
-  <property file="${basedir}/etc/build.properties"/>
-  <property file="${basedir}/etc/execute.properties"/>
-
-  <!-- Building of a path which contains external jars -->
-
-  <path id="classpath">
-    <pathelement path="${asm.path}"/>
-    <pathelement path="${asm.tree.path}"/>
-    <pathelement path="${asm.analysis.path}"/>
-    <pathelement path="${asm.attrs.path}"/>
-    <pathelement path="${asm.util.path}"/>
-    <fileset dir="${basedir}">
-      <include name="lib/**/*.jar"/>
-    </fileset>
-    <fileset dir="${basedir}/..">
-      <include name="lib/**/*.jar"/>
-    </fileset>
-    <pathelement location="${build}"/>
-  </path>
-
-  <!-- ================================== -->
-  <!--              EXECUTE               -->
-  <!-- ================================== -->
-
-  <target name="execute" depends="compile">
-    <java classname="${run.classname}"
-      classpathref="classpath" fork="yes" failonerror="yes">
-       <arg line="${run.parameters}"/>
-    </java>
-  </target>
-
-  <!-- ================================== -->
-  <!--              COMPILE               -->
-  <!-- ================================== -->
-
-  <target name="compile">
-    <mkdir dir="${build}"/>
-    <javac srcdir="${src}" destdir="${build}" debug="on" source="1.5" target="1.5">
-      <classpath refid="classpath"/>
-      <include name="**/*.java"/>
-    </javac>
-  </target>
-
-  <!-- ================================== -->
-  <!--               CLEAN                -->
-  <!-- ================================== -->
-
-  <target name="clean">
-    <delete dir="${build}"/>
-  </target>
-</project>
diff --git a/asm4/examples/annotations/etc/execute.properties b/asm4/examples/annotations/etc/execute.properties
deleted file mode 100644
index 06d0dec..0000000
--- a/asm4/examples/annotations/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################

-#ASM: a very small and fast Java bytecode manipulation framework

-#Copyright (c) 2000-2011 INRIA, France Telecom

-#All rights reserved.

-#

-#Redistribution and use in source and binary forms, with or without

-#modification, 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. Neither the name of the copyright holders nor the names of its

-#   contributors may be used to endorse or promote products derived from

-#   this software without specific prior written permission.

-#

-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE

-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.

-###############################################################################

-

-run.classname Annotations

-run.parameters

diff --git a/asm4/examples/annotations/src/Annotations.java b/asm4/examples/annotations/src/Annotations.java
deleted file mode 100644
index 850b6f1..0000000
--- a/asm4/examples/annotations/src/Annotations.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-public class Annotations {
-
-    public static void foo(final @NotNull String arg) {
-        System.out.println(arg);
-    }
-
-    public static void main(final String[] args) throws Exception {
-        System.out
-                .println("Calling foo(null) results in a NullPointerException:");
-        try {
-            foo(null);
-        } catch (Exception e) {
-            e.printStackTrace(System.out);
-        }
-
-        final String n = Annotations.class.getName();
-        final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        ClassReader cr = new ClassReader(n);
-        cr.accept(new ClassVisitor(Opcodes.ASM4, cw) {
-
-            @Override
-            public MethodVisitor visitMethod(final int access,
-                    final String name, final String desc,
-                    final String signature, final String[] exceptions) {
-                final Type[] args = Type.getArgumentTypes(desc);
-                MethodVisitor v = cv.visitMethod(access, name, desc, signature,
-                        exceptions);
-                return new MethodVisitor(Opcodes.ASM4, v) {
-
-                    private final List<Integer> params = new ArrayList<Integer>();
-
-                    @Override
-                    public AnnotationVisitor visitParameterAnnotation(
-                            final int parameter, final String desc,
-                            final boolean visible) {
-                        AnnotationVisitor av;
-                        av = mv.visitParameterAnnotation(parameter, desc,
-                                visible);
-                        if (desc.equals("LNotNull;")) {
-                            params.add(new Integer(parameter));
-                        }
-                        return av;
-                    }
-
-                    @Override
-                    public void visitCode() {
-                        int var = (access & Opcodes.ACC_STATIC) == 0 ? 1 : 0;
-                        for (int p = 0; p < params.size(); ++p) {
-                            int param = params.get(p).intValue();
-                            for (int i = 0; i < param; ++i) {
-                                var += args[i].getSize();
-                            }
-                            String c = "java/lang/IllegalArgumentException";
-                            String d = "(Ljava/lang/String;)V";
-                            Label end = new Label();
-                            mv.visitVarInsn(Opcodes.ALOAD, var);
-                            mv.visitJumpInsn(Opcodes.IFNONNULL, end);
-                            mv.visitTypeInsn(Opcodes.NEW, c);
-                            mv.visitInsn(Opcodes.DUP);
-                            mv.visitLdcInsn("Argument " + param
-                                    + " must not be null");
-                            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, c,
-                                    "<init>", d);
-                            mv.visitInsn(Opcodes.ATHROW);
-                            mv.visitLabel(end);
-                        }
-                    }
-                };
-            }
-        }, 0);
-
-        Class<?> c = new ClassLoader() {
-            @Override
-            public Class<?> loadClass(final String name)
-                    throws ClassNotFoundException {
-                if (name.equals(n)) {
-                    byte[] b = cw.toByteArray();
-                    return defineClass(name, b, 0, b.length);
-                }
-                return super.loadClass(name);
-            }
-        }.loadClass(n);
-
-        System.out.println();
-        System.out.println("Calling foo(null) on the transformed class results"
-                + " in an IllegalArgumentException:");
-        Method m = c.getMethod("foo", new Class<?>[] { String.class });
-        try {
-            m.invoke(null, new Object[] { null });
-        } catch (InvocationTargetException e) {
-            e.getCause().printStackTrace(System.out);
-        }
-    }
-}
diff --git a/asm4/examples/annotations/src/NotNull.java b/asm4/examples/annotations/src/NotNull.java
deleted file mode 100644
index b16cf12..0000000
--- a/asm4/examples/annotations/src/NotNull.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.CLASS)
-public @interface NotNull {
-    String value() default "";
-}
diff --git a/asm4/examples/attributes/etc/execute.properties b/asm4/examples/attributes/etc/execute.properties
deleted file mode 100644
index f2027d4..0000000
--- a/asm4/examples/attributes/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname Attributes
-run.parameters
diff --git a/asm4/examples/attributes/src/Attributes.java b/asm4/examples/attributes/src/Attributes.java
deleted file mode 100644
index b833042..0000000
--- a/asm4/examples/attributes/src/Attributes.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.io.FileOutputStream;
-import java.io.PrintWriter;
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.util.Textifiable;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * @author Eric Bruneton
- */
-public class Attributes extends ClassLoader {
-
-    public static void main(final String args[]) throws Exception {
-        // loads the original class and adapts it
-        ClassReader cr = new ClassReader("CommentAttribute");
-        ClassWriter cw = new ClassWriter(0);
-        ClassVisitor cv = new AddCommentClassAdapter(cw);
-        cr.accept(cv, new Attribute[] { new CommentAttribute("") }, 0);
-        byte[] b = cw.toByteArray();
-
-        // stores the adapted class on disk
-        FileOutputStream fos = new FileOutputStream(
-                "CommentAttribute.class.new");
-        try {
-            fos.write(b);
-        } finally {
-            fos.close();
-        }
-
-        // "disassembles" the adapted class
-        cr = new ClassReader(b);
-        cv = new TraceClassVisitor(new PrintWriter(System.out));
-        cr.accept(cv, new Attribute[] { new CommentAttribute("") }, 0);
-    }
-}
-
-class AddCommentClassAdapter extends ClassVisitor implements Opcodes {
-
-    public AddCommentClassAdapter(final ClassVisitor cv) {
-        super(Opcodes.ASM4, cv);
-    }
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        super.visit(version, access, name, signature, superName, interfaces);
-        visitAttribute(new CommentAttribute("this is a class comment"));
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        FieldVisitor fv = super
-                .visitField(access, name, desc, signature, value);
-        fv.visitAttribute(new CommentAttribute("this is a field comment"));
-        return fv;
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                exceptions);
-        if (mv != null) {
-            mv.visitAttribute(new CommentAttribute("this is a method comment"));
-        }
-        return mv;
-    }
-}
-
-class CommentAttribute extends Attribute implements Textifiable {
-
-    private String comment;
-
-    public CommentAttribute(final String comment) {
-        super("Comment");
-        this.comment = comment;
-    }
-
-    public String getComment() {
-        return comment;
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        return new CommentAttribute(cr.readUTF8(off, buf));
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector().putShort(cw.newUTF8(comment));
-    }
-
-    public void textify(StringBuffer buf, Map<Label, String> labelNames) {
-        buf.append(": " + comment + "\n");
-    }
-}
diff --git a/asm4/examples/common/README.txt b/asm4/examples/common/README.txt
deleted file mode 100644
index 164705d..0000000
--- a/asm4/examples/common/README.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, 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. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, 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 directory contains the examples of the product. 
-It contains(*) the following items:
-
-- lib: jar files shared by all examples,
-- etc: configuration files shared by all examples,
-- README.txt: explains the organisation of the examples directory,
-- all other directories contain(*) the following items:
-  - README.txt file: describes the example and its configuration,
-  - lib: jar files needed by the example,
-  - etc: configuration files needed by the example,
-  - src: source code of the example.
-
-(*) some items may not be present, depending on the product or example.
\ No newline at end of file
diff --git a/asm4/examples/common/build.xml b/asm4/examples/common/build.xml
deleted file mode 100644
index 950b028..0000000
--- a/asm4/examples/common/build.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="Examples" default="compile">
-
-  <!-- directory definition -->
-
-  <property name="src"          value="${basedir}/src"/>
-  <property name="build"        value="${basedir}/build"/>
-
-  <property file="${basedir}/../etc/build.properties"/>
-  <property file="${basedir}/etc/build.properties"/>
-  <property file="${basedir}/etc/execute.properties"/>
-
-  <!-- Building of a path which contains external jars -->
-
-  <path id="compile-classpath">
-    <pathelement path="${asm.debug.path}"/>
-	<fileset dir="${basedir}">
-	  <include name="lib/*.jar"/>
-	</fileset>
-	<pathelement location="${build}"/>
-  </path>	
-	
-  <path id="runtime-classpath">
-    <pathelement path="${asm.path}"/>
-    <pathelement path="${asm.tree.path}"/>
-    <pathelement path="${asm.analysis.path}"/>
-    <pathelement path="${asm.attrs.path}"/>
-    <pathelement path="${asm.util.path}"/>
-    <pathelement path="${asm.commons.path}"/>
-    <fileset dir="${basedir}">
-      <include name="lib/*.jar"/>
-    </fileset>
-    <pathelement location="${build}"/>
-  </path>
-	
-  
-
-  <!-- ================================== -->
-  <!--              EXECUTE               -->
-  <!-- ================================== -->
-
-  <target name="execute" depends="compile">
-    <java classname="${run.classname}"
-      classpathref="runtime-classpath" fork="yes" failonerror="yes">
-       <arg line="${run.parameters}"/>
-    </java>
-  </target>
-
-  <!-- ================================== -->
-  <!--              COMPILE               -->
-  <!-- ================================== -->
-
-  <target name="compile">
-    <mkdir dir="${build}"/>
-    <javac srcdir="${src}" destdir="${build}" debug="on" source="1.5" target="1.5">
-      <classpath refid="compile-classpath"/>
-      <include name="**/*.java"/>
-    </javac>
-  </target>
-
-  <!-- ================================== -->
-  <!--               CLEAN                -->
-  <!-- ================================== -->
-
-  <target name="clean">
-    <delete dir="${build}"/>
-  </target>
-</project>
diff --git a/asm4/examples/common/etc/build.properties b/asm4/examples/common/etc/build.properties
deleted file mode 100644
index c3eb187..0000000
--- a/asm4/examples/common/etc/build.properties
+++ /dev/null
@@ -1,68 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-# Wich compiler do you want use ?
-
-# build.compiler jikes
-
-# Runtime class path for the ASM library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.path ../../lib/asm-@product.version@.jar
-
-# Runtime class path for the ASM tree library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.tree.path ../../lib/asm-tree-@product.version@.jar
-
-# Runtime class path for the ASM analysis library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.analysis.path ../../lib/asm-analysis-@product.version@.jar
-
-# Runtime class path for the ASM attrs library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.attrs.path ../../lib/asm-attrs-@product.version@.jar
-
-# Runtime class path for the ASM util library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.util.path ../../lib/asm-util-@product.version@.jar
-
-# Runtime class path for the ASM commons library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.commons.path ../../lib/asm-commons-@product.version@.jar
-
-# Compile time class path for the whole ASM library (version @product.version@)
-# See http://asm.objectweb.org
-
-asm.debug.path ../../lib/all/asm-debug-all-@product.version@.jar
diff --git a/asm4/examples/compile-indy/etc/execute.properties b/asm4/examples/compile-indy/etc/execute.properties
deleted file mode 100644
index a22cb1d..0000000
--- a/asm4/examples/compile-indy/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname IndyCompile
-run.parameters
diff --git a/asm4/examples/compile-indy/src/IndyCompile.java b/asm4/examples/compile-indy/src/IndyCompile.java
deleted file mode 100644
index cac146e..0000000
--- a/asm4/examples/compile-indy/src/IndyCompile.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * This example is adapted from the example that you can find in examples/compile
- * and use invokedynamic to implement all operations.
- *
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
-import static org.objectweb.asm.Opcodes.ACC_STATIC;
-import static org.objectweb.asm.Opcodes.ALOAD;
-import static org.objectweb.asm.Opcodes.ARETURN;
-import static org.objectweb.asm.Opcodes.DUP;
-import static org.objectweb.asm.Opcodes.H_INVOKESTATIC;
-import static org.objectweb.asm.Opcodes.IFEQ;
-import static org.objectweb.asm.Opcodes.IFNE;
-import static org.objectweb.asm.Opcodes.POP;
-import static org.objectweb.asm.Opcodes.V1_7;
-
-import java.io.FileOutputStream;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * @author Remi Forax
- * @author Eric Bruneton
- */
-public class IndyCompile extends ClassLoader {
-
-    public static void main(final String[] args) throws Throwable {
-        // creates the expression tree corresponding to
-        // exp(i) = i > 3 && 6 > i
-        Exp exp = new And(new GT(new Var(0), new Cst(3)), new GT(new Cst(6),
-                new Var(0)));
-
-        // compiles this expression into a generic static method in a class
-        IndyCompile main = new IndyCompile();
-        byte[] b = exp.compile("Example");
-        FileOutputStream fos = new FileOutputStream("Example.class");
-        fos.write(b);
-        fos.close();
-        Class<?> expClass = main.defineClass("Example", b, 0, b.length);
-        Method expMethod = expClass.getDeclaredMethods()[0];
-
-        // ... and use it to evaluate exp(0) to exp(9)
-        for (int i = 0; i < 10; ++i) {
-            boolean val = (Boolean) expMethod.invoke(null, i);
-            System.out.println(i + " > 3 && " + i + " < 6 = " + val);
-        }
-
-        // ... more fun, test with strings !!!
-        for (int i = 0; i < 10; ++i) {
-            boolean val = (Boolean) expMethod.invoke(null, Integer.toString(i));
-            System.out.println("\"" + i + "\" > 3 && 6 > \"" + i + "\" = "
-                    + val);
-        }
-    }
-
-    /**
-     * An abstract expression.
-     */
-    static abstract class Exp {
-
-        static final Handle CST = getHandle("cst", "Ljava/lang/Object;");
-
-        static final Handle UNARY = getHandle("unary", "");
-
-        static final Handle BINARY = getHandle("binary", "");
-
-        /**
-         * Returns the maximum variable index used in this expression.
-         * 
-         * @return the maximum variable index used in this expression, or -1 if
-         *         no variable is used.
-         */
-        int getMaxVarIndex() {
-            return -1;
-        }
-
-        /*
-         * Returns the byte code of a class corresponding to this expression.
-         */
-        byte[] compile(final String name) {
-            // class header
-            ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
-            cw.visit(V1_7, ACC_PUBLIC, name, null, "java/lang/Object", null);
-
-            // eval method type
-            StringBuilder desc = new StringBuilder("(");
-            for (int i = 0; i <= getMaxVarIndex(); ++i) {
-                desc.append("Ljava/lang/Object;");
-            }
-            desc.append(")Ljava/lang/Object;");
-
-            // eval method
-            MethodVisitor mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "eval",
-                    desc.toString(), null, null);
-            compile(mv);
-            mv.visitInsn(ARETURN);
-            // max stack and max locals automatically computed
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            return cw.toByteArray();
-        }
-
-        /*
-         * Compile this expression. This method must append to the given code
-         * writer the byte code that evaluates and pushes on the stack the value
-         * of this expression.
-         */
-        abstract void compile(MethodVisitor mv);
-
-        private static Handle getHandle(final String name, final String optArgs) {
-            return new Handle(
-                    H_INVOKESTATIC,
-                    "RT",
-                    name,
-                    "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;"
-                            + optArgs + ")Ljava/lang/invoke/CallSite;");
-        }
-    }
-
-    /**
-     * A constant expression.
-     */
-    static class Cst extends Exp {
-
-        private final Object value;
-
-        Cst(final Object value) {
-            this.value = value;
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            if (value instanceof String) {
-                mv.visitLdcInsn(value);
-                return;
-            }
-
-            // instead of pushing the constant and then box it, we use
-            // invokedynamic with the constant as bootstrap argument. The
-            // boxing will be performed by the VM when calling the bootstrap
-            // method
-            mv.visitInvokeDynamicInsn("cst", "()Ljava/lang/Object;", CST, value);
-        }
-    }
-
-    /**
-     * A variable reference expression.
-     */
-    static class Var extends Exp {
-
-        final int index;
-
-        Var(final int index) {
-            this.index = index;
-        }
-
-        @Override
-        int getMaxVarIndex() {
-            return index;
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // pushes the 'index' local variable onto the stack
-            mv.visitVarInsn(ALOAD, index);
-        }
-    }
-
-    /**
-     * An abstract binary expression.
-     */
-    static abstract class BinaryExp extends Exp {
-
-        final Exp e1;
-
-        final Exp e2;
-
-        @Override
-        int getMaxVarIndex() {
-            return Math.max(e1.getMaxVarIndex(), e2.getMaxVarIndex());
-        }
-
-        BinaryExp(final Exp e1, final Exp e2) {
-            this.e1 = e1;
-            this.e2 = e2;
-        }
-    }
-
-    /**
-     * An addition expression.
-     */
-    static class Add extends BinaryExp {
-
-        Add(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1, e2, and adds an instruction to add the two values
-            e1.compile(mv);
-            e2.compile(mv);
-            mv.visitInvokeDynamicInsn("add",
-                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
-                    BINARY);
-        }
-    }
-
-    /**
-     * A multiplication expression.
-     */
-    static class Mul extends BinaryExp {
-
-        Mul(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1, e2, and adds an instruction to multiply the two
-            // values
-            e1.compile(mv);
-            e2.compile(mv);
-            mv.visitInvokeDynamicInsn("mul",
-                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
-                    BINARY);
-        }
-    }
-
-    /**
-     * A "greater than" expression.
-     */
-    static class GT extends BinaryExp {
-
-        GT(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1, e2, and adds the instructions to compare the two
-            // values
-            e1.compile(mv);
-            e2.compile(mv);
-            mv.visitInvokeDynamicInsn("gt",
-                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
-                    BINARY);
-        }
-    }
-
-    /**
-     * A logical "and" expression.
-     */
-    static class And extends BinaryExp {
-
-        And(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1
-            e1.compile(mv);
-            // tests if e1 is false
-            mv.visitInsn(DUP);
-            // convert to a boolean
-            mv.visitInvokeDynamicInsn("asBoolean", "(Ljava/lang/Object;)Z",
-                    UNARY);
-
-            Label end = new Label();
-            mv.visitJumpInsn(IFEQ, end);
-            // case where e1 is true : e1 && e2 is equal to e2
-            mv.visitInsn(POP);
-            e2.compile(mv);
-
-            // if e1 is false, e1 && e2 is equal to e1:
-            // we jump directly to this label, without evaluating e2
-            mv.visitLabel(end);
-        }
-    }
-
-    /**
-     * A logical "or" expression.
-     */
-    static class Or extends BinaryExp {
-
-        Or(final Exp e1, final Exp e2) {
-            super(e1, e2);
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e1
-            e1.compile(mv);
-            // tests if e1 is true
-            mv.visitInsn(DUP);
-            // convert to a boolean
-            mv.visitInvokeDynamicInsn("asBoolean", "(Ljava/lang/Object;)Z",
-                    UNARY);
-            Label end = new Label();
-            mv.visitJumpInsn(IFNE, end);
-            // case where e1 is false : e1 || e2 is equal to e2
-            mv.visitInsn(POP);
-            e2.compile(mv);
-            // if e1 is true, e1 || e2 is equal to e1:
-            // we jump directly to this label, without evaluating e2
-            mv.visitLabel(end);
-        }
-    }
-
-    /**
-     * A logical "not" expression.
-     */
-    static class Not extends Exp {
-
-        private final Exp e;
-
-        Not(final Exp e) {
-            this.e = e;
-        }
-
-        @Override
-        int getMaxVarIndex() {
-            return e.getMaxVarIndex();
-        }
-
-        @Override
-        void compile(final MethodVisitor mv) {
-            // compiles e, and applies 'not'
-            e.compile(mv);
-            mv.visitInvokeDynamicInsn("not",
-                    "(Ljava/lang/Object;)Ljava/lang/Object;", UNARY);
-        }
-    }
-}
diff --git a/asm4/examples/compile-indy/src/RT.java b/asm4/examples/compile-indy/src/RT.java
deleted file mode 100644
index fdf080a..0000000
--- a/asm4/examples/compile-indy/src/RT.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/***
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-
-import java.lang.invoke.CallSite;
-import java.lang.invoke.ConstantCallSite;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.invoke.MethodType;
-import java.lang.invoke.MutableCallSite;
-import java.util.HashMap;
-
-/**
- * There are 3 bootstrap methods: - one for the constant that are initialized
- * once the first time the bootstrap method is called and after always reuse the
- * same constant. It's almost equivalent to an LDC but here the constant are
- * stored in boxed form e.g a java.lang.Integer containing 0 instead of an int
- * containing 0.
- * 
- * - one for the unary operation 'not' and 'asBoolean', here the semantics is
- * hard coded, all primitive value are transformed as object by applying this
- * operation: (v == 0)? false: true
- * 
- * - one for the binary operation 'add', 'mul' and 'gt', here the semantics can
- * be changed by adding more static methods in {@link BinaryOps}. This bootstrap
- * method is a little more complex because it creates an inlining cache to avoid
- * to recompute the binary method to call if the type of the two arguments
- * doesn't change. Also, if the expression is used a lot and trigger the JIT, it
- * will be able to inline the code of the operation directly at callsite.
- * 
- * @author Remi Forax
- */
-public class RT {
-    /**
-     * bootstrap method for constant
-     */
-    public static CallSite cst(Lookup lookup, String name, MethodType type,
-            Object constant) {
-        return new ConstantCallSite(MethodHandles.constant(Object.class,
-                constant));
-    }
-
-    /**
-     * bootstrap method for unary operation 'asBoolean' and 'not'
-     */
-    public static CallSite unary(Lookup lookup, String name, MethodType type) {
-        MethodHandle target;
-        if (name.equals("asBoolean")) {
-            target = MethodHandles.explicitCastArguments(
-                    MethodHandles.identity(Object.class),
-                    MethodType.methodType(boolean.class, Object.class));
-        } else { // "not"
-            target = MethodHandles.explicitCastArguments(NOT,
-                    MethodType.methodType(Object.class, Object.class));
-        }
-        return new ConstantCallSite(target);
-    }
-
-    /**
-     * bootstrap method for binary operation 'add', 'mul' and 'gt'
-     * 
-     * This bootstrap method doesn't install the target method handle directly,
-     * because we want to install an inlining cache and we can't create an
-     * inlining cache without knowing the class of the arguments. So this method
-     * first installs a method handle that will call
-     * {@link BinaryOpCallSite#fallback(Object, Object)} and the fallback method
-     * will be called with the arguments and thus can install the inlining
-     * cache. Also, the fallback has to be bound to a specific callsite to be
-     * able to change its target after the first call, this part is done in the
-     * constructor of {@link BinaryOpCallSite}.
-     */
-    public static CallSite binary(Lookup lookup, String name, MethodType type) {
-        BinaryOpCallSite callSite = new BinaryOpCallSite(name, type);
-        callSite.setTarget(callSite.fallback);
-        return callSite;
-    }
-
-    /**
-     * Garbage class containing the method used to apply 'not' on a boolean. See
-     * {@link RT#unary(Lookup, String, MethodType)}
-     */
-    public static class UnayOps {
-
-        public static Object not(boolean b) {
-            return !b;
-        }
-    }
-
-    private static final MethodHandle NOT;
-
-    static {
-        try {
-            NOT = MethodHandles.publicLookup().findStatic(UnayOps.class, "not",
-                    MethodType.methodType(Object.class, boolean.class));
-        } catch (ReflectiveOperationException e) {
-            throw new LinkageError(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * A specific callsite that will install an 'inlining cache'. Because we
-     * don't know until runtime which method handle to call, the lookup
-     * depending on the dynamic type of the argument will be done at runtime
-     * when the method {@link #fallback(Object, Object)} is called. To avoid to
-     * do this dynamic lookup at each call, the fallback install two guards in
-     * front of dispatch call that will check if the arguments class change or
-     * not. If the arguments class don't change, the previously computed method
-     * handle will be called again. Otherwise, a new method handle will be
-     * computed and two new guards will be installed.
-     */
-    static class BinaryOpCallSite extends MutableCallSite {
-
-        private final String opName;
-
-        final MethodHandle fallback;
-
-        public BinaryOpCallSite(String opName, MethodType type) {
-            super(type);
-            this.opName = opName;
-            this.fallback = FALLBACK.bindTo(this);
-        }
-
-        Object fallback(Object v1, Object v2) throws Throwable {
-            // when you debug with this message
-            // don't forget that && and || are lazy !!
-            // System.out.println("fallback called with "+opName+'('+v1.getClass()+','+v2.getClass()+')');
-
-            Class<? extends Object> class1 = v1.getClass();
-            Class<? extends Object> class2 = v2.getClass();
-            MethodHandle op = lookupBinaryOp(opName, class1, class2);
-
-            // convert arguments
-            MethodType type = type();
-            MethodType opType = op.type();
-            if (opType.parameterType(0) == String.class) {
-                if (opType.parameterType(1) == String.class) {
-                    op = MethodHandles.filterArguments(op, 0, TO_STRING,
-                            TO_STRING);
-                } else {
-                    op = MethodHandles.filterArguments(op, 0, TO_STRING);
-                    op = MethodHandles.explicitCastArguments(op, type);
-                }
-            } else {
-                if (opType.parameterType(1) == String.class) {
-                    op = MethodHandles.filterArguments(op, 1, TO_STRING);
-                }
-                op = MethodHandles.explicitCastArguments(op, type);
-            }
-
-            // prepare guard
-            MethodHandle guard = MethodHandles.guardWithTest(TEST1
-                    .bindTo(class1), MethodHandles.guardWithTest(
-                    TEST2.bindTo(class2), op, fallback), fallback);
-
-            // install the inlining cache
-            setTarget(guard);
-            return op.invokeWithArguments(v1, v2);
-        }
-
-        public static boolean test1(Class<?> v1Class, Object v1, Object v2) {
-            return v1.getClass() == v1Class;
-        }
-
-        public static boolean test2(Class<?> v2Class, Object v1, Object v2) {
-            return v2.getClass() == v2Class;
-        }
-
-        private static final MethodHandle TO_STRING;
-
-        private static final MethodHandle TEST1;
-
-        private static final MethodHandle TEST2;
-
-        private static final MethodHandle FALLBACK;
-
-        static {
-            Lookup lookup = MethodHandles.lookup();
-            try {
-                TO_STRING = lookup.findVirtual(Object.class, "toString",
-                        MethodType.methodType(String.class));
-                MethodType testType = MethodType.methodType(boolean.class,
-                        Class.class, Object.class, Object.class);
-                TEST1 = lookup.findStatic(BinaryOpCallSite.class, "test1",
-                        testType);
-                TEST2 = lookup.findStatic(BinaryOpCallSite.class, "test2",
-                        testType);
-                FALLBACK = lookup.findVirtual(BinaryOpCallSite.class,
-                        "fallback", MethodType.genericMethodType(2));
-            } catch (ReflectiveOperationException e) {
-                throw new LinkageError(e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * Garbage class that contains the raw operations used for binary
-     * operations. All methods must be static returns an Object and takes the
-     * same type for the two parameter types.
-     * 
-     * See {@link RT#lookupBinaryOp(String, Class, Class)} for more info.
-     */
-    public static class BinaryOps {
-
-        public static Object add(int v1, int v2) {
-            return v1 + v2;
-        }
-
-        public static Object add(double v1, double v2) {
-            return v1 + v2;
-        }
-
-        public static Object add(String v1, String v2) {
-            return v1 + v2;
-        }
-
-        public static Object mul(int v1, int v2) {
-            return v1 * v2;
-        }
-
-        public static Object mul(double v1, double v2) {
-            return v1 * v2;
-        }
-
-        public static Object gt(int v1, int v2) {
-            return v1 > v2;
-        }
-
-        public static Object gt(double v1, double v2) {
-            return v1 > v2;
-        }
-
-        public static Object gt(String v1, String v2) {
-            return v1.compareTo(v2) > 0;
-        }
-    }
-
-    /**
-     * Select a most specific method among the ones defined in
-     * {@link RT.BinaryOps}. The algorithm first find the most specific subtype
-     * between class1 and class2. The order of the types is defined in
-     * {@link RT#RANK_MAP}: Boolean < Byte < Short < Character < Integer < Long
-     * < Float < Double < String then the algorithm lookup in
-     * {@link RT.BinaryOps} to find a method with the name opName taking as
-     * argument the primitive corresponding to the most specific subtype. If no
-     * such method exist, the algorithm retry but looking for a method with a
-     * more specific type (using the same order). The result of the lookup is
-     * cached in {@link RT#BINARY_CACHE} to avoid to avoid to do a lookup (a
-     * reflective call) on the same method twice.
-     */
-    static MethodHandle lookupBinaryOp(String opName, Class<?> class1,
-            Class<?> class2) {
-        int rank = Math.max(RANK_MAP.get(class1), RANK_MAP.get(class2));
-        String mangledName = opName + rank;
-        MethodHandle mh = BINARY_CACHE.get(mangledName);
-        if (mh != null) {
-            return mh;
-        }
-
-        for (; rank < PRIMITIVE_ARRAY.length;) {
-            Class<?> primitive = PRIMITIVE_ARRAY[rank];
-            try {
-                mh = MethodHandles.publicLookup().findStatic(
-                        BinaryOps.class,
-                        opName,
-                        MethodType.methodType(Object.class, primitive,
-                                primitive));
-            } catch (NoSuchMethodException e) {
-                rank = rank + 1;
-                continue;
-            } catch (IllegalAccessException e) {
-                throw new LinkageError(e.getMessage(), e);
-            }
-
-            BINARY_CACHE.put(mangledName, mh);
-            return mh;
-        }
-        throw new LinkageError("unknown operation " + opName + " ("
-                + class1.getName() + ',' + class2.getName() + ')');
-    }
-
-    private static final HashMap<Class<?>, Integer> RANK_MAP;
-
-    private static final Class<?>[] PRIMITIVE_ARRAY;
-
-    private static final HashMap<String, MethodHandle> BINARY_CACHE;
-
-    static {
-        Class<?>[] primitives = new Class<?>[] { boolean.class, byte.class,
-                short.class, char.class, int.class, long.class, float.class,
-                double.class, String.class };
-        Class<?>[] wrappers = new Class<?>[] { Boolean.class, Byte.class,
-                Short.class, Character.class, Integer.class, Long.class,
-                Float.class, Double.class, String.class };
-        HashMap<Class<?>, Integer> rankMap = new HashMap<Class<?>, Integer>();
-        for (int i = 0; i < wrappers.length; i++) {
-            rankMap.put(wrappers[i], i);
-        }
-
-        RANK_MAP = rankMap;
-        PRIMITIVE_ARRAY = primitives;
-        BINARY_CACHE = new HashMap<String, MethodHandle>();
-    }
-}
diff --git a/asm4/examples/compile/etc/execute.properties b/asm4/examples/compile/etc/execute.properties
deleted file mode 100644
index 43f5d75..0000000
--- a/asm4/examples/compile/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname Compile
-run.parameters
diff --git a/asm4/examples/compile/src/Compile.java b/asm4/examples/compile/src/Compile.java
deleted file mode 100644
index 7972867..0000000
--- a/asm4/examples/compile/src/Compile.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.io.FileOutputStream;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * @author Eric Bruneton
- */
-public class Compile extends ClassLoader {
-
-    public static void main(final String[] args) throws Exception {
-        // creates the expression tree corresponding to
-        // exp(i) = i > 3 && 6 > i
-        Exp exp = new And(new GT(new Var(0), new Cst(3)), new GT(new Cst(6),
-                new Var(0)));
-        // compiles this expression into an Expression class
-        Compile main = new Compile();
-        byte[] b = exp.compile("Example");
-        FileOutputStream fos = new FileOutputStream("Example.class");
-        fos.write(b);
-        fos.close();
-        Class<?> expClass = main.defineClass("Example", b, 0, b.length);
-        // instantiates this compiled expression class...
-        Expression iexp = (Expression) expClass.newInstance();
-        // ... and uses it to evaluate exp(0) to exp(9)
-        for (int i = 0; i < 10; ++i) {
-            boolean val = iexp.eval(i, 0) == 1;
-            System.out.println(i + " > 3 && " + i + " < 6 = " + val);
-        }
-    }
-}
-
-/**
- * An abstract expression.
- * 
- * @author Eric Bruneton
- */
-abstract class Exp implements Opcodes {
-
-    /*
-     * Returns the byte code of an Expression class corresponding to this
-     * expression.
-     */
-    byte[] compile(final String name) {
-        // class header
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cw.visit(V1_1, ACC_PUBLIC, name, null, "java/lang/Object",
-                new String[] { Expression.class.getName() });
-
-        // default public constructor
-        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null,
-                null);
-        mv.visitVarInsn(ALOAD, 0);
-        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mv.visitInsn(RETURN);
-        mv.visitMaxs(1, 1);
-        mv.visitEnd();
-
-        // eval method
-        mv = cw.visitMethod(ACC_PUBLIC, "eval", "(II)I", null, null);
-        compile(mv);
-        mv.visitInsn(IRETURN);
-        // max stack and max locals automatically computed
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    /*
-     * Compile this expression. This method must append to the given code writer
-     * the byte code that evaluates and pushes on the stack the value of this
-     * expression.
-     */
-    abstract void compile(MethodVisitor mv);
-}
-
-/**
- * A constant expression.
- */
-class Cst extends Exp {
-
-    int value;
-
-    Cst(final int value) {
-        this.value = value;
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // pushes the constant's value onto the stack
-        mv.visitLdcInsn(new Integer(value));
-    }
-}
-
-/**
- * A variable reference expression.
- */
-class Var extends Exp {
-
-    int index;
-
-    Var(final int index) {
-        this.index = index + 1;
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // pushes the 'index' local variable onto the stack
-        mv.visitVarInsn(ILOAD, index);
-    }
-}
-
-/**
- * An abstract binary expression.
- */
-abstract class BinaryExp extends Exp {
-
-    Exp e1;
-
-    Exp e2;
-
-    BinaryExp(final Exp e1, final Exp e2) {
-        this.e1 = e1;
-        this.e2 = e2;
-    }
-}
-
-/**
- * An addition expression.
- */
-class Add extends BinaryExp {
-
-    Add(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1, e2, and adds an instruction to add the two values
-        e1.compile(mv);
-        e2.compile(mv);
-        mv.visitInsn(IADD);
-    }
-}
-
-/**
- * A multiplication expression.
- */
-class Mul extends BinaryExp {
-
-    Mul(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1, e2, and adds an instruction to multiply the two values
-        e1.compile(mv);
-        e2.compile(mv);
-        mv.visitInsn(IMUL);
-    }
-}
-
-/**
- * A "greater than" expression.
- */
-class GT extends BinaryExp {
-
-    GT(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1, e2, and adds the instructions to compare the two values
-        e1.compile(mv);
-        e2.compile(mv);
-        Label iftrue = new Label();
-        Label end = new Label();
-        mv.visitJumpInsn(IF_ICMPGT, iftrue);
-        // case where e1 <= e2 : pushes false and jump to "end"
-        mv.visitLdcInsn(new Integer(0));
-        mv.visitJumpInsn(GOTO, end);
-        // case where e1 > e2 : pushes true
-        mv.visitLabel(iftrue);
-        mv.visitLdcInsn(new Integer(1));
-        mv.visitLabel(end);
-    }
-}
-
-/**
- * A logical "and" expression.
- */
-class And extends BinaryExp {
-
-    And(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1
-        e1.compile(mv);
-        // tests if e1 is false
-        mv.visitInsn(DUP);
-        Label end = new Label();
-        mv.visitJumpInsn(IFEQ, end);
-        // case where e1 is true : e1 && e2 is equal to e2
-        mv.visitInsn(POP);
-        e2.compile(mv);
-        // if e1 is false, e1 && e2 is equal to e1:
-        // we jump directly to this label, without evaluating e2
-        mv.visitLabel(end);
-    }
-}
-
-/**
- * A logical "or" expression.
- */
-class Or extends BinaryExp {
-
-    Or(final Exp e1, final Exp e2) {
-        super(e1, e2);
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // compiles e1
-        e1.compile(mv);
-        // tests if e1 is true
-        mv.visitInsn(DUP);
-        Label end = new Label();
-        mv.visitJumpInsn(IFNE, end);
-        // case where e1 is false : e1 || e2 is equal to e2
-        mv.visitInsn(POP);
-        e2.compile(mv);
-        // if e1 is true, e1 || e2 is equal to e1:
-        // we jump directly to this label, without evaluating e2
-        mv.visitLabel(end);
-    }
-}
-
-/**
- * A logical "not" expression.
- */
-class Not extends Exp {
-
-    Exp e;
-
-    Not(final Exp e) {
-        this.e = e;
-    }
-
-    @Override
-    void compile(final MethodVisitor mv) {
-        // computes !e1 by evaluating 1 - e1
-        mv.visitLdcInsn(new Integer(1));
-        e.compile(mv);
-        mv.visitInsn(ISUB);
-    }
-}
diff --git a/asm4/examples/compile/src/Expression.java b/asm4/examples/compile/src/Expression.java
deleted file mode 100644
index 83d2eb2..0000000
--- a/asm4/examples/compile/src/Expression.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-
-/**
- * An integer or boolean expression of at most two variables.
- * 
- * @author Eric Bruneton
- */
-public interface Expression {
-
-    /**
-     * Evaluates this expression.
-     * 
-     * @param i
-     *            the value of the first variable.
-     * @param j
-     *            the value of the second variable.
-     * @return the value of this expression for the given variable values.
-     */
-    int eval(int i, int j);
-}
diff --git a/asm4/examples/dependencies/etc/execute.properties b/asm4/examples/dependencies/etc/execute.properties
deleted file mode 100644
index 345cc81..0000000
--- a/asm4/examples/dependencies/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname org.objectweb.asm.depend.DependencyTracker
-run.parameters ../../lib/asm-4.0.jar
diff --git a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyTracker.java b/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyTracker.java
deleted file mode 100644
index e20304c..0000000
--- a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyTracker.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm.depend;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import javax.imageio.ImageIO;
-
-import org.objectweb.asm.ClassReader;
-
-/**
- * DependencyTracker
- * 
- * @author Eugene Kuleshov
- * 
- * @see "http://www.onjava.com/pub/a/onjava/2005/08/17/asm3.html"
- */
-public class DependencyTracker {
-
-    private static final int CELL_PAD = 1;
-
-    private static final int GRID_SIZE = 10;
-
-    private static final int CELLS_SIZE = 8;
-
-    private static final int LABEL_WIDTH = 200;
-
-    private static final String LABEL_FONT = "Tahoma-9";
-
-    public static void main(final String[] args) throws IOException {
-        DependencyVisitor v = new DependencyVisitor();
-
-        ZipFile f = new ZipFile(args[0]);
-
-        long l1 = System.currentTimeMillis();
-        Enumeration<? extends ZipEntry> en = f.entries();
-        while (en.hasMoreElements()) {
-            ZipEntry e = en.nextElement();
-            String name = e.getName();
-            if (name.endsWith(".class")) {
-                new ClassReader(f.getInputStream(e)).accept(v, 0);
-            }
-        }
-        long l2 = System.currentTimeMillis();
-
-        Map<String, Map<String, Integer>> globals = v.getGlobals();
-        Set<String> jarPackages = globals.keySet();
-        Set<String> classPackages = v.getPackages();
-        int size = classPackages.size();
-        System.err.println("time: " + (l2 - l1) / 1000f + "  " + size);
-
-        String[] jarNames = jarPackages.toArray(new String[jarPackages.size()]);
-        String[] classNames = classPackages.toArray(new String[classPackages
-                .size()]);
-        Arrays.sort(jarNames);
-        Arrays.sort(classNames);
-
-        buildDiagram(jarNames, classNames, globals);
-    }
-
-    public static void buildDiagram(final String[] jarNames,
-            final String[] classNames,
-            final Map<String, Map<String, Integer>> globals) throws IOException {
-        // normalize
-        int max = 0;
-        for (int i = 0; i < classNames.length; i++) {
-            Map<String, Integer> map = globals.get(classNames[i]);
-            if (map == null) {
-                continue;
-            }
-            Integer maxCount = Collections.max(map.values());
-            if (maxCount > max) {
-                max = maxCount;
-            }
-        }
-
-        List<Color> colors = new ArrayList<Color>();
-        for (int i = LABEL_WIDTH; i >= 0; i--) {
-            colors.add(new Color(i, i, 255));
-        }
-        for (int i = 255; i >= 128; i--) {
-            colors.add(new Color(0, 0, i));
-        }
-        int maxcolor = colors.size() - 1;
-
-        int heigh = CELL_PAD + (CELLS_SIZE + CELL_PAD) * classNames.length;
-        int width = CELL_PAD + (CELLS_SIZE + CELL_PAD) * jarNames.length;
-
-        BufferedImage img = new BufferedImage(width + LABEL_WIDTH, heigh
-                + LABEL_WIDTH, BufferedImage.TYPE_INT_RGB);
-
-        Graphics2D g = img.createGraphics();
-        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                RenderingHints.VALUE_ANTIALIAS_ON);
-
-        g.setColor(Color.WHITE);
-        g.fillRect(0, 0, width + LABEL_WIDTH, heigh + LABEL_WIDTH);
-
-        // draw lines
-        g.setColor(Color.LIGHT_GRAY);
-        for (int y = GRID_SIZE; y < classNames.length; y += GRID_SIZE) {
-            g.drawLine(0, y * (CELLS_SIZE + CELL_PAD), width, y
-                    * (CELLS_SIZE + CELL_PAD));
-        }
-        for (int x = GRID_SIZE; x < jarNames.length; x += GRID_SIZE) {
-            g.drawLine(x * (CELLS_SIZE + CELL_PAD), 0, x
-                    * (CELLS_SIZE + CELL_PAD), heigh);
-        }
-
-        // draw diagram
-        for (int y = 0; y < classNames.length; y++) {
-            // System.err.println( y+" : "+classNames[ y]);
-
-            for (int x = 0; x < jarNames.length; x++) {
-                Map<String, Integer> map = globals.get(jarNames[x]);
-
-                Integer count = map == null ? null : map.get(classNames[y]);
-                if (count != null) {
-                    int b = (int) ((float) count * maxcolor / max);
-
-                    g.setColor(colors.get(b));
-                    g.fillRect(CELL_PAD + x * (CELLS_SIZE + CELL_PAD), CELL_PAD
-                            + y * (CELLS_SIZE + CELL_PAD), CELLS_SIZE,
-                            CELLS_SIZE);
-                }
-            }
-        }
-
-        // draw labels
-        Font f = Font.decode(LABEL_FONT);
-        g.setFont(f);
-        // g.setColor( new Color( 70, 70, 255));
-        g.setColor(Color.GRAY);
-
-        for (int y = 0; y < classNames.length; y++) {
-            AffineTransform trans = g.getTransform();
-            g.transform(AffineTransform.getTranslateInstance(CELL_PAD * 2
-                    + width, CELLS_SIZE + y * (CELLS_SIZE + CELL_PAD)));
-            g.transform(AffineTransform.getRotateInstance(Math.PI / 12));
-            g.drawString(classNames[y], 0, 0);
-            g.setTransform(trans);
-        }
-
-        for (int x = 0; x < jarNames.length; x++) {
-            AffineTransform trans = g.getTransform();
-            g.transform(AffineTransform.getTranslateInstance(CELL_PAD * 2 + x
-                    * (CELLS_SIZE + CELL_PAD), heigh + CELL_PAD * 2));
-            g.transform(AffineTransform.getRotateInstance(Math.PI / 2.5));
-            g.drawString(jarNames[x], 0, 0);
-            g.setTransform(trans);
-        }
-
-        FileOutputStream fos = new FileOutputStream("test.png");
-        ImageIO.write(img, "png", fos);
-        fos.flush();
-        fos.close();
-    }
-}
diff --git a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyVisitor.java b/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyVisitor.java
deleted file mode 100644
index bd8d76e..0000000
--- a/asm4/examples/dependencies/src/org/objectweb/asm/depend/DependencyVisitor.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm.depend;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.signature.SignatureReader;
-import org.objectweb.asm.signature.SignatureVisitor;
-
-/**
- * DependencyVisitor
- * 
- * @author Eugene Kuleshov
- */
-public class DependencyVisitor extends ClassVisitor {
-    Set<String> packages = new HashSet<String>();
-
-    Map<String, Map<String, Integer>> groups = new HashMap<String, Map<String, Integer>>();
-
-    Map<String, Integer> current;
-
-    public Map<String, Map<String, Integer>> getGlobals() {
-        return groups;
-    }
-
-    public Set<String> getPackages() {
-        return packages;
-    }
-
-    public DependencyVisitor() {
-        super(Opcodes.ASM4);
-    }
-
-    // ClassVisitor
-
-    @Override
-    public void visit(final int version, final int access, final String name,
-            final String signature, final String superName,
-            final String[] interfaces) {
-        String p = getGroupKey(name);
-        current = groups.get(p);
-        if (current == null) {
-            current = new HashMap<String, Integer>();
-            groups.put(p, current);
-        }
-
-        if (signature == null) {
-            if (superName != null) {
-                addInternalName(superName);
-            }
-            addInternalNames(interfaces);
-        } else {
-            addSignature(signature);
-        }
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        addDesc(desc);
-        return new AnnotationDependencyVisitor();
-    }
-
-    @Override
-    public FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        if (signature == null) {
-            addDesc(desc);
-        } else {
-            addTypeSignature(signature);
-        }
-        if (value instanceof Type) {
-            addType((Type) value);
-        }
-        return new FieldDependencyVisitor();
-    }
-
-    @Override
-    public MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        if (signature == null) {
-            addMethodDesc(desc);
-        } else {
-            addSignature(signature);
-        }
-        addInternalNames(exceptions);
-        return new MethodDependencyVisitor();
-    }
-
-    class AnnotationDependencyVisitor extends AnnotationVisitor {
-
-        public AnnotationDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public void visit(final String name, final Object value) {
-            if (value instanceof Type) {
-                addType((Type) value);
-            }
-        }
-
-        @Override
-        public void visitEnum(final String name, final String desc,
-                final String value) {
-            addDesc(desc);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String name,
-                final String desc) {
-            addDesc(desc);
-            return this;
-        }
-
-        @Override
-        public AnnotationVisitor visitArray(final String name) {
-            return this;
-        }
-    }
-
-    class FieldDependencyVisitor extends FieldVisitor {
-
-        public FieldDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-            addDesc(desc);
-            return new AnnotationDependencyVisitor();
-        }
-    }
-
-    class MethodDependencyVisitor extends MethodVisitor {
-
-        public MethodDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotationDefault() {
-            return new AnnotationDependencyVisitor();
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String desc,
-                final boolean visible) {
-            addDesc(desc);
-            return new AnnotationDependencyVisitor();
-        }
-
-        @Override
-        public AnnotationVisitor visitParameterAnnotation(final int parameter,
-                final String desc, final boolean visible) {
-            addDesc(desc);
-            return new AnnotationDependencyVisitor();
-        }
-
-        @Override
-        public void visitTypeInsn(final int opcode, final String type) {
-            addType(Type.getObjectType(type));
-        }
-
-        @Override
-        public void visitFieldInsn(final int opcode, final String owner,
-                final String name, final String desc) {
-            addInternalName(owner);
-            addDesc(desc);
-        }
-
-        @Override
-        public void visitMethodInsn(final int opcode, final String owner,
-                final String name, final String desc) {
-            addInternalName(owner);
-            addMethodDesc(desc);
-        }
-
-        @Override
-        public void visitInvokeDynamicInsn(String name, String desc,
-                Handle bsm, Object... bsmArgs) {
-            addMethodDesc(desc);
-            addConstant(bsm);
-            for (int i = 0; i < bsmArgs.length; i++) {
-                addConstant(bsmArgs[i]);
-            }
-        }
-
-        @Override
-        public void visitLdcInsn(final Object cst) {
-            addConstant(cst);
-        }
-
-        @Override
-        public void visitMultiANewArrayInsn(final String desc, final int dims) {
-            addDesc(desc);
-        }
-
-        @Override
-        public void visitLocalVariable(final String name, final String desc,
-                final String signature, final Label start, final Label end,
-                final int index) {
-            addTypeSignature(signature);
-        }
-
-        @Override
-        public void visitTryCatchBlock(final Label start, final Label end,
-                final Label handler, final String type) {
-            if (type != null) {
-                addInternalName(type);
-            }
-        }
-    }
-
-    class SignatureDependencyVisitor extends SignatureVisitor {
-
-        String signatureClassName;
-
-        public SignatureDependencyVisitor() {
-            super(Opcodes.ASM4);
-        }
-
-        @Override
-        public void visitClassType(final String name) {
-            signatureClassName = name;
-            addInternalName(name);
-        }
-
-        @Override
-        public void visitInnerClassType(final String name) {
-            signatureClassName = signatureClassName + "$" + name;
-            addInternalName(signatureClassName);
-        }
-    }
-
-    // ---------------------------------------------
-
-    private String getGroupKey(String name) {
-        int n = name.lastIndexOf('/');
-        if (n > -1) {
-            name = name.substring(0, n);
-        }
-        packages.add(name);
-        return name;
-    }
-
-    private void addName(final String name) {
-        if (name == null) {
-            return;
-        }
-        String p = getGroupKey(name);
-        if (current.containsKey(p)) {
-            current.put(p, current.get(p) + 1);
-        } else {
-            current.put(p, 1);
-        }
-    }
-
-    void addInternalName(final String name) {
-        addType(Type.getObjectType(name));
-    }
-
-    private void addInternalNames(final String[] names) {
-        for (int i = 0; names != null && i < names.length; i++) {
-            addInternalName(names[i]);
-        }
-    }
-
-    void addDesc(final String desc) {
-        addType(Type.getType(desc));
-    }
-
-    void addMethodDesc(final String desc) {
-        addType(Type.getReturnType(desc));
-        Type[] types = Type.getArgumentTypes(desc);
-        for (int i = 0; i < types.length; i++) {
-            addType(types[i]);
-        }
-    }
-
-    void addType(final Type t) {
-        switch (t.getSort()) {
-        case Type.ARRAY:
-            addType(t.getElementType());
-            break;
-        case Type.OBJECT:
-            addName(t.getInternalName());
-            break;
-        case Type.METHOD:
-            addMethodDesc(t.getDescriptor());
-            break;
-        }
-    }
-
-    private void addSignature(final String signature) {
-        if (signature != null) {
-            new SignatureReader(signature)
-                    .accept(new SignatureDependencyVisitor());
-        }
-    }
-
-    void addTypeSignature(final String signature) {
-        if (signature != null) {
-            new SignatureReader(signature)
-                    .acceptType(new SignatureDependencyVisitor());
-        }
-    }
-
-    void addConstant(final Object cst) {
-        if (cst instanceof Type) {
-            addType((Type) cst);
-        } else if (cst instanceof Handle) {
-            Handle h = (Handle) cst;
-            addInternalName(h.getOwner());
-            addMethodDesc(h.getDesc());
-        }
-    }
-}
diff --git a/asm4/examples/helloworld/etc/execute.properties b/asm4/examples/helloworld/etc/execute.properties
deleted file mode 100644
index f735b79..0000000
--- a/asm4/examples/helloworld/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname Helloworld
-run.parameters
diff --git a/asm4/examples/helloworld/src/Helloworld.java b/asm4/examples/helloworld/src/Helloworld.java
deleted file mode 100644
index dcc905a..0000000
--- a/asm4/examples/helloworld/src/Helloworld.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.GeneratorAdapter;
-import org.objectweb.asm.commons.Method;
-
-/**
- * @author Eric Bruneton
- */
-public class Helloworld extends ClassLoader implements Opcodes {
-
-    public static void main(final String args[]) throws Exception {
-
-        // Generates the bytecode corresponding to the following Java class:
-        //
-        // public class Example {
-        // public static void main (String[] args) {
-        // System.out.println("Hello world!");
-        // }
-        // }
-
-        // creates a ClassWriter for the Example public class,
-        // which inherits from Object
-        ClassWriter cw = new ClassWriter(0);
-        cw.visit(V1_1, ACC_PUBLIC, "Example", null, "java/lang/Object", null);
-
-        // creates a MethodWriter for the (implicit) constructor
-        MethodVisitor mw = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null,
-                null);
-        // pushes the 'this' variable
-        mw.visitVarInsn(ALOAD, 0);
-        // invokes the super class constructor
-        mw.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-        mw.visitInsn(RETURN);
-        // this code uses a maximum of one stack element and one local variable
-        mw.visitMaxs(1, 1);
-        mw.visitEnd();
-
-        // creates a MethodWriter for the 'main' method
-        mw = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main",
-                "([Ljava/lang/String;)V", null, null);
-        // pushes the 'out' field (of type PrintStream) of the System class
-        mw.visitFieldInsn(GETSTATIC, "java/lang/System", "out",
-                "Ljava/io/PrintStream;");
-        // pushes the "Hello World!" String constant
-        mw.visitLdcInsn("Hello world!");
-        // invokes the 'println' method (defined in the PrintStream class)
-        mw.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
-                "(Ljava/lang/String;)V");
-        mw.visitInsn(RETURN);
-        // this code uses a maximum of two stack elements and two local
-        // variables
-        mw.visitMaxs(2, 2);
-        mw.visitEnd();
-
-        // gets the bytecode of the Example class, and loads it dynamically
-        byte[] code = cw.toByteArray();
-
-        FileOutputStream fos = new FileOutputStream("Example.class");
-        fos.write(code);
-        fos.close();
-
-        Helloworld loader = new Helloworld();
-        Class<?> exampleClass = loader.defineClass("Example", code, 0,
-                code.length);
-
-        // uses the dynamically generated class to print 'Helloworld'
-        exampleClass.getMethods()[0].invoke(null, new Object[] { null });
-
-        // ------------------------------------------------------------------------
-        // Same example with a GeneratorAdapter (more convenient but slower)
-        // ------------------------------------------------------------------------
-
-        cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cw.visit(V1_1, ACC_PUBLIC, "Example", null, "java/lang/Object", null);
-
-        // creates a GeneratorAdapter for the (implicit) constructor
-        Method m = Method.getMethod("void <init> ()");
-        GeneratorAdapter mg = new GeneratorAdapter(ACC_PUBLIC, m, null, null,
-                cw);
-        mg.loadThis();
-        mg.invokeConstructor(Type.getType(Object.class), m);
-        mg.returnValue();
-        mg.endMethod();
-
-        // creates a GeneratorAdapter for the 'main' method
-        m = Method.getMethod("void main (String[])");
-        mg = new GeneratorAdapter(ACC_PUBLIC + ACC_STATIC, m, null, null, cw);
-        mg.getStatic(Type.getType(System.class), "out",
-                Type.getType(PrintStream.class));
-        mg.push("Hello world!");
-        mg.invokeVirtual(Type.getType(PrintStream.class),
-                Method.getMethod("void println (String)"));
-        mg.returnValue();
-        mg.endMethod();
-
-        cw.visitEnd();
-
-        code = cw.toByteArray();
-        loader = new Helloworld();
-        exampleClass = loader.defineClass("Example", code, 0, code.length);
-
-        // uses the dynamically generated class to print 'Helloworld'
-        exampleClass.getMethods()[0].invoke(null, new Object[] { null });
-    }
-}
diff --git a/asm4/examples/jasmin/etc/execute.properties b/asm4/examples/jasmin/etc/execute.properties
deleted file mode 100644
index 3c53857..0000000
--- a/asm4/examples/jasmin/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-#ASM: a very small and fast Java bytecode manipulation framework
-#Copyright (c) 2000-2011 INRIA, France Telecom
-#All rights reserved.
-#
-#Redistribution and use in source and binary forms, with or without
-#modification, 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. Neither the name of the copyright holders nor the names of its
-#   contributors may be used to endorse or promote products derived from
-#   this software without specific prior written permission.
-#
-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.
-###############################################################################
-
-run.classname JasminifierClassAdapter
-run.parameters java.lang.Object
diff --git a/asm4/examples/jasmin/src/JasminifierClassAdapter.java b/asm4/examples/jasmin/src/JasminifierClassAdapter.java
deleted file mode 100644
index 45d9073..0000000
--- a/asm4/examples/jasmin/src/JasminifierClassAdapter.java
+++ /dev/null
@@ -1,900 +0,0 @@
-/***

- * ASM: a very small and fast Java bytecode manipulation framework

- * Copyright (c) 2000-2011 INRIA, France Telecom

- * All rights reserved.

- *

- * Redistribution and use in source and binary forms, with or without

- * modification, 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. Neither the name of the copyright holders nor the names of its

- *    contributors may be used to endorse or promote products derived from

- *    this software without specific prior written permission.

- *

- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE

- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.

- */

-

-import java.io.FileInputStream;

-import java.io.PrintWriter;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-import org.objectweb.asm.ClassReader;

-import org.objectweb.asm.ClassVisitor;

-import org.objectweb.asm.Label;

-import org.objectweb.asm.MethodVisitor;

-import org.objectweb.asm.Opcodes;

-import org.objectweb.asm.Type;

-import org.objectweb.asm.tree.AbstractInsnNode;

-import org.objectweb.asm.tree.AnnotationNode;

-import org.objectweb.asm.tree.ClassNode;

-import org.objectweb.asm.tree.FieldNode;

-import org.objectweb.asm.tree.InnerClassNode;

-import org.objectweb.asm.tree.LabelNode;

-import org.objectweb.asm.tree.LocalVariableNode;

-import org.objectweb.asm.tree.MethodNode;

-import org.objectweb.asm.tree.TryCatchBlockNode;

-import org.objectweb.asm.util.Printer;

-

-/**

- * A {@link ClassVisitor} that prints a disassembled view of the classes it

- * visits in Jasmin assembler format. This class visitor can be used alone (see

- * the {@link #main main} method) to disassemble a class. It can also be used in

- * the middle of class visitor chain to trace the class that is visited at a

- * given point in this chain. This may be uselful for debugging purposes.

- * <p>

- * The trace printed when visiting the <tt>Hello</tt> class is the following:

- * <p>

- * <blockquote>

- * 

- * <pre>

- * .bytecode 45.3

- * .class public Hello

- * .super java/lang/Object

- * 

- * .method public <init>()V

- * aload 0

- * invokespecial java/lang/Object/<init>()V

- * return

- * .limit locals 1

- * .limit stack 1

- * .end method

- * 

- * .method public static main([Ljava/lang/String;)V

- * getstatic java/lang/System/out Ljava/io/PrintStream;

- * ldc "hello"

- * invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V

- * return

- * .limit locals 2

- * .limit stack 2

- * .end method

- * </pre>

- * 

- * </blockquote> where <tt>Hello</tt> is defined by:

- * <p>

- * <blockquote>

- * 

- * <pre>

- * public class Hello {

- * 

- *     public static void main(String[] args) {

- *         System.out.println(&quot;hello&quot;);

- *     }

- * }

- * </pre>

- * 

- * </blockquote>

- * 

- * @author Eric Bruneton

- */

-public class JasminifierClassAdapter extends ClassVisitor {

-

-    /**

-     * The print writer to be used to print the class.

-     */

-    protected PrintWriter pw;

-

-    /**

-     * The label names. This map associate String values to Label keys.

-     */

-    protected final Map<Label, String> labelNames;

-

-    /**

-     * Prints a disassembled view of the given class in Jasmin assembler format

-     * to the standard output.

-     * <p>

-     * Usage: JasminifierClassAdapter [-debug] &lt;fully qualified class name or

-     * class file name &gt;

-     * 

-     * @param args

-     *            the command line arguments.

-     * 

-     * @throws Exception

-     *             if the class cannot be found, or if an IO exception occurs.

-     */

-    public static void main(final String[] args) throws Exception {

-        int i = 0;

-        int flags = ClassReader.SKIP_DEBUG;

-

-        boolean ok = true;

-        if (args.length < 1 || args.length > 2) {

-            ok = false;

-        }

-        if (ok && "-debug".equals(args[0])) {

-            i = 1;

-            flags = 0;

-            if (args.length != 2) {

-                ok = false;

-            }

-        }

-        if (!ok) {

-            System.err

-                    .println("Prints a disassembled view of the given class.");

-            System.err.println("Usage: JasminifierClassAdapter [-debug] "

-                    + "<fully qualified class name or class file name>");

-            return;

-        }

-        ClassReader cr;

-        if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1

-                || args[i].indexOf('/') > -1) {

-            cr = new ClassReader(new FileInputStream(args[i]));

-        } else {

-            cr = new ClassReader(args[i]);

-        }

-        cr.accept(new JasminifierClassAdapter(

-                new PrintWriter(System.out, true), null), flags

-                | ClassReader.EXPAND_FRAMES);

-    }

-

-    /**

-     * Constructs a new {@link JasminifierClassAdapter}.

-     * 

-     * @param pw

-     *            the print writer to be used to print the class.

-     * @param cv

-     *            the {@link ClassVisitor} to which this visitor delegates

-     *            calls. May be <tt>null</tt>.

-     */

-    public JasminifierClassAdapter(final PrintWriter pw, final ClassVisitor cv) {

-        super(Opcodes.ASM4, new ClassNode() {

-            @Override

-            public void visitEnd() {

-                if (cv != null) {

-                    accept(cv);

-                }

-            }

-        });

-        this.pw = pw;

-        labelNames = new HashMap<Label, String>();

-    }

-

-    @Override

-    public void visitEnd() {

-        ClassNode cn = (ClassNode) cv;

-        pw.print(".bytecode ");

-        pw.print(cn.version & 0xFFFF);

-        pw.print('.');

-        pw.println(cn.version >>> 16);

-        println(".source ", cn.sourceFile);

-        pw.print(".class");

-        pw.print(access(cn.access));

-        pw.print(' ');

-        pw.println(cn.name);

-        if (cn.superName == null) { // TODO Jasmin bug workaround

-            println(".super ", "java/lang/Object");

-        } else {

-            println(".super ", cn.superName);

-        }

-        for (int i = 0; i < cn.interfaces.size(); ++i) {

-            println(".implements ", cn.interfaces.get(i));

-        }

-        if (cn.signature != null)

-            println(".signature ", '"' + cn.signature + '"');

-        if (cn.outerClass != null) {

-            pw.print(".enclosing method ");

-            pw.print(cn.outerClass);

-            if (cn.outerMethod != null) {

-                pw.print('/');

-                pw.print(cn.outerMethod);

-                pw.println(cn.outerMethodDesc);

-            } else {

-                pw.println();

-            }

-        }

-        if ((cn.access & Opcodes.ACC_DEPRECATED) != 0) {

-            pw.println(".deprecated");

-        }

-        printAnnotations(cn.visibleAnnotations, 1);

-        printAnnotations(cn.invisibleAnnotations, 2);

-        println(".debug ", cn.sourceDebug == null ? null

-                : '"' + cn.sourceDebug + '"');

-

-        for (int i = 0; i < cn.innerClasses.size(); ++i) {

-            InnerClassNode in = cn.innerClasses.get(i);

-            pw.print(".inner class");

-            pw.print(access(in.access));

-            if (in.innerName != null) {

-                pw.print(' ');

-                pw.print(in.innerName);

-            }

-            if (in.name != null) {

-                pw.print(" inner ");

-                pw.print(in.name);

-            }

-            if (in.outerName != null) {

-                pw.print(" outer ");

-                pw.print(in.outerName);

-            }

-            pw.println();

-        }

-

-        for (int i = 0; i < cn.fields.size(); ++i) {

-            FieldNode fn = cn.fields.get(i);

-            boolean annotations = false;

-            if (fn.visibleAnnotations != null

-                    && fn.visibleAnnotations.size() > 0) {

-                annotations = true;

-            }

-            if (fn.invisibleAnnotations != null

-                    && fn.invisibleAnnotations.size() > 0) {

-                annotations = true;

-            }

-            boolean deprecated = (fn.access & Opcodes.ACC_DEPRECATED) != 0;

-            pw.print("\n.field");

-            pw.print(access(fn.access));

-            pw.print(" '");

-            pw.print(fn.name);

-            pw.print("' ");

-            pw.print(fn.desc);

-            if (fn.signature != null && (!deprecated && !annotations)) {

-                pw.print(" signature \"");

-                pw.print(fn.signature);

-                pw.print("\"");

-            }

-            if (fn.value instanceof String) {

-                StringBuffer buf = new StringBuffer();

-                Printer.appendString(buf, (String) fn.value);

-                pw.print(" = ");

-                pw.print(buf.toString());

-            } else if (fn.value != null) {

-                pw.print(" = ");

-                print(fn.value);

-                pw.println();

-            }

-            pw.println();

-            if (fn.signature != null && (deprecated || annotations)) {

-                pw.print(".signature \"");

-                pw.print(fn.signature);

-                pw.println("\"");

-            }

-            if (deprecated) {

-                pw.println(".deprecated");

-            }

-            printAnnotations(fn.visibleAnnotations, 1);

-            printAnnotations(fn.invisibleAnnotations, 2);

-            if (deprecated || annotations) {

-                pw.println(".end field");

-            }

-        }

-

-        for (int i = 0; i < cn.methods.size(); ++i) {

-            MethodNode mn = cn.methods.get(i);

-            pw.print("\n.method");

-            pw.print(access(mn.access));

-            pw.print(' ');

-            pw.print(mn.name);

-            pw.println(mn.desc);

-            if (mn.signature != null) {

-                pw.print(".signature \"");

-                pw.print(mn.signature);

-                pw.println("\"");

-            }

-            if (mn.annotationDefault != null) {

-                pw.println(".annotation default");

-                printAnnotationValue(mn.annotationDefault);

-                pw.println(".end annotation");

-            }

-            printAnnotations(mn.visibleAnnotations, 1);

-            printAnnotations(mn.invisibleAnnotations, 2);

-            if (mn.visibleParameterAnnotations != null) {

-                for (int j = 0; j < mn.visibleParameterAnnotations.length; ++j) {

-                    printAnnotations(mn.visibleParameterAnnotations[j], 1);

-                }

-            }

-            if (mn.invisibleParameterAnnotations != null) {

-                for (int j = 0; j < mn.invisibleParameterAnnotations.length; ++j) {

-                    printAnnotations(mn.invisibleParameterAnnotations[j], 2);

-                }

-            }

-            for (int j = 0; j < mn.exceptions.size(); ++j) {

-                println(".throws ", mn.exceptions.get(j));

-            }

-            if ((mn.access & Opcodes.ACC_DEPRECATED) != 0) {

-                pw.println(".deprecated");

-            }

-            if (mn.instructions.size() > 0) {

-                labelNames.clear();

-                for (int j = 0; j < mn.tryCatchBlocks.size(); ++j) {

-                    TryCatchBlockNode tcb = mn.tryCatchBlocks.get(j);

-                    pw.print(".catch ");

-                    pw.print(tcb.type);

-                    pw.print(" from ");

-                    print(tcb.start);

-                    pw.print(" to ");

-                    print(tcb.end);

-                    pw.print(" using ");

-                    print(tcb.handler);

-                    pw.println();

-                }

-                for (int j = 0; j < mn.instructions.size(); ++j) {

-                    AbstractInsnNode in = mn.instructions.get(j);

-                    in.accept(new MethodVisitor(Opcodes.ASM4) {

-

-                        @Override

-                        public void visitFrame(int type, int local,

-                                Object[] locals, int stack, Object[] stacks) {

-                            if (type != Opcodes.F_FULL && type != Opcodes.F_NEW) {

-                                throw new RuntimeException(

-                                        "Compressed frames unsupported, use EXPAND_FRAMES option");

-                            }

-                            pw.println(".stack");

-                            for (int i = 0; i < local; ++i) {

-                                pw.print("locals ");

-                                printFrameType(locals[i]);

-                                pw.println();

-                            }

-                            for (int i = 0; i < stack; ++i) {

-                                pw.print("stack ");

-                                printFrameType(stacks[i]);

-                                pw.println();

-                            }

-                            pw.println(".end stack");

-                        }

-

-                        @Override

-                        public void visitInsn(int opcode) {

-                            print(opcode);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitIntInsn(int opcode, int operand) {

-                            print(opcode);

-                            if (opcode == Opcodes.NEWARRAY) {

-                                switch (operand) {

-                                case Opcodes.T_BOOLEAN:

-                                    pw.println(" boolean");

-                                    break;

-                                case Opcodes.T_CHAR:

-                                    pw.println(" char");

-                                    break;

-                                case Opcodes.T_FLOAT:

-                                    pw.println(" float");

-                                    break;

-                                case Opcodes.T_DOUBLE:

-                                    pw.println(" double");

-                                    break;

-                                case Opcodes.T_BYTE:

-                                    pw.println(" byte");

-                                    break;

-                                case Opcodes.T_SHORT:

-                                    pw.println(" short");

-                                    break;

-                                case Opcodes.T_INT:

-                                    pw.println(" int");

-                                    break;

-                                case Opcodes.T_LONG:

-                                default:

-                                    pw.println(" long");

-                                    break;

-                                }

-                            } else {

-                                pw.print(' ');

-                                pw.println(operand);

-                            }

-                        }

-

-                        @Override

-                        public void visitVarInsn(int opcode, int var) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.println(var);

-                        }

-

-                        @Override

-                        public void visitTypeInsn(int opcode, String type) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.println(type);

-                        }

-

-                        @Override

-                        public void visitFieldInsn(int opcode, String owner,

-                                String name, String desc) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.print(owner);

-                            pw.print('/');

-                            pw.print(name);

-                            pw.print(' ');

-                            pw.println(desc);

-                        }

-

-                        @Override

-                        public void visitMethodInsn(int opcode, String owner,

-                                String name, String desc) {

-                            print(opcode);

-                            pw.print(' ');

-                            pw.print(owner);

-                            pw.print('/');

-                            pw.print(name);

-                            pw.print(desc);

-                            if (opcode == Opcodes.INVOKEINTERFACE) {

-                                pw.print(' ');

-                                pw.print((Type.getArgumentsAndReturnSizes(desc) >> 2) - 1);

-                            }

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitJumpInsn(int opcode, Label label) {

-                            print(opcode);

-                            pw.print(' ');

-                            print(label);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitLabel(Label label) {

-                            print(label);

-                            pw.println(':');

-                        }

-

-                        @Override

-                        public void visitLdcInsn(Object cst) {

-                            pw.print("ldc ");

-                            if (cst instanceof Type) {

-                                pw.print(((Type) cst).getInternalName());

-                            } else {

-                                print(cst);

-                            }

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitIincInsn(int var, int increment) {

-                            pw.print("iinc ");

-                            pw.print(var);

-                            pw.print(' ');

-                            pw.println(increment);

-                        }

-

-                        @Override

-                        public void visitTableSwitchInsn(int min, int max,

-                                Label dflt, Label... labels) {

-                            pw.print("tableswitch ");

-                            pw.println(min);

-                            for (int i = 0; i < labels.length; ++i) {

-                                print(labels[i]);

-                                pw.println();

-                            }

-                            pw.print("default : ");

-                            print(dflt);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitLookupSwitchInsn(Label dflt,

-                                int[] keys, Label[] labels) {

-                            if (keys.length == 0) {

-                                pw.print("goto "); // TODO Jasmin bug

-                                                   // workaround

-                                print(dflt);

-                                pw.println();

-                                return;

-                            }

-                            pw.println("lookupswitch");

-                            for (int i = 0; i < keys.length; ++i) {

-                                pw.print(keys[i]);

-                                pw.print(" : ");

-                                print(labels[i]);

-                                pw.println();

-                            }

-                            pw.print("default : ");

-                            print(dflt);

-                            pw.println();

-                        }

-

-                        @Override

-                        public void visitMultiANewArrayInsn(String desc,

-                                int dims) {

-                            pw.print("multianewarray ");

-                            pw.print(desc);

-                            pw.print(' ');

-                            pw.println(dims);

-                        }

-

-                        @Override

-                        public void visitLineNumber(int line, Label start) {

-                            pw.print(".line ");

-                            pw.println(line);

-                        }

-                    });

-                }

-                for (int j = 0; j < mn.localVariables.size(); ++j) {

-                    LocalVariableNode lv = mn.localVariables.get(j);

-                    pw.print(".var ");

-                    pw.print(lv.index);

-                    pw.print(" is '");

-                    pw.print(lv.name);

-                    pw.print("' ");

-                    pw.print(lv.desc);

-                    if (lv.signature != null) {

-                        pw.print(" signature \"");

-                        pw.print(lv.signature);

-                        pw.print("\"");

-                    }

-                    pw.print(" from ");

-                    print(lv.start);

-                    pw.print(" to ");

-                    print(lv.end);

-                    pw.println();

-                }

-                println(".limit locals ", Integer.toString(mn.maxLocals));

-                println(".limit stack ", Integer.toString(mn.maxStack));

-            }

-            pw.println(".end method");

-        }

-        super.visitEnd();

-    }

-

-    protected void println(final String directive, final String arg) {

-        if (arg != null) {

-            pw.print(directive);

-            pw.println(arg);

-        }

-    }

-

-    protected String access(final int access) {

-        StringBuffer b = new StringBuffer();

-        if ((access & Opcodes.ACC_PUBLIC) != 0) {

-            b.append(" public");

-        }

-        if ((access & Opcodes.ACC_PRIVATE) != 0) {

-            b.append(" private");

-        }

-        if ((access & Opcodes.ACC_PROTECTED) != 0) {

-            b.append(" protected");

-        }

-        if ((access & Opcodes.ACC_STATIC) != 0) {

-            b.append(" static");

-        }

-        if ((access & Opcodes.ACC_FINAL) != 0) {

-            b.append(" final");

-        }

-        if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {

-            b.append(" synchronized");

-        }

-        if ((access & Opcodes.ACC_VOLATILE) != 0) {

-            b.append(" volatile");

-        }

-        if ((access & Opcodes.ACC_TRANSIENT) != 0) {

-            b.append(" transient");

-        }

-        if ((access & Opcodes.ACC_NATIVE) != 0) {

-            b.append(" native");

-        }

-        if ((access & Opcodes.ACC_ABSTRACT) != 0) {

-            b.append(" abstract");

-        }

-        if ((access & Opcodes.ACC_STRICT) != 0) {

-            b.append(" fpstrict");

-        }

-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {

-            b.append(" synthetic");

-        }

-        if ((access & Opcodes.ACC_INTERFACE) != 0) {

-            b.append(" interface");

-        }

-        if ((access & Opcodes.ACC_ANNOTATION) != 0) {

-            b.append(" annotation");

-        }

-        if ((access & Opcodes.ACC_ENUM) != 0) {

-            b.append(" enum");

-        }

-        return b.toString();

-    }

-

-    protected void print(final int opcode) {

-        pw.print(Printer.OPCODES[opcode].toLowerCase());

-    }

-

-    protected void print(final Object cst) {

-        if (cst instanceof String) {

-            StringBuffer buf = new StringBuffer();

-            Printer.appendString(buf, (String) cst);

-            pw.print(buf.toString());

-        } else if (cst instanceof Float) {

-            Float f = (Float) cst;

-            if (f.isNaN() || f.isInfinite()) {

-                pw.print("0.0"); // TODO Jasmin bug workaround

-            } else {

-                pw.print(f);

-            }

-        } else if (cst instanceof Double) {

-            Double d = (Double) cst;

-            if (d.isNaN() || d.isInfinite()) {

-                pw.print("0.0"); // TODO Jasmin bug workaround

-            } else {

-                pw.print(d);

-            }

-        } else {

-            pw.print(cst);

-        }

-    }

-

-    protected void print(final Label l) {

-        String name = labelNames.get(l);

-        if (name == null) {

-            name = "L" + labelNames.size();

-            labelNames.put(l, name);

-        }

-        pw.print(name);

-    }

-

-    protected void print(final LabelNode l) {

-        print(l.getLabel());

-    }

-

-    protected void printAnnotations(final List<AnnotationNode> annotations,

-            int visible) {

-        if (annotations != null) {

-            for (int j = 0; j < annotations.size(); ++j) {

-                printAnnotation(annotations.get(j), visible, -1);

-            }

-        }

-    }

-

-    protected void printAnnotation(final AnnotationNode n, final int visible,

-            final int param) {

-        pw.print(".annotation ");

-        if (visible > 0) {

-            if (param == -1) {

-                pw.print(visible == 1 ? "visible " : "invisible ");

-            } else {

-                pw.print(visible == 1 ? "visibleparam " : "invisibleparam ");

-                pw.print(param);

-                pw.print(' ');

-            }

-            pw.print(n.desc);

-        }

-        pw.println();

-        if (n.values != null) {

-            for (int i = 0; i < n.values.size(); i += 2) {

-                pw.print(n.values.get(i));

-                pw.print(' ');

-                printAnnotationValue(n.values.get(i + 1));

-            }

-        }

-        pw.println(".end annotation");

-    }

-

-    protected void printAnnotationValue(final Object value) {

-        if (value instanceof String[]) {

-            pw.print("e ");

-            pw.print(((String[]) value)[0]);

-            pw.print(" = ");

-            print(((String[]) value)[1]);

-            pw.println();

-        } else if (value instanceof AnnotationNode) {

-            pw.print("@ ");

-            pw.print(((AnnotationNode) value).desc);

-            pw.print(" = ");

-            printAnnotation((AnnotationNode) value, 0, -1);

-        } else if (value instanceof byte[]) {

-            pw.print("[B = ");

-            byte[] v = (byte[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof boolean[]) {

-            pw.print("[Z = ");

-            boolean[] v = (boolean[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i] ? '1' : '0');

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof short[]) {

-            pw.print("[S = ");

-            short[] v = (short[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof char[]) {

-            pw.print("[C = ");

-            char[] v = (char[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(new Integer(v[i]));

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof int[]) {

-            pw.print("[I = ");

-            int[] v = (int[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof long[]) {

-            pw.print("[J = ");

-            long[] v = (long[]) value;

-            for (int i = 0; i < v.length; i++) {

-                pw.print(v[i]);

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof float[]) {

-            pw.print("[F = ");

-            float[] v = (float[]) value;

-            for (int i = 0; i < v.length; i++) {

-                print(new Float(v[i]));

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof double[]) {

-            pw.print("[D = ");

-            double[] v = (double[]) value;

-            for (int i = 0; i < v.length; i++) {

-                print(new Double(v[i]));

-                pw.print(' ');

-            }

-            pw.println();

-        } else if (value instanceof List) {

-            List<?> l = (List<?>) value;

-            if (l.size() > 0) {

-                Object o = l.get(0);

-                if (o instanceof String[]) {

-                    pw.print("[e ");

-                    pw.print(((String[]) o)[0]);

-                    pw.print(" = ");

-                } else if (o instanceof AnnotationNode) {

-                    pw.print("[& ");

-                    pw.print(((AnnotationNode) o).desc);

-                    pw.print(" = ");

-                    pw.print("[@ = ");

-                } else if (o instanceof String) {

-                    pw.print("[s = ");

-                } else if (o instanceof Byte) {

-                    pw.print("[B = ");

-                } else if (o instanceof Boolean) {

-                    pw.print("[Z = ");

-                } else if (o instanceof Character) {

-                    pw.print("[C = ");

-                } else if (o instanceof Short) {

-                    pw.print("[S = ");

-                } else if (o instanceof Type) {

-                    pw.print("[c = ");

-                } else if (o instanceof Integer) {

-                    pw.print("[I = ");

-                } else if (o instanceof Float) {

-                    pw.print("[F = ");

-                } else if (o instanceof Long) {

-                    pw.print("[J = ");

-                } else if (o instanceof Double) {

-                    pw.print("[D = ");

-                }

-                for (int j = 0; j < l.size(); ++j) {

-                    printAnnotationArrayValue(l.get(j));

-                    pw.print(' ');

-                }

-            } else {

-                pw.print("; empty array annotation value");

-            }

-            pw.println();

-        } else if (value instanceof String) {

-            pw.print("s = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Byte) {

-            pw.print("B = ");

-            pw.println(((Byte) value).intValue());

-        } else if (value instanceof Boolean) {

-            pw.print("Z = ");

-            pw.println(((Boolean) value).booleanValue() ? 1 : 0);

-        } else if (value instanceof Character) {

-            pw.print("C = ");

-            pw.println(new Integer(((Character) value).charValue()));

-        } else if (value instanceof Short) {

-            pw.print("S = ");

-            pw.println(((Short) value).intValue());

-        } else if (value instanceof Type) {

-            pw.print("c = ");

-            pw.println(((Type) value).getDescriptor());

-        } else if (value instanceof Integer) {

-            pw.print("I = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Float) {

-            pw.print("F = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Long) {

-            pw.print("J = ");

-            print(value);

-            pw.println();

-        } else if (value instanceof Double) {

-            pw.print("D = ");

-            print(value);

-            pw.println();

-        } else {

-            throw new RuntimeException();

-        }

-    }

-

-    protected void printAnnotationArrayValue(final Object value) {

-        if (value instanceof String[]) {

-            print(((String[]) value)[1]);

-        } else if (value instanceof AnnotationNode) {

-            printAnnotation((AnnotationNode) value, 0, -1);

-        } else if (value instanceof String) {

-            print(value);

-        } else if (value instanceof Byte) {

-            pw.print(((Byte) value).intValue());

-        } else if (value instanceof Boolean) {

-            pw.print(((Boolean) value).booleanValue() ? 1 : 0);

-        } else if (value instanceof Character) {

-            pw.print(new Integer(((Character) value).charValue()));

-        } else if (value instanceof Short) {

-            pw.print(((Short) value).intValue());

-        } else if (value instanceof Type) {

-            pw.print(((Type) value).getDescriptor());

-        } else {

-            print(value);

-        }

-    }

-

-    protected void printFrameType(final Object type) {

-        if (type == Opcodes.TOP) {

-            pw.print("Top");

-        } else if (type == Opcodes.INTEGER) {

-            pw.print("Integer");

-        } else if (type == Opcodes.FLOAT) {

-            pw.print("Float");

-        } else if (type == Opcodes.LONG) {

-            pw.print("Long");

-        } else if (type == Opcodes.DOUBLE) {

-            pw.print("Double");

-        } else if (type == Opcodes.NULL) {

-            pw.print("Null");

-        } else if (type == Opcodes.UNINITIALIZED_THIS) {

-            pw.print("UninitializedThis");

-        } else if (type instanceof Label) {

-            pw.print("Uninitialized ");

-            print((Label) type);

-        } else {

-            pw.print("Object ");

-            pw.print(type);

-        }

-    }

-}

diff --git a/asm4/examples/jasmin/test/JasminifierClassAdapterTest.java b/asm4/examples/jasmin/test/JasminifierClassAdapterTest.java
deleted file mode 100644
index 888ec0a..0000000
--- a/asm4/examples/jasmin/test/JasminifierClassAdapterTest.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/***
- * ASM tests
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-
-import jas.jasError;
-import jasmin.ClassFile;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-class ClassFilter extends ClassVisitor {
-
-    public ClassFilter() {
-        super(Opcodes.ASM4, null);
-    }
-
-    public void setNext(final ClassVisitor cv) {
-        this.cv = cv;
-    }
-}
-
-class Comment extends Attribute {
-
-    public Comment() {
-        super("Comment");
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-
-        return new Comment();
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector();
-    }
-}
-
-class CodeComment extends Attribute {
-
-    public CodeComment() {
-        super("CodeComment");
-    }
-
-    @Override
-    public boolean isUnknown() {
-        return false;
-    }
-
-    @Override
-    public boolean isCodeAttribute() {
-        return true;
-    }
-
-    @Override
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        return new CodeComment();
-    }
-
-    @Override
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        return new ByteVector();
-    }
-
-    @Override
-    protected Label[] getLabels() {
-        super.getLabels();
-        return new Label[] { new Label() };
-    }
-}
-
-/**
- * JasminifierAdapterTest tests.
- * 
- * @author Eric Bruneton
- */
-public class JasminifierClassAdapterTest extends TestCase {
-
-    protected String n;
-
-    protected InputStream is;
-
-    public static TestSuite suite() throws Exception {
-        return new JasminifierClassAdapterTest().getSuite();
-    }
-
-    public JasminifierClassAdapterTest() {
-        super("test");
-    }
-
-    protected void init(final String n, final InputStream is) {
-        this.n = n;
-        this.is = is;
-    }
-
-    protected TestSuite getSuite() throws Exception {
-        TestSuite suite = new TestSuite(getClass().getName());
-        String files = System.getProperty("asm.test") + ",";
-        String clazz = System.getProperty("asm.test.class");
-        String partcount = System.getProperty("parts");
-        String partid = System.getProperty("part");
-        int parts = partcount == null ? 1 : Integer.parseInt(partcount);
-        int part = partid == null ? 0 : Integer.parseInt(partid);
-        int id = 0;
-        while (files.indexOf(',') != -1) {
-            String file = files.substring(0, files.indexOf(','));
-            files = files.substring(files.indexOf(',') + 1);
-            File f = new File(file);
-            if (f.isDirectory()) {
-                scanDirectory("", f, suite, clazz);
-            } else {
-                ZipFile zip = new ZipFile(file);
-                Enumeration<? extends ZipEntry> entries = zip.entries();
-                while (entries.hasMoreElements()) {
-                    ZipEntry e = entries.nextElement();
-                    String n = e.getName();
-                    String p = n.replace('/', '.');
-                    System.out.println(n + " " + clazz);
-                    if (n.endsWith(".class")
-                            && (clazz == null || p.indexOf(clazz) != -1)) {
-                        n = p.substring(0, p.length() - 6);
-                        if (id % parts == part) {
-                            JasminifierClassAdapterTest t;
-                            InputStream is = zip.getInputStream(e);
-                            t = new JasminifierClassAdapterTest();
-                            t.init(n, is);
-                            suite.addTest(t);
-                        }
-                        ++id;
-                    }
-                }
-            }
-        }
-        return suite;
-    }
-
-    private void scanDirectory(final String path, final File f,
-            final TestSuite suite, final String clazz) throws Exception {
-        File[] fs = f.listFiles();
-        for (int i = 0; i < fs.length; ++i) {
-            String n = fs[i].getName();
-            String qn = path.length() == 0 ? n : path + "." + n;
-            if (fs[i].isDirectory()) {
-                scanDirectory(qn, fs[i], suite, clazz);
-            } else if (qn.endsWith(".class")
-                    && (clazz == null || qn.indexOf(clazz) != -1)) {
-                qn = qn.substring(0, qn.length() - 6);
-                InputStream is = new FileInputStream(fs[i]);
-                JasminifierClassAdapterTest t;
-                t = new JasminifierClassAdapterTest();
-                t.init(qn, is);
-                suite.addTest(t);
-            }
-        }
-    }
-
-    public void assertEquals(final ClassReader cr1, final ClassReader cr2)
-            throws Exception {
-        assertEquals(cr1, cr2, null, null);
-    }
-
-    public void assertEquals(final ClassReader cr1, final ClassReader cr2,
-            final ClassFilter filter1, final ClassFilter filter2)
-            throws Exception {
-        if (!Arrays.equals(cr1.b, cr2.b)) {
-            StringWriter sw1 = new StringWriter();
-            StringWriter sw2 = new StringWriter();
-            ClassVisitor cv1 = new TraceClassVisitor(new PrintWriter(sw1));
-            ClassVisitor cv2 = new TraceClassVisitor(new PrintWriter(sw2));
-            if (filter1 != null) {
-                filter1.setNext(cv1);
-            }
-            if (filter2 != null) {
-                filter2.setNext(cv2);
-            }
-            cr1.accept(filter1 == null ? cv1 : filter1, 0);
-            cr2.accept(filter2 == null ? cv2 : filter2, 0);
-            String s1 = sw1.toString();
-            String s2 = sw2.toString();
-            assertEquals("different data", s1, s2);
-        }
-    }
-
-    @Override
-    public String getName() {
-        return super.getName() + ": " + n;
-    }
-
-    public void test() throws Exception {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        ClassReader cr = new ClassReader(is);
-        ClassWriter cw = new ClassWriter(0);
-        ClassVisitor cv = new JasminifierClassAdapter(pw, cw);
-        cr.accept(cv, new Attribute[] { new Comment(), new CodeComment() },
-                ClassReader.EXPAND_FRAMES);
-        pw.close();
-        String jasmin = sw.toString();
-
-        ClassFile cf = new ClassFile();
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        cf.readJasmin(new StringReader(jasmin), "test", false);
-        if (cf.errorCount() != 0) {
-            throw new jasError();
-        }
-        cf.write(bos);
-        bos.close();
-
-        assertEquals(cr, new ClassReader(bos.toByteArray()), new ClassFilter() {
-
-            @Override
-            public void visit(int version, int access, String name,
-                    String signature, String superName, String[] interfaces) {
-                access |= Opcodes.ACC_SUPER; // Jasmin bug workaround
-                super.visit(version, access, name, signature, superName,
-                        interfaces);
-            }
-
-        }, null);
-    }
-}
diff --git a/asm4/examples/jasmin/test/build.xml b/asm4/examples/jasmin/test/build.xml
deleted file mode 100644
index 9ddf2a0..0000000
--- a/asm4/examples/jasmin/test/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="jasmin" default="test">
-
-  <condition property="asm.test" value="${java.home}/lib/rt.jar">
-    <not><isset property="asm.test"/></not>
-  </condition>
-
-  <condition property="asm.test.class" value="">
-    <not><isset property="asm.test.class"/></not>
-  </condition>
-
-  <path id="classpath">
-    <fileset dir="${basedir}/../../../lib">
-      <include name="*.jar"/>
-    </fileset>
-    <pathelement location="${basedir}/jasmin.jar"/>
-    <pathelement location="${basedir}/../build"/>
-  </path>
-
-  <target name="compile">
-    <javac srcdir="${basedir}" destdir="${basedir}" debug="on">
-      <classpath refid="classpath"/>
-      <include name="*.java"/>
-    </javac>
-  </target>
-
-  <target name="test" depends="compile">
-    <junit fork="yes" 
-           printsummary="yes"
-           errorproperty="test.failed"
-           failureproperty="test.failed">
-      <batchtest fork="yes" todir="${basedir}">
-        <fileset dir="${basedir}">
-          <include name="JasminifierClassAdapterTest.java"/>
-          <include name="JasminifierClassAdapterUnitTest.java"/>
-        </fileset>
-      </batchtest>
-      <formatter type="xml"/>
-      <classpath refid="classpath"/>
-      <jvmarg value="-Dasm.test=${asm.test}"/>
-      <jvmarg value="-Dasm.test.class=${asm.test.class}"/>
-    </junit>  
-  </target>
-
-</project>
diff --git a/asm4/examples/jasmin/test/jasmin.jar b/asm4/examples/jasmin/test/jasmin.jar
deleted file mode 100644
index e276b1f..0000000
--- a/asm4/examples/jasmin/test/jasmin.jar
+++ /dev/null
Binary files differ
diff --git a/asm4/examples/jbfc/etc/execute.properties b/asm4/examples/jbfc/etc/execute.properties
deleted file mode 100644
index bc81fc9..0000000
--- a/asm4/examples/jbfc/etc/execute.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################

-#ASM: a very small and fast Java bytecode manipulation framework

-#Copyright (c) 2000-2011 INRIA, France Telecom

-#All rights reserved.

-#

-#Redistribution and use in source and binary forms, with or without

-#modification, 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. Neither the name of the copyright holders nor the names of its

-#   contributors may be used to endorse or promote products derived from

-#   this software without specific prior written permission.

-#

-#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

-#AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE

-#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

-#CONSEQUENTIAL DAMAGES (INCLUDING, 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.

-###############################################################################

-

-run.classname org.objectweb.asm.jbfc.BFCompilerTest

-run.parameters

diff --git a/asm4/examples/jbfc/src/jbfc.java b/asm4/examples/jbfc/src/jbfc.java
deleted file mode 100644
index 7a35504..0000000
--- a/asm4/examples/jbfc/src/jbfc.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.jbfc.BFCompiler;
-import org.objectweb.asm.util.TraceClassVisitor;
-
-/**
- * A naive implementation of compiler for Brain**** language.
- * http://www.muppetlabs.com/~breadbox/bf/ *
- * 
- * @author Eugene Kuleshov
- */
-public class jbfc {
-
-    public static void main(final String[] args) throws IOException {
-        if (args.length < 2) {
-            System.out
-                    .println("Usage: jbfc [-v] <bf program file> <java class name>");
-            return;
-        }
-
-        boolean verbose = false;
-        String fileName = null;
-        String className = null;
-        for (int i = 0; i < args.length; i++) {
-            if ("-v".equals(args[i])) {
-                verbose = true;
-            } else {
-                fileName = args[i];
-                className = args[i + 1];
-                break;
-            }
-        }
-
-        FileReader r = new FileReader(fileName);
-
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        BFCompiler c = new BFCompiler();
-        if (verbose) {
-            c.compile(r, className, fileName, new TraceClassVisitor(cw,
-                    new PrintWriter(System.out)));
-        } else {
-            c.compile(r, className, fileName, cw);
-        }
-
-        r.close();
-
-        FileOutputStream os = new FileOutputStream(className + ".class");
-        os.write(cw.toByteArray());
-        os.flush();
-        os.close();
-    }
-
-}
diff --git a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompiler.java b/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompiler.java
deleted file mode 100644
index be7a1f6..0000000
--- a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompiler.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm.jbfc;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Stack;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A naive implementation of compiler for Brain**** language.
- * http://www.muppetlabs.com/~breadbox/bf/ *
- * 
- * @author Eugene Kuleshov
- */
-public class BFCompiler implements Opcodes {
-
-    private static final int V_IS = 0;
-
-    private static final int V_OS = 1;
-
-    private static final int V_P = 2;
-
-    private static final int V_D = 3;
-
-    public void compile(final Reader r, final String className,
-            final String sourceName, final ClassVisitor cv) throws IOException {
-        cv.visit(Opcodes.V1_3, ACC_PUBLIC, className.replace('.', '/'), null,
-                "java/lang/Object", null);
-        cv.visitSource(sourceName, null);
-
-        MethodVisitor mv;
-        {
-            mv = cv.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-            mv.visitCode();
-            mv.visitVarInsn(ALOAD, 0);
-            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>",
-                    "()V");
-            mv.visitInsn(RETURN);
-            mv.visitMaxs(1, 1);
-            mv.visitEnd();
-        }
-
-        {
-            // Init local vars for BF environment:
-            // 0 InputStream
-            // 1 OutputStream
-            // 2 Data Pointer
-            // 3 Data Array (int[ 30000])
-
-            mv = cv.visitMethod(ACC_PUBLIC + ACC_STATIC, "main",
-                    "([Ljava/lang/String;)V", null, null);
-            mv.visitCode();
-
-            mv.visitFieldInsn(GETSTATIC, "java/lang/System", "in",
-                    "Ljava/io/InputStream;");
-            mv.visitVarInsn(ASTORE, V_IS);
-
-            mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out",
-                    "Ljava/io/PrintStream;");
-            mv.visitVarInsn(ASTORE, V_OS);
-
-            mv.visitInsn(ICONST_0);
-            mv.visitVarInsn(ISTORE, V_P);
-
-            mv.visitIntInsn(SIPUSH, 30000);
-            mv.visitIntInsn(NEWARRAY, T_INT);
-            mv.visitVarInsn(ASTORE, V_D);
-
-            Stack<Label> labels = new Stack<Label>();
-
-            int d = 0;
-            int p = 0;
-
-            int c;
-            while ((c = r.read()) != -1) {
-                switch (c) {
-                case '>':
-                    d = storeD(mv, d);
-                    p++;
-                    break;
-
-                case '<':
-                    d = storeD(mv, d);
-                    p--;
-                    break;
-
-                case '+':
-                    p = storeP(mv, p);
-                    d++;
-                    break;
-
-                case '-':
-                    p = storeP(mv, p);
-                    d--;
-                    break;
-
-                case '.':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    mv.visitVarInsn(ALOAD, V_OS);
-                    mv.visitVarInsn(ALOAD, V_D);
-                    mv.visitVarInsn(ILOAD, V_P);
-                    mv.visitInsn(IALOAD);
-                    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/OutputStream",
-                            "write", "(I)V");
-                    break;
-
-                case ',':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    mv.visitVarInsn(ALOAD, V_D);
-                    mv.visitVarInsn(ILOAD, V_P);
-                    mv.visitVarInsn(ALOAD, V_IS);
-                    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/InputStream",
-                            "read", "()I");
-                    mv.visitInsn(IASTORE);
-                    break;
-
-                case '[':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    Label ls = new Label();
-                    Label le = new Label();
-                    labels.push(ls);
-                    labels.push(le);
-                    mv.visitJumpInsn(GOTO, le);
-                    mv.visitLabel(ls);
-                    break;
-
-                case ']':
-                    p = storeP(mv, p);
-                    d = storeD(mv, d);
-
-                    mv.visitLabel(labels.pop());
-                    mv.visitVarInsn(ALOAD, V_D);
-                    mv.visitVarInsn(ILOAD, V_P);
-                    mv.visitInsn(IALOAD);
-                    mv.visitJumpInsn(IFNE, labels.pop());
-                    break;
-                }
-            }
-
-            mv.visitInsn(RETURN);
-
-            mv.visitMaxs(1, 1);
-            mv.visitEnd();
-        }
-
-    }
-
-    private int storeD(final MethodVisitor mv, final int d) {
-        if (d != 0) {
-            mv.visitVarInsn(ALOAD, V_D);
-            mv.visitVarInsn(ILOAD, V_P);
-            mv.visitInsn(DUP2);
-            mv.visitInsn(IALOAD);
-            mv.visitIntInsn(SIPUSH, d);
-            mv.visitInsn(IADD);
-            mv.visitInsn(IASTORE);
-        }
-        return 0;
-    }
-
-    private int storeP(final MethodVisitor mv, final int p) {
-        if (p != 0) {
-            mv.visitIincInsn(V_P, p);
-        }
-        return 0;
-    }
-
-}
diff --git a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompilerTest.java b/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompilerTest.java
deleted file mode 100644
index 3fc1ebd..0000000
--- a/asm4/examples/jbfc/src/org/objectweb/asm/jbfc/BFCompilerTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/***
- * ASM examples: examples showing how ASM can be used
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm.jbfc;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.io.StringReader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.objectweb.asm.ClassWriter;
-
-/**
- * A naive implementation of compiler for Brain**** language.
- * http://www.muppetlabs.com/~breadbox/bf/ *
- * 
- * @author Eugene Kuleshov
- */
-public class BFCompilerTest {
-
-    private BFCompiler bc;
-
-    private ClassWriter cw;
-
-    public static void main(String[] args) throws Throwable {
-        new BFCompilerTest().testCompileHelloWorld();
-        new BFCompilerTest().testCompileEcho();
-        new BFCompilerTest().testCompileYaPi();
-        new BFCompilerTest().testCompileTest1();
-    }
-
-    public BFCompilerTest() throws Exception {
-        bc = new BFCompiler();
-        cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-    }
-
-    public void testCompileHelloWorld() throws Throwable {
-        assertEquals(
-                "Hello World!\n",
-                execute("Hello",
-                        ">+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]"
-                                + "<.#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++["
-                                + "<++++>-]<+.[-]++++++++++.", ""));
-    }
-
-    public void testCompileEcho() throws Throwable {
-        assertEquals("AAA", execute("Echo", ",+[-.,+]", "AAA"));
-    }
-
-    public void testCompileYaPi() throws Throwable {
-        assertEquals("3.1415926\n", execute("YaPi",
-                ">+++++[<+++++++++>-]>>>>>>\r\n\r\n+++++ +++ (7 "
-                        + "digits)\r\n\r\n[<<+>++++++++++>-]<<+>>+++<[->>+"
-                        + "<-[>>>]>[[<+>-]>+>>]<<<<<]>[-]>[-]>[<+>-]<[>+<["
-                        + "-\r\n>>>>>>>+<<<<<<<]>[->+>>>>>>+<<<<<<<]>>>>++"
-                        + ">>-]>[-]<<<[<<<<<<<]<[->>>>>[>>>>>>>]<\r\n<<<<<"
-                        + "<[>>>>[-]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<<[<<++"
-                        + "++++++++>>-]>[<<<<[>+>>+<<<-\r\n]>>>[<<<+>>>-]>"
-                        + "-]<<<<[>>++>+<<<-]>>->[<<<+>>>-]>[-]<<<[->>+<-["
-                        + ">>>]>[[<+>-]>+>>]<\r\n<<<<]>[-]<<<<<<<<<]>+>>>>"
-                        + ">>->>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<[-]++++++++++"
-                        + "<[->>+<-\r\n[>>>]>[[<+>-]>+>>]<<<<<]>[-]>[>>>>>"
-                        + "+<<<<<-]>[<+>>+<-]>[<+>-]<<<+<+>>[-[-[-[-[-[-\r"
-                        + "\n[-[-[-<->[-<+<->>[<<+>>[-]]]]]]]]]]]]<[+++++["
-                        + "<<<<++++++++>>>>>++++++++<-]>+<<<<-\r\n>>[>+>-<"
-                        + "<<<<+++++++++>>>-]<<<<[>>>>>>+<<<<<<-]<[>>>>>>>"
-                        + ".<<<<<<<<[+.[-]]>>]>[<]<+\r\n>>>[<.>-]<[-]>>>>>"
-                        + "[-]<[>>[<<<<<<<+>>>>>>>-]<<-]]>>[-]>+<<<<[-]<]+"
-                        + "+++++++++.", ""));
-    }
-
-    public void testCompileTest1() throws Throwable {
-        assertEquals("H\n", execute("Test1",
-                "[]++++++++++[>++++++++++++++++++>+++++++>+<<<-]A;?@![#>>"
-                        + "+<<]>[>++<[-]]>.>.", ""));
-    }
-
-    public static void assertEquals(String s1, String s2) {
-        if (!s1.equals(s2)) {
-            System.out.println("ERROR: expected '" + s1 + "' but got '" + s2
-                    + "'");
-        }
-    }
-
-    private String execute(final String name, final String code,
-            final String input) throws Throwable {
-        bc.compile(new StringReader(code), name, name, cw);
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        InputStream is = System.in;
-        PrintStream os = System.out;
-        System.setIn(new ByteArrayInputStream(input.getBytes()));
-        System.setOut(new PrintStream(bos));
-
-        try {
-            TestClassLoader cl = new TestClassLoader(getClass()
-                    .getClassLoader(), name, cw.toByteArray());
-            Class<?> c = cl.loadClass(name);
-            Method m = c.getDeclaredMethod("main",
-                    new Class<?>[] { String[].class });
-            m.invoke(null, new Object[] { new String[0] });
-
-        } catch (InvocationTargetException ex) {
-            throw ex.getCause();
-        } finally {
-            System.setIn(is);
-            System.setOut(os);
-        }
-
-        String output = new String(bos.toByteArray(), "ASCII");
-
-        System.out
-                .println(code + " WITH INPUT '" + input + "' GIVES " + output);
-
-        return output;
-    }
-
-    private static final class TestClassLoader extends ClassLoader {
-
-        private final String className;
-
-        private final ClassLoader cl;
-
-        private final byte[] bytecode;
-
-        public TestClassLoader(final ClassLoader cl, final String className,
-                final byte[] bytecode) {
-            super();
-            this.cl = cl;
-            this.className = className;
-            this.bytecode = bytecode;
-        }
-
-        @Override
-        public Class<?> loadClass(final String name)
-                throws ClassNotFoundException {
-            if (className.equals(name)) {
-                return super.defineClass(className, bytecode, 0,
-                        bytecode.length);
-            }
-            return cl.loadClass(name);
-        }
-
-    }
-}
diff --git a/asm4/examples/xml/annotate.xsl b/asm4/examples/xml/annotate.xsl
deleted file mode 100644
index 82a5bf2..0000000
--- a/asm4/examples/xml/annotate.xsl
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  All rights reserved.
- 
-  Redistribution and use in source and binary forms, with or without
-  modification, 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. Neither the name of the copyright holders nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission.
- 
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<!--
-  XSL transformation for ASM XML document to add annotational comments to the local
-  variables (name, type and visibility) and labels (line number, try/catch info, 
-  number of incoming calls)
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII" />
-
-<!--
-  Annotate opcodes that are working with local variables
--->
-<xsl:template match="//ILOAD | //LLOAD | //FLOAD | //DLOAD | //ALOAD | //ISTORE | //LSTORE | //FSTORE | //DSTORE | //ASTORE | //RET">
-  <xsl:variable name="n"><xsl:value-of select="@var"/></xsl:variable>
-
-  <xsl:apply-templates select="../LocalVar[@var=$n]" mode="localVar"/>
-  
-  <xsl:element name="{name()}">
-    <xsl:attribute name="var"><xsl:value-of select="$n"/></xsl:attribute>
-  </xsl:element>
-</xsl:template>
-
-
-<xsl:template match="*" mode="localVar">
-  <xsl:comment><xsl:text> </xsl:text><xsl:value-of select="concat( @name, ' ', @desc, '  ', @start, ' - ', @end)"/><xsl:text> </xsl:text></xsl:comment>
-</xsl:template>
-
-
-<!--
-  Annotate labels
--->
-<xsl:template match="//method/code/Label">
-  <xsl:variable name="n"><xsl:value-of select="@name"/></xsl:variable>
-
-  <xsl:apply-templates select="../LineNumber[@start=$n]" mode="lineNumber"/>
-  <xsl:apply-templates select="../TryCatch[@start=$n]" mode="tryStart"/>
-  <xsl:apply-templates select="../TryCatch[@end=$n]" mode="tryEnd"/>
-  <xsl:apply-templates select="../TryCatch[@handler=$n]" mode="catch"/>
-
-  <xsl:variable name="c">
-    <!-- this is the slowest part -->
-    <xsl:value-of select="count(../IFEQ[@label=$n] | ../IFNE[@label=$n] | ../IFLT[@label=$n] | ../IFGE[@label=$n] | ../IFGT[@label=$n] | ../IFLE[@label=$n] | ../IF_ICMPEQ[@label=$n] | ../IF_ICMPNE[@label=$n] | ../IF_ICMPLT[@label=$n] | ../IF_ICMPGE[@label=$n] | ../IF_ICMPGT[@label=$n] | ../IF_ICMPLE[@label=$n] | ../IF_ACMPEQ[@label=$n] | ../IF_ACMPNE[@label=$n] | ../GOTO[@label=$n] | ../JSR[@label=$n] | ../IFNULL[@label=$n] | ../IFNONNULL[@label=$n] | ../TABLESWITCHINSN[@dflt=$n] | ../TABLESWITCHINSN/label[@name=$n] | ../LOOKUPSWITCH[@dflt=$n] | ../LOOKUPSWITCH/label[@name=$n])"/>
-  </xsl:variable>
-  <xsl:if test="$c>0">
-    <xsl:comment><xsl:text> Incoming calls: </xsl:text><xsl:value-of select="$c"/><xsl:text> </xsl:text></xsl:comment>
-  </xsl:if>
-
-  <label><xsl:apply-templates select="@*"/></label>
-
-</xsl:template>
-
-
-<xsl:template match="*" mode="lineNumber">
-  <xsl:comment><xsl:text> Line: </xsl:text><xsl:value-of select="@line"/><xsl:text> </xsl:text></xsl:comment>
-</xsl:template>
-
-<xsl:template match="*" mode="tryStart">
-  <xsl:comment><xsl:text> try start </xsl:text></xsl:comment>
-</xsl:template>
-
-<xsl:template match="*" mode="tryEnd">
-  <xsl:comment><xsl:text> try end </xsl:text></xsl:comment>
-</xsl:template>
-
-<xsl:template match="*" mode="catch">
-  <xsl:comment>
-    <xsl:text> catch </xsl:text>
-    <xsl:if test="string-length(@type)>0">
-      <xsl:text>(</xsl:text><xsl:value-of select="@type"/><xsl:text>)</xsl:text>
-    </xsl:if>
-  </xsl:comment>
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/asm4/examples/xml/copy.xsl b/asm4/examples/xml/copy.xsl
deleted file mode 100644
index dae3de6..0000000
--- a/asm4/examples/xml/copy.xsl
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  All rights reserved.
- 
-  Redistribution and use in source and binary forms, with or without
-  modification, 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. Neither the name of the copyright holders nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission.
- 
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<!--
-  Copy source document into target without changes.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII" />
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/asm4/examples/xml/linenumbers.xsl b/asm4/examples/xml/linenumbers.xsl
deleted file mode 100644
index dd63825..0000000
--- a/asm4/examples/xml/linenumbers.xsl
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  All rights reserved.
- 
-  Redistribution and use in source and binary forms, with or without
-  modification, 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. Neither the name of the copyright holders nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission.
- 
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<!--
-  XSL transformation for ASM XML document to add the equivalent of following 
-  Java code for each label that has source line number information.
-
-  System.err.println( "<class>.<method><desc> Line:<source line number>");
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII" />
-
-<xsl:template match="//method/code/Label">
-  <xsl:variable name="n"><xsl:value-of select="@name"/></xsl:variable>
-  <xsl:variable name="c"><xsl:value-of select="../LineNumber[@start=$n]/@line"/></xsl:variable>
-
-  <label><xsl:apply-templates select="@*"/></label>
-
-  <xsl:if test="string-length($c)>0">
-    <xsl:comment>
-      <xsl:text> Line: </xsl:text><xsl:value-of select="$c"/><xsl:text> </xsl:text>
-    </xsl:comment>
-
-    <GETSTATIC desc="Ljava/io/PrintStream;" name="err" owner="java/lang/System"/>
-    <LDC desc="Ljava/lang/String;">
-      <xsl:attribute name="cst">
-        <xsl:value-of select="concat( /class/@name, '.' ,../../@name, ../../@desc, ' Line:', $c)"/>
-      </xsl:attribute>
-    </LDC>
-    <INVOKEVIRTUAL desc="(Ljava/lang/String;)V" name="println" owner="java/io/PrintStream"/>
-  </xsl:if>    
-
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/asm4/examples/xml/profile.xsl b/asm4/examples/xml/profile.xsl
deleted file mode 100644
index 100a268..0000000
--- a/asm4/examples/xml/profile.xsl
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  All rights reserved.
- 
-  Redistribution and use in source and binary forms, with or without
-  modification, 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. Neither the name of the copyright holders nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission.
- 
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<!--
-  XSL transformation for ASM XML document to add the code that will dump
-  an execution time for each method.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes" encoding="ASCII"/>
-
-
-<xsl:template match="//method/code">
-  <code>
-    <!-- add attributes for code element -->
-    <xsl:apply-templates select="@*"/>
-  
-    <!-- store start time into the max variable after method params -->
-    <INVOKESTATIC desc="()J" name="currentTimeMillis" owner="java/lang/System"/>
-    <LSTORE>
-      <xsl:attribute name="var">
-        <xsl:value-of select="./Max/@maxLocals"/>
-      </xsl:attribute>
-    </LSTORE>
-
-    <!-- process child elements -->
-    <xsl:apply-templates select="*"/>
-
-  </code>
-
-</xsl:template>
-
-
-<!--
-  Add print statement before return instructions
-  IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, RETURN, 
-  ATHROW ??
--->
-<xsl:template match="//IRETURN | //LRETURN | //FRETURN | //DRETURN | //ARETURN | //RETURN">
-  <GETSTATIC desc="Ljava/io/PrintStream;" name="err" owner="java/lang/System"/>
-
-  <NEW desc="java/lang/StringBuffer"/>
-  <DUP/>
-  <INVOKESPECIAL owner="java/lang/StringBuffer" name="&lt;init&gt;" desc="()V"/>
-  
-  <INVOKESTATIC desc="()J" name="currentTimeMillis" owner="java/lang/System"/>
-  <LLOAD>
-    <xsl:attribute name="var">
-      <xsl:value-of select="../Max/@maxLocals"/>
-    </xsl:attribute>
-  </LLOAD>
-  <LSUB/>
-  <INVOKEVIRTUAL owner="java/lang/StringBuffer" name="append" desc="(J)Ljava/lang/StringBuffer;"/>
-  
-  <LDC desc="Ljava/lang/String;">
-    <xsl:attribute name="cst">
-      <xsl:value-of select="concat( ' : ', ../../../@name, '.', ../../@name, ../../@desc)"/>
-    </xsl:attribute>
-  </LDC>
-  <INVOKEVIRTUAL owner="java/lang/StringBuffer" name="append" desc="(Ljava/lang/String;)Ljava/lang/StringBuffer;"/>
-  <INVOKEVIRTUAL owner="java/lang/StringBuffer" name="toString" desc="()Ljava/lang/String;"/>
-
-  <INVOKEVIRTUAL desc="(Ljava/lang/String;)V" name="println" owner="java/io/PrintStream"/>
-
-  <xsl:element name="{name()}"/>
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="@*|*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/asm4/examples/xml/readme.txt b/asm4/examples/xml/readme.txt
deleted file mode 100644
index b3da367..0000000
--- a/asm4/examples/xml/readme.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, 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. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, 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 directory contains sample XSL transformation templates that
-demonstrate features of org.objectweb.asm.xml package.
-
-
-copy.xsl
-  Copying source document into target without changes.
-
-strip.xsl
-  Strips all attribute values from the target XML. 
-  Result document can't be used to generate bytecode.
-
-annotate.xsl
-  Adds comments for labels and variable instructions
-  to the target XML document.
-
-linenumbers.xsl
-  Adds code to dump source line numbers for the executing code to System.err
-  
-profile.xsl
-  Adds code to dump execution time for each method to System.err
-
-
-You can use the following command to transform
-
-java -jar asm-xml-<version>.jar <in format> <out format> 
-     [-in <input jar>] [-out <output jar>] [-xslt <xslt file>]
-
-  where <in format> and <out format> is one of code, xml or singlexml
-  when -in or -out is omitted sysin and sysout would be used
-
diff --git a/asm4/examples/xml/strip.xsl b/asm4/examples/xml/strip.xsl
deleted file mode 100644
index b181996..0000000
--- a/asm4/examples/xml/strip.xsl
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<!--
-  ASM XML Adapter examples.
-  Copyright (c) 2004-2011, Eugene Kuleshov
-  All rights reserved.
- 
-  Redistribution and use in source and binary forms, with or without
-  modification, 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. Neither the name of the copyright holders nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission.
- 
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<!--
-  Destructive transformation that removes values from all attributes.
-  Result bytecode will be invalid.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" encoding="ASCII" indent="yes"/>
-
-<!--
-  Class name must not be removed!
--->
-<xsl:template match="//class/@name">
-  <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
-</xsl:template>
-
-
-<xsl:template match="@*">
-  <xsl:attribute name="{name()}"/>
-</xsl:template>
-
-
-<!-- copy everything -->
-<xsl:template match="*|text()|processing-instruction()">
-  <xsl:copy><xsl:apply-templates select="@*|*|text()|processing-instruction()"/></xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/asm4/findbugsExclude.xml b/asm4/findbugsExclude.xml
deleted file mode 100644
index cc41e7e..0000000
--- a/asm4/findbugsExclude.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-

-<!--

- ! ASM: a very small and fast Java bytecode manipulation framework

- ! Copyright (c) 2000-2011 INRIA, France Telecom

- ! All rights reserved.

- !

- ! Redistribution and use in source and binary forms, with or without

- ! modification, 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. Neither the name of the copyright holders nor the names of its

- !    contributors may be used to endorse or promote products derived from

- !    this software without specific prior written permission.

- !

- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE

- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.

--->

-

-<FindBugsFilter>

-  <Match>

-    <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>

-  </Match>

-  <Match>

-    <Class name="~.*\$A"/>

-  </Match>

-  <Match>

-    <Class name="~.*\$B"/>

-  </Match>

-  <Match>

-    <Class name="~.*\$Doo.*"/>

-  </Match>

-  <Match>

-    <Class name="Adapt"/>

-  </Match>

-  <Match>

-    <Class name="Analysis"/>

-    <Method name="test"/>

-  </Match>

-  <Match>

-    <Class name="~.*ASMMemTest"/>

-    <Bug pattern="DM_GC"/>

-  </Match>

-  <Match>

-    <Class name="jbfc"/>

-  </Match>

-  <Match>

-    <Class name="~.*apache.*"/>

-  </Match>

-</FindBugsFilter>

diff --git a/asm4/jdoc/README.txt b/asm4/jdoc/README.txt
deleted file mode 100644
index 499f31f..0000000
--- a/asm4/jdoc/README.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-*******************************************************************************
-* ASM: a very small and fast Java bytecode manipulation framework
-* Copyright (c) 2000-2011 INRIA, France Telecom
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, 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. Neither the name of the copyright holders nor the names of its
-*    contributors may be used to endorse or promote products derived from
-*    this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
-* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, 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 directory contains ant files to build the javadocs of the product.
-The following rules describe the convention to write such files:
-
-- An ant file must build only one javadoc.
-
-- As there may exist several javadocs, all javadocs must be produced
-  in a sub dir of ${out.dist.jdoc}. For example the user javadoc could be 
-  produced into the ${out.dist.jdoc}/user directory
-
-- The name of the ant file must be the name of the destination directory of the 
-  javadoc it builds.
-
-- Only the default task is called on an xml file.
-
-Sample ant file:
-
-<project name="FOO" default="dist.jdoc">
-
-  <property name="jdoc.name" value="user"/>
-  <property name="jdoc.dir" value="${out.dist.jdoc}/${jdoc.name}"/>
-
-  <target name="dist.jdoc">
-    <uptodate property="jdoc.required" targetfile="${jdoc.dir}/index.html">
-      <srcfiles dir="${src}" includes="**/*.java"/>
-    </uptodate>
-    <antcall target="dist.jdoc.${jdoc.name}"/>
-  </target>
-
-  <target name="dist.jdoc.user" unless="jdoc.required">
-    <mkdir dir="${jdoc.dir}"/>
-    <javadoc destdir="${jdoc.dir}"
-             windowtitle="FOO User Documentation"
-             doctitle="FOO User Documentation">
-
-       ...
-       
-    </javadoc>
-  </target>
-</project>
diff --git a/asm4/jdoc/package-list b/asm4/jdoc/package-list
deleted file mode 100644
index 6159048..0000000
--- a/asm4/jdoc/package-list
+++ /dev/null
@@ -1,78 +0,0 @@
-java.applet
-java.awt
-java.awt.color
-java.awt.datatransfer
-java.awt.dnd
-java.awt.event
-java.awt.font
-java.awt.geom
-java.awt.im
-java.awt.im.spi
-java.awt.image
-java.awt.image.renderable
-java.awt.print
-java.beans
-java.beans.beancontext
-java.io
-java.lang
-java.lang.ref
-java.lang.reflect
-java.math
-java.net
-java.rmi
-java.rmi.activation
-java.rmi.dgc
-java.rmi.registry
-java.rmi.server
-java.security
-java.security.acl
-java.security.cert
-java.security.interfaces
-java.security.spec
-java.sql
-java.text
-java.util
-java.util.jar
-java.util.zip
-javax.accessibility
-javax.naming
-javax.naming.directory
-javax.naming.event
-javax.naming.ldap
-javax.naming.spi
-javax.rmi
-javax.rmi.CORBA
-javax.sound.midi
-javax.sound.midi.spi
-javax.sound.sampled
-javax.sound.sampled.spi
-javax.swing
-javax.swing.border
-javax.swing.colorchooser
-javax.swing.event
-javax.swing.filechooser
-javax.swing.plaf
-javax.swing.plaf.basic
-javax.swing.plaf.metal
-javax.swing.plaf.multi
-javax.swing.table
-javax.swing.text
-javax.swing.text.html
-javax.swing.text.html.parser
-javax.swing.text.rtf
-javax.swing.tree
-javax.swing.undo
-javax.transaction
-org.omg.CORBA
-org.omg.CORBA_2_3
-org.omg.CORBA_2_3.portable
-org.omg.CORBA.DynAnyPackage
-org.omg.CORBA.ORBPackage
-org.omg.CORBA.portable
-org.omg.CORBA.TypeCodePackage
-org.omg.CosNaming
-org.omg.CosNaming.NamingContextPackage
-org.omg.SendingContext
-org.omg.stub.java.rmi
-org.xml.sax
-org.xml.sax.helpers
\ No newline at end of file
diff --git a/asm4/jdoc/user.xml b/asm4/jdoc/user.xml
deleted file mode 100644
index a448897..0000000
--- a/asm4/jdoc/user.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
- ! ASM: a very small and fast Java bytecode manipulation framework
- ! Copyright (c) 2000-2011 INRIA, France Telecom
- ! All rights reserved.
- !
- ! Redistribution and use in source and binary forms, with or without
- ! modification, 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. Neither the name of the copyright holders nor the names of its
- !    contributors may be used to endorse or promote products derived from
- !    this software without specific prior written permission.
- !
- ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- ! AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- ! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- ! CONSEQUENTIAL DAMAGES (INCLUDING, 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.
--->
-
-<project name="asm" default="dist.jdoc">
-
-  <property name="jdoc.name" value="user"/>
-  <property name="jdoc.dir" value="${out.dist.jdoc}/${jdoc.name}"/>
-
-  <target name="dist.jdoc">
-    <uptodate property="jdoc.required" targetfile="${jdoc.dir}/index.html">
-      <srcfiles dir="${src}" includes="**/*.java,**/*.html"/>
-    </uptodate>
-    <antcall target="dist.jdoc.${jdoc.name}"/>
-  </target>
-
-  <target name="dist.jdoc.user" unless="jdoc.required">
-    <mkdir dir="${jdoc.dir}"/>
-    <javadoc destdir="${jdoc.dir}"
-             windowtitle="ASM ${product.version} Documentation"
-             doctitle="ASM ${product.version} Documentation"
-             use="true">
-
-      <sourcepath path="${src}"/>
-      <package name="org.objectweb.asm"/>
-      <package name="org.objectweb.asm.attrs"/>
-      <package name="org.objectweb.asm.commons"/>
-      <package name="org.objectweb.asm.signature"/>
-      <package name="org.objectweb.asm.tree"/>
-      <package name="org.objectweb.asm.tree.analysis"/>
-      <package name="org.objectweb.asm.util"/>
-      <package name="org.objectweb.asm.util.attrs"/>
-      <package name="org.objectweb.asm.xml"/>
-
-      <link href="${jdk.url}" offline="true" packagelistLoc="${jdoc}"/>
-
-    </javadoc>
-
-    <copy todir="${jdoc.dir}">
-      <fileset dir="${src}" includes="**/*.dtd"/>
-    </copy>
-  </target>
-
-</project>
diff --git a/asm4/src/org/objectweb/asm/AnnotationVisitor.java b/asm4/src/org/objectweb/asm/AnnotationVisitor.java
deleted file mode 100644
index 3c8a740..0000000
--- a/asm4/src/org/objectweb/asm/AnnotationVisitor.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java annotation. The methods of this class must be
- * called in the following order: ( <tt>visit</tt> | <tt>visitEnum</tt> |
- * <tt>visitAnnotation</tt> | <tt>visitArray</tt> )* <tt>visitEnd</tt>.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public abstract class AnnotationVisitor {
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * The annotation visitor to which this visitor must delegate method calls.
-     * May be null.
-     */
-    protected AnnotationVisitor av;
-
-    /**
-     * Constructs a new {@link AnnotationVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public AnnotationVisitor(final int api) {
-        this(api, null);
-    }
-
-    /**
-     * Constructs a new {@link AnnotationVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param av
-     *            the annotation visitor to which this visitor must delegate
-     *            method calls. May be null.
-     */
-    public AnnotationVisitor(final int api, final AnnotationVisitor av) {
-        if (api != Opcodes.ASM4) {
-            throw new IllegalArgumentException();
-        }
-        this.api = api;
-        this.av = av;
-    }
-
-    /**
-     * Visits a primitive value of the annotation.
-     * 
-     * @param name
-     *            the value name.
-     * @param value
-     *            the actual value, whose type must be {@link Byte},
-     *            {@link Boolean}, {@link Character}, {@link Short},
-     *            {@link Integer} , {@link Long}, {@link Float}, {@link Double},
-     *            {@link String} or {@link Type} or OBJECT or ARRAY sort. This
-     *            value can also be an array of byte, boolean, short, char, int,
-     *            long, float or double values (this is equivalent to using
-     *            {@link #visitArray visitArray} and visiting each array element
-     *            in turn, but is more convenient).
-     */
-    public void visit(String name, Object value) {
-        if (av != null) {
-            av.visit(name, value);
-        }
-    }
-
-    /**
-     * Visits an enumeration value of the annotation.
-     * 
-     * @param name
-     *            the value name.
-     * @param desc
-     *            the class descriptor of the enumeration class.
-     * @param value
-     *            the actual enumeration value.
-     */
-    public void visitEnum(String name, String desc, String value) {
-        if (av != null) {
-            av.visitEnum(name, desc, value);
-        }
-    }
-
-    /**
-     * Visits a nested annotation value of the annotation.
-     * 
-     * @param name
-     *            the value name.
-     * @param desc
-     *            the class descriptor of the nested annotation class.
-     * @return a visitor to visit the actual nested annotation value, or
-     *         <tt>null</tt> if this visitor is not interested in visiting this
-     *         nested annotation. <i>The nested annotation value must be fully
-     *         visited before calling other methods on this annotation
-     *         visitor</i>.
-     */
-    public AnnotationVisitor visitAnnotation(String name, String desc) {
-        if (av != null) {
-            return av.visitAnnotation(name, desc);
-        }
-        return null;
-    }
-
-    /**
-     * Visits an array value of the annotation. Note that arrays of primitive
-     * types (such as byte, boolean, short, char, int, long, float or double)
-     * can be passed as value to {@link #visit visit}. This is what
-     * {@link ClassReader} does.
-     * 
-     * @param name
-     *            the value name.
-     * @return a visitor to visit the actual array value elements, or
-     *         <tt>null</tt> if this visitor is not interested in visiting these
-     *         values. The 'name' parameters passed to the methods of this
-     *         visitor are ignored. <i>All the array values must be visited
-     *         before calling other methods on this annotation visitor</i>.
-     */
-    public AnnotationVisitor visitArray(String name) {
-        if (av != null) {
-            return av.visitArray(name);
-        }
-        return null;
-    }
-
-    /**
-     * Visits the end of the annotation.
-     */
-    public void visitEnd() {
-        if (av != null) {
-            av.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/AnnotationWriter.java b/asm4/src/org/objectweb/asm/AnnotationWriter.java
deleted file mode 100644
index 53a0a7c..0000000
--- a/asm4/src/org/objectweb/asm/AnnotationWriter.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-/**
- * An {@link AnnotationVisitor} that generates annotations in bytecode form.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-final class AnnotationWriter extends AnnotationVisitor {
-
-    /**
-     * The class writer to which this annotation must be added.
-     */
-    private final ClassWriter cw;
-
-    /**
-     * The number of values in this annotation.
-     */
-    private int size;
-
-    /**
-     * <tt>true<tt> if values are named, <tt>false</tt> otherwise. Annotation
-     * writers used for annotation default and annotation arrays use unnamed
-     * values.
-     */
-    private final boolean named;
-
-    /**
-     * The annotation values in bytecode form. This byte vector only contains
-     * the values themselves, i.e. the number of values must be stored as a
-     * unsigned short just before these bytes.
-     */
-    private final ByteVector bv;
-
-    /**
-     * The byte vector to be used to store the number of values of this
-     * annotation. See {@link #bv}.
-     */
-    private final ByteVector parent;
-
-    /**
-     * Where the number of values of this annotation must be stored in
-     * {@link #parent}.
-     */
-    private final int offset;
-
-    /**
-     * Next annotation writer. This field is used to store annotation lists.
-     */
-    AnnotationWriter next;
-
-    /**
-     * Previous annotation writer. This field is used to store annotation lists.
-     */
-    AnnotationWriter prev;
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link AnnotationWriter}.
-     * 
-     * @param cw
-     *            the class writer to which this annotation must be added.
-     * @param named
-     *            <tt>true<tt> if values are named, <tt>false</tt> otherwise.
-     * @param bv
-     *            where the annotation values must be stored.
-     * @param parent
-     *            where the number of annotation values must be stored.
-     * @param offset
-     *            where in <tt>parent</tt> the number of annotation values must
-     *            be stored.
-     */
-    AnnotationWriter(final ClassWriter cw, final boolean named,
-            final ByteVector bv, final ByteVector parent, final int offset) {
-        super(Opcodes.ASM4);
-        this.cw = cw;
-        this.named = named;
-        this.bv = bv;
-        this.parent = parent;
-        this.offset = offset;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the AnnotationVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public void visit(final String name, final Object value) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        if (value instanceof String) {
-            bv.put12('s', cw.newUTF8((String) value));
-        } else if (value instanceof Byte) {
-            bv.put12('B', cw.newInteger(((Byte) value).byteValue()).index);
-        } else if (value instanceof Boolean) {
-            int v = ((Boolean) value).booleanValue() ? 1 : 0;
-            bv.put12('Z', cw.newInteger(v).index);
-        } else if (value instanceof Character) {
-            bv.put12('C', cw.newInteger(((Character) value).charValue()).index);
-        } else if (value instanceof Short) {
-            bv.put12('S', cw.newInteger(((Short) value).shortValue()).index);
-        } else if (value instanceof Type) {
-            bv.put12('c', cw.newUTF8(((Type) value).getDescriptor()));
-        } else if (value instanceof byte[]) {
-            byte[] v = (byte[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('B', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof boolean[]) {
-            boolean[] v = (boolean[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('Z', cw.newInteger(v[i] ? 1 : 0).index);
-            }
-        } else if (value instanceof short[]) {
-            short[] v = (short[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('S', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof char[]) {
-            char[] v = (char[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('C', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof int[]) {
-            int[] v = (int[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('I', cw.newInteger(v[i]).index);
-            }
-        } else if (value instanceof long[]) {
-            long[] v = (long[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('J', cw.newLong(v[i]).index);
-            }
-        } else if (value instanceof float[]) {
-            float[] v = (float[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('F', cw.newFloat(v[i]).index);
-            }
-        } else if (value instanceof double[]) {
-            double[] v = (double[]) value;
-            bv.put12('[', v.length);
-            for (int i = 0; i < v.length; i++) {
-                bv.put12('D', cw.newDouble(v[i]).index);
-            }
-        } else {
-            Item i = cw.newConstItem(value);
-            bv.put12(".s.IFJDCS".charAt(i.type), i.index);
-        }
-    }
-
-    @Override
-    public void visitEnum(final String name, final String desc,
-            final String value) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        bv.put12('e', cw.newUTF8(desc)).putShort(cw.newUTF8(value));
-    }
-
-    @Override
-    public AnnotationVisitor visitAnnotation(final String name,
-            final String desc) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        // write tag and type, and reserve space for values count
-        bv.put12('@', cw.newUTF8(desc)).putShort(0);
-        return new AnnotationWriter(cw, true, bv, bv, bv.length - 2);
-    }
-
-    @Override
-    public AnnotationVisitor visitArray(final String name) {
-        ++size;
-        if (named) {
-            bv.putShort(cw.newUTF8(name));
-        }
-        // write tag, and reserve space for array size
-        bv.put12('[', 0);
-        return new AnnotationWriter(cw, false, bv, bv, bv.length - 2);
-    }
-
-    @Override
-    public void visitEnd() {
-        if (parent != null) {
-            byte[] data = parent.data;
-            data[offset] = (byte) (size >>> 8);
-            data[offset + 1] = (byte) size;
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the size of this annotation writer list.
-     * 
-     * @return the size of this annotation writer list.
-     */
-    int getSize() {
-        int size = 0;
-        AnnotationWriter aw = this;
-        while (aw != null) {
-            size += aw.bv.length;
-            aw = aw.next;
-        }
-        return size;
-    }
-
-    /**
-     * Puts the annotations of this annotation writer list into the given byte
-     * vector.
-     * 
-     * @param out
-     *            where the annotations must be put.
-     */
-    void put(final ByteVector out) {
-        int n = 0;
-        int size = 2;
-        AnnotationWriter aw = this;
-        AnnotationWriter last = null;
-        while (aw != null) {
-            ++n;
-            size += aw.bv.length;
-            aw.visitEnd(); // in case user forgot to call visitEnd
-            aw.prev = last;
-            last = aw;
-            aw = aw.next;
-        }
-        out.putInt(size);
-        out.putShort(n);
-        aw = last;
-        while (aw != null) {
-            out.putByteArray(aw.bv.data, 0, aw.bv.length);
-            aw = aw.prev;
-        }
-    }
-
-    /**
-     * Puts the given annotation lists into the given byte vector.
-     * 
-     * @param panns
-     *            an array of annotation writer lists.
-     * @param off
-     *            index of the first annotation to be written.
-     * @param out
-     *            where the annotations must be put.
-     */
-    static void put(final AnnotationWriter[] panns, final int off,
-            final ByteVector out) {
-        int size = 1 + 2 * (panns.length - off);
-        for (int i = off; i < panns.length; ++i) {
-            size += panns[i] == null ? 0 : panns[i].getSize();
-        }
-        out.putInt(size).putByte(panns.length - off);
-        for (int i = off; i < panns.length; ++i) {
-            AnnotationWriter aw = panns[i];
-            AnnotationWriter last = null;
-            int n = 0;
-            while (aw != null) {
-                ++n;
-                aw.visitEnd(); // in case user forgot to call visitEnd
-                aw.prev = last;
-                last = aw;
-                aw = aw.next;
-            }
-            out.putShort(n);
-            aw = last;
-            while (aw != null) {
-                out.putByteArray(aw.bv.data, 0, aw.bv.length);
-                aw = aw.prev;
-            }
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/Attribute.java b/asm4/src/org/objectweb/asm/Attribute.java
deleted file mode 100644
index 8a2a882..0000000
--- a/asm4/src/org/objectweb/asm/Attribute.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-/**
- * A non standard class, field, method or code attribute.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class Attribute {
-
-    /**
-     * The type of this attribute.
-     */
-    public final String type;
-
-    /**
-     * The raw value of this attribute, used only for unknown attributes.
-     */
-    byte[] value;
-
-    /**
-     * The next attribute in this attribute list. May be <tt>null</tt>.
-     */
-    Attribute next;
-
-    /**
-     * Constructs a new empty attribute.
-     * 
-     * @param type
-     *            the type of the attribute.
-     */
-    protected Attribute(final String type) {
-        this.type = type;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this type of attribute is unknown. The default
-     * implementation of this method always returns <tt>true</tt>.
-     * 
-     * @return <tt>true</tt> if this type of attribute is unknown.
-     */
-    public boolean isUnknown() {
-        return true;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this type of attribute is a code attribute.
-     * 
-     * @return <tt>true</tt> if this type of attribute is a code attribute.
-     */
-    public boolean isCodeAttribute() {
-        return false;
-    }
-
-    /**
-     * Returns the labels corresponding to this attribute.
-     * 
-     * @return the labels corresponding to this attribute, or <tt>null</tt> if
-     *         this attribute is not a code attribute that contains labels.
-     */
-    protected Label[] getLabels() {
-        return null;
-    }
-
-    /**
-     * Reads a {@link #type type} attribute. This method must return a
-     * <i>new</i> {@link Attribute} object, of type {@link #type type},
-     * corresponding to the <tt>len</tt> bytes starting at the given offset, in
-     * the given class reader.
-     * 
-     * @param cr
-     *            the class that contains the attribute to be read.
-     * @param off
-     *            index of the first byte of the attribute's content in
-     *            {@link ClassReader#b cr.b}. The 6 attribute header bytes,
-     *            containing the type and the length of the attribute, are not
-     *            taken into account here.
-     * @param len
-     *            the length of the attribute's content.
-     * @param buf
-     *            buffer to be used to call {@link ClassReader#readUTF8
-     *            readUTF8}, {@link ClassReader#readClass(int,char[]) readClass}
-     *            or {@link ClassReader#readConst readConst}.
-     * @param codeOff
-     *            index of the first byte of code's attribute content in
-     *            {@link ClassReader#b cr.b}, or -1 if the attribute to be read
-     *            is not a code attribute. The 6 attribute header bytes,
-     *            containing the type and the length of the attribute, are not
-     *            taken into account here.
-     * @param labels
-     *            the labels of the method's code, or <tt>null</tt> if the
-     *            attribute to be read is not a code attribute.
-     * @return a <i>new</i> {@link Attribute} object corresponding to the given
-     *         bytes.
-     */
-    protected Attribute read(final ClassReader cr, final int off,
-            final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        Attribute attr = new Attribute(type);
-        attr.value = new byte[len];
-        System.arraycopy(cr.b, off, attr.value, 0, len);
-        return attr;
-    }
-
-    /**
-     * Returns the byte array form of this attribute.
-     * 
-     * @param cw
-     *            the class to which this attribute must be added. This
-     *            parameter can be used to add to the constant pool of this
-     *            class the items that corresponds to this attribute.
-     * @param code
-     *            the bytecode of the method corresponding to this code
-     *            attribute, or <tt>null</tt> if this attribute is not a code
-     *            attributes.
-     * @param len
-     *            the length of the bytecode of the method corresponding to this
-     *            code attribute, or <tt>null</tt> if this attribute is not a
-     *            code attribute.
-     * @param maxStack
-     *            the maximum stack size of the method corresponding to this
-     *            code attribute, or -1 if this attribute is not a code
-     *            attribute.
-     * @param maxLocals
-     *            the maximum number of local variables of the method
-     *            corresponding to this code attribute, or -1 if this attribute
-     *            is not a code attribute.
-     * @return the byte array form of this attribute.
-     */
-    protected ByteVector write(final ClassWriter cw, final byte[] code,
-            final int len, final int maxStack, final int maxLocals) {
-        ByteVector v = new ByteVector();
-        v.data = value;
-        v.length = value.length;
-        return v;
-    }
-
-    /**
-     * Returns the length of the attribute list that begins with this attribute.
-     * 
-     * @return the length of the attribute list that begins with this attribute.
-     */
-    final int getCount() {
-        int count = 0;
-        Attribute attr = this;
-        while (attr != null) {
-            count += 1;
-            attr = attr.next;
-        }
-        return count;
-    }
-
-    /**
-     * Returns the size of all the attributes in this attribute list.
-     * 
-     * @param cw
-     *            the class writer to be used to convert the attributes into
-     *            byte arrays, with the {@link #write write} method.
-     * @param code
-     *            the bytecode of the method corresponding to these code
-     *            attributes, or <tt>null</tt> if these attributes are not code
-     *            attributes.
-     * @param len
-     *            the length of the bytecode of the method corresponding to
-     *            these code attributes, or <tt>null</tt> if these attributes
-     *            are not code attributes.
-     * @param maxStack
-     *            the maximum stack size of the method corresponding to these
-     *            code attributes, or -1 if these attributes are not code
-     *            attributes.
-     * @param maxLocals
-     *            the maximum number of local variables of the method
-     *            corresponding to these code attributes, or -1 if these
-     *            attributes are not code attributes.
-     * @return the size of all the attributes in this attribute list. This size
-     *         includes the size of the attribute headers.
-     */
-    final int getSize(final ClassWriter cw, final byte[] code, final int len,
-            final int maxStack, final int maxLocals) {
-        Attribute attr = this;
-        int size = 0;
-        while (attr != null) {
-            cw.newUTF8(attr.type);
-            size += attr.write(cw, code, len, maxStack, maxLocals).length + 6;
-            attr = attr.next;
-        }
-        return size;
-    }
-
-    /**
-     * Writes all the attributes of this attribute list in the given byte
-     * vector.
-     * 
-     * @param cw
-     *            the class writer to be used to convert the attributes into
-     *            byte arrays, with the {@link #write write} method.
-     * @param code
-     *            the bytecode of the method corresponding to these code
-     *            attributes, or <tt>null</tt> if these attributes are not code
-     *            attributes.
-     * @param len
-     *            the length of the bytecode of the method corresponding to
-     *            these code attributes, or <tt>null</tt> if these attributes
-     *            are not code attributes.
-     * @param maxStack
-     *            the maximum stack size of the method corresponding to these
-     *            code attributes, or -1 if these attributes are not code
-     *            attributes.
-     * @param maxLocals
-     *            the maximum number of local variables of the method
-     *            corresponding to these code attributes, or -1 if these
-     *            attributes are not code attributes.
-     * @param out
-     *            where the attributes must be written.
-     */
-    final void put(final ClassWriter cw, final byte[] code, final int len,
-            final int maxStack, final int maxLocals, final ByteVector out) {
-        Attribute attr = this;
-        while (attr != null) {
-            ByteVector b = attr.write(cw, code, len, maxStack, maxLocals);
-            out.putShort(cw.newUTF8(attr.type)).putInt(b.length);
-            out.putByteArray(b.data, 0, b.length);
-            attr = attr.next;
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ByteVector.java b/asm4/src/org/objectweb/asm/ByteVector.java
deleted file mode 100644
index 54d4e65..0000000
--- a/asm4/src/org/objectweb/asm/ByteVector.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-/**
- * A dynamically extensible vector of bytes. This class is roughly equivalent to
- * a DataOutputStream on top of a ByteArrayOutputStream, but is more efficient.
- * 
- * @author Eric Bruneton
- */
-public class ByteVector {
-
-    /**
-     * The content of this vector.
-     */
-    byte[] data;
-
-    /**
-     * Actual number of bytes in this vector.
-     */
-    int length;
-
-    /**
-     * Constructs a new {@link ByteVector ByteVector} with a default initial
-     * size.
-     */
-    public ByteVector() {
-        data = new byte[64];
-    }
-
-    /**
-     * Constructs a new {@link ByteVector ByteVector} with the given initial
-     * size.
-     * 
-     * @param initialSize
-     *            the initial size of the byte vector to be constructed.
-     */
-    public ByteVector(final int initialSize) {
-        data = new byte[initialSize];
-    }
-
-    /**
-     * Puts a byte into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param b
-     *            a byte.
-     * @return this byte vector.
-     */
-    public ByteVector putByte(final int b) {
-        int length = this.length;
-        if (length + 1 > data.length) {
-            enlarge(1);
-        }
-        data[length++] = (byte) b;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts two bytes into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param b1
-     *            a byte.
-     * @param b2
-     *            another byte.
-     * @return this byte vector.
-     */
-    ByteVector put11(final int b1, final int b2) {
-        int length = this.length;
-        if (length + 2 > data.length) {
-            enlarge(2);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) b1;
-        data[length++] = (byte) b2;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts a short into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param s
-     *            a short.
-     * @return this byte vector.
-     */
-    public ByteVector putShort(final int s) {
-        int length = this.length;
-        if (length + 2 > data.length) {
-            enlarge(2);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) (s >>> 8);
-        data[length++] = (byte) s;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts a byte and a short into this byte vector. The byte vector is
-     * automatically enlarged if necessary.
-     * 
-     * @param b
-     *            a byte.
-     * @param s
-     *            a short.
-     * @return this byte vector.
-     */
-    ByteVector put12(final int b, final int s) {
-        int length = this.length;
-        if (length + 3 > data.length) {
-            enlarge(3);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) b;
-        data[length++] = (byte) (s >>> 8);
-        data[length++] = (byte) s;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts an int into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param i
-     *            an int.
-     * @return this byte vector.
-     */
-    public ByteVector putInt(final int i) {
-        int length = this.length;
-        if (length + 4 > data.length) {
-            enlarge(4);
-        }
-        byte[] data = this.data;
-        data[length++] = (byte) (i >>> 24);
-        data[length++] = (byte) (i >>> 16);
-        data[length++] = (byte) (i >>> 8);
-        data[length++] = (byte) i;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts a long into this byte vector. The byte vector is automatically
-     * enlarged if necessary.
-     * 
-     * @param l
-     *            a long.
-     * @return this byte vector.
-     */
-    public ByteVector putLong(final long l) {
-        int length = this.length;
-        if (length + 8 > data.length) {
-            enlarge(8);
-        }
-        byte[] data = this.data;
-        int i = (int) (l >>> 32);
-        data[length++] = (byte) (i >>> 24);
-        data[length++] = (byte) (i >>> 16);
-        data[length++] = (byte) (i >>> 8);
-        data[length++] = (byte) i;
-        i = (int) l;
-        data[length++] = (byte) (i >>> 24);
-        data[length++] = (byte) (i >>> 16);
-        data[length++] = (byte) (i >>> 8);
-        data[length++] = (byte) i;
-        this.length = length;
-        return this;
-    }
-
-    /**
-     * Puts an UTF8 string into this byte vector. The byte vector is
-     * automatically enlarged if necessary.
-     * 
-     * @param s
-     *            a String.
-     * @return this byte vector.
-     */
-    public ByteVector putUTF8(final String s) {
-        int charLength = s.length();
-        int len = length;
-        if (len + 2 + charLength > data.length) {
-            enlarge(2 + charLength);
-        }
-        byte[] data = this.data;
-        // optimistic algorithm: instead of computing the byte length and then
-        // serializing the string (which requires two loops), we assume the byte
-        // length is equal to char length (which is the most frequent case), and
-        // we start serializing the string right away. During the serialization,
-        // if we find that this assumption is wrong, we continue with the
-        // general method.
-        data[len++] = (byte) (charLength >>> 8);
-        data[len++] = (byte) charLength;
-        for (int i = 0; i < charLength; ++i) {
-            char c = s.charAt(i);
-            if (c >= '\001' && c <= '\177') {
-                data[len++] = (byte) c;
-            } else {
-                int byteLength = i;
-                for (int j = i; j < charLength; ++j) {
-                    c = s.charAt(j);
-                    if (c >= '\001' && c <= '\177') {
-                        byteLength++;
-                    } else if (c > '\u07FF') {
-                        byteLength += 3;
-                    } else {
-                        byteLength += 2;
-                    }
-                }
-                data[length] = (byte) (byteLength >>> 8);
-                data[length + 1] = (byte) byteLength;
-                if (length + 2 + byteLength > data.length) {
-                    length = len;
-                    enlarge(2 + byteLength);
-                    data = this.data;
-                }
-                for (int j = i; j < charLength; ++j) {
-                    c = s.charAt(j);
-                    if (c >= '\001' && c <= '\177') {
-                        data[len++] = (byte) c;
-                    } else if (c > '\u07FF') {
-                        data[len++] = (byte) (0xE0 | c >> 12 & 0xF);
-                        data[len++] = (byte) (0x80 | c >> 6 & 0x3F);
-                        data[len++] = (byte) (0x80 | c & 0x3F);
-                    } else {
-                        data[len++] = (byte) (0xC0 | c >> 6 & 0x1F);
-                        data[len++] = (byte) (0x80 | c & 0x3F);
-                    }
-                }
-                break;
-            }
-        }
-        length = len;
-        return this;
-    }
-
-    /**
-     * Puts an array of bytes into this byte vector. The byte vector is
-     * automatically enlarged if necessary.
-     * 
-     * @param b
-     *            an array of bytes. May be <tt>null</tt> to put <tt>len</tt>
-     *            null bytes into this byte vector.
-     * @param off
-     *            index of the fist byte of b that must be copied.
-     * @param len
-     *            number of bytes of b that must be copied.
-     * @return this byte vector.
-     */
-    public ByteVector putByteArray(final byte[] b, final int off, final int len) {
-        if (length + len > data.length) {
-            enlarge(len);
-        }
-        if (b != null) {
-            System.arraycopy(b, off, data, length, len);
-        }
-        length += len;
-        return this;
-    }
-
-    /**
-     * Enlarge this byte vector so that it can receive n more bytes.
-     * 
-     * @param size
-     *            number of additional bytes that this byte vector should be
-     *            able to receive.
-     */
-    private void enlarge(final int size) {
-        int length1 = 2 * data.length;
-        int length2 = length + size;
-        byte[] newData = new byte[length1 > length2 ? length1 : length2];
-        System.arraycopy(data, 0, newData, 0, length);
-        data = newData;
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ClassReader.java b/asm4/src/org/objectweb/asm/ClassReader.java
deleted file mode 100644
index 0f0dd89..0000000
--- a/asm4/src/org/objectweb/asm/ClassReader.java
+++ /dev/null
@@ -1,2202 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A Java class parser to make a {@link ClassVisitor} visit an existing class.
- * This class parses a byte array conforming to the Java class file format and
- * calls the appropriate visit methods of a given class visitor for each field,
- * method and bytecode instruction encountered.
- * 
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ClassReader {
-
-    /**
-     * True to enable signatures support.
-     */
-    static final boolean SIGNATURES = true;
-
-    /**
-     * True to enable annotations support.
-     */
-    static final boolean ANNOTATIONS = true;
-
-    /**
-     * True to enable stack map frames support.
-     */
-    static final boolean FRAMES = true;
-
-    /**
-     * True to enable bytecode writing support.
-     */
-    static final boolean WRITER = true;
-
-    /**
-     * True to enable JSR_W and GOTO_W support.
-     */
-    static final boolean RESIZE = true;
-
-    /**
-     * Flag to skip method code. If this class is set <code>CODE</code>
-     * attribute won't be visited. This can be used, for example, to retrieve
-     * annotations for methods and method parameters.
-     */
-    public static final int SKIP_CODE = 1;
-
-    /**
-     * Flag to skip the debug information in the class. If this flag is set the
-     * debug information of the class is not visited, i.e. the
-     * {@link MethodVisitor#visitLocalVariable visitLocalVariable} and
-     * {@link MethodVisitor#visitLineNumber visitLineNumber} methods will not be
-     * called.
-     */
-    public static final int SKIP_DEBUG = 2;
-
-    /**
-     * Flag to skip the stack map frames in the class. If this flag is set the
-     * stack map frames of the class is not visited, i.e. the
-     * {@link MethodVisitor#visitFrame visitFrame} method will not be called.
-     * This flag is useful when the {@link ClassWriter#COMPUTE_FRAMES} option is
-     * used: it avoids visiting frames that will be ignored and recomputed from
-     * scratch in the class writer.
-     */
-    public static final int SKIP_FRAMES = 4;
-
-    /**
-     * Flag to expand the stack map frames. By default stack map frames are
-     * visited in their original format (i.e. "expanded" for classes whose
-     * version is less than V1_6, and "compressed" for the other classes). If
-     * this flag is set, stack map frames are always visited in expanded format
-     * (this option adds a decompression/recompression step in ClassReader and
-     * ClassWriter which degrades performances quite a lot).
-     */
-    public static final int EXPAND_FRAMES = 8;
-
-    /**
-     * The class to be parsed. <i>The content of this array must not be
-     * modified. This field is intended for {@link Attribute} sub classes, and
-     * is normally not needed by class generators or adapters.</i>
-     */
-    public final byte[] b;
-
-    /**
-     * The start index of each constant pool item in {@link #b b}, plus one. The
-     * one byte offset skips the constant pool item tag that indicates its type.
-     */
-    private final int[] items;
-
-    /**
-     * The String objects corresponding to the CONSTANT_Utf8 items. This cache
-     * avoids multiple parsing of a given CONSTANT_Utf8 constant pool item,
-     * which GREATLY improves performances (by a factor 2 to 3). This caching
-     * strategy could be extended to all constant pool items, but its benefit
-     * would not be so great for these items (because they are much less
-     * expensive to parse than CONSTANT_Utf8 items).
-     */
-    private final String[] strings;
-
-    /**
-     * Maximum length of the strings contained in the constant pool of the
-     * class.
-     */
-    private final int maxStringLength;
-
-    /**
-     * Start index of the class header information (access, name...) in
-     * {@link #b b}.
-     */
-    public final int header;
-
-    // ------------------------------------------------------------------------
-    // Constructors
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param b
-     *            the bytecode of the class to be read.
-     */
-    public ClassReader(final byte[] b) {
-        this(b, 0, b.length);
-    }
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param b
-     *            the bytecode of the class to be read.
-     * @param off
-     *            the start offset of the class data.
-     * @param len
-     *            the length of the class data.
-     */
-    public ClassReader(final byte[] b, final int off, final int len) {
-        this.b = b;
-        // checks the class version
-        if (readShort(off + 6) > Opcodes.V1_7) {
-            throw new IllegalArgumentException();
-        }
-        // parses the constant pool
-        items = new int[readUnsignedShort(off + 8)];
-        int n = items.length;
-        strings = new String[n];
-        int max = 0;
-        int index = off + 10;
-        for (int i = 1; i < n; ++i) {
-            items[i] = index + 1;
-            int size;
-            switch (b[index]) {
-            case ClassWriter.FIELD:
-            case ClassWriter.METH:
-            case ClassWriter.IMETH:
-            case ClassWriter.INT:
-            case ClassWriter.FLOAT:
-            case ClassWriter.NAME_TYPE:
-            case ClassWriter.INDY:
-                size = 5;
-                break;
-            case ClassWriter.LONG:
-            case ClassWriter.DOUBLE:
-                size = 9;
-                ++i;
-                break;
-            case ClassWriter.UTF8:
-                size = 3 + readUnsignedShort(index + 1);
-                if (size > max) {
-                    max = size;
-                }
-                break;
-            case ClassWriter.HANDLE:
-                size = 4;
-                break;
-            // case ClassWriter.CLASS:
-            // case ClassWriter.STR:
-            // case ClassWriter.MTYPE
-            default:
-                size = 3;
-                break;
-            }
-            index += size;
-        }
-        maxStringLength = max;
-        // the class header information starts just after the constant pool
-        header = index;
-    }
-
-    /**
-     * Returns the class's access flags (see {@link Opcodes}). This value may
-     * not reflect Deprecated and Synthetic flags when bytecode is before 1.5
-     * and those flags are represented by attributes.
-     * 
-     * @return the class access flags
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public int getAccess() {
-        return readUnsignedShort(header);
-    }
-
-    /**
-     * Returns the internal name of the class (see
-     * {@link Type#getInternalName() getInternalName}).
-     * 
-     * @return the internal class name
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public String getClassName() {
-        return readClass(header + 2, new char[maxStringLength]);
-    }
-
-    /**
-     * Returns the internal of name of the super class (see
-     * {@link Type#getInternalName() getInternalName}). For interfaces, the
-     * super class is {@link Object}.
-     * 
-     * @return the internal name of super class, or <tt>null</tt> for
-     *         {@link Object} class.
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public String getSuperName() {
-        return readClass(header + 4, new char[maxStringLength]);
-    }
-
-    /**
-     * Returns the internal names of the class's interfaces (see
-     * {@link Type#getInternalName() getInternalName}).
-     * 
-     * @return the array of internal names for all implemented interfaces or
-     *         <tt>null</tt>.
-     * 
-     * @see ClassVisitor#visit(int, int, String, String, String, String[])
-     */
-    public String[] getInterfaces() {
-        int index = header + 6;
-        int n = readUnsignedShort(index);
-        String[] interfaces = new String[n];
-        if (n > 0) {
-            char[] buf = new char[maxStringLength];
-            for (int i = 0; i < n; ++i) {
-                index += 2;
-                interfaces[i] = readClass(index, buf);
-            }
-        }
-        return interfaces;
-    }
-
-    /**
-     * Copies the constant pool data into the given {@link ClassWriter}. Should
-     * be called before the {@link #accept(ClassVisitor,int)} method.
-     * 
-     * @param classWriter
-     *            the {@link ClassWriter} to copy constant pool into.
-     */
-    void copyPool(final ClassWriter classWriter) {
-        char[] buf = new char[maxStringLength];
-        int ll = items.length;
-        Item[] items2 = new Item[ll];
-        for (int i = 1; i < ll; i++) {
-            int index = items[i];
-            int tag = b[index - 1];
-            Item item = new Item(i);
-            int nameType;
-            switch (tag) {
-            case ClassWriter.FIELD:
-            case ClassWriter.METH:
-            case ClassWriter.IMETH:
-                nameType = items[readUnsignedShort(index + 2)];
-                item.set(tag, readClass(index, buf), readUTF8(nameType, buf),
-                        readUTF8(nameType + 2, buf));
-                break;
-            case ClassWriter.INT:
-                item.set(readInt(index));
-                break;
-            case ClassWriter.FLOAT:
-                item.set(Float.intBitsToFloat(readInt(index)));
-                break;
-            case ClassWriter.NAME_TYPE:
-                item.set(tag, readUTF8(index, buf), readUTF8(index + 2, buf),
-                        null);
-                break;
-            case ClassWriter.LONG:
-                item.set(readLong(index));
-                ++i;
-                break;
-            case ClassWriter.DOUBLE:
-                item.set(Double.longBitsToDouble(readLong(index)));
-                ++i;
-                break;
-            case ClassWriter.UTF8: {
-                String s = strings[i];
-                if (s == null) {
-                    index = items[i];
-                    s = strings[i] = readUTF(index + 2,
-                            readUnsignedShort(index), buf);
-                }
-                item.set(tag, s, null, null);
-                break;
-            }
-            case ClassWriter.HANDLE: {
-                int fieldOrMethodRef = items[readUnsignedShort(index + 1)];
-                nameType = items[readUnsignedShort(fieldOrMethodRef + 2)];
-                item.set(ClassWriter.HANDLE_BASE + readByte(index),
-                        readClass(fieldOrMethodRef, buf),
-                        readUTF8(nameType, buf), readUTF8(nameType + 2, buf));
-                break;
-            }
-            case ClassWriter.INDY:
-                if (classWriter.bootstrapMethods == null) {
-                    copyBootstrapMethods(classWriter, items2, buf);
-                }
-                nameType = items[readUnsignedShort(index + 2)];
-                item.set(readUTF8(nameType, buf), readUTF8(nameType + 2, buf),
-                        readUnsignedShort(index));
-                break;
-            // case ClassWriter.STR:
-            // case ClassWriter.CLASS:
-            // case ClassWriter.MTYPE
-            default:
-                item.set(tag, readUTF8(index, buf), null, null);
-                break;
-            }
-
-            int index2 = item.hashCode % items2.length;
-            item.next = items2[index2];
-            items2[index2] = item;
-        }
-
-        int off = items[1] - 1;
-        classWriter.pool.putByteArray(b, off, header - off);
-        classWriter.items = items2;
-        classWriter.threshold = (int) (0.75d * ll);
-        classWriter.index = ll;
-    }
-
-    /**
-     * Copies the bootstrap method data into the given {@link ClassWriter}.
-     * Should be called before the {@link #accept(ClassVisitor,int)} method.
-     * 
-     * @param classWriter
-     *            the {@link ClassWriter} to copy bootstrap methods into.
-     */
-    private void copyBootstrapMethods(final ClassWriter classWriter,
-            final Item[] items, final char[] c) {
-        // finds the "BootstrapMethods" attribute
-        int u = getAttributes();
-        boolean found = false;
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            if ("BootstrapMethods".equals(attrName)) {
-                found = true;
-                break;
-            }
-            u += 6 + readInt(u + 4);
-        }
-        if (!found) {
-            return;
-        }
-        // copies the bootstrap methods in the class writer
-        int boostrapMethodCount = readUnsignedShort(u + 8);
-        for (int j = 0, v = u + 10; j < boostrapMethodCount; j++) {
-            int position = v - u - 10;
-            int hashCode = readConst(readUnsignedShort(v), c).hashCode();
-            for (int k = readUnsignedShort(v + 2); k > 0; --k) {
-                hashCode ^= readConst(readUnsignedShort(v + 4), c).hashCode();
-                v += 2;
-            }
-            v += 4;
-            Item item = new Item(j);
-            item.set(position, hashCode & 0x7FFFFFFF);
-            int index = item.hashCode % items.length;
-            item.next = items[index];
-            items[index] = item;
-        }
-        int attrSize = readInt(u + 4);
-        ByteVector bootstrapMethods = new ByteVector(attrSize + 62);
-        bootstrapMethods.putByteArray(b, u + 10, attrSize - 2);
-        classWriter.bootstrapMethodsCount = boostrapMethodCount;
-        classWriter.bootstrapMethods = bootstrapMethods;
-    }
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param is
-     *            an input stream from which to read the class.
-     * @throws IOException
-     *             if a problem occurs during reading.
-     */
-    public ClassReader(final InputStream is) throws IOException {
-        this(readClass(is, false));
-    }
-
-    /**
-     * Constructs a new {@link ClassReader} object.
-     * 
-     * @param name
-     *            the binary qualified name of the class to be read.
-     * @throws IOException
-     *             if an exception occurs during reading.
-     */
-    public ClassReader(final String name) throws IOException {
-        this(readClass(
-                ClassLoader.getSystemResourceAsStream(name.replace('.', '/')
-                        + ".class"), true));
-    }
-
-    /**
-     * Reads the bytecode of a class.
-     * 
-     * @param is
-     *            an input stream from which to read the class.
-     * @param close
-     *            true to close the input stream after reading.
-     * @return the bytecode read from the given input stream.
-     * @throws IOException
-     *             if a problem occurs during reading.
-     */
-    private static byte[] readClass(final InputStream is, boolean close)
-            throws IOException {
-        if (is == null) {
-            throw new IOException("Class not found");
-        }
-        try {
-            byte[] b = new byte[is.available()];
-            int len = 0;
-            while (true) {
-                int n = is.read(b, len, b.length - len);
-                if (n == -1) {
-                    if (len < b.length) {
-                        byte[] c = new byte[len];
-                        System.arraycopy(b, 0, c, 0, len);
-                        b = c;
-                    }
-                    return b;
-                }
-                len += n;
-                if (len == b.length) {
-                    int last = is.read();
-                    if (last < 0) {
-                        return b;
-                    }
-                    byte[] c = new byte[b.length + 1000];
-                    System.arraycopy(b, 0, c, 0, len);
-                    c[len++] = (byte) last;
-                    b = c;
-                }
-            }
-        } finally {
-            if (close) {
-                is.close();
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------------
-    // Public methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Makes the given visitor visit the Java class of this {@link ClassReader}
-     * . This class is the one specified in the constructor (see
-     * {@link #ClassReader(byte[]) ClassReader}).
-     * 
-     * @param classVisitor
-     *            the visitor that must visit this class.
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES}
-     *            , {@link #SKIP_FRAMES}, {@link #SKIP_CODE}.
-     */
-    public void accept(final ClassVisitor classVisitor, final int flags) {
-        accept(classVisitor, new Attribute[0], flags);
-    }
-
-    /**
-     * Makes the given visitor visit the Java class of this {@link ClassReader}.
-     * This class is the one specified in the constructor (see
-     * {@link #ClassReader(byte[]) ClassReader}).
-     * 
-     * @param classVisitor
-     *            the visitor that must visit this class.
-     * @param attrs
-     *            prototypes of the attributes that must be parsed during the
-     *            visit of the class. Any attribute whose type is not equal to
-     *            the type of one the prototypes will not be parsed: its byte
-     *            array value will be passed unchanged to the ClassWriter.
-     *            <i>This may corrupt it if this value contains references to
-     *            the constant pool, or has syntactic or semantic links with a
-     *            class element that has been transformed by a class adapter
-     *            between the reader and the writer</i>.
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES}
-     *            , {@link #SKIP_FRAMES}, {@link #SKIP_CODE}.
-     */
-    public void accept(final ClassVisitor classVisitor,
-            final Attribute[] attrs, final int flags) {
-        int u = header; // current offset in the class file
-        char[] c = new char[maxStringLength]; // buffer used to read strings
-
-        Context context = new Context();
-        context.attrs = attrs;
-        context.flags = flags;
-        context.buffer = c;
-
-        // reads the class declaration
-        int access = readUnsignedShort(u);
-        String name = readClass(u + 2, c);
-        String superClass = readClass(u + 4, c);
-        String[] interfaces = new String[readUnsignedShort(u + 6)];
-        u += 8;
-        for (int i = 0; i < interfaces.length; ++i) {
-            interfaces[i] = readClass(u, c);
-            u += 2;
-        }
-
-        // reads the class attributes
-        String signature = null;
-        String sourceFile = null;
-        String sourceDebug = null;
-        String enclosingOwner = null;
-        String enclosingName = null;
-        String enclosingDesc = null;
-        int anns = 0;
-        int ianns = 0;
-        int innerClasses = 0;
-        Attribute attributes = null;
-
-        u = getAttributes();
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            // tests are sorted in decreasing frequency order
-            // (based on frequencies observed on typical classes)
-            if ("SourceFile".equals(attrName)) {
-                sourceFile = readUTF8(u + 8, c);
-            } else if ("InnerClasses".equals(attrName)) {
-                innerClasses = u + 8;
-            } else if ("EnclosingMethod".equals(attrName)) {
-                enclosingOwner = readClass(u + 8, c);
-                int item = readUnsignedShort(u + 10);
-                if (item != 0) {
-                    enclosingName = readUTF8(items[item], c);
-                    enclosingDesc = readUTF8(items[item] + 2, c);
-                }
-            } else if (SIGNATURES && "Signature".equals(attrName)) {
-                signature = readUTF8(u + 8, c);
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleAnnotations".equals(attrName)) {
-                anns = u + 8;
-            } else if ("Deprecated".equals(attrName)) {
-                access |= Opcodes.ACC_DEPRECATED;
-            } else if ("Synthetic".equals(attrName)) {
-                access |= Opcodes.ACC_SYNTHETIC
-                        | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
-            } else if ("SourceDebugExtension".equals(attrName)) {
-                int len = readInt(u + 4);
-                sourceDebug = readUTF(u + 8, len, new char[len]);
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleAnnotations".equals(attrName)) {
-                ianns = u + 8;
-            } else if ("BootstrapMethods".equals(attrName)) {
-                int[] bootstrapMethods = new int[readUnsignedShort(u + 8)];
-                for (int j = 0, v = u + 10; j < bootstrapMethods.length; j++) {
-                    bootstrapMethods[j] = v;
-                    v += 2 + readUnsignedShort(v + 2) << 1;
-                }
-                context.bootstrapMethods = bootstrapMethods;
-            } else {
-                Attribute attr = readAttribute(attrs, attrName, u + 8,
-                        readInt(u + 4), c, -1, null);
-                if (attr != null) {
-                    attr.next = attributes;
-                    attributes = attr;
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-
-        // visits the class declaration
-        classVisitor.visit(readInt(items[1] - 7), access, name, signature,
-                superClass, interfaces);
-
-        // visits the source and debug info
-        if ((flags & SKIP_DEBUG) == 0
-                && (sourceFile != null || sourceDebug != null)) {
-            classVisitor.visitSource(sourceFile, sourceDebug);
-        }
-
-        // visits the outer class
-        if (enclosingOwner != null) {
-            classVisitor.visitOuterClass(enclosingOwner, enclosingName,
-                    enclosingDesc);
-        }
-
-        // visits the class annotations
-        if (ANNOTATIONS && anns != 0) {
-            for (int i = readUnsignedShort(anns), v = anns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        classVisitor.visitAnnotation(readUTF8(v, c), true));
-            }
-        }
-        if (ANNOTATIONS && ianns != 0) {
-            for (int i = readUnsignedShort(ianns), v = ianns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        classVisitor.visitAnnotation(readUTF8(v, c), false));
-            }
-        }
-
-        // visits the attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            classVisitor.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the inner classes
-        if (innerClasses != 0) {
-            int v = innerClasses + 2;
-            for (int i = readUnsignedShort(innerClasses); i > 0; --i) {
-                classVisitor.visitInnerClass(readClass(v, c),
-                        readClass(v + 2, c), readUTF8(v + 4, c),
-                        readUnsignedShort(v + 6));
-                v += 8;
-            }
-        }
-
-        // visits the fields and methods
-        u = header + 10 + 2 * interfaces.length;
-        for (int i = readUnsignedShort(u - 2); i > 0; --i) {
-            u = readField(classVisitor, context, u);
-        }
-        u += 2;
-        for (int i = readUnsignedShort(u - 2); i > 0; --i) {
-            u = readMethod(classVisitor, context, u);
-        }
-
-        // visits the end of the class
-        classVisitor.visitEnd();
-    }
-
-    /**
-     * Reads a field and makes the given visitor visit it.
-     * 
-     * @param classVisitor
-     *            the visitor that must visit the field.
-     * @param context
-     *            information about the class being parsed.
-     * @param u
-     *            the start offset of the field in the class file.
-     * @return the offset of the first byte following the field in the class.
-     */
-    private int readField(final ClassVisitor classVisitor,
-            final Context context, int u) {
-        // reads the field declaration
-        char[] c = context.buffer;
-        int access = readUnsignedShort(u);
-        String name = readUTF8(u + 2, c);
-        String desc = readUTF8(u + 4, c);
-        u += 6;
-
-        // reads the field attributes
-        String signature = null;
-        int anns = 0;
-        int ianns = 0;
-        Object value = null;
-        Attribute attributes = null;
-
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            // tests are sorted in decreasing frequency order
-            // (based on frequencies observed on typical classes)
-            if ("ConstantValue".equals(attrName)) {
-                int item = readUnsignedShort(u + 8);
-                value = item == 0 ? null : readConst(item, c);
-            } else if (SIGNATURES && "Signature".equals(attrName)) {
-                signature = readUTF8(u + 8, c);
-            } else if ("Deprecated".equals(attrName)) {
-                access |= Opcodes.ACC_DEPRECATED;
-            } else if ("Synthetic".equals(attrName)) {
-                access |= Opcodes.ACC_SYNTHETIC
-                        | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleAnnotations".equals(attrName)) {
-                anns = u + 8;
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleAnnotations".equals(attrName)) {
-                ianns = u + 8;
-            } else {
-                Attribute attr = readAttribute(context.attrs, attrName, u + 8,
-                        readInt(u + 4), c, -1, null);
-                if (attr != null) {
-                    attr.next = attributes;
-                    attributes = attr;
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-        u += 2;
-
-        // visits the field declaration
-        FieldVisitor fv = classVisitor.visitField(access, name, desc,
-                signature, value);
-        if (fv == null) {
-            return u;
-        }
-
-        // visits the field annotations
-        if (ANNOTATIONS && anns != 0) {
-            for (int i = readUnsignedShort(anns), v = anns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        fv.visitAnnotation(readUTF8(v, c), true));
-            }
-        }
-        if (ANNOTATIONS && ianns != 0) {
-            for (int i = readUnsignedShort(ianns), v = ianns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        fv.visitAnnotation(readUTF8(v, c), false));
-            }
-        }
-
-        // visits the field attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            fv.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the end of the field
-        fv.visitEnd();
-
-        return u;
-    }
-
-    /**
-     * Reads a method and makes the given visitor visit it.
-     * 
-     * @param classVisitor
-     *            the visitor that must visit the method.
-     * @param context
-     *            information about the class being parsed.
-     * @param u
-     *            the start offset of the method in the class file.
-     * @return the offset of the first byte following the method in the class.
-     */
-    private int readMethod(final ClassVisitor classVisitor,
-            final Context context, int u) {
-        // reads the method declaration
-        char[] c = context.buffer;
-        int access = readUnsignedShort(u);
-        String name = readUTF8(u + 2, c);
-        String desc = readUTF8(u + 4, c);
-        u += 6;
-
-        // reads the method attributes
-        int code = 0;
-        int exception = 0;
-        String[] exceptions = null;
-        String signature = null;
-        int anns = 0;
-        int ianns = 0;
-        int dann = 0;
-        int mpanns = 0;
-        int impanns = 0;
-        int firstAttribute = u;
-        Attribute attributes = null;
-
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            // tests are sorted in decreasing frequency order
-            // (based on frequencies observed on typical classes)
-            if ("Code".equals(attrName)) {
-                if ((context.flags & SKIP_CODE) == 0) {
-                    code = u + 8;
-                }
-            } else if ("Exceptions".equals(attrName)) {
-                exceptions = new String[readUnsignedShort(u + 8)];
-                exception = u + 10;
-                for (int j = 0; j < exceptions.length; ++j) {
-                    exceptions[j] = readClass(exception, c);
-                    exception += 2;
-                }
-            } else if (SIGNATURES && "Signature".equals(attrName)) {
-                signature = readUTF8(u + 8, c);
-            } else if ("Deprecated".equals(attrName)) {
-                access |= Opcodes.ACC_DEPRECATED;
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleAnnotations".equals(attrName)) {
-                anns = u + 8;
-            } else if (ANNOTATIONS && "AnnotationDefault".equals(attrName)) {
-                dann = u + 8;
-            } else if ("Synthetic".equals(attrName)) {
-                access |= Opcodes.ACC_SYNTHETIC
-                        | ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleAnnotations".equals(attrName)) {
-                ianns = u + 8;
-            } else if (ANNOTATIONS
-                    && "RuntimeVisibleParameterAnnotations".equals(attrName)) {
-                mpanns = u + 8;
-            } else if (ANNOTATIONS
-                    && "RuntimeInvisibleParameterAnnotations".equals(attrName)) {
-                impanns = u + 8;
-            } else {
-                Attribute attr = readAttribute(context.attrs, attrName, u + 8,
-                        readInt(u + 4), c, -1, null);
-                if (attr != null) {
-                    attr.next = attributes;
-                    attributes = attr;
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-        u += 2;
-
-        // visits the method declaration
-        MethodVisitor mv = classVisitor.visitMethod(access, name, desc,
-                signature, exceptions);
-        if (mv == null) {
-            return u;
-        }
-
-        /*
-         * if the returned MethodVisitor is in fact a MethodWriter, it means
-         * there is no method adapter between the reader and the writer. If, in
-         * addition, the writer's constant pool was copied from this reader
-         * (mw.cw.cr == this), and the signature and exceptions of the method
-         * have not been changed, then it is possible to skip all visit events
-         * and just copy the original code of the method to the writer (the
-         * access, name and descriptor can have been changed, this is not
-         * important since they are not copied as is from the reader).
-         */
-        if (WRITER && mv instanceof MethodWriter) {
-            MethodWriter mw = (MethodWriter) mv;
-            if (mw.cw.cr == this && signature == mw.signature) {
-                boolean sameExceptions = false;
-                if (exceptions == null) {
-                    sameExceptions = mw.exceptionCount == 0;
-                } else if (exceptions.length == mw.exceptionCount) {
-                    sameExceptions = true;
-                    for (int j = exceptions.length - 1; j >= 0; --j) {
-                        exception -= 2;
-                        if (mw.exceptions[j] != readUnsignedShort(exception)) {
-                            sameExceptions = false;
-                            break;
-                        }
-                    }
-                }
-                if (sameExceptions) {
-                    /*
-                     * we do not copy directly the code into MethodWriter to
-                     * save a byte array copy operation. The real copy will be
-                     * done in ClassWriter.toByteArray().
-                     */
-                    mw.classReaderOffset = firstAttribute;
-                    mw.classReaderLength = u - firstAttribute;
-                    return u;
-                }
-            }
-        }
-
-        // visits the method annotations
-        if (ANNOTATIONS && dann != 0) {
-            AnnotationVisitor dv = mv.visitAnnotationDefault();
-            readAnnotationValue(dann, c, null, dv);
-            if (dv != null) {
-                dv.visitEnd();
-            }
-        }
-        if (ANNOTATIONS && anns != 0) {
-            for (int i = readUnsignedShort(anns), v = anns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        mv.visitAnnotation(readUTF8(v, c), true));
-            }
-        }
-        if (ANNOTATIONS && ianns != 0) {
-            for (int i = readUnsignedShort(ianns), v = ianns + 2; i > 0; --i) {
-                v = readAnnotationValues(v + 2, c, true,
-                        mv.visitAnnotation(readUTF8(v, c), false));
-            }
-        }
-        if (ANNOTATIONS && mpanns != 0) {
-            readParameterAnnotations(mpanns, desc, c, true, mv);
-        }
-        if (ANNOTATIONS && impanns != 0) {
-            readParameterAnnotations(impanns, desc, c, false, mv);
-        }
-
-        // visits the method attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            mv.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the method code
-        if (code != 0) {
-            context.access = access;
-            context.name = name;
-            context.desc = desc;
-            mv.visitCode();
-            readCode(mv, context, code);
-        }
-
-        // visits the end of the method
-        mv.visitEnd();
-
-        return u;
-    }
-
-    /**
-     * Reads the bytecode of a method and makes the given visitor visit it.
-     * 
-     * @param mv
-     *            the visitor that must visit the method's code.
-     * @param context
-     *            information about the class being parsed.
-     * @param u
-     *            the start offset of the code attribute in the class file.
-     */
-    private void readCode(final MethodVisitor mv, final Context context, int u) {
-        // reads the header
-        byte[] b = this.b;
-        char[] c = context.buffer;
-        int maxStack = readUnsignedShort(u);
-        int maxLocals = readUnsignedShort(u + 2);
-        int codeLength = readInt(u + 4);
-        u += 8;
-
-        // reads the bytecode to find the labels
-        int codeStart = u;
-        int codeEnd = u + codeLength;
-        Label[] labels = new Label[codeLength + 2];
-        readLabel(codeLength + 1, labels);
-        while (u < codeEnd) {
-            int offset = u - codeStart;
-            int opcode = b[u] & 0xFF;
-            switch (ClassWriter.TYPE[opcode]) {
-            case ClassWriter.NOARG_INSN:
-            case ClassWriter.IMPLVAR_INSN:
-                u += 1;
-                break;
-            case ClassWriter.LABEL_INSN:
-                readLabel(offset + readShort(u + 1), labels);
-                u += 3;
-                break;
-            case ClassWriter.LABELW_INSN:
-                readLabel(offset + readInt(u + 1), labels);
-                u += 5;
-                break;
-            case ClassWriter.WIDE_INSN:
-                opcode = b[u + 1] & 0xFF;
-                if (opcode == Opcodes.IINC) {
-                    u += 6;
-                } else {
-                    u += 4;
-                }
-                break;
-            case ClassWriter.TABL_INSN:
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                readLabel(offset + readInt(u), labels);
-                for (int i = readInt(u + 8) - readInt(u + 4) + 1; i > 0; --i) {
-                    readLabel(offset + readInt(u + 12), labels);
-                    u += 4;
-                }
-                u += 12;
-                break;
-            case ClassWriter.LOOK_INSN:
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                readLabel(offset + readInt(u), labels);
-                for (int i = readInt(u + 4); i > 0; --i) {
-                    readLabel(offset + readInt(u + 12), labels);
-                    u += 8;
-                }
-                u += 8;
-                break;
-            case ClassWriter.VAR_INSN:
-            case ClassWriter.SBYTE_INSN:
-            case ClassWriter.LDC_INSN:
-                u += 2;
-                break;
-            case ClassWriter.SHORT_INSN:
-            case ClassWriter.LDCW_INSN:
-            case ClassWriter.FIELDORMETH_INSN:
-            case ClassWriter.TYPE_INSN:
-            case ClassWriter.IINC_INSN:
-                u += 3;
-                break;
-            case ClassWriter.ITFMETH_INSN:
-            case ClassWriter.INDYMETH_INSN:
-                u += 5;
-                break;
-            // case MANA_INSN:
-            default:
-                u += 4;
-                break;
-            }
-        }
-
-        // reads the try catch entries to find the labels, and also visits them
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            Label start = readLabel(readUnsignedShort(u + 2), labels);
-            Label end = readLabel(readUnsignedShort(u + 4), labels);
-            Label handler = readLabel(readUnsignedShort(u + 6), labels);
-            String type = readUTF8(items[readUnsignedShort(u + 8)], c);
-            mv.visitTryCatchBlock(start, end, handler, type);
-            u += 8;
-        }
-        u += 2;
-
-        // reads the code attributes
-        int varTable = 0;
-        int varTypeTable = 0;
-        boolean zip = true;
-        boolean unzip = (context.flags & EXPAND_FRAMES) != 0;
-        int stackMap = 0;
-        int stackMapSize = 0;
-        int frameCount = 0;
-        Context frame = null;
-        Attribute attributes = null;
-
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            String attrName = readUTF8(u + 2, c);
-            if ("LocalVariableTable".equals(attrName)) {
-                if ((context.flags & SKIP_DEBUG) == 0) {
-                    varTable = u + 8;
-                    for (int j = readUnsignedShort(u + 8), v = u; j > 0; --j) {
-                        int label = readUnsignedShort(v + 10);
-                        if (labels[label] == null) {
-                            readLabel(label, labels).status |= Label.DEBUG;
-                        }
-                        label += readUnsignedShort(v + 12);
-                        if (labels[label] == null) {
-                            readLabel(label, labels).status |= Label.DEBUG;
-                        }
-                        v += 10;
-                    }
-                }
-            } else if ("LocalVariableTypeTable".equals(attrName)) {
-                varTypeTable = u + 8;
-            } else if ("LineNumberTable".equals(attrName)) {
-                if ((context.flags & SKIP_DEBUG) == 0) {
-                    for (int j = readUnsignedShort(u + 8), v = u; j > 0; --j) {
-                        int label = readUnsignedShort(v + 10);
-                        if (labels[label] == null) {
-                            readLabel(label, labels).status |= Label.DEBUG;
-                        }
-                        labels[label].line = readUnsignedShort(v + 12);
-                        v += 4;
-                    }
-                }
-            } else if (FRAMES && "StackMapTable".equals(attrName)) {
-                if ((context.flags & SKIP_FRAMES) == 0) {
-                    stackMap = u + 10;
-                    stackMapSize = readInt(u + 4);
-                    frameCount = readUnsignedShort(u + 8);
-                }
-                /*
-                 * here we do not extract the labels corresponding to the
-                 * attribute content. This would require a full parsing of the
-                 * attribute, which would need to be repeated in the second
-                 * phase (see below). Instead the content of the attribute is
-                 * read one frame at a time (i.e. after a frame has been
-                 * visited, the next frame is read), and the labels it contains
-                 * are also extracted one frame at a time. Thanks to the
-                 * ordering of frames, having only a "one frame lookahead" is
-                 * not a problem, i.e. it is not possible to see an offset
-                 * smaller than the offset of the current insn and for which no
-                 * Label exist.
-                 */
-                /*
-                 * This is not true for UNINITIALIZED type offsets. We solve
-                 * this by parsing the stack map table without a full decoding
-                 * (see below).
-                 */
-            } else if (FRAMES && "StackMap".equals(attrName)) {
-                if ((context.flags & SKIP_FRAMES) == 0) {
-                    zip = false;
-                    stackMap = u + 10;
-                    stackMapSize = readInt(u + 4);
-                    frameCount = readUnsignedShort(u + 8);
-                }
-                /*
-                 * IMPORTANT! here we assume that the frames are ordered, as in
-                 * the StackMapTable attribute, although this is not guaranteed
-                 * by the attribute format.
-                 */
-            } else {
-                for (int j = 0; j < context.attrs.length; ++j) {
-                    if (context.attrs[j].type.equals(attrName)) {
-                        Attribute attr = context.attrs[j].read(this, u + 8,
-                                readInt(u + 4), c, codeStart - 8, labels);
-                        if (attr != null) {
-                            attr.next = attributes;
-                            attributes = attr;
-                        }
-                    }
-                }
-            }
-            u += 6 + readInt(u + 4);
-        }
-        u += 2;
-
-        // generates the first (implicit) stack map frame
-        if (FRAMES && stackMap != 0) {
-            /*
-             * for the first explicit frame the offset is not offset_delta + 1
-             * but only offset_delta; setting the implicit frame offset to -1
-             * allow the use of the "offset_delta + 1" rule in all cases
-             */
-            frame = context;
-            frame.offset = -1;
-            frame.mode = 0;
-            frame.localCount = 0;
-            frame.localDiff = 0;
-            frame.stackCount = 0;
-            frame.local = new Object[maxLocals];
-            frame.stack = new Object[maxStack];
-            if (unzip) {
-                getImplicitFrame(context);
-            }
-            /*
-             * Finds labels for UNINITIALIZED frame types. Instead of decoding
-             * each element of the stack map table, we look for 3 consecutive
-             * bytes that "look like" an UNINITIALIZED type (tag 8, offset
-             * within code bounds, NEW instruction at this offset). We may find
-             * false positives (i.e. not real UNINITIALIZED types), but this
-             * should be rare, and the only consequence will be the creation of
-             * an unneeded label. This is better than creating a label for each
-             * NEW instruction, and faster than fully decoding the whole stack
-             * map table.
-             */
-            for (int i = stackMap; i < stackMap + stackMapSize - 2; ++i) {
-                if (b[i] == 8) { // UNINITIALIZED FRAME TYPE
-                    int v = readUnsignedShort(i + 1);
-                    if (v >= 0 && v < codeLength) {
-                        if ((b[codeStart + v] & 0xFF) == Opcodes.NEW) {
-                            readLabel(v, labels);
-                        }
-                    }
-                }
-            }
-        }
-
-        // visits the instructions
-        u = codeStart;
-        while (u < codeEnd) {
-            int offset = u - codeStart;
-
-            // visits the label and line number for this offset, if any
-            Label l = labels[offset];
-            if (l != null) {
-                mv.visitLabel(l);
-                if ((context.flags & SKIP_DEBUG) == 0 && l.line > 0) {
-                    mv.visitLineNumber(l.line, l);
-                }
-            }
-
-            // visits the frame for this offset, if any
-            while (FRAMES && frame != null
-                    && (frame.offset == offset || frame.offset == -1)) {
-                // if there is a frame for this offset, makes the visitor visit
-                // it, and reads the next frame if there is one.
-                if (frame.offset != -1) {
-                    if (!zip || unzip) {
-                        mv.visitFrame(Opcodes.F_NEW, frame.localCount,
-                                frame.local, frame.stackCount, frame.stack);
-                    } else {
-                        mv.visitFrame(frame.mode, frame.localDiff, frame.local,
-                                frame.stackCount, frame.stack);
-                    }
-                }
-                if (frameCount > 0) {
-                    stackMap = readFrame(stackMap, zip, unzip, labels, frame);
-                    --frameCount;
-                } else {
-                    frame = null;
-                }
-            }
-
-            // visits the instruction at this offset
-            int opcode = b[u] & 0xFF;
-            switch (ClassWriter.TYPE[opcode]) {
-            case ClassWriter.NOARG_INSN:
-                mv.visitInsn(opcode);
-                u += 1;
-                break;
-            case ClassWriter.IMPLVAR_INSN:
-                if (opcode > Opcodes.ISTORE) {
-                    opcode -= 59; // ISTORE_0
-                    mv.visitVarInsn(Opcodes.ISTORE + (opcode >> 2),
-                            opcode & 0x3);
-                } else {
-                    opcode -= 26; // ILOAD_0
-                    mv.visitVarInsn(Opcodes.ILOAD + (opcode >> 2), opcode & 0x3);
-                }
-                u += 1;
-                break;
-            case ClassWriter.LABEL_INSN:
-                mv.visitJumpInsn(opcode, labels[offset + readShort(u + 1)]);
-                u += 3;
-                break;
-            case ClassWriter.LABELW_INSN:
-                mv.visitJumpInsn(opcode - 33, labels[offset + readInt(u + 1)]);
-                u += 5;
-                break;
-            case ClassWriter.WIDE_INSN:
-                opcode = b[u + 1] & 0xFF;
-                if (opcode == Opcodes.IINC) {
-                    mv.visitIincInsn(readUnsignedShort(u + 2), readShort(u + 4));
-                    u += 6;
-                } else {
-                    mv.visitVarInsn(opcode, readUnsignedShort(u + 2));
-                    u += 4;
-                }
-                break;
-            case ClassWriter.TABL_INSN: {
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                int label = offset + readInt(u);
-                int min = readInt(u + 4);
-                int max = readInt(u + 8);
-                Label[] table = new Label[max - min + 1];
-                u += 12;
-                for (int i = 0; i < table.length; ++i) {
-                    table[i] = labels[offset + readInt(u)];
-                    u += 4;
-                }
-                mv.visitTableSwitchInsn(min, max, labels[label], table);
-                break;
-            }
-            case ClassWriter.LOOK_INSN: {
-                // skips 0 to 3 padding bytes
-                u = u + 4 - (offset & 3);
-                // reads instruction
-                int label = offset + readInt(u);
-                int len = readInt(u + 4);
-                int[] keys = new int[len];
-                Label[] values = new Label[len];
-                u += 8;
-                for (int i = 0; i < len; ++i) {
-                    keys[i] = readInt(u);
-                    values[i] = labels[offset + readInt(u + 4)];
-                    u += 8;
-                }
-                mv.visitLookupSwitchInsn(labels[label], keys, values);
-                break;
-            }
-            case ClassWriter.VAR_INSN:
-                mv.visitVarInsn(opcode, b[u + 1] & 0xFF);
-                u += 2;
-                break;
-            case ClassWriter.SBYTE_INSN:
-                mv.visitIntInsn(opcode, b[u + 1]);
-                u += 2;
-                break;
-            case ClassWriter.SHORT_INSN:
-                mv.visitIntInsn(opcode, readShort(u + 1));
-                u += 3;
-                break;
-            case ClassWriter.LDC_INSN:
-                mv.visitLdcInsn(readConst(b[u + 1] & 0xFF, c));
-                u += 2;
-                break;
-            case ClassWriter.LDCW_INSN:
-                mv.visitLdcInsn(readConst(readUnsignedShort(u + 1), c));
-                u += 3;
-                break;
-            case ClassWriter.FIELDORMETH_INSN:
-            case ClassWriter.ITFMETH_INSN: {
-                int cpIndex = items[readUnsignedShort(u + 1)];
-                String iowner = readClass(cpIndex, c);
-                cpIndex = items[readUnsignedShort(cpIndex + 2)];
-                String iname = readUTF8(cpIndex, c);
-                String idesc = readUTF8(cpIndex + 2, c);
-                if (opcode < Opcodes.INVOKEVIRTUAL) {
-                    mv.visitFieldInsn(opcode, iowner, iname, idesc);
-                } else {
-                    mv.visitMethodInsn(opcode, iowner, iname, idesc);
-                }
-                if (opcode == Opcodes.INVOKEINTERFACE) {
-                    u += 5;
-                } else {
-                    u += 3;
-                }
-                break;
-            }
-            case ClassWriter.INDYMETH_INSN: {
-                int cpIndex = items[readUnsignedShort(u + 1)];
-                int bsmIndex = context.bootstrapMethods[readUnsignedShort(cpIndex)];
-                Handle bsm = (Handle) readConst(readUnsignedShort(bsmIndex), c);
-                int bsmArgCount = readUnsignedShort(bsmIndex + 2);
-                Object[] bsmArgs = new Object[bsmArgCount];
-                bsmIndex += 4;
-                for (int i = 0; i < bsmArgCount; i++) {
-                    bsmArgs[i] = readConst(readUnsignedShort(bsmIndex), c);
-                    bsmIndex += 2;
-                }
-                cpIndex = items[readUnsignedShort(cpIndex + 2)];
-                String iname = readUTF8(cpIndex, c);
-                String idesc = readUTF8(cpIndex + 2, c);
-                mv.visitInvokeDynamicInsn(iname, idesc, bsm, bsmArgs);
-                u += 5;
-                break;
-            }
-            case ClassWriter.TYPE_INSN:
-                mv.visitTypeInsn(opcode, readClass(u + 1, c));
-                u += 3;
-                break;
-            case ClassWriter.IINC_INSN:
-                mv.visitIincInsn(b[u + 1] & 0xFF, b[u + 2]);
-                u += 3;
-                break;
-            // case MANA_INSN:
-            default:
-                mv.visitMultiANewArrayInsn(readClass(u + 1, c), b[u + 3] & 0xFF);
-                u += 4;
-                break;
-            }
-        }
-        if (labels[codeLength] != null) {
-            mv.visitLabel(labels[codeLength]);
-        }
-
-        // visits the local variable tables
-        if ((context.flags & SKIP_DEBUG) == 0 && varTable != 0) {
-            int[] typeTable = null;
-            if (varTypeTable != 0) {
-                u = varTypeTable + 2;
-                typeTable = new int[readUnsignedShort(varTypeTable) * 3];
-                for (int i = typeTable.length; i > 0;) {
-                    typeTable[--i] = u + 6; // signature
-                    typeTable[--i] = readUnsignedShort(u + 8); // index
-                    typeTable[--i] = readUnsignedShort(u); // start
-                    u += 10;
-                }
-            }
-            u = varTable + 2;
-            for (int i = readUnsignedShort(varTable); i > 0; --i) {
-                int start = readUnsignedShort(u);
-                int length = readUnsignedShort(u + 2);
-                int index = readUnsignedShort(u + 8);
-                String vsignature = null;
-                if (typeTable != null) {
-                    for (int j = 0; j < typeTable.length; j += 3) {
-                        if (typeTable[j] == start && typeTable[j + 1] == index) {
-                            vsignature = readUTF8(typeTable[j + 2], c);
-                            break;
-                        }
-                    }
-                }
-                mv.visitLocalVariable(readUTF8(u + 4, c), readUTF8(u + 6, c),
-                        vsignature, labels[start], labels[start + length],
-                        index);
-                u += 10;
-            }
-        }
-
-        // visits the code attributes
-        while (attributes != null) {
-            Attribute attr = attributes.next;
-            attributes.next = null;
-            mv.visitAttribute(attributes);
-            attributes = attr;
-        }
-
-        // visits the max stack and max locals values
-        mv.visitMaxs(maxStack, maxLocals);
-    }
-
-    /**
-     * Reads parameter annotations and makes the given visitor visit them.
-     * 
-     * @param v
-     *            start offset in {@link #b b} of the annotations to be read.
-     * @param desc
-     *            the method descriptor.
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param visible
-     *            <tt>true</tt> if the annotations to be read are visible at
-     *            runtime.
-     * @param mv
-     *            the visitor that must visit the annotations.
-     */
-    private void readParameterAnnotations(int v, final String desc,
-            final char[] buf, final boolean visible, final MethodVisitor mv) {
-        int i;
-        int n = b[v++] & 0xFF;
-        // workaround for a bug in javac (javac compiler generates a parameter
-        // annotation array whose size is equal to the number of parameters in
-        // the Java source file, while it should generate an array whose size is
-        // equal to the number of parameters in the method descriptor - which
-        // includes the synthetic parameters added by the compiler). This work-
-        // around supposes that the synthetic parameters are the first ones.
-        int synthetics = Type.getArgumentTypes(desc).length - n;
-        AnnotationVisitor av;
-        for (i = 0; i < synthetics; ++i) {
-            // virtual annotation to detect synthetic parameters in MethodWriter
-            av = mv.visitParameterAnnotation(i, "Ljava/lang/Synthetic;", false);
-            if (av != null) {
-                av.visitEnd();
-            }
-        }
-        for (; i < n + synthetics; ++i) {
-            int j = readUnsignedShort(v);
-            v += 2;
-            for (; j > 0; --j) {
-                av = mv.visitParameterAnnotation(i, readUTF8(v, buf), visible);
-                v = readAnnotationValues(v + 2, buf, true, av);
-            }
-        }
-    }
-
-    /**
-     * Reads the values of an annotation and makes the given visitor visit them.
-     * 
-     * @param v
-     *            the start offset in {@link #b b} of the values to be read
-     *            (including the unsigned short that gives the number of
-     *            values).
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param named
-     *            if the annotation values are named or not.
-     * @param av
-     *            the visitor that must visit the values.
-     * @return the end offset of the annotation values.
-     */
-    private int readAnnotationValues(int v, final char[] buf,
-            final boolean named, final AnnotationVisitor av) {
-        int i = readUnsignedShort(v);
-        v += 2;
-        if (named) {
-            for (; i > 0; --i) {
-                v = readAnnotationValue(v + 2, buf, readUTF8(v, buf), av);
-            }
-        } else {
-            for (; i > 0; --i) {
-                v = readAnnotationValue(v, buf, null, av);
-            }
-        }
-        if (av != null) {
-            av.visitEnd();
-        }
-        return v;
-    }
-
-    /**
-     * Reads a value of an annotation and makes the given visitor visit it.
-     * 
-     * @param v
-     *            the start offset in {@link #b b} of the value to be read
-     *            (<i>not including the value name constant pool index</i>).
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param name
-     *            the name of the value to be read.
-     * @param av
-     *            the visitor that must visit the value.
-     * @return the end offset of the annotation value.
-     */
-    private int readAnnotationValue(int v, final char[] buf, final String name,
-            final AnnotationVisitor av) {
-        int i;
-        if (av == null) {
-            switch (b[v] & 0xFF) {
-            case 'e': // enum_const_value
-                return v + 5;
-            case '@': // annotation_value
-                return readAnnotationValues(v + 3, buf, true, null);
-            case '[': // array_value
-                return readAnnotationValues(v + 1, buf, false, null);
-            default:
-                return v + 3;
-            }
-        }
-        switch (b[v++] & 0xFF) {
-        case 'I': // pointer to CONSTANT_Integer
-        case 'J': // pointer to CONSTANT_Long
-        case 'F': // pointer to CONSTANT_Float
-        case 'D': // pointer to CONSTANT_Double
-            av.visit(name, readConst(readUnsignedShort(v), buf));
-            v += 2;
-            break;
-        case 'B': // pointer to CONSTANT_Byte
-            av.visit(name,
-                    new Byte((byte) readInt(items[readUnsignedShort(v)])));
-            v += 2;
-            break;
-        case 'Z': // pointer to CONSTANT_Boolean
-            av.visit(name,
-                    readInt(items[readUnsignedShort(v)]) == 0 ? Boolean.FALSE
-                            : Boolean.TRUE);
-            v += 2;
-            break;
-        case 'S': // pointer to CONSTANT_Short
-            av.visit(name, new Short(
-                    (short) readInt(items[readUnsignedShort(v)])));
-            v += 2;
-            break;
-        case 'C': // pointer to CONSTANT_Char
-            av.visit(name, new Character(
-                    (char) readInt(items[readUnsignedShort(v)])));
-            v += 2;
-            break;
-        case 's': // pointer to CONSTANT_Utf8
-            av.visit(name, readUTF8(v, buf));
-            v += 2;
-            break;
-        case 'e': // enum_const_value
-            av.visitEnum(name, readUTF8(v, buf), readUTF8(v + 2, buf));
-            v += 4;
-            break;
-        case 'c': // class_info
-            av.visit(name, Type.getType(readUTF8(v, buf)));
-            v += 2;
-            break;
-        case '@': // annotation_value
-            v = readAnnotationValues(v + 2, buf, true,
-                    av.visitAnnotation(name, readUTF8(v, buf)));
-            break;
-        case '[': // array_value
-            int size = readUnsignedShort(v);
-            v += 2;
-            if (size == 0) {
-                return readAnnotationValues(v - 2, buf, false,
-                        av.visitArray(name));
-            }
-            switch (this.b[v++] & 0xFF) {
-            case 'B':
-                byte[] bv = new byte[size];
-                for (i = 0; i < size; i++) {
-                    bv[i] = (byte) readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, bv);
-                --v;
-                break;
-            case 'Z':
-                boolean[] zv = new boolean[size];
-                for (i = 0; i < size; i++) {
-                    zv[i] = readInt(items[readUnsignedShort(v)]) != 0;
-                    v += 3;
-                }
-                av.visit(name, zv);
-                --v;
-                break;
-            case 'S':
-                short[] sv = new short[size];
-                for (i = 0; i < size; i++) {
-                    sv[i] = (short) readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, sv);
-                --v;
-                break;
-            case 'C':
-                char[] cv = new char[size];
-                for (i = 0; i < size; i++) {
-                    cv[i] = (char) readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, cv);
-                --v;
-                break;
-            case 'I':
-                int[] iv = new int[size];
-                for (i = 0; i < size; i++) {
-                    iv[i] = readInt(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, iv);
-                --v;
-                break;
-            case 'J':
-                long[] lv = new long[size];
-                for (i = 0; i < size; i++) {
-                    lv[i] = readLong(items[readUnsignedShort(v)]);
-                    v += 3;
-                }
-                av.visit(name, lv);
-                --v;
-                break;
-            case 'F':
-                float[] fv = new float[size];
-                for (i = 0; i < size; i++) {
-                    fv[i] = Float
-                            .intBitsToFloat(readInt(items[readUnsignedShort(v)]));
-                    v += 3;
-                }
-                av.visit(name, fv);
-                --v;
-                break;
-            case 'D':
-                double[] dv = new double[size];
-                for (i = 0; i < size; i++) {
-                    dv[i] = Double
-                            .longBitsToDouble(readLong(items[readUnsignedShort(v)]));
-                    v += 3;
-                }
-                av.visit(name, dv);
-                --v;
-                break;
-            default:
-                v = readAnnotationValues(v - 3, buf, false, av.visitArray(name));
-            }
-        }
-        return v;
-    }
-
-    /**
-     * Computes the implicit frame of the method currently being parsed (as
-     * defined in the given {@link Context}) and stores it in the given context.
-     * 
-     * @param frame
-     *            information about the class being parsed.
-     */
-    private void getImplicitFrame(final Context frame) {
-        String desc = frame.desc;
-        Object[] locals = frame.local;
-        int local = 0;
-        if ((frame.access & Opcodes.ACC_STATIC) == 0) {
-            if ("<init>".equals(frame.name)) {
-                locals[local++] = Opcodes.UNINITIALIZED_THIS;
-            } else {
-                locals[local++] = readClass(header + 2, frame.buffer);
-            }
-        }
-        int i = 1;
-        loop: while (true) {
-            int j = i;
-            switch (desc.charAt(i++)) {
-            case 'Z':
-            case 'C':
-            case 'B':
-            case 'S':
-            case 'I':
-                locals[local++] = Opcodes.INTEGER;
-                break;
-            case 'F':
-                locals[local++] = Opcodes.FLOAT;
-                break;
-            case 'J':
-                locals[local++] = Opcodes.LONG;
-                break;
-            case 'D':
-                locals[local++] = Opcodes.DOUBLE;
-                break;
-            case '[':
-                while (desc.charAt(i) == '[') {
-                    ++i;
-                }
-                if (desc.charAt(i) == 'L') {
-                    ++i;
-                    while (desc.charAt(i) != ';') {
-                        ++i;
-                    }
-                }
-                locals[local++] = desc.substring(j, ++i);
-                break;
-            case 'L':
-                while (desc.charAt(i) != ';') {
-                    ++i;
-                }
-                locals[local++] = desc.substring(j + 1, i++);
-                break;
-            default:
-                break loop;
-            }
-        }
-        frame.localCount = local;
-    }
-
-    /**
-     * Reads a stack map frame and stores the result in the given
-     * {@link Context} object.
-     * 
-     * @param stackMap
-     *            the start offset of a stack map frame in the class file.
-     * @param zip
-     *            if the stack map frame at stackMap is compressed or not.
-     * @param unzip
-     *            if the stack map frame must be uncompressed.
-     * @param labels
-     *            the labels of the method currently being parsed, indexed by
-     *            their offset. A new label for the parsed stack map frame is
-     *            stored in this array if it does not already exist.
-     * @param frame
-     *            where the parsed stack map frame must be stored.
-     * @return the offset of the first byte following the parsed frame.
-     */
-    private int readFrame(int stackMap, boolean zip, boolean unzip,
-            Label[] labels, Context frame) {
-        char[] c = frame.buffer;
-        int tag;
-        int delta;
-        if (zip) {
-            tag = b[stackMap++] & 0xFF;
-        } else {
-            tag = MethodWriter.FULL_FRAME;
-            frame.offset = -1;
-        }
-        frame.localDiff = 0;
-        if (tag < MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME) {
-            delta = tag;
-            frame.mode = Opcodes.F_SAME;
-            frame.stackCount = 0;
-        } else if (tag < MethodWriter.RESERVED) {
-            delta = tag - MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME;
-            stackMap = readFrameType(frame.stack, 0, stackMap, c, labels);
-            frame.mode = Opcodes.F_SAME1;
-            frame.stackCount = 1;
-        } else {
-            delta = readUnsignedShort(stackMap);
-            stackMap += 2;
-            if (tag == MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED) {
-                stackMap = readFrameType(frame.stack, 0, stackMap, c, labels);
-                frame.mode = Opcodes.F_SAME1;
-                frame.stackCount = 1;
-            } else if (tag >= MethodWriter.CHOP_FRAME
-                    && tag < MethodWriter.SAME_FRAME_EXTENDED) {
-                frame.mode = Opcodes.F_CHOP;
-                frame.localDiff = MethodWriter.SAME_FRAME_EXTENDED - tag;
-                frame.localCount -= frame.localDiff;
-                frame.stackCount = 0;
-            } else if (tag == MethodWriter.SAME_FRAME_EXTENDED) {
-                frame.mode = Opcodes.F_SAME;
-                frame.stackCount = 0;
-            } else if (tag < MethodWriter.FULL_FRAME) {
-                int local = unzip ? frame.localCount : 0;
-                for (int i = tag - MethodWriter.SAME_FRAME_EXTENDED; i > 0; i--) {
-                    stackMap = readFrameType(frame.local, local++, stackMap, c,
-                            labels);
-                }
-                frame.mode = Opcodes.F_APPEND;
-                frame.localDiff = tag - MethodWriter.SAME_FRAME_EXTENDED;
-                frame.localCount += frame.localDiff;
-                frame.stackCount = 0;
-            } else { // if (tag == FULL_FRAME) {
-                frame.mode = Opcodes.F_FULL;
-                int n = readUnsignedShort(stackMap);
-                stackMap += 2;
-                frame.localDiff = n;
-                frame.localCount = n;
-                for (int local = 0; n > 0; n--) {
-                    stackMap = readFrameType(frame.local, local++, stackMap, c,
-                            labels);
-                }
-                n = readUnsignedShort(stackMap);
-                stackMap += 2;
-                frame.stackCount = n;
-                for (int stack = 0; n > 0; n--) {
-                    stackMap = readFrameType(frame.stack, stack++, stackMap, c,
-                            labels);
-                }
-            }
-        }
-        frame.offset += delta + 1;
-        readLabel(frame.offset, labels);
-        return stackMap;
-    }
-
-    /**
-     * Reads a stack map frame type and stores it at the given index in the
-     * given array.
-     * 
-     * @param frame
-     *            the array where the parsed type must be stored.
-     * @param index
-     *            the index in 'frame' where the parsed type must be stored.
-     * @param v
-     *            the start offset of the stack map frame type to read.
-     * @param buf
-     *            a buffer to read strings.
-     * @param labels
-     *            the labels of the method currently being parsed, indexed by
-     *            their offset. If the parsed type is an Uninitialized type, a
-     *            new label for the corresponding NEW instruction is stored in
-     *            this array if it does not already exist.
-     * @return the offset of the first byte after the parsed type.
-     */
-    private int readFrameType(final Object[] frame, final int index, int v,
-            final char[] buf, final Label[] labels) {
-        int type = b[v++] & 0xFF;
-        switch (type) {
-        case 0:
-            frame[index] = Opcodes.TOP;
-            break;
-        case 1:
-            frame[index] = Opcodes.INTEGER;
-            break;
-        case 2:
-            frame[index] = Opcodes.FLOAT;
-            break;
-        case 3:
-            frame[index] = Opcodes.DOUBLE;
-            break;
-        case 4:
-            frame[index] = Opcodes.LONG;
-            break;
-        case 5:
-            frame[index] = Opcodes.NULL;
-            break;
-        case 6:
-            frame[index] = Opcodes.UNINITIALIZED_THIS;
-            break;
-        case 7: // Object
-            frame[index] = readClass(v, buf);
-            v += 2;
-            break;
-        default: // Uninitialized
-            frame[index] = readLabel(readUnsignedShort(v), labels);
-            v += 2;
-        }
-        return v;
-    }
-
-    /**
-     * Returns the label corresponding to the given offset. The default
-     * implementation of this method creates a label for the given offset if it
-     * has not been already created.
-     * 
-     * @param offset
-     *            a bytecode offset in a method.
-     * @param labels
-     *            the already created labels, indexed by their offset. If a
-     *            label already exists for offset this method must not create a
-     *            new one. Otherwise it must store the new label in this array.
-     * @return a non null Label, which must be equal to labels[offset].
-     */
-    protected Label readLabel(int offset, Label[] labels) {
-        if (labels[offset] == null) {
-            labels[offset] = new Label();
-        }
-        return labels[offset];
-    }
-
-    /**
-     * Returns the start index of the attribute_info structure of this class.
-     * 
-     * @return the start index of the attribute_info structure of this class.
-     */
-    private int getAttributes() {
-        // skips the header
-        int u = header + 8 + readUnsignedShort(header + 6) * 2;
-        // skips fields and methods
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            for (int j = readUnsignedShort(u + 8); j > 0; --j) {
-                u += 6 + readInt(u + 12);
-            }
-            u += 8;
-        }
-        u += 2;
-        for (int i = readUnsignedShort(u); i > 0; --i) {
-            for (int j = readUnsignedShort(u + 8); j > 0; --j) {
-                u += 6 + readInt(u + 12);
-            }
-            u += 8;
-        }
-        // the attribute_info structure starts just after the methods
-        return u + 2;
-    }
-
-    /**
-     * Reads an attribute in {@link #b b}.
-     * 
-     * @param attrs
-     *            prototypes of the attributes that must be parsed during the
-     *            visit of the class. Any attribute whose type is not equal to
-     *            the type of one the prototypes is ignored (i.e. an empty
-     *            {@link Attribute} instance is returned).
-     * @param type
-     *            the type of the attribute.
-     * @param off
-     *            index of the first byte of the attribute's content in
-     *            {@link #b b}. The 6 attribute header bytes, containing the
-     *            type and the length of the attribute, are not taken into
-     *            account here (they have already been read).
-     * @param len
-     *            the length of the attribute's content.
-     * @param buf
-     *            buffer to be used to call {@link #readUTF8 readUTF8},
-     *            {@link #readClass(int,char[]) readClass} or {@link #readConst
-     *            readConst}.
-     * @param codeOff
-     *            index of the first byte of code's attribute content in
-     *            {@link #b b}, or -1 if the attribute to be read is not a code
-     *            attribute. The 6 attribute header bytes, containing the type
-     *            and the length of the attribute, are not taken into account
-     *            here.
-     * @param labels
-     *            the labels of the method's code, or <tt>null</tt> if the
-     *            attribute to be read is not a code attribute.
-     * @return the attribute that has been read, or <tt>null</tt> to skip this
-     *         attribute.
-     */
-    private Attribute readAttribute(final Attribute[] attrs, final String type,
-            final int off, final int len, final char[] buf, final int codeOff,
-            final Label[] labels) {
-        for (int i = 0; i < attrs.length; ++i) {
-            if (attrs[i].type.equals(type)) {
-                return attrs[i].read(this, off, len, buf, codeOff, labels);
-            }
-        }
-        return new Attribute(type).read(this, off, len, null, -1, null);
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: low level parsing
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the number of constant pool items in {@link #b b}.
-     * 
-     * @return the number of constant pool items in {@link #b b}.
-     */
-    public int getItemCount() {
-        return items.length;
-    }
-
-    /**
-     * Returns the start index of the constant pool item in {@link #b b}, plus
-     * one. <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param item
-     *            the index a constant pool item.
-     * @return the start index of the constant pool item in {@link #b b}, plus
-     *         one.
-     */
-    public int getItem(final int item) {
-        return items[item];
-    }
-
-    /**
-     * Returns the maximum length of the strings contained in the constant pool
-     * of the class.
-     * 
-     * @return the maximum length of the strings contained in the constant pool
-     *         of the class.
-     */
-    public int getMaxStringLength() {
-        return maxStringLength;
-    }
-
-    /**
-     * Reads a byte value in {@link #b b}. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public int readByte(final int index) {
-        return b[index] & 0xFF;
-    }
-
-    /**
-     * Reads an unsigned short value in {@link #b b}. <i>This method is intended
-     * for {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public int readUnsignedShort(final int index) {
-        byte[] b = this.b;
-        return ((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF);
-    }
-
-    /**
-     * Reads a signed short value in {@link #b b}. <i>This method is intended
-     * for {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public short readShort(final int index) {
-        byte[] b = this.b;
-        return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
-    }
-
-    /**
-     * Reads a signed int value in {@link #b b}. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public int readInt(final int index) {
-        byte[] b = this.b;
-        return ((b[index] & 0xFF) << 24) | ((b[index + 1] & 0xFF) << 16)
-                | ((b[index + 2] & 0xFF) << 8) | (b[index + 3] & 0xFF);
-    }
-
-    /**
-     * Reads a signed long value in {@link #b b}. <i>This method is intended for
-     * {@link Attribute} sub classes, and is normally not needed by class
-     * generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of the value to be read in {@link #b b}.
-     * @return the read value.
-     */
-    public long readLong(final int index) {
-        long l1 = readInt(index);
-        long l0 = readInt(index + 4) & 0xFFFFFFFFL;
-        return (l1 << 32) | l0;
-    }
-
-    /**
-     * Reads an UTF8 string constant pool item in {@link #b b}. <i>This method
-     * is intended for {@link Attribute} sub classes, and is normally not needed
-     * by class generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of an unsigned short value in {@link #b b},
-     *            whose value is the index of an UTF8 constant pool item.
-     * @param buf
-     *            buffer to be used to read the item. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the String corresponding to the specified UTF8 item.
-     */
-    public String readUTF8(int index, final char[] buf) {
-        int item = readUnsignedShort(index);
-        if (index == 0 || item == 0) {
-            return null;
-        }
-        String s = strings[item];
-        if (s != null) {
-            return s;
-        }
-        index = items[item];
-        return strings[item] = readUTF(index + 2, readUnsignedShort(index), buf);
-    }
-
-    /**
-     * Reads UTF8 string in {@link #b b}.
-     * 
-     * @param index
-     *            start offset of the UTF8 string to be read.
-     * @param utfLen
-     *            length of the UTF8 string to be read.
-     * @param buf
-     *            buffer to be used to read the string. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the String corresponding to the specified UTF8 string.
-     */
-    private String readUTF(int index, final int utfLen, final char[] buf) {
-        int endIndex = index + utfLen;
-        byte[] b = this.b;
-        int strLen = 0;
-        int c;
-        int st = 0;
-        char cc = 0;
-        while (index < endIndex) {
-            c = b[index++];
-            switch (st) {
-            case 0:
-                c = c & 0xFF;
-                if (c < 0x80) { // 0xxxxxxx
-                    buf[strLen++] = (char) c;
-                } else if (c < 0xE0 && c > 0xBF) { // 110x xxxx 10xx xxxx
-                    cc = (char) (c & 0x1F);
-                    st = 1;
-                } else { // 1110 xxxx 10xx xxxx 10xx xxxx
-                    cc = (char) (c & 0x0F);
-                    st = 2;
-                }
-                break;
-
-            case 1: // byte 2 of 2-byte char or byte 3 of 3-byte char
-                buf[strLen++] = (char) ((cc << 6) | (c & 0x3F));
-                st = 0;
-                break;
-
-            case 2: // byte 2 of 3-byte char
-                cc = (char) ((cc << 6) | (c & 0x3F));
-                st = 1;
-                break;
-            }
-        }
-        return new String(buf, 0, strLen);
-    }
-
-    /**
-     * Reads a class constant pool item in {@link #b b}. <i>This method is
-     * intended for {@link Attribute} sub classes, and is normally not needed by
-     * class generators or adapters.</i>
-     * 
-     * @param index
-     *            the start index of an unsigned short value in {@link #b b},
-     *            whose value is the index of a class constant pool item.
-     * @param buf
-     *            buffer to be used to read the item. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the String corresponding to the specified class item.
-     */
-    public String readClass(final int index, final char[] buf) {
-        // computes the start index of the CONSTANT_Class item in b
-        // and reads the CONSTANT_Utf8 item designated by
-        // the first two bytes of this CONSTANT_Class item
-        return readUTF8(items[readUnsignedShort(index)], buf);
-    }
-
-    /**
-     * Reads a numeric or string constant pool item in {@link #b b}. <i>This
-     * method is intended for {@link Attribute} sub classes, and is normally not
-     * needed by class generators or adapters.</i>
-     * 
-     * @param item
-     *            the index of a constant pool item.
-     * @param buf
-     *            buffer to be used to read the item. This buffer must be
-     *            sufficiently large. It is not automatically resized.
-     * @return the {@link Integer}, {@link Float}, {@link Long}, {@link Double},
-     *         {@link String}, {@link Type} or {@link Handle} corresponding to
-     *         the given constant pool item.
-     */
-    public Object readConst(final int item, final char[] buf) {
-        int index = items[item];
-        switch (b[index - 1]) {
-        case ClassWriter.INT:
-            return new Integer(readInt(index));
-        case ClassWriter.FLOAT:
-            return new Float(Float.intBitsToFloat(readInt(index)));
-        case ClassWriter.LONG:
-            return new Long(readLong(index));
-        case ClassWriter.DOUBLE:
-            return new Double(Double.longBitsToDouble(readLong(index)));
-        case ClassWriter.CLASS:
-            return Type.getObjectType(readUTF8(index, buf));
-        case ClassWriter.STR:
-            return readUTF8(index, buf);
-        case ClassWriter.MTYPE:
-            return Type.getMethodType(readUTF8(index, buf));
-        default: // case ClassWriter.HANDLE_BASE + [1..9]:
-            int tag = readByte(index);
-            int[] items = this.items;
-            int cpIndex = items[readUnsignedShort(index + 1)];
-            String owner = readClass(cpIndex, buf);
-            cpIndex = items[readUnsignedShort(cpIndex + 2)];
-            String name = readUTF8(cpIndex, buf);
-            String desc = readUTF8(cpIndex + 2, buf);
-            return new Handle(tag, owner, name, desc);
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ClassVisitor.java b/asm4/src/org/objectweb/asm/ClassVisitor.java
deleted file mode 100644
index cf3366c..0000000
--- a/asm4/src/org/objectweb/asm/ClassVisitor.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java class. The methods of this class must be called in
- * the following order: <tt>visit</tt> [ <tt>visitSource</tt> ] [
- * <tt>visitOuterClass</tt> ] ( <tt>visitAnnotation</tt> |
- * <tt>visitAttribute</tt> )* ( <tt>visitInnerClass</tt> | <tt>visitField</tt> |
- * <tt>visitMethod</tt> )* <tt>visitEnd</tt>.
- * 
- * @author Eric Bruneton
- */
-public abstract class ClassVisitor {
-
-    /**
-     * The ASM API version implemented by this visitor. The value of this field
-     * must be one of {@link Opcodes#ASM4}.
-     */
-    protected final int api;
-
-    /**
-     * The class visitor to which this visitor must delegate method calls. May
-     * be null.
-     */
-    protected ClassVisitor cv;
-
-    /**
-     * Constructs a new {@link ClassVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     */
-    public ClassVisitor(final int api) {
-        this(api, null);
-    }
-
-    /**
-     * Constructs a new {@link ClassVisitor}.
-     * 
-     * @param api
-     *            the ASM API version implemented by this visitor. Must be one
-     *            of {@link Opcodes#ASM4}.
-     * @param cv
-     *            the class visitor to which this visitor must delegate method
-     *            calls. May be null.
-     */
-    public ClassVisitor(final int api, final ClassVisitor cv) {
-        if (api != Opcodes.ASM4) {
-            throw new IllegalArgumentException();
-        }
-        this.api = api;
-        this.cv = cv;
-    }
-
-    /**
-     * Visits the header of the class.
-     * 
-     * @param version
-     *            the class version.
-     * @param access
-     *            the class's access flags (see {@link Opcodes}). This parameter
-     *            also indicates if the class is deprecated.
-     * @param name
-     *            the internal name of the class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     * @param signature
-     *            the signature of this class. May be <tt>null</tt> if the class
-     *            is not a generic one, and does not extend or implement generic
-     *            classes or interfaces.
-     * @param superName
-     *            the internal of name of the super class (see
-     *            {@link Type#getInternalName() getInternalName}). For
-     *            interfaces, the super class is {@link Object}. May be
-     *            <tt>null</tt>, but only for the {@link Object} class.
-     * @param interfaces
-     *            the internal names of the class's interfaces (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     */
-    public void visit(int version, int access, String name, String signature,
-            String superName, String[] interfaces) {
-        if (cv != null) {
-            cv.visit(version, access, name, signature, superName, interfaces);
-        }
-    }
-
-    /**
-     * Visits the source of the class.
-     * 
-     * @param source
-     *            the name of the source file from which the class was compiled.
-     *            May be <tt>null</tt>.
-     * @param debug
-     *            additional debug information to compute the correspondance
-     *            between source and compiled elements of the class. May be
-     *            <tt>null</tt>.
-     */
-    public void visitSource(String source, String debug) {
-        if (cv != null) {
-            cv.visitSource(source, debug);
-        }
-    }
-
-    /**
-     * Visits the enclosing class of the class. This method must be called only
-     * if the class has an enclosing class.
-     * 
-     * @param owner
-     *            internal name of the enclosing class of the class.
-     * @param name
-     *            the name of the method that contains the class, or
-     *            <tt>null</tt> if the class is not enclosed in a method of its
-     *            enclosing class.
-     * @param desc
-     *            the descriptor of the method that contains the class, or
-     *            <tt>null</tt> if the class is not enclosed in a method of its
-     *            enclosing class.
-     */
-    public void visitOuterClass(String owner, String name, String desc) {
-        if (cv != null) {
-            cv.visitOuterClass(owner, name, desc);
-        }
-    }
-
-    /**
-     * Visits an annotation of the class.
-     * 
-     * @param desc
-     *            the class descriptor of the annotation class.
-     * @param visible
-     *            <tt>true</tt> if the annotation is visible at runtime.
-     * @return a visitor to visit the annotation values, or <tt>null</tt> if
-     *         this visitor is not interested in visiting this annotation.
-     */
-    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
-        if (cv != null) {
-            return cv.visitAnnotation(desc, visible);
-        }
-        return null;
-    }
-
-    /**
-     * Visits a non standard attribute of the class.
-     * 
-     * @param attr
-     *            an attribute.
-     */
-    public void visitAttribute(Attribute attr) {
-        if (cv != null) {
-            cv.visitAttribute(attr);
-        }
-    }
-
-    /**
-     * Visits information about an inner class. This inner class is not
-     * necessarily a member of the class being visited.
-     * 
-     * @param name
-     *            the internal name of an inner class (see
-     *            {@link Type#getInternalName() getInternalName}).
-     * @param outerName
-     *            the internal name of the class to which the inner class
-     *            belongs (see {@link Type#getInternalName() getInternalName}).
-     *            May be <tt>null</tt> for not member classes.
-     * @param innerName
-     *            the (simple) name of the inner class inside its enclosing
-     *            class. May be <tt>null</tt> for anonymous inner classes.
-     * @param access
-     *            the access flags of the inner class as originally declared in
-     *            the enclosing class.
-     */
-    public void visitInnerClass(String name, String outerName,
-            String innerName, int access) {
-        if (cv != null) {
-            cv.visitInnerClass(name, outerName, innerName, access);
-        }
-    }
-
-    /**
-     * Visits a field of the class.
-     * 
-     * @param access
-     *            the field's access flags (see {@link Opcodes}). This parameter
-     *            also indicates if the field is synthetic and/or deprecated.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor (see {@link Type Type}).
-     * @param signature
-     *            the field's signature. May be <tt>null</tt> if the field's
-     *            type does not use generic types.
-     * @param value
-     *            the field's initial value. This parameter, which may be
-     *            <tt>null</tt> if the field does not have an initial value,
-     *            must be an {@link Integer}, a {@link Float}, a {@link Long}, a
-     *            {@link Double} or a {@link String} (for <tt>int</tt>,
-     *            <tt>float</tt>, <tt>long</tt> or <tt>String</tt> fields
-     *            respectively). <i>This parameter is only used for static
-     *            fields</i>. Its value is ignored for non static fields, which
-     *            must be initialized through bytecode instructions in
-     *            constructors or methods.
-     * @return a visitor to visit field annotations and attributes, or
-     *         <tt>null</tt> if this class visitor is not interested in visiting
-     *         these annotations and attributes.
-     */
-    public FieldVisitor visitField(int access, String name, String desc,
-            String signature, Object value) {
-        if (cv != null) {
-            return cv.visitField(access, name, desc, signature, value);
-        }
-        return null;
-    }
-
-    /**
-     * Visits a method of the class. This method <i>must</i> return a new
-     * {@link MethodVisitor} instance (or <tt>null</tt>) each time it is called,
-     * i.e., it should not return a previously returned visitor.
-     * 
-     * @param access
-     *            the method's access flags (see {@link Opcodes}). This
-     *            parameter also indicates if the method is synthetic and/or
-     *            deprecated.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor (see {@link Type Type}).
-     * @param signature
-     *            the method's signature. May be <tt>null</tt> if the method
-     *            parameters, return type and exceptions do not use generic
-     *            types.
-     * @param exceptions
-     *            the internal names of the method's exception classes (see
-     *            {@link Type#getInternalName() getInternalName}). May be
-     *            <tt>null</tt>.
-     * @return an object to visit the byte code of the method, or <tt>null</tt>
-     *         if this class visitor is not interested in visiting the code of
-     *         this method.
-     */
-    public MethodVisitor visitMethod(int access, String name, String desc,
-            String signature, String[] exceptions) {
-        if (cv != null) {
-            return cv.visitMethod(access, name, desc, signature, exceptions);
-        }
-        return null;
-    }
-
-    /**
-     * Visits the end of the class. This method, which is the last one to be
-     * called, is used to inform the visitor that all the fields and methods of
-     * the class have been visited.
-     */
-    public void visitEnd() {
-        if (cv != null) {
-            cv.visitEnd();
-        }
-    }
-}
diff --git a/asm4/src/org/objectweb/asm/ClassWriter.java b/asm4/src/org/objectweb/asm/ClassWriter.java
deleted file mode 100644
index d1fc5b4..0000000
--- a/asm4/src/org/objectweb/asm/ClassWriter.java
+++ /dev/null
@@ -1,1693 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2011 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, 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. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, 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.
- */
-package org.objectweb.asm;
-
-/**
- * A {@link ClassVisitor} that generates classes in bytecode form. More
- * precisely this visitor generates a byte array conforming to the Java class
- * file format. It can be used alone, to generate a Java class "from scratch",
- * or with one or more {@link ClassReader ClassReader} and adapter class visitor
- * to generate a modified class from one or more existing Java classes.
- * 
- * @author Eric Bruneton
- */
-public class ClassWriter extends ClassVisitor {
-
-    /**
-     * Flag to automatically compute the maximum stack size and the maximum
-     * number of local variables of methods. If this flag is set, then the
-     * arguments of the {@link MethodVisitor#visitMaxs visitMaxs} method of the
-     * {@link MethodVisitor} returned by the {@link #visitMethod visitMethod}
-     * method will be ignored, and computed automatically from the signature and
-     * the bytecode of each method.
-     * 
-     * @see #ClassWriter(int)
-     */
-    public static final int COMPUTE_MAXS = 1;
-
-    /**
-     * Flag to automatically compute the stack map frames of methods from
-     * scratch. If this flag is set, then the calls to the
-     * {@link MethodVisitor#visitFrame} method are ignored, and the stack map
-     * frames are recomputed from the methods bytecode. The arguments of the
-     * {@link MethodVisitor#visitMaxs visitMaxs} method are also ignored and
-     * recomputed from the bytecode. In other words, computeFrames implies
-     * computeMaxs.
-     * 
-     * @see #ClassWriter(int)
-     */
-    public static final int COMPUTE_FRAMES = 2;
-
-    /**
-     * Pseudo access flag to distinguish between the synthetic attribute and the
-     * synthetic access flag.
-     */
-    static final int ACC_SYNTHETIC_ATTRIBUTE = 0x40000;
-
-    /**
-     * Factor to convert from ACC_SYNTHETIC_ATTRIBUTE to Opcode.ACC_SYNTHETIC.
-     */
-    static final int TO_ACC_SYNTHETIC = ACC_SYNTHETIC_ATTRIBUTE
-            / Opcodes.ACC_SYNTHETIC;
-
-    /**
-     * The type of instructions without any argument.
-     */
-    static final int NOARG_INSN = 0;
-
-    /**
-     * The type of instructions with an signed byte argument.
-     */
-    static final int SBYTE_INSN = 1;
-
-    /**
-     * The type of instructions with an signed short argument.
-     */
-    static final int SHORT_INSN = 2;
-
-    /**
-     * The type of instructions with a local variable index argument.
-     */
-    static final int VAR_INSN = 3;
-
-    /**
-     * The type of instructions with an implicit local variable index argument.
-     */
-    static final int IMPLVAR_INSN = 4;
-
-    /**
-     * The type of instructions with a type descriptor argument.
-     */
-    static final int TYPE_INSN = 5;
-
-    /**
-     * The type of field and method invocations instructions.
-     */
-    static final int FIELDORMETH_INSN = 6;
-
-    /**
-     * The type of the INVOKEINTERFACE/INVOKEDYNAMIC instruction.
-     */
-    static final int ITFMETH_INSN = 7;
-
-    /**
-     * The type of the INVOKEDYNAMIC instruction.
-     */
-    static final int INDYMETH_INSN = 8;
-
-    /**
-     * The type of instructions with a 2 bytes bytecode offset label.
-     */
-    static final int LABEL_INSN = 9;
-
-    /**
-     * The type of instructions with a 4 bytes bytecode offset label.
-     */
-    static final int LABELW_INSN = 10;
-
-    /**
-     * The type of the LDC instruction.
-     */
-    static final int LDC_INSN = 11;
-
-    /**
-     * The type of the LDC_W and LDC2_W instructions.
-     */
-    static final int LDCW_INSN = 12;
-
-    /**
-     * The type of the IINC instruction.
-     */
-    static final int IINC_INSN = 13;
-
-    /**
-     * The type of the TABLESWITCH instruction.
-     */
-    static final int TABL_INSN = 14;
-
-    /**
-     * The type of the LOOKUPSWITCH instruction.
-     */
-    static final int LOOK_INSN = 15;
-
-    /**
-     * The type of the MULTIANEWARRAY instruction.
-     */
-    static final int MANA_INSN = 16;
-
-    /**
-     * The type of the WIDE instruction.
-     */
-    static final int WIDE_INSN = 17;
-
-    /**
-     * The instruction types of all JVM opcodes.
-     */
-    static final byte[] TYPE;
-
-    /**
-     * The type of CONSTANT_Class constant pool items.
-     */
-    static final int CLASS = 7;
-
-    /**
-     * The type of CONSTANT_Fieldref constant pool items.
-     */
-    static final int FIELD = 9;
-
-    /**
-     * The type of CONSTANT_Methodref constant pool items.
-     */
-    static final int METH = 10;
-
-    /**
-     * The type of CONSTANT_InterfaceMethodref constant pool items.
-     */
-    static final int IMETH = 11;
-
-    /**
-     * The type of CONSTANT_String constant pool items.
-     */
-    static final int STR = 8;
-
-    /**
-     * The type of CONSTANT_Integer constant pool items.
-     */
-    static final int INT = 3;
-
-    /**
-     * The type of CONSTANT_Float constant pool items.
-     */
-    static final int FLOAT = 4;
-
-    /**
-     * The type of CONSTANT_Long constant pool items.
-     */
-    static final int LONG = 5;
-
-    /**
-     * The type of CONSTANT_Double constant pool items.
-     */
-    static final int DOUBLE = 6;
-
-    /**
-     * The type of CONSTANT_NameAndType constant pool items.
-     */
-    static final int NAME_TYPE = 12;
-
-    /**
-     * The type of CONSTANT_Utf8 constant pool items.
-     */
-    static final int UTF8 = 1;
-
-    /**
-     * The type of CONSTANT_MethodType constant pool items.
-     */
-    static final int MTYPE = 16;
-
-    /**
-     * The type of CONSTANT_MethodHandle constant pool items.
-     */
-    static final int HANDLE = 15;
-
-    /**
-     * The type of CONSTANT_InvokeDynamic constant pool items.
-     */
-    static final int INDY = 18;
-
-    /**
-     * The base value for all CONSTANT_MethodHandle constant pool items.
-     * Internally, ASM store the 9 variations of CONSTANT_MethodHandle into 9
-     * different items.
-     */
-    static final int HANDLE_BASE = 20;
-
-    /**
-     * Normal type Item stored in the ClassWriter {@link ClassWriter#typeTable},
-     * instead of the constant pool, in order to avoid clashes with normal
-     * constant pool items in the ClassWriter constant pool's hash table.
-     */
-    static final int TYPE_NORMAL = 30;
-
-    /**
-     * Uninitialized type Item stored in the ClassWriter
-     * {@link ClassWriter#typeTable}, instead of the constant pool, in order to
-     * avoid clashes with normal constant pool items in the ClassWriter constant
-     * pool's hash table.
-     */
-    static final int TYPE_UNINIT = 31;
-
-    /**
-     * Merged type Item stored in the ClassWriter {@link ClassWriter#typeTable},
-     * instead of the constant pool, in order to avoid clashes with normal
-     * constant pool items in the ClassWriter constant pool's hash table.
-     */
-    static final int TYPE_MERGED = 32;
-
-    /**
-     * The type of BootstrapMethods items. These items are stored in a special
-     * class attribute named BootstrapMethods and not in the constant pool.
-     */
-    static final int BSM = 33;
-
-    /**
-     * The class reader from which this class writer was constructed, if any.
-     */
-    ClassReader cr;
-
-    /**
-     * Minor and major version numbers of the class to be generated.
-     */
-    int version;
-
-    /**
-     * Index of the next item to be added in the constant pool.
-     */
-    int index;
-
-    /**
-     * The constant pool of this class.
-     */
-    final ByteVector pool;
-
-    /**
-     * The constant pool's hash table data.
-     */
-    Item[] items;
-
-    /**
-     * The threshold of the constant pool's hash table.
-     */
-    int threshold;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key2;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key3;
-
-    /**
-     * A reusable key used to look for items in the {@link #items} hash table.
-     */
-    final Item key4;
-
-    /**
-     * A type table used to temporarily store internal names that will not
-     * necessarily be stored in the constant pool. This type table is used by
-     * the control flow and data flow analysis algorithm used to compute stack
-     * map frames from scratch. This array associates to each index <tt>i</tt>
-     * the Item whose index is <tt>i</tt>. All Item objects stored in this array
-     * are also stored in the {@link #items} hash table. These two arrays allow
-     * to retrieve an Item from its index or, conversely, to get the index of an
-     * Item from its value. Each Item stores an internal name in its
-     * {@link Item#strVal1} field.
-     */
-    Item[] typeTable;
-
-    /**
-     * Number of elements in the {@link #typeTable} array.
-     */
-    private short typeCount;
-
-    /**
-     * The access flags of this class.
-     */
-    private int access;
-
-    /**
-     * The constant pool item that contains the internal name of this class.
-     */
-    private int name;
-
-    /**
-     * The internal name of this class.
-     */
-    String thisName;
-
-    /**
-     * The constant pool item that contains the signature of this class.
-     */
-    private int signature;
-
-    /**
-     * The constant pool item that contains the internal name of the super class
-     * of this class.
-     */
-    private int superName;
-
-    /**
-     * Number of interfaces implemented or extended by this class or interface.
-     */
-    private int interfaceCount;
-
-    /**
-     * The interfaces implemented or extended by this class or interface. More
-     * precisely, this array contains the indexes of the constant pool items
-     * that contain the internal names of these interfaces.
-     */
-    private int[] interfaces;
-
-    /**
-     * The index of the constant pool item that contains the name of the source
-     * file from which this class was compiled.
-     */
-    private int sourceFile;
-
-    /**
-     * The SourceDebug attribute of this class.
-     */
-    private ByteVector sourceDebug;
-
-    /**
-     * The constant pool item that contains the name of the enclosing class of
-     * this class.
-     */
-    private int enclosingMethodOwner;
-
-    /**
-     * The constant pool item that contains the name and descriptor of the
-     * enclosing method of this class.
-     */
-    private int enclosingMethod;
-
-    /**
-     * The runtime visible annotations of this class.
-     */
-    private AnnotationWriter anns;
-
-    /**
-     * The runtime invisible annotations of this class.
-     */
-    private AnnotationWriter ianns;
-
-    /**
-     * The non standard attributes of this class.
-     */
-    private Attribute attrs;
-
-    /**
-     * The number of entries in the InnerClasses attribute.
-     */
-    private int innerClassesCount;
-
-    /**
-     * The InnerClasses attribute.
-     */
-    private ByteVector innerClasses;
-
-    /**
-     * The number of entries in the BootstrapMethods attribute.
-     */
-    int bootstrapMethodsCount;
-
-    /**
-     * The BootstrapMethods attribute.
-     */
-    ByteVector bootstrapMethods;
-
-    /**
-     * The fields of this class. These fields are stored in a linked list of
-     * {@link FieldWriter} objects, linked to each other by their
-     * {@link FieldWriter#fv} field. This field stores the first element of this
-     * list.
-     */
-    FieldWriter firstField;
-
-    /**
-     * The fields of this class. These fields are stored in a linked list of
-     * {@link FieldWriter} objects, linked to each other by their
-     * {@link FieldWriter#fv} field. This field stores the last element of this
-     * list.
-     */
-    FieldWriter lastField;
-
-    /**
-     * The methods of this class. These methods are stored in a linked list of
-     * {@link MethodWriter} objects, linked to each other by their
-     * {@link MethodWriter#mv} field. This field stores the first element of
-     * this list.
-     */
-    MethodWriter firstMethod;
-
-    /**
-     * The methods of this class. These methods are stored in a linked list of
-     * {@link MethodWriter} objects, linked to each other by their
-     * {@link MethodWriter#mv} field. This field stores the last element of this
-     * list.
-     */
-    MethodWriter lastMethod;
-
-    /**
-     * <tt>true</tt> if the maximum stack size and number of local variables
-     * must be automatically computed.
-     */
-    private final boolean computeMaxs;
-
-    /**
-     * <tt>true</tt> if the stack map frames must be recomputed from scratch.
-     */
-    private final boolean computeFrames;
-
-    /**
-     * <tt>true</tt> if the stack map tables of this class are invalid. The
-     * {@link MethodWriter#resizeInstructions} method cannot transform existing
-     * stack map tables, and so produces potentially invalid classes when it is
-     * executed. In this case the class is reread and rewritten with the
-     * {@link #COMPUTE_FRAMES} option (the resizeInstructions method can resize
-     * stack map tables when this option is used).
-     */
-    boolean invalidFrames;
-
-    // ------------------------------------------------------------------------
-    // Static initializer
-    // ------------------------------------------------------------------------
-
-    /**
-     * Computes the instruction types of JVM opcodes.
-     */
-    static {
-        int i;
-        byte[] b = new byte[220];
-        String s = "AAAAAAAAAAAAAAAABCLMMDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADD"
-                + "DDDEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
-                + "AAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJDOPAA"
-                + "AAAAGGGGGGGHIFBFAAFFAARQJJKKJJJJJJJJJJJJJJJJJJ";
-        for (i = 0; i < b.length; ++i) {
-            b[i] = (byte) (s.charAt(i) - 'A');
-        }
-        TYPE = b;
-
-        // code to generate the above string
-        //
-        // // SBYTE_INSN instructions
-        // b[Constants.NEWARRAY] = SBYTE_INSN;
-        // b[Constants.BIPUSH] = SBYTE_INSN;
-        //
-        // // SHORT_INSN instructions
-        // b[Constants.SIPUSH] = SHORT_INSN;
-        //
-        // // (IMPL)VAR_INSN instructions
-        // b[Constants.RET] = VAR_INSN;
-        // for (i = Constants.ILOAD; i <= Constants.ALOAD; ++i) {
-        // b[i] = VAR_INSN;
-        // }
-        // for (i = Constants.ISTORE; i <= Constants.ASTORE; ++i) {
-        // b[i] = VAR_INSN;
-        // }
-        // for (i = 26; i <= 45; ++i) { // ILOAD_0 to ALOAD_3
-        // b[i] = IMPLVAR_INSN;
-        // }
-        // for (i = 59; i <= 78; ++i) { // ISTORE_0 to ASTORE_3
-        // b[i] = IMPLVAR_INSN;
-        // }
-        //
-        // // TYPE_INSN instructions
-        // b[Constants.NEW] = TYPE_INSN;
-        // b[Constants.ANEWARRAY] = TYPE_INSN;
-        // b[Constants.CHECKCAST] = TYPE_INSN;
-        // b[Constants.INSTANCEOF] = TYPE_INSN;
-        //
-        // // (Set)FIELDORMETH_INSN instructions
-        // for (i = Constants.GETSTATIC; i <= Constants.INVOKESTATIC; ++i) {
-        // b[i] = FIELDORMETH_INSN;
-        // }
-        // b[Constants.INVOKEINTERFACE] = ITFMETH_INSN;
-        // b[Constants.INVOKEDYNAMIC] = INDYMETH_INSN;
-        //
-        // // LABEL(W)_INSN instructions
-        // for (i = Constants.IFEQ; i <= Constants.JSR; ++i) {
-        // b[i] = LABEL_INSN;
-        // }
-        // b[Constants.IFNULL] = LABEL_INSN;
-        // b[Constants.IFNONNULL] = LABEL_INSN;
-        // b[200] = LABELW_INSN; // GOTO_W
-        // b[201] = LABELW_INSN; // JSR_W
-        // // temporary opcodes used internally by ASM - see Label and
-        // MethodWriter
-        // for (i = 202; i < 220; ++i) {
-        // b[i] = LABEL_INSN;
-        // }
-        //
-        // // LDC(_W) instructions
-        // b[Constants.LDC] = LDC_INSN;
-        // b[19] = LDCW_INSN; // LDC_W
-        // b[20] = LDCW_INSN; // LDC2_W
-        //
-        // // special instructions
-        // b[Constants.IINC] = IINC_INSN;
-        // b[Constants.TABLESWITCH] = TABL_INSN;
-        // b[Constants.LOOKUPSWITCH] = LOOK_INSN;
-        // b[Constants.MULTIANEWARRAY] = MANA_INSN;
-        // b[196] = WIDE_INSN; // WIDE
-        //
-        // for (i = 0; i < b.length; ++i) {
-        // System.err.print((char)('A' + b[i]));
-        // }
-        // System.err.println();
-    }
-
-    // ------------------------------------------------------------------------
-    // Constructor
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructs a new {@link ClassWriter} object.
-     * 
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. See {@link #COMPUTE_MAXS},
-     *            {@link #COMPUTE_FRAMES}.
-     */
-    public ClassWriter(final int flags) {
-        super(Opcodes.ASM4);
-        index = 1;
-        pool = new ByteVector();
-        items = new Item[256];
-        threshold = (int) (0.75d * items.length);
-        key = new Item();
-        key2 = new Item();
-        key3 = new Item();
-        key4 = new Item();
-        this.computeMaxs = (flags & COMPUTE_MAXS) != 0;
-        this.computeFrames = (flags & COMPUTE_FRAMES) != 0;
-    }
-
-    /**
-     * Constructs a new {@link ClassWriter} object and enables optimizations for
-     * "mostly add" bytecode transformations. These optimizations are the
-     * following:
-     * 
-     * <ul>
-     * <li>The constant pool from the original class is copied as is in the new
-     * class, which saves time. New constant pool entries will be added at the
-     * end if necessary, but unused constant pool entries <i>won't be
-     * removed</i>.</li>
-     * <li>Methods that are not transformed are copied as is in the new class,
-     * directly from the original class bytecode (i.e. without emitting visit
-     * events for all the method instructions), which saves a <i>lot</i> of
-     * time. Untransformed methods are detected by the fact that the
-     * {@link ClassReader} receives {@link MethodVisitor} objects that come from
-     * a {@link ClassWriter} (and not from any other {@link ClassVisitor}
-     * instance).</li>
-     * </ul>
-     * 
-     * @param classReader
-     *            the {@link ClassReader} used to read the original class. It
-     *            will be used to copy the entire constant pool from the
-     *            original class and also to copy other fragments of original
-     *            bytecode where applicable.
-     * @param flags
-     *            option flags that can be used to modify the default behavior
-     *            of this class. <i>These option flags do not affect methods
-     *            that are copied as is in the new class. This means that the
-     *            maximum stack size nor the stack frames will be computed for
-     *            these methods</i>. See {@link #COMPUTE_MAXS},
-     *            {@link #COMPUTE_FRAMES}.
-     */
-    public ClassWriter(final ClassReader classReader, final int flags) {
-        this(flags);
-        classReader.copyPool(this);
-        this.cr = classReader;
-    }
-
-    // ------------------------------------------------------------------------
-    // Implementation of the ClassVisitor abstract class
-    // ------------------------------------------------------------------------
-
-    @Override
-    public final void visit(final int version, final int access,
-            final String name, final String signature, final String superName,
-            final String[] interfaces) {
-        this.version = version;
-        this.access = access;
-        this.name = newClass(name);
-        thisName = name;
-        if (ClassReader.SIGNATURES && signature != null) {
-            this.signature = newUTF8(signature);
-        }
-        this.superName = superName == null ? 0 : newClass(superName);
-        if (interfaces != null && interfaces.length > 0) {
-            interfaceCount = interfaces.length;
-            this.interfaces = new int[interfaceCount];
-            for (int i = 0; i < interfaceCount; ++i) {
-                this.interfaces[i] = newClass(interfaces[i]);
-            }
-        }
-    }
-
-    @Override
-    public final void visitSource(final String file, final String debug) {
-        if (file != null) {
-            sourceFile = newUTF8(file);
-        }
-        if (debug != null) {
-            sourceDebug = new ByteVector().putUTF8(debug);
-        }
-    }
-
-    @Override
-    public final void visitOuterClass(final String owner, final String name,
-            final String desc) {
-        enclosingMethodOwner = newClass(owner);
-        if (name != null && desc != null) {
-            enclosingMethod = newNameType(name, desc);
-        }
-    }
-
-    @Override
-    public final AnnotationVisitor visitAnnotation(final String desc,
-            final boolean visible) {
-        if (!ClassReader.ANNOTATIONS) {
-            return null;
-        }
-        ByteVector bv = new ByteVector();
-        // write type, and reserve space for values count
-        bv.putShort(newUTF8(desc)).putShort(0);
-        AnnotationWriter aw = new AnnotationWriter(this, true, bv, bv, 2);
-        if (visible) {
-            aw.next = anns;
-            anns = aw;
-        } else {
-            aw.next = ianns;
-            ianns = aw;
-        }
-        return aw;
-    }
-
-    @Override
-    public final void visitAttribute(final Attribute attr) {
-        attr.next = attrs;
-        attrs = attr;
-    }
-
-    @Override
-    public final void visitInnerClass(final String name,
-            final String outerName, final String innerName, final int access) {
-        if (innerClasses == null) {
-            innerClasses = new ByteVector();
-        }
-        ++innerClassesCount;
-        innerClasses.putShort(name == null ? 0 : newClass(name));
-        innerClasses.putShort(outerName == null ? 0 : newClass(outerName));
-        innerClasses.putShort(innerName == null ? 0 : newUTF8(innerName));
-        innerClasses.putShort(access);
-    }
-
-    @Override
-    public final FieldVisitor visitField(final int access, final String name,
-            final String desc, final String signature, final Object value) {
-        return new FieldWriter(this, access, name, desc, signature, value);
-    }
-
-    @Override
-    public final MethodVisitor visitMethod(final int access, final String name,
-            final String desc, final String signature, final String[] exceptions) {
-        return new MethodWriter(this, access, name, desc, signature,
-                exceptions, computeMaxs, computeFrames);
-    }
-
-    @Override
-    public final void visitEnd() {
-    }
-
-    // ------------------------------------------------------------------------
-    // Other public methods
-    // ------------------------------------------------------------------------
-
-    /**
-     * Returns the bytecode of the class that was build with this class writer.
-     * 
-     * @return the bytecode of the class that was build with this class writer.
-     */
-    public byte[] toByteArray() {
-        if (index > 0xFFFF) {
-            throw new RuntimeException("Class file too large!");
-        }
-        // computes the real size of the bytecode of this class
-        int size = 24 + 2 * interfaceCount;
-        int nbFields = 0;
-        FieldWriter fb = firstField;
-        while (fb != null) {
-            ++nbFields;
-            size += fb.getSize();
-            fb = (FieldWriter) fb.fv;
-        }
-        int nbMethods = 0;
-        MethodWriter mb = firstMethod;
-        while (mb != null) {
-            ++nbMethods;
-            size += mb.getSize();
-            mb = (MethodWriter) mb.mv;
-        }
-        int attributeCount = 0;
-        if (bootstrapMethods != null) {
-            // we put it as first attribute in order to improve a bit
-            // ClassReader.copyBootstrapMethods
-            ++attributeCount;
-            size += 8 + bootstrapMethods.length;
-            newUTF8("BootstrapMethods");
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            ++attributeCount;
-            size += 8;
-            newUTF8("Signature");
-        }
-        if (sourceFile != 0) {
-            ++attributeCount;
-            size += 8;
-            newUTF8("SourceFile");
-        }
-        if (sourceDebug != null) {
-            ++attributeCount;
-            size += sourceDebug.length + 4;
-            newUTF8("SourceDebugExtension");
-        }
-        if (enclosingMethodOwner != 0) {
-            ++attributeCount;
-            size += 10;
-            newUTF8("EnclosingMethod");
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            ++attributeCount;
-            size += 6;
-            newUTF8("Deprecated");
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                ++attributeCount;
-                size += 6;
-                newUTF8("Synthetic");
-            }
-        }
-        if (innerClasses != null) {
-            ++attributeCount;
-            size += 8 + innerClasses.length;
-            newUTF8("InnerClasses");
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            ++attributeCount;
-            size += 8 + anns.getSize();
-            newUTF8("RuntimeVisibleAnnotations");
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            ++attributeCount;
-            size += 8 + ianns.getSize();
-            newUTF8("RuntimeInvisibleAnnotations");
-        }
-        if (attrs != null) {
-            attributeCount += attrs.getCount();
-            size += attrs.getSize(this, null, 0, -1, -1);
-        }
-        size += pool.length;
-        // allocates a byte vector of this size, in order to avoid unnecessary
-        // arraycopy operations in the ByteVector.enlarge() method
-        ByteVector out = new ByteVector(size);
-        out.putInt(0xCAFEBABE).putInt(version);
-        out.putShort(index).putByteArray(pool.data, 0, pool.length);
-        int mask = Opcodes.ACC_DEPRECATED | ACC_SYNTHETIC_ATTRIBUTE
-                | ((access & ACC_SYNTHETIC_ATTRIBUTE) / TO_ACC_SYNTHETIC);
-        out.putShort(access & ~mask).putShort(name).putShort(superName);
-        out.putShort(interfaceCount);
-        for (int i = 0; i < interfaceCount; ++i) {
-            out.putShort(interfaces[i]);
-        }
-        out.putShort(nbFields);
-        fb = firstField;
-        while (fb != null) {
-            fb.put(out);
-            fb = (FieldWriter) fb.fv;
-        }
-        out.putShort(nbMethods);
-        mb = firstMethod;
-        while (mb != null) {
-            mb.put(out);
-            mb = (MethodWriter) mb.mv;
-        }
-        out.putShort(attributeCount);
-        if (bootstrapMethods != null) {
-            out.putShort(newUTF8("BootstrapMethods"));
-            out.putInt(bootstrapMethods.length + 2).putShort(
-                    bootstrapMethodsCount);
-            out.putByteArray(bootstrapMethods.data, 0, bootstrapMethods.length);
-        }
-        if (ClassReader.SIGNATURES && signature != 0) {
-            out.putShort(newUTF8("Signature")).putInt(2).putShort(signature);
-        }
-        if (sourceFile != 0) {
-            out.putShort(newUTF8("SourceFile")).putInt(2).putShort(sourceFile);
-        }
-        if (sourceDebug != null) {
-            int len = sourceDebug.length - 2;
-            out.putShort(newUTF8("SourceDebugExtension")).putInt(len);
-            out.putByteArray(sourceDebug.data, 2, len);
-        }
-        if (enclosingMethodOwner != 0) {
-            out.putShort(newUTF8("EnclosingMethod")).putInt(4);
-            out.putShort(enclosingMethodOwner).putShort(enclosingMethod);
-        }
-        if ((access & Opcodes.ACC_DEPRECATED) != 0) {
-            out.putShort(newUTF8("Deprecated")).putInt(0);
-        }
-        if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
-            if ((version & 0xFFFF) < Opcodes.V1_5
-                    || (access & ACC_SYNTHETIC_ATTRIBUTE) != 0) {
-                out.putShort(newUTF8("Synthetic")).putInt(0);
-            }
-        }
-        if (innerClasses != null) {
-            out.putShort(newUTF8("InnerClasses"));
-            out.putInt(innerClasses.length + 2).putShort(innerClassesCount);
-            out.putByteArray(innerClasses.data, 0, innerClasses.length);
-        }
-        if (ClassReader.ANNOTATIONS && anns != null) {
-            out.putShort(newUTF8("RuntimeVisibleAnnotations"));
-            anns.put(out);
-        }
-        if (ClassReader.ANNOTATIONS && ianns != null) {
-            out.putShort(newUTF8("RuntimeInvisibleAnnotations"));
-            ianns.put(out);
-        }
-        if (attrs != null) {
-            attrs.put(this, null, 0, -1, -1, out);
-        }
-        if (invalidFrames) {
-            ClassWriter cw = new ClassWriter(COMPUTE_FRAMES);
-            new ClassReader(out.data).accept(cw, ClassReader.SKIP_FRAMES);
-            return cw.toByteArray();
-        }
-        return out.data;
-    }
-
-    // ------------------------------------------------------------------------
-    // Utility methods: constant pool management
-    // ------------------------------------------------------------------------
-
-    /**
-     * Adds a number or string constant to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * 
-     * @param cst
-     *            the value of the constant to be added to the constant pool.
-     *            This parameter must be an {@link Integer}, a {@link Float}, a
-     *            {@link Long}, a {@link Double}, a {@link String} or a
-     *            {@link Type}.
-     * @return a new or already existing constant item with the given value.
-     */
-    Item newConstItem(final Object cst) {
-        if (cst instanceof Integer) {
-            int val = ((Integer) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Byte) {
-            int val = ((Byte) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Character) {
-            int val = ((Character) cst).charValue();
-            return newInteger(val);
-        } else if (cst instanceof Short) {
-            int val = ((Short) cst).intValue();
-            return newInteger(val);
-        } else if (cst instanceof Boolean) {
-            int val = ((Boolean) cst).booleanValue() ? 1 : 0;
-            return newInteger(val);
-        } else if (cst instanceof Float) {
-            float val = ((Float) cst).floatValue();
-            return newFloat(val);
-        } else if (cst instanceof Long) {
-            long val = ((Long) cst).longValue();
-            return newLong(val);
-        } else if (cst instanceof Double) {
-            double val = ((Double) cst).doubleValue();
-            return newDouble(val);
-        } else if (cst instanceof String) {
-            return newString((String) cst);
-        } else if (cst instanceof Type) {
-            Type t = (Type) cst;
-            int s = t.getSort();
-            if (s == Type.OBJECT) {
-                return newClassItem(t.getInternalName());
-            } else if (s == Type.METHOD) {
-                return newMethodTypeItem(t.getDescriptor());
-            } else { // s == primitive type or array
-                return newClassItem(t.getDescriptor());
-            }
-        } else if (cst instanceof Handle) {
-            Handle h = (Handle) cst;
-            return newHandleItem(h.tag, h.owner, h.name, h.desc);
-        } else {
-            throw new IllegalArgumentException("value " + cst);
-        }
-    }
-
-    /**
-     * Adds a number or string constant to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param cst
-     *            the value of the constant to be added to the constant pool.
-     *            This parameter must be an {@link Integer}, a {@link Float}, a
-     *            {@link Long}, a {@link Double} or a {@link String}.
-     * @return the index of a new or already existing constant item with the
-     *         given value.
-     */
-    public int newConst(final Object cst) {
-        return newConstItem(cst).index;
-    }
-
-    /**
-     * Adds an UTF8 string to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item. <i>This
-     * method is intended for {@link Attribute} sub classes, and is normally not
-     * needed by class generators or adapters.</i>
-     * 
-     * @param value
-     *            the String value.
-     * @return the index of a new or already existing UTF8 item.
-     */
-    public int newUTF8(final String value) {
-        key.set(UTF8, value, null, null);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(UTF8).putUTF8(value);
-            result = new Item(index++, key);
-            put(result);
-        }
-        return result.index;
-    }
-
-    /**
-     * Adds a class reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param value
-     *            the internal name of the class.
-     * @return a new or already existing class reference item.
-     */
-    Item newClassItem(final String value) {
-        key2.set(CLASS, value, null, null);
-        Item result = get(key2);
-        if (result == null) {
-            pool.put12(CLASS, newUTF8(value));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a class reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param value
-     *            the internal name of the class.
-     * @return the index of a new or already existing class reference item.
-     */
-    public int newClass(final String value) {
-        return newClassItem(value).index;
-    }
-
-    /**
-     * Adds a method type reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param methodDesc
-     *            method descriptor of the method type.
-     * @return a new or already existing method type reference item.
-     */
-    Item newMethodTypeItem(final String methodDesc) {
-        key2.set(MTYPE, methodDesc, null, null);
-        Item result = get(key2);
-        if (result == null) {
-            pool.put12(MTYPE, newUTF8(methodDesc));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a method type reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param methodDesc
-     *            method descriptor of the method type.
-     * @return the index of a new or already existing method type reference
-     *         item.
-     */
-    public int newMethodType(final String methodDesc) {
-        return newMethodTypeItem(methodDesc).index;
-    }
-
-    /**
-     * Adds a handle to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item. <i>This method is
-     * intended for {@link Attribute} sub classes, and is normally not needed by
-     * class generators or adapters.</i>
-     * 
-     * @param tag
-     *            the kind of this handle. Must be {@link Opcodes#H_GETFIELD},
-     *            {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD},
-     *            {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL},
-     *            {@link Opcodes#H_INVOKESTATIC},
-     *            {@link Opcodes#H_INVOKESPECIAL},
-     *            {@link Opcodes#H_NEWINVOKESPECIAL} or
-     *            {@link Opcodes#H_INVOKEINTERFACE}.
-     * @param owner
-     *            the internal name of the field or method owner class.
-     * @param name
-     *            the name of the field or method.
-     * @param desc
-     *            the descriptor of the field or method.
-     * @return a new or an already existing method type reference item.
-     */
-    Item newHandleItem(final int tag, final String owner, final String name,
-            final String desc) {
-        key4.set(HANDLE_BASE + tag, owner, name, desc);
-        Item result = get(key4);
-        if (result == null) {
-            if (tag <= Opcodes.H_PUTSTATIC) {
-                put112(HANDLE, tag, newField(owner, name, desc));
-            } else {
-                put112(HANDLE,
-                        tag,
-                        newMethod(owner, name, desc,
-                                tag == Opcodes.H_INVOKEINTERFACE));
-            }
-            result = new Item(index++, key4);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a handle to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item. <i>This method is
-     * intended for {@link Attribute} sub classes, and is normally not needed by
-     * class generators or adapters.</i>
-     * 
-     * @param tag
-     *            the kind of this handle. Must be {@link Opcodes#H_GETFIELD},
-     *            {@link Opcodes#H_GETSTATIC}, {@link Opcodes#H_PUTFIELD},
-     *            {@link Opcodes#H_PUTSTATIC}, {@link Opcodes#H_INVOKEVIRTUAL},
-     *            {@link Opcodes#H_INVOKESTATIC},
-     *            {@link Opcodes#H_INVOKESPECIAL},
-     *            {@link Opcodes#H_NEWINVOKESPECIAL} or
-     *            {@link Opcodes#H_INVOKEINTERFACE}.
-     * @param owner
-     *            the internal name of the field or method owner class.
-     * @param name
-     *            the name of the field or method.
-     * @param desc
-     *            the descriptor of the field or method.
-     * @return the index of a new or already existing method type reference
-     *         item.
-     */
-    public int newHandle(final int tag, final String owner, final String name,
-            final String desc) {
-        return newHandleItem(tag, owner, name, desc).index;
-    }
-
-    /**
-     * Adds an invokedynamic reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param name
-     *            name of the invoked method.
-     * @param desc
-     *            descriptor of the invoke method.
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the bootstrap method constant arguments.
-     * 
-     * @return a new or an already existing invokedynamic type reference item.
-     */
-    Item newInvokeDynamicItem(final String name, final String desc,
-            final Handle bsm, final Object... bsmArgs) {
-        // cache for performance
-        ByteVector bootstrapMethods = this.bootstrapMethods;
-        if (bootstrapMethods == null) {
-            bootstrapMethods = this.bootstrapMethods = new ByteVector();
-        }
-
-        int position = bootstrapMethods.length; // record current position
-
-        int hashCode = bsm.hashCode();
-        bootstrapMethods.putShort(newHandle(bsm.tag, bsm.owner, bsm.name,
-                bsm.desc));
-
-        int argsLength = bsmArgs.length;
-        bootstrapMethods.putShort(argsLength);
-
-        for (int i = 0; i < argsLength; i++) {
-            Object bsmArg = bsmArgs[i];
-            hashCode ^= bsmArg.hashCode();
-            bootstrapMethods.putShort(newConst(bsmArg));
-        }
-
-        byte[] data = bootstrapMethods.data;
-        int length = (1 + 1 + argsLength) << 1; // (bsm + argCount + arguments)
-        hashCode &= 0x7FFFFFFF;
-        Item result = items[hashCode % items.length];
-        loop: while (result != null) {
-            if (result.type != BSM || result.hashCode != hashCode) {
-                result = result.next;
-                continue;
-            }
-
-            // because the data encode the size of the argument
-            // we don't need to test if these size are equals
-            int resultPosition = result.intVal;
-            for (int p = 0; p < length; p++) {
-                if (data[position + p] != data[resultPosition + p]) {
-                    result = result.next;
-                    continue loop;
-                }
-            }
-            break;
-        }
-
-        int bootstrapMethodIndex;
-        if (result != null) {
-            bootstrapMethodIndex = result.index;
-            bootstrapMethods.length = position; // revert to old position
-        } else {
-            bootstrapMethodIndex = bootstrapMethodsCount++;
-            result = new Item(bootstrapMethodIndex);
-            result.set(position, hashCode);
-            put(result);
-        }
-
-        // now, create the InvokeDynamic constant
-        key3.set(name, desc, bootstrapMethodIndex);
-        result = get(key3);
-        if (result == null) {
-            put122(INDY, bootstrapMethodIndex, newNameType(name, desc));
-            result = new Item(index++, key3);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds an invokedynamic reference to the constant pool of the class being
-     * build. Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param name
-     *            name of the invoked method.
-     * @param desc
-     *            descriptor of the invoke method.
-     * @param bsm
-     *            the bootstrap method.
-     * @param bsmArgs
-     *            the bootstrap method constant arguments.
-     * 
-     * @return the index of a new or already existing invokedynamic reference
-     *         item.
-     */
-    public int newInvokeDynamic(final String name, final String desc,
-            final Handle bsm, final Object... bsmArgs) {
-        return newInvokeDynamicItem(name, desc, bsm, bsmArgs).index;
-    }
-
-    /**
-     * Adds a field reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * 
-     * @param owner
-     *            the internal name of the field's owner class.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor.
-     * @return a new or already existing field reference item.
-     */
-    Item newFieldItem(final String owner, final String name, final String desc) {
-        key3.set(FIELD, owner, name, desc);
-        Item result = get(key3);
-        if (result == null) {
-            put122(FIELD, newClass(owner), newNameType(name, desc));
-            result = new Item(index++, key3);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a field reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param owner
-     *            the internal name of the field's owner class.
-     * @param name
-     *            the field's name.
-     * @param desc
-     *            the field's descriptor.
-     * @return the index of a new or already existing field reference item.
-     */
-    public int newField(final String owner, final String name, final String desc) {
-        return newFieldItem(owner, name, desc).index;
-    }
-
-    /**
-     * Adds a method reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * 
-     * @param owner
-     *            the internal name of the method's owner class.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor.
-     * @param itf
-     *            <tt>true</tt> if <tt>owner</tt> is an interface.
-     * @return a new or already existing method reference item.
-     */
-    Item newMethodItem(final String owner, final String name,
-            final String desc, final boolean itf) {
-        int type = itf ? IMETH : METH;
-        key3.set(type, owner, name, desc);
-        Item result = get(key3);
-        if (result == null) {
-            put122(type, newClass(owner), newNameType(name, desc));
-            result = new Item(index++, key3);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a method reference to the constant pool of the class being build.
-     * Does nothing if the constant pool already contains a similar item.
-     * <i>This method is intended for {@link Attribute} sub classes, and is
-     * normally not needed by class generators or adapters.</i>
-     * 
-     * @param owner
-     *            the internal name of the method's owner class.
-     * @param name
-     *            the method's name.
-     * @param desc
-     *            the method's descriptor.
-     * @param itf
-     *            <tt>true</tt> if <tt>owner</tt> is an interface.
-     * @return the index of a new or already existing method reference item.
-     */
-    public int newMethod(final String owner, final String name,
-            final String desc, final boolean itf) {
-        return newMethodItem(owner, name, desc, itf).index;
-    }
-
-    /**
-     * Adds an integer to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the int value.
-     * @return a new or already existing int item.
-     */
-    Item newInteger(final int value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(INT).putInt(value);
-            result = new Item(index++, key);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a float to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the float value.
-     * @return a new or already existing float item.
-     */
-    Item newFloat(final float value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(FLOAT).putInt(key.intVal);
-            result = new Item(index++, key);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a long to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the long value.
-     * @return a new or already existing long item.
-     */
-    Item newLong(final long value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(LONG).putLong(value);
-            result = new Item(index, key);
-            index += 2;
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a double to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the double value.
-     * @return a new or already existing double item.
-     */
-    Item newDouble(final double value) {
-        key.set(value);
-        Item result = get(key);
-        if (result == null) {
-            pool.putByte(DOUBLE).putLong(key.longVal);
-            result = new Item(index, key);
-            index += 2;
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a string to the constant pool of the class being build. Does nothing
-     * if the constant pool already contains a similar item.
-     * 
-     * @param value
-     *            the String value.
-     * @return a new or already existing string item.
-     */
-    private Item newString(final String value) {
-        key2.set(STR, value, null, null);
-        Item result = get(key2);
-        if (result == null) {
-            pool.put12(STR, newUTF8(value));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds a name and type to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item. <i>This
-     * method is intended for {@link Attribute} sub classes, and is normally not
-     * needed by class generators or adapters.</i>
-     * 
-     * @param name
-     *            a name.
-     * @param desc
-     *            a type descriptor.
-     * @return the index of a new or already existing name and type item.
-     */
-    public int newNameType(final String name, final String desc) {
-        return newNameTypeItem(name, desc).index;
-    }
-
-    /**
-     * Adds a name and type to the constant pool of the class being build. Does
-     * nothing if the constant pool already contains a similar item.
-     * 
-     * @param name
-     *            a name.
-     * @param desc
-     *            a type descriptor.
-     * @return a new or already existing name and type item.
-     */
-    Item newNameTypeItem(final String name, final String desc) {
-        key2.set(NAME_TYPE, name, desc, null);
-        Item result = get(key2);
-        if (result == null) {
-            put122(NAME_TYPE, newUTF8(name), newUTF8(desc));
-            result = new Item(index++, key2);
-            put(result);
-        }
-        return result;
-    }
-
-    /**
-     * Adds the given internal name to {@link #typeTable} and returns its index.
-     * Does nothing if the type table already contains this internal name.
-     * 
-     * @param type
-     *            the internal name to be added to the type table.
-     * @return the index of this internal name in the type table.
-     */
-    int addType(final String type) {
-        key.set(TYPE_NORMAL, type, null, null);
-        Item result = get(key);
-        if (result == null) {
-            result = addType(key);
-        }
-        return result.index;
-    }
-
-    /**
-     * Adds the given "uninitialized" type to {@link #typeTable} and returns its
-     * index. This method is used for UNINITIALIZED types, made of an internal
-     * name and a bytecode offset.
-     * 
-     * @param type
-     *            the internal name to be added to the type table.
-     * @param offset
-     *            the bytecode offset of the NEW instruction that created this
-     *            UNINITIALIZED type value.
-     * @return the index of this internal name in the type table.
-     */
-    int addUninitializedType(final String type, final int offset) {
-        key.type = TYPE_UNINIT;
-        key.intVal = offset;
-        key.strVal1 = type;
-        key.hashCode = 0x7FFFFFFF & (TYPE_UNINIT + type.hashCode() + offset);
-        Item result = get(key);
-        if (result == null) {
-            result = addType(key);
-        }
-        return result.index;
-    }
-
-    /**
-     * Adds the given Item to {@link #typeTable}.
-     * 
-     * @param item
-     *            the value to be added to the type table.
-     * @return the added Item, which a new Item instance with the same value as
-     *         the given Item.
-