@Override
  public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null) return false;

    if (obj instanceof InstanceStatus == false) return false;
    InstanceStatus other = (InstanceStatus) obj;

    if (other.getInstanceId() == null ^ this.getInstanceId() == null) return false;
    if (other.getInstanceId() != null
        && other.getInstanceId().equals(this.getInstanceId()) == false) return false;
    if (other.getAvailabilityZone() == null ^ this.getAvailabilityZone() == null) return false;
    if (other.getAvailabilityZone() != null
        && other.getAvailabilityZone().equals(this.getAvailabilityZone()) == false) return false;
    if (other.getEvents() == null ^ this.getEvents() == null) return false;
    if (other.getEvents() != null && other.getEvents().equals(this.getEvents()) == false)
      return false;
    if (other.getInstanceState() == null ^ this.getInstanceState() == null) return false;
    if (other.getInstanceState() != null
        && other.getInstanceState().equals(this.getInstanceState()) == false) return false;
    if (other.getSystemStatus() == null ^ this.getSystemStatus() == null) return false;
    if (other.getSystemStatus() != null
        && other.getSystemStatus().equals(this.getSystemStatus()) == false) return false;
    if (other.getInstanceStatus() == null ^ this.getInstanceStatus() == null) return false;
    if (other.getInstanceStatus() != null
        && other.getInstanceStatus().equals(this.getInstanceStatus()) == false) return false;
    return true;
  }