// Path: collection/src/main/java/com/github/andrewoma/dexx/collection/List.java
// public interface List<E> extends Iterable<E> {
//     /**
//      * Returns the element at the specified index in this list (zero-based).
//      *
//      * @throws IndexOutOfBoundsException if the index is out of range
//      */
//     E get(int i);
// 
//     /**
//      * Returns a list with the element set to the value specified at the index (zero-based).
//      *
//      * @throws IndexOutOfBoundsException if the index is out of range
//      */
//     @NotNull
//     List<E> set(int i, E elem);
// 
//     /**
//      * Returns a list with the specified element appended to the bottom of the list.
//      */
//     @NotNull
//     List<E> append(E elem);
// 
//     /**
//      * Returns a list with the specified element prepended to the top of the list.
//      */
//     @NotNull
//     List<E> prepend(E elem);
// 
//     /**
//      * Returns the index of the first occurrence of the specified element in the list or -1 if there are no occurrences.
//      */
//     int indexOf(E elem);
// 
//     /**
//      * Returns the index of the last occurrence of the specified element in the list or -1 if there are no occurrences.
//      */
//     int lastIndexOf(E elem);
// 
//     /**
//      * Returns first element in the list or {@code null} if the list is empty.
//      */
//     @Nullable
//     E first();
// 
//     /**
//      * Returns last element in the list or {@code null} if the list is empty.
//      */
//     @Nullable
//     E last();
// 
//     /**
//      * Returns a list containing all elements in the list, excluding the first element. An empty list is
//      * returned if the list is empty.
//      */
//     @NotNull
//     List<E> tail();
// 
//     /**
//      * Returns a list containing all elements in this list, excluding the first {@code number} of elements.
//      */
//     @NotNull
//     List<E> drop(int number);
// 
//     /**
//      * Returns a list containing the first {@code number} of elements from this list.
//      */
//     @NotNull
//     List<E> take(int number);
// 
//     /**
//      * Returns a list containing a contiguous range of elements from this list.
//      *
//      * @param from          starting index for the range (zero-based)
//      * @param fromInclusive if true, the element at the {@code from} index will be included
//      * @param to            end index for the range (zero-based)
//      * @param toInclusive   if true, the element at the {@code to} index will be included
//      */
//     @NotNull
//     List<E> range(int from, boolean fromInclusive, int to, boolean toInclusive);
// 
//     /**
//      * Returns an immutable view of this list as an instance of {@code java.util.List}.
//      */
//     @NotNull
//     java.util.List<E> asList();
// }
// 
// Path: collection/src/main/java/com/github/andrewoma/dexx/collection/internal/adapter/ListAdapater.java
// public class ListAdapater<E> extends AbstractList<E> {
//     private List<E> list;
// 
//     public ListAdapater(List<E> list) {
//         this.list = list;
//     }
// 
//     @Override
//     public int size() {
//         return list.size();
//     }
// 
//     @Override
//     public boolean isEmpty() {
//         return list.isEmpty();
//     }
// 
//     @Override
//     public boolean contains(Object o) {
//         return Adapters.contains(list, o);
//     }
// 
//     @NotNull
//     @Override
//     public Iterator<E> iterator() {
//         return list.iterator();
//     }
// 
//     @NotNull
//     @Override
//     public Object[] toArray() {
//         return list.toArray();
//     }
// 
//     @NotNull
//     @Override
//     public <T> T[] toArray(@NotNull T[] a) {
//         return Adapters.toArray(list, a);
//     }
// 
//     @Override
//     public boolean add(E e) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean remove(Object o) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean containsAll(@NotNull Collection<?> c) {
//         return Adapters.containsAll(list, c);
//     }
// 
//     @Override
//     public boolean addAll(@NotNull Collection<? extends E> c) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean retainAll(@NotNull Collection<?> c) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean removeAll(@NotNull Collection<?> c) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public void clear() {
//         throw new UnsupportedOperationException();
//     }
// 
//     @NotNull
//     @Override
//     public E get(int index) {
//         return list.get(index);
//     }
// }


import com.github.andrewoma.dexx.collection.List;
import com.github.andrewoma.dexx.collection.internal.adapter.ListAdapater;
import org.jetbrains.annotations.NotNull;
import java.util.Iterator;

        if (!(other instanceof List))
            return false;

        Iterator<E> iterator = iterator();
        Iterator otherIterator = ((List) other).iterator();

        while (iterator.hasNext() && otherIterator.hasNext()) {
            E elem = iterator.next();
            Object otherElem = otherIterator.next();
            if (!(elem == null ? otherElem == null : elem.equals(otherElem)))
                return false;
        }

        return !(iterator.hasNext() || otherIterator.hasNext());
    }

    @Override
    public int hashCode() {
        int hashCode = 1;
        for (E elem : this) {
            hashCode = 31 * hashCode + (elem == null ? 0 : elem.hashCode());
        }

        return hashCode;
    }

    @NotNull
    @Override
    public java.util.List<E> asList() {
// Path: collection/src/main/java/com/github/andrewoma/dexx/collection/List.java
// public interface List<E> extends Iterable<E> {
//     /**
//      * Returns the element at the specified index in this list (zero-based).
//      *
//      * @throws IndexOutOfBoundsException if the index is out of range
//      */
//     E get(int i);
// 
//     /**
//      * Returns a list with the element set to the value specified at the index (zero-based).
//      *
//      * @throws IndexOutOfBoundsException if the index is out of range
//      */
//     @NotNull
//     List<E> set(int i, E elem);
// 
//     /**
//      * Returns a list with the specified element appended to the bottom of the list.
//      */
//     @NotNull
//     List<E> append(E elem);
// 
//     /**
//      * Returns a list with the specified element prepended to the top of the list.
//      */
//     @NotNull
//     List<E> prepend(E elem);
// 
//     /**
//      * Returns the index of the first occurrence of the specified element in the list or -1 if there are no occurrences.
//      */
//     int indexOf(E elem);
// 
//     /**
//      * Returns the index of the last occurrence of the specified element in the list or -1 if there are no occurrences.
//      */
//     int lastIndexOf(E elem);
// 
//     /**
//      * Returns first element in the list or {@code null} if the list is empty.
//      */
//     @Nullable
//     E first();
// 
//     /**
//      * Returns last element in the list or {@code null} if the list is empty.
//      */
//     @Nullable
//     E last();
// 
//     /**
//      * Returns a list containing all elements in the list, excluding the first element. An empty list is
//      * returned if the list is empty.
//      */
//     @NotNull
//     List<E> tail();
// 
//     /**
//      * Returns a list containing all elements in this list, excluding the first {@code number} of elements.
//      */
//     @NotNull
//     List<E> drop(int number);
// 
//     /**
//      * Returns a list containing the first {@code number} of elements from this list.
//      */
//     @NotNull
//     List<E> take(int number);
// 
//     /**
//      * Returns a list containing a contiguous range of elements from this list.
//      *
//      * @param from          starting index for the range (zero-based)
//      * @param fromInclusive if true, the element at the {@code from} index will be included
//      * @param to            end index for the range (zero-based)
//      * @param toInclusive   if true, the element at the {@code to} index will be included
//      */
//     @NotNull
//     List<E> range(int from, boolean fromInclusive, int to, boolean toInclusive);
// 
//     /**
//      * Returns an immutable view of this list as an instance of {@code java.util.List}.
//      */
//     @NotNull
//     java.util.List<E> asList();
// }
// 
// Path: collection/src/main/java/com/github/andrewoma/dexx/collection/internal/adapter/ListAdapater.java
// public class ListAdapater<E> extends AbstractList<E> {
//     private List<E> list;
// 
//     public ListAdapater(List<E> list) {
//         this.list = list;
//     }
// 
//     @Override
//     public int size() {
//         return list.size();
//     }
// 
//     @Override
//     public boolean isEmpty() {
//         return list.isEmpty();
//     }
// 
//     @Override
//     public boolean contains(Object o) {
//         return Adapters.contains(list, o);
//     }
// 
//     @NotNull
//     @Override
//     public Iterator<E> iterator() {
//         return list.iterator();
//     }
// 
//     @NotNull
//     @Override
//     public Object[] toArray() {
//         return list.toArray();
//     }
// 
//     @NotNull
//     @Override
//     public <T> T[] toArray(@NotNull T[] a) {
//         return Adapters.toArray(list, a);
//     }
// 
//     @Override
//     public boolean add(E e) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean remove(Object o) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean containsAll(@NotNull Collection<?> c) {
//         return Adapters.containsAll(list, c);
//     }
// 
//     @Override
//     public boolean addAll(@NotNull Collection<? extends E> c) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean retainAll(@NotNull Collection<?> c) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public boolean removeAll(@NotNull Collection<?> c) {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public void clear() {
//         throw new UnsupportedOperationException();
//     }
// 
//     @NotNull
//     @Override
//     public E get(int index) {
//         return list.get(index);
//     }
// }


// Path: collection/src/main/java/com/github/andrewoma/dexx/collection/internal/base/AbstractList.java
import com.github.andrewoma.dexx.collection.List;
import com.github.andrewoma.dexx.collection.internal.adapter.ListAdapater;
import org.jetbrains.annotations.NotNull;
import java.util.Iterator;


        if (!(other instanceof List))
            return false;

        Iterator<E> iterator = iterator();
        Iterator otherIterator = ((List) other).iterator();

        while (iterator.hasNext() && otherIterator.hasNext()) {
            E elem = iterator.next();
            Object otherElem = otherIterator.next();
            if (!(elem == null ? otherElem == null : elem.equals(otherElem)))
                return false;
        }

        return !(iterator.hasNext() || otherIterator.hasNext());
    }

    @Override
    public int hashCode() {
        int hashCode = 1;
        for (E elem : this) {
            hashCode = 31 * hashCode + (elem == null ? 0 : elem.hashCode());
        }

        return hashCode;
    }

    @NotNull
    @Override
    public java.util.List<E> asList() {
        return new ListAdapater<E>(this);