class Tuple {

  private final List<Object> values;

  public Tuple(Object... values) {
    this.values = list(values);
  }

  public Object[] toArray() {
    return values.toArray();
  }

  public List<Object> toList() {
    return values;
  }

  @Override
  public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}

  @Override
  public int hashCode() {
    return Arrays.deepHashCode(values.toArray());
  }

  @Override
  public String toString() {
    return CONFIGURATION_PROVIDER.representation().toStringOf(this);
  }

  public static Tuple tuple(Object... values) {
    return new Tuple(values);
  }

}

    if (this == obj) return true;
    if (!(obj instanceof Tuple)) return false;
    Tuple other = (Tuple) obj;
    return Arrays.deepEquals(values.toArray(), other.values.toArray());
  
<no_super_class>