package test

public open class MapExample</*0*/ K : kotlin.Any!, /*1*/ V : kotlin.Any!> : java.util.HashMap<K!, V!> {
    public constructor MapExample</*0*/ K : kotlin.Any!, /*1*/ V : kotlin.Any!>()
    public open /*fake_override*/ val entries: kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K!, V!>>
    invisible_fake final /*fake_override*/ var entrySet: kotlin.collections.(Mutable)Set<kotlin.collections.(Mutable)Map.(Mutable)Entry<K!, V!>!>!
    invisible_fake final /*fake_override*/ var hashSeed: kotlin.Int
    invisible_fake final /*fake_override*/ var keySet: kotlin.collections.(Mutable)Set<K!>!
    public open /*fake_override*/ val keys: kotlin.collections.MutableSet<K!>
    invisible_fake final /*fake_override*/ val loadFactor: kotlin.Float
    invisible_fake final /*fake_override*/ var modCount: kotlin.Int
    invisible_fake final /*fake_override*/ var size: kotlin.Int
    public open /*fake_override*/ val size: kotlin.Int
    invisible_fake final /*fake_override*/ var table: kotlin.Array<(out) java.util.HashMap.Entry<K!, V!>!>!
    invisible_fake final /*fake_override*/ var threshold: kotlin.Int
    invisible_fake final /*fake_override*/ var values: kotlin.collections.(Mutable)Collection<V!>!
    public open /*fake_override*/ val values: kotlin.collections.MutableCollection<V!>
    invisible_fake open /*fake_override*/ fun addEntry(/*0*/ kotlin.Int, /*1*/ K!, /*2*/ V!, /*3*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun capacity(): kotlin.Int
    public open /*fake_override*/ fun clear(): kotlin.Unit
    public open /*fake_override*/ fun clone(): kotlin.Any
    public open /*fake_override*/ fun containsKey(/*0*/ K!): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun containsNullValue(): kotlin.Boolean
    public open /*fake_override*/ fun containsValue(/*0*/ V!): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun createEntry(/*0*/ kotlin.Int, /*1*/ K!, /*2*/ V!, /*3*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun entrySet0(): kotlin.collections.(Mutable)Set<kotlin.collections.(Mutable)Map.(Mutable)Entry<K!, V!>!>!
    public open /*fake_override*/ fun get(/*0*/ K!): V?
    invisible_fake final /*fake_override*/ fun getEntry(/*0*/ kotlin.Any!): java.util.HashMap.Entry<K!, V!>!
    invisible_fake open /*fake_override*/ fun getForNullKey(): V!
    invisible_fake final /*fake_override*/ fun hash(/*0*/ kotlin.Any!): kotlin.Int
    invisible_fake open /*fake_override*/ fun inflateTable(/*0*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun init(): kotlin.Unit
    invisible_fake final /*fake_override*/ fun initHashSeedAsNeeded(/*0*/ kotlin.Int): kotlin.Boolean
    public open /*fake_override*/ fun isEmpty(): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun loadFactor(): kotlin.Float
    invisible_fake open /*fake_override*/ fun newEntryIterator(): kotlin.collections.(Mutable)Iterator<kotlin.collections.(Mutable)Map.(Mutable)Entry<K!, V!>!>!
    invisible_fake open /*fake_override*/ fun newKeyIterator(): kotlin.collections.(Mutable)Iterator<K!>!
    invisible_fake open /*fake_override*/ fun newValueIterator(): kotlin.collections.(Mutable)Iterator<V!>!
    public open /*fake_override*/ fun put(/*0*/ K!, /*1*/ V!): V?
    public open /*fake_override*/ fun putAll(/*0*/ kotlin.collections.Map<out K!, V!>): kotlin.Unit
    invisible_fake open /*fake_override*/ fun putAllForCreate(/*0*/ (kotlin.collections.MutableMap<out K!, out V!>..kotlin.collections.Map<out K!, V!>?)): kotlin.Unit
    invisible_fake open /*fake_override*/ fun putForCreate(/*0*/ K!, /*1*/ V!): kotlin.Unit
    invisible_fake open /*fake_override*/ fun putForNullKey(/*0*/ V!): V!
    invisible_fake open /*fake_override*/ fun readObject(/*0*/ java.io.ObjectInputStream!): kotlin.Unit
    public open /*fake_override*/ fun remove(/*0*/ K!): V?
    invisible_fake final /*fake_override*/ fun removeEntryForKey(/*0*/ kotlin.Any!): java.util.HashMap.Entry<K!, V!>!
    invisible_fake final /*fake_override*/ fun removeMapping(/*0*/ kotlin.Any!): java.util.HashMap.Entry<K!, V!>!
    invisible_fake open /*fake_override*/ fun resize(/*0*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun transfer(/*0*/ kotlin.Array<(out) java.util.HashMap.Entry<(raw) kotlin.Any!, (raw) kotlin.Any!>!>!, /*1*/ kotlin.Boolean): kotlin.Unit
    invisible_fake open /*fake_override*/ fun writeObject(/*0*/ java.io.ObjectOutputStream!): kotlin.Unit

    // Static members
    invisible_fake const final /*fake_override*/ val ALTERNATIVE_HASHING_THRESHOLD_DEFAULT: kotlin.Int
    invisible_fake const final /*fake_override*/ val DEFAULT_INITIAL_CAPACITY: kotlin.Int
    invisible_fake const final /*fake_override*/ val DEFAULT_LOAD_FACTOR: kotlin.Float
    invisible_fake final /*fake_override*/ val EMPTY_TABLE: kotlin.Array<(out) java.util.HashMap.Entry<*, *>!>!
    invisible_fake const final /*fake_override*/ val MAXIMUM_CAPACITY: kotlin.Int
    invisible_fake const final /*fake_override*/ val serialVersionUID: kotlin.Long
    invisible_fake open /*fake_override*/ fun eq(/*0*/ kotlin.Any!, /*1*/ kotlin.Any!): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun indexFor(/*0*/ kotlin.Int, /*1*/ kotlin.Int): kotlin.Int
    invisible_fake open /*fake_override*/ fun roundUpToPowerOf2(/*0*/ kotlin.Int): kotlin.Int
}

public final class MapImpl</*0*/ V> : test.MapExample<kotlin.String, V>, kotlin.collections.MutableMap<kotlin.String, V> {
    public constructor MapImpl</*0*/ V>()
    public open /*fake_override*/ val entries: kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<kotlin.String!, V!>>
    invisible_fake final /*fake_override*/ var entrySet: kotlin.collections.(Mutable)Set<kotlin.collections.(Mutable)Map.(Mutable)Entry<kotlin.String!, V!>!>!
    invisible_fake final /*fake_override*/ var hashSeed: kotlin.Int
    invisible_fake final /*fake_override*/ var keySet: kotlin.collections.(Mutable)Set<kotlin.String!>!
    public open /*fake_override*/ val keys: kotlin.collections.MutableSet<kotlin.String!>
    invisible_fake final /*fake_override*/ val loadFactor: kotlin.Float
    invisible_fake final /*fake_override*/ var modCount: kotlin.Int
    invisible_fake final /*fake_override*/ var size: kotlin.Int
    public open /*fake_override*/ val size: kotlin.Int
    invisible_fake final /*fake_override*/ var table: kotlin.Array<(out) java.util.HashMap.Entry<kotlin.String!, V!>!>!
    invisible_fake final /*fake_override*/ var threshold: kotlin.Int
    invisible_fake final /*fake_override*/ var values: kotlin.collections.(Mutable)Collection<V!>!
    public open /*fake_override*/ val values: kotlin.collections.MutableCollection<V!>
    invisible_fake open /*fake_override*/ fun addEntry(/*0*/ kotlin.Int, /*1*/ kotlin.String!, /*2*/ V!, /*3*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun capacity(): kotlin.Int
    public open /*fake_override*/ fun clear(): kotlin.Unit
    public open /*fake_override*/ fun clone(): kotlin.Any
    public open /*fake_override*/ fun containsKey(/*0*/ kotlin.String!): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun containsNullValue(): kotlin.Boolean
    public open /*fake_override*/ fun containsValue(/*0*/ V!): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun createEntry(/*0*/ kotlin.Int, /*1*/ kotlin.String!, /*2*/ V!, /*3*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun entrySet0(): kotlin.collections.(Mutable)Set<kotlin.collections.(Mutable)Map.(Mutable)Entry<kotlin.String!, V!>!>!
    public open /*fake_override*/ fun get(/*0*/ kotlin.String!): V?
    invisible_fake final /*fake_override*/ fun getEntry(/*0*/ kotlin.Any!): java.util.HashMap.Entry<kotlin.String!, V!>!
    invisible_fake open /*fake_override*/ fun getForNullKey(): V!
    invisible_fake final /*fake_override*/ fun hash(/*0*/ kotlin.Any!): kotlin.Int
    invisible_fake open /*fake_override*/ fun inflateTable(/*0*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun init(): kotlin.Unit
    invisible_fake final /*fake_override*/ fun initHashSeedAsNeeded(/*0*/ kotlin.Int): kotlin.Boolean
    public open /*fake_override*/ fun isEmpty(): kotlin.Boolean
    invisible_fake open /*fake_override*/ fun loadFactor(): kotlin.Float
    invisible_fake open /*fake_override*/ fun newEntryIterator(): kotlin.collections.(Mutable)Iterator<kotlin.collections.(Mutable)Map.(Mutable)Entry<kotlin.String!, V!>!>!
    invisible_fake open /*fake_override*/ fun newKeyIterator(): kotlin.collections.(Mutable)Iterator<kotlin.String!>!
    invisible_fake open /*fake_override*/ fun newValueIterator(): kotlin.collections.(Mutable)Iterator<V!>!
    public open /*fake_override*/ fun put(/*0*/ kotlin.String!, /*1*/ V!): V?
    public open /*fake_override*/ fun putAll(/*0*/ kotlin.collections.Map<out kotlin.String!, V!>): kotlin.Unit
    invisible_fake open /*fake_override*/ fun putAllForCreate(/*0*/ (kotlin.collections.MutableMap<out kotlin.String!, out V!>..kotlin.collections.Map<out kotlin.String!, V!>?)): kotlin.Unit
    invisible_fake open /*fake_override*/ fun putForCreate(/*0*/ kotlin.String!, /*1*/ V!): kotlin.Unit
    invisible_fake open /*fake_override*/ fun putForNullKey(/*0*/ V!): V!
    invisible_fake open /*fake_override*/ fun readObject(/*0*/ java.io.ObjectInputStream!): kotlin.Unit
    public open /*fake_override*/ fun remove(/*0*/ kotlin.String!): V?
    invisible_fake final /*fake_override*/ fun removeEntryForKey(/*0*/ kotlin.Any!): java.util.HashMap.Entry<kotlin.String!, V!>!
    invisible_fake final /*fake_override*/ fun removeMapping(/*0*/ kotlin.Any!): java.util.HashMap.Entry<kotlin.String!, V!>!
    invisible_fake open /*fake_override*/ fun resize(/*0*/ kotlin.Int): kotlin.Unit
    invisible_fake open /*fake_override*/ fun transfer(/*0*/ kotlin.Array<(out) java.util.HashMap.Entry<(raw) kotlin.Any!, (raw) kotlin.Any!>!>!, /*1*/ kotlin.Boolean): kotlin.Unit
    invisible_fake open /*fake_override*/ fun writeObject(/*0*/ java.io.ObjectOutputStream!): kotlin.Unit
}
