@Override
	protected Class<?> findClass(final String name)
			throws ClassNotFoundException {
		final java.io.InputStream in;
		final int size;
		final JarFile jarFile;

		assert this.cp.length >= 1;

		final Lookup found = find(name.split("\\."), ".class");
		if (found == null) {
			return null;
		}

		in = found.in;
		size = found.size;
		jarFile = found.jarFile;

		assert in != null;
		if (this.buffer.length < size) {
			this.buffer = new byte[(size & 0xffff_ff00) + 0x100];
		}
		try {
			int offset = in.read(this.buffer);
			while (offset < size) {
				offset += in.read(this.buffer, offset, size - offset);
			}
		} catch (final IOException e) {
			e.printStackTrace();
			System.out.printf("findClass(%s)\n", name);
			return null;
		}
		try {
			in.close();
		} catch (final IOException e) {
			e.printStackTrace();
		}
		if (jarFile != null) {
			try {
				jarFile.close();
			} catch (final IOException e) {
				e.printStackTrace();
			}
		}
		final Class<?> c = defineClass(name, this.buffer, 0, size);
		this.map.put(name, c);
		return c;

	}