@java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    hash = (37 * hash) + NAME_FIELD_NUMBER;
    hash = (53 * hash) + getName().hashCode();
    hash = (37 * hash) + SOURCE_VM_ID_FIELD_NUMBER;
    hash = (53 * hash) + getSourceVmId().hashCode();
    hash = (37 * hash) + DISPLAY_NAME_FIELD_NUMBER;
    hash = (53 * hash) + getDisplayName().hashCode();
    hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
    hash = (53 * hash) + getDescription().hashCode();
    if (hasPolicy()) {
      hash = (37 * hash) + POLICY_FIELD_NUMBER;
      hash = (53 * hash) + getPolicy().hashCode();
    }
    if (hasCreateTime()) {
      hash = (37 * hash) + CREATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getCreateTime().hashCode();
    }
    if (hasUpdateTime()) {
      hash = (37 * hash) + UPDATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getUpdateTime().hashCode();
    }
    if (hasLastSync()) {
      hash = (37 * hash) + LAST_SYNC_FIELD_NUMBER;
      hash = (53 * hash) + getLastSync().hashCode();
    }
    hash = (37 * hash) + STATE_FIELD_NUMBER;
    hash = (53 * hash) + state_;
    if (hasStateTime()) {
      hash = (37 * hash) + STATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getStateTime().hashCode();
    }
    if (hasCurrentSyncInfo()) {
      hash = (37 * hash) + CURRENT_SYNC_INFO_FIELD_NUMBER;
      hash = (53 * hash) + getCurrentSyncInfo().hashCode();
    }
    hash = (37 * hash) + GROUP_FIELD_NUMBER;
    hash = (53 * hash) + getGroup().hashCode();
    if (!internalGetLabels().getMap().isEmpty()) {
      hash = (37 * hash) + LABELS_FIELD_NUMBER;
      hash = (53 * hash) + internalGetLabels().hashCode();
    }
    if (getRecentCloneJobsCount() > 0) {
      hash = (37 * hash) + RECENT_CLONE_JOBS_FIELD_NUMBER;
      hash = (53 * hash) + getRecentCloneJobsList().hashCode();
    }
    if (hasError()) {
      hash = (37 * hash) + ERROR_FIELD_NUMBER;
      hash = (53 * hash) + getError().hashCode();
    }
    if (getRecentCutoverJobsCount() > 0) {
      hash = (37 * hash) + RECENT_CUTOVER_JOBS_FIELD_NUMBER;
      hash = (53 * hash) + getRecentCutoverJobsList().hashCode();
    }
    switch (targetVmDefaultsCase_) {
      case 26:
        hash = (37 * hash) + COMPUTE_ENGINE_TARGET_DEFAULTS_FIELD_NUMBER;
        hash = (53 * hash) + getComputeEngineTargetDefaults().hashCode();
        break;
      case 0:
      default:
    }
    switch (sourceVmDetailsCase_) {
      case 29:
        hash = (37 * hash) + AWS_SOURCE_VM_DETAILS_FIELD_NUMBER;
        hash = (53 * hash) + getAwsSourceVmDetails().hashCode();
        break;
      case 0:
      default:
    }
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }
<pre>
Output only. The recent cutover jobs performed on the migrating VM.
This field holds the vm's last completed cutover job and the vm's
running cutover job, if one exists.
Note: To have this field populated you need to explicitly request it via
the "view" parameter of the Get/List request.
</pre>

<code>
repeated .google.cloud.vmmigration.v1.CutoverJob recent_cutover_jobs = 20 [(.google.api.field_behavior) = OUTPUT_ONLY];
</code>
java-vmmigration/proto-google-cloud-vmmigration-v1/src/main/java/com/google/cloud/vmmigration/v1/MigratingVm.java