#Signature file v4.1
#Version 1.15.1

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

CLSS public final org.netbeans.modules.java.j2sedeploy.api.J2SEDeployConstants
fld public final static java.lang.String PASS_CLOSE_LISTENER = "pass.Close.listener"
fld public final static java.lang.String PASS_OK_LISTENER = "pass.OK.listener"
fld public final static java.lang.String PASS_STORE_LISTENER = "pass.Store.listener"
supr java.lang.Object

