all: autogenerated update (2019-02-10)

Update:
- firebasedynamiclinks/v1
- servicecontrol/v1
- storage/v1
- toolresults/v1beta3
- tpu/v1
- tpu/v1alpha1
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-api.json b/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
index f33a7de..e3e8bdb 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
@@ -223,7 +223,7 @@
       }
     }
   },
-  "revision": "20190105",
+  "revision": "20190206",
   "rootUrl": "https://firebasedynamiclinks.googleapis.com/",
   "schemas": {
     "AnalyticsInfo": {
@@ -264,6 +264,21 @@
       },
       "type": "object"
     },
+    "AppPreview": {
+      "description": "Customizable parameters on the app preview page.\nThe text fields no longer need translation.",
+      "id": "AppPreview",
+      "properties": {
+        "openButtonText": {
+          "description": "Text that appears on the button to open up the app. Optional\nDefaults to \"Open\"",
+          "type": "string"
+        },
+        "savePositionText": {
+          "description": "Text that asks if user wants to save place in app. Optional.\nDefaults to \"Save my place in the app. A link will be copied to continue\nto this page\"",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "CreateManagedShortLinkRequest": {
       "description": "Request to create a managed Short Dynamic Link.",
       "id": "CreateManagedShortLinkRequest",
@@ -468,6 +483,10 @@
           "$ref": "AndroidInfo",
           "description": "Android related information. See Android related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/create-manually)."
         },
+        "appPreview": {
+          "$ref": "AppPreview",
+          "description": "Optional customizable parameters on the app preview page"
+        },
         "desktopInfo": {
           "$ref": "DesktopInfo",
           "description": "Desktop related information. See desktop related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/create-manually)."
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
index a0f67b1..0f2259c 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
@@ -187,6 +187,45 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// AppPreview: Customizable parameters on the app preview page.
+// The text fields no longer need translation.
+type AppPreview struct {
+	// OpenButtonText: Text that appears on the button to open up the app.
+	// Optional
+	// Defaults to "Open"
+	OpenButtonText string `json:"openButtonText,omitempty"`
+
+	// SavePositionText: Text that asks if user wants to save place in app.
+	// Optional.
+	// Defaults to "Save my place in the app. A link will be copied to
+	// continue
+	// to this page"
+	SavePositionText string `json:"savePositionText,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OpenButtonText") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "OpenButtonText") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AppPreview) MarshalJSON() ([]byte, error) {
+	type NoMethod AppPreview
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // CreateManagedShortLinkRequest: Request to create a managed Short
 // Dynamic Link.
 type CreateManagedShortLinkRequest struct {
@@ -536,6 +575,9 @@
 	// ate-manually).
 	AndroidInfo *AndroidInfo `json:"androidInfo,omitempty"`
 
+	// AppPreview: Optional customizable parameters on the app preview page
+	AppPreview *AppPreview `json:"appPreview,omitempty"`
+
 	// DesktopInfo: Desktop related information. See desktop related
 	// parameters in
 	// the
diff --git a/servicecontrol/v1/servicecontrol-api.json b/servicecontrol/v1/servicecontrol-api.json
index d646fc3..a52c429 100644
--- a/servicecontrol/v1/servicecontrol-api.json
+++ b/servicecontrol/v1/servicecontrol-api.json
@@ -196,7 +196,7 @@
       }
     }
   },
-  "revision": "20190128",
+  "revision": "20190204",
   "rootUrl": "https://servicecontrol.googleapis.com/",
   "schemas": {
     "AllocateInfo": {
@@ -1021,7 +1021,7 @@
       "id": "Operation",
       "properties": {
         "consumerId": {
-          "description": "Identity of the consumer who is using the service.\nThis field should be filled in for the operations initiated by a\nconsumer, but not for service-initiated operations that are\nnot related to a specific consumer.\n\nThis can be in one of the following formats:\n  project:\u003cproject_id\u003e,\n  project_number:\u003cproject_number\u003e,\n  api_key:\u003capi_key\u003e.",
+          "description": "Identity of the consumer who is using the service.\nThis field should be filled in for the operations initiated by a\nconsumer, but not for service-initiated operations that are\nnot related to a specific consumer.\n\n- This can be in one of the following formats:\n    - project:PROJECT_ID,\n    - project`_`number:PROJECT_NUMBER,\n    - api`_`key:API_KEY.",
           "type": "string"
         },
         "endTime": {
diff --git a/servicecontrol/v1/servicecontrol-gen.go b/servicecontrol/v1/servicecontrol-gen.go
index d9e1b61..4bee850 100644
--- a/servicecontrol/v1/servicecontrol-gen.go
+++ b/servicecontrol/v1/servicecontrol-gen.go
@@ -1561,10 +1561,10 @@
 	// consumer, but not for service-initiated operations that are
 	// not related to a specific consumer.
 	//
-	// This can be in one of the following formats:
-	//   project:<project_id>,
-	//   project_number:<project_number>,
-	//   api_key:<api_key>.
+	// - This can be in one of the following formats:
+	//     - project:PROJECT_ID,
+	//     - project`_`number:PROJECT_NUMBER,
+	//     - api`_`key:API_KEY.
 	ConsumerId string `json:"consumerId,omitempty"`
 
 	// EndTime: End time of the operation.
diff --git a/storage/v1/storage-api.json b/storage/v1/storage-api.json
index 49d0a51..0342a63 100644
--- a/storage/v1/storage-api.json
+++ b/storage/v1/storage-api.json
@@ -26,7 +26,7 @@
   "description": "Stores and retrieves potentially large, immutable data objects.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/KPalWULMnQfaqumeaBhBrVfHFNM\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/5J1bGH010PqoE1O9vmClDRlYmZI\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
     "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
@@ -2766,7 +2766,7 @@
       }
     }
   },
-  "revision": "20181109",
+  "revision": "20190129",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Bucket": {
@@ -2859,6 +2859,7 @@
           "description": "The bucket's IAM configuration.",
           "properties": {
             "bucketPolicyOnly": {
+              "description": "The bucket's Bucket Policy Only configuration.",
               "properties": {
                 "enabled": {
                   "description": "If set, access checks only use bucket-level IAM policies or above.",
@@ -3295,6 +3296,34 @@
       },
       "type": "object"
     },
+    "Expr": {
+      "description": "Represents an expression text. Example: title: \"User account presence\" description: \"Determines whether the request has a user account\" expression: \"size(request.user) \u003e 0\"",
+      "id": "Expr",
+      "properties": {
+        "description": {
+          "description": "An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+          "type": "string"
+        },
+        "expression": {
+          "description": "Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported.",
+          "type": "string"
+        },
+        "kind": {
+          "default": "storage#expr",
+          "description": "The kind of item this is. For storage, this is always storage#expr. This field is ignored on input.",
+          "type": "string"
+        },
+        "location": {
+          "description": "An optional string indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+          "type": "string"
+        },
+        "title": {
+          "description": "An optional title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Notification": {
       "description": "A subscription to receive Google PubSub notifications.",
       "id": "Notification",
@@ -3695,7 +3724,8 @@
           "items": {
             "properties": {
               "condition": {
-                "type": "any"
+                "$ref": "Expr",
+                "description": "The condition that is associated with this binding. NOTE: an unsatisfied condition will not allow user access via current binding. Different bindings, including their conditions, are examined independently."
               },
               "members": {
                 "annotations": {
diff --git a/storage/v1/storage-gen.go b/storage/v1/storage-gen.go
index 53b4e22..641383d 100644
--- a/storage/v1/storage-gen.go
+++ b/storage/v1/storage-gen.go
@@ -449,6 +449,7 @@
 
 // BucketIamConfiguration: The bucket's IAM configuration.
 type BucketIamConfiguration struct {
+	// BucketPolicyOnly: The bucket's Bucket Policy Only configuration.
 	BucketPolicyOnly *BucketIamConfigurationBucketPolicyOnly `json:"bucketPolicyOnly,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "BucketPolicyOnly") to
@@ -475,6 +476,8 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BucketIamConfigurationBucketPolicyOnly: The bucket's Bucket Policy
+// Only configuration.
 type BucketIamConfigurationBucketPolicyOnly struct {
 	// Enabled: If set, access checks only use bucket-level IAM policies or
 	// above.
@@ -1201,6 +1204,57 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// Expr: Represents an expression text. Example: title: "User account
+// presence" description: "Determines whether the request has a user
+// account" expression: "size(request.user) > 0"
+type Expr struct {
+	// Description: An optional description of the expression. This is a
+	// longer text which describes the expression, e.g. when hovered over it
+	// in a UI.
+	Description string `json:"description,omitempty"`
+
+	// Expression: Textual representation of an expression in Common
+	// Expression Language syntax. The application context of the containing
+	// message determines which well-known feature set of CEL is supported.
+	Expression string `json:"expression,omitempty"`
+
+	// Kind: The kind of item this is. For storage, this is always
+	// storage#expr. This field is ignored on input.
+	Kind string `json:"kind,omitempty"`
+
+	// Location: An optional string indicating the location of the
+	// expression for error reporting, e.g. a file name and a position in
+	// the file.
+	Location string `json:"location,omitempty"`
+
+	// Title: An optional title for the expression, i.e. a short string
+	// describing its purpose. This can be used e.g. in UIs which allow to
+	// enter the expression.
+	Title string `json:"title,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Expr) MarshalJSON() ([]byte, error) {
+	type NoMethod Expr
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Notification: A subscription to receive Google PubSub notifications.
 type Notification struct {
 	// CustomAttributes: An optional list of additional attributes to attach
@@ -1784,7 +1838,11 @@
 }
 
 type PolicyBindings struct {
-	Condition interface{} `json:"condition,omitempty"`
+	// Condition: The condition that is associated with this binding. NOTE:
+	// an unsatisfied condition will not allow user access via current
+	// binding. Different bindings, including their conditions, are examined
+	// independently.
+	Condition *Expr `json:"condition,omitempty"`
 
 	// Members: A collection of identifiers for members who may assume the
 	// provided role. Recognized identifiers are as follows:
diff --git a/toolresults/v1beta3/toolresults-api.json b/toolresults/v1beta3/toolresults-api.json
index 85d2303..d88acd5 100644
--- a/toolresults/v1beta3/toolresults-api.json
+++ b/toolresults/v1beta3/toolresults-api.json
@@ -15,7 +15,7 @@
   "description": "Reads and publishes results from Firebase Test Lab.",
   "discoveryVersion": "v1",
   "documentationLink": "https://firebase.google.com/docs/test-lab/",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/3PU0tfPO0Ff5odyEdFP_aystsQs\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/4klElBDrVMG1VukQ-i6HEIPiaCI\"",
   "icons": {
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
     "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
@@ -1161,7 +1161,7 @@
       }
     }
   },
-  "revision": "20190128",
+  "revision": "20190207",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AndroidAppInfo": {
@@ -1659,6 +1659,35 @@
       },
       "type": "object"
     },
+    "IndividualOutcome": {
+      "description": "Step Id and outcome of each individual step that was run as a group with other steps with the same configuration.",
+      "id": "IndividualOutcome",
+      "properties": {
+        "outcomeSummary": {
+          "enum": [
+            "failure",
+            "flaky",
+            "inconclusive",
+            "skipped",
+            "success",
+            "unset"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        },
+        "stepId": {
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "ListExecutionsResponse": {
       "id": "ListExecutionsResponse",
       "properties": {
@@ -1788,6 +1817,26 @@
       },
       "type": "object"
     },
+    "MultiStep": {
+      "description": "Details when multiple steps are run with the same configuration as a group.",
+      "id": "MultiStep",
+      "properties": {
+        "multistepNumber": {
+          "description": "Unique int given to each step. Ranges from 0(inclusive) to total number of steps(exclusive). The primary step is 0.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "primaryStep": {
+          "$ref": "PrimaryStep",
+          "description": "Present if it is a primary (original) step."
+        },
+        "primaryStepId": {
+          "description": "Step Id of the primary (original) step, which might be this step.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Outcome": {
       "description": "Interprets a result so that humans and machines can act on it.",
       "id": "Outcome",
@@ -1948,6 +1997,40 @@
       },
       "type": "object"
     },
+    "PrimaryStep": {
+      "description": "Stores rollup test status of multiple steps that were run as a group and outcome of each individual step.",
+      "id": "PrimaryStep",
+      "properties": {
+        "individualOutcome": {
+          "description": "Step Id and outcome of each individual step.",
+          "items": {
+            "$ref": "IndividualOutcome"
+          },
+          "type": "array"
+        },
+        "rollUp": {
+          "description": "Rollup test status of multiple steps that were run with the same configuration as a group.",
+          "enum": [
+            "failure",
+            "flaky",
+            "inconclusive",
+            "skipped",
+            "success",
+            "unset"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "ProjectSettings": {
       "description": "Per-project settings for the Tool Results service.",
       "id": "ProjectSettings",
@@ -2125,6 +2208,10 @@
           },
           "type": "array"
         },
+        "multiStep": {
+          "$ref": "MultiStep",
+          "description": "Details when multiple steps are run with the same configuration as a group. These details can be used identify which group this step is part of. It also identifies the groups 'primary step' which indexes all the group members.\n\n- In response: present if previously set. - In create request: optional, set iff this step was performed more than once. - In update request: optional"
+        },
         "name": {
           "description": "A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build\n\nA PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.\n\n- In response: always set - In create request: always set - In update request: never set",
           "type": "string"
diff --git a/toolresults/v1beta3/toolresults-gen.go b/toolresults/v1beta3/toolresults-gen.go
index e45eebc..36a5f0c 100644
--- a/toolresults/v1beta3/toolresults-gen.go
+++ b/toolresults/v1beta3/toolresults-gen.go
@@ -1184,6 +1184,44 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// IndividualOutcome: Step Id and outcome of each individual step that
+// was run as a group with other steps with the same configuration.
+type IndividualOutcome struct {
+	// Possible values:
+	//   "failure"
+	//   "flaky"
+	//   "inconclusive"
+	//   "skipped"
+	//   "success"
+	//   "unset"
+	OutcomeSummary string `json:"outcomeSummary,omitempty"`
+
+	StepId string `json:"stepId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OutcomeSummary") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "OutcomeSummary") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *IndividualOutcome) MarshalJSON() ([]byte, error) {
+	type NoMethod IndividualOutcome
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type ListExecutionsResponse struct {
 	// Executions: Executions.
 	//
@@ -1484,6 +1522,45 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// MultiStep: Details when multiple steps are run with the same
+// configuration as a group.
+type MultiStep struct {
+	// MultistepNumber: Unique int given to each step. Ranges from
+	// 0(inclusive) to total number of steps(exclusive). The primary step is
+	// 0.
+	MultistepNumber int64 `json:"multistepNumber,omitempty"`
+
+	// PrimaryStep: Present if it is a primary (original) step.
+	PrimaryStep *PrimaryStep `json:"primaryStep,omitempty"`
+
+	// PrimaryStepId: Step Id of the primary (original) step, which might be
+	// this step.
+	PrimaryStepId string `json:"primaryStepId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "MultistepNumber") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "MultistepNumber") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *MultiStep) MarshalJSON() ([]byte, error) {
+	type NoMethod MultiStep
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Outcome: Interprets a result so that humans and machines can act on
 // it.
 type Outcome struct {
@@ -1746,6 +1823,48 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// PrimaryStep: Stores rollup test status of multiple steps that were
+// run as a group and outcome of each individual step.
+type PrimaryStep struct {
+	// IndividualOutcome: Step Id and outcome of each individual step.
+	IndividualOutcome []*IndividualOutcome `json:"individualOutcome,omitempty"`
+
+	// RollUp: Rollup test status of multiple steps that were run with the
+	// same configuration as a group.
+	//
+	// Possible values:
+	//   "failure"
+	//   "flaky"
+	//   "inconclusive"
+	//   "skipped"
+	//   "success"
+	//   "unset"
+	RollUp string `json:"rollUp,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndividualOutcome")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "IndividualOutcome") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PrimaryStep) MarshalJSON() ([]byte, error) {
+	type NoMethod PrimaryStep
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ProjectSettings: Per-project settings for the Tool Results service.
 type ProjectSettings struct {
 	// DefaultBucket: The name of the Google Cloud Storage bucket to which
@@ -2210,6 +2329,16 @@
 	// and any new value for an existing key will update that key's value
 	Labels []*StepLabelsEntry `json:"labels,omitempty"`
 
+	// MultiStep: Details when multiple steps are run with the same
+	// configuration as a group. These details can be used identify which
+	// group this step is part of. It also identifies the groups 'primary
+	// step' which indexes all the group members.
+	//
+	// - In response: present if previously set. - In create request:
+	// optional, set iff this step was performed more than once. - In update
+	// request: optional
+	MultiStep *MultiStep `json:"multiStep,omitempty"`
+
 	// Name: A short human-readable name to display in the UI. Maximum of
 	// 100 characters. For example: Clean build
 	//
diff --git a/tpu/v1/tpu-api.json b/tpu/v1/tpu-api.json
index aed51d8..9c924d5 100644
--- a/tpu/v1/tpu-api.json
+++ b/tpu/v1/tpu-api.json
@@ -658,7 +658,7 @@
       }
     }
   },
-  "revision": "20181010",
+  "revision": "20190205",
   "rootUrl": "https://tpu.googleapis.com/",
   "schemas": {
     "AcceleratorType": {
@@ -855,14 +855,18 @@
           "enum": [
             "HEALTH_UNSPECIFIED",
             "HEALTHY",
-            "UNHEALTHY",
-            "TIMEOUT"
+            "DEPRECATED_UNHEALTHY",
+            "TIMEOUT",
+            "UNHEALTHY_TENSORFLOW",
+            "UNHEALTHY_MAINTENANCE"
           ],
           "enumDescriptions": [
             "Health status is unknown: not initialized or failed to retrieve.",
             "The resource is healthy.",
             "The resource is unhealthy.",
-            "The resource is unresponsive."
+            "The resource is unresponsive.",
+            "The in-guest ML stack is unhealthy.",
+            "The node is under maintenance/priority boost caused rescheduling and\nwill resume running once rescheduled."
           ],
           "type": "string"
         },
diff --git a/tpu/v1/tpu-gen.go b/tpu/v1/tpu-gen.go
index c310407..45a15cb 100644
--- a/tpu/v1/tpu-gen.go
+++ b/tpu/v1/tpu-gen.go
@@ -510,8 +510,12 @@
 	//   "HEALTH_UNSPECIFIED" - Health status is unknown: not initialized or
 	// failed to retrieve.
 	//   "HEALTHY" - The resource is healthy.
-	//   "UNHEALTHY" - The resource is unhealthy.
+	//   "DEPRECATED_UNHEALTHY" - The resource is unhealthy.
 	//   "TIMEOUT" - The resource is unresponsive.
+	//   "UNHEALTHY_TENSORFLOW" - The in-guest ML stack is unhealthy.
+	//   "UNHEALTHY_MAINTENANCE" - The node is under maintenance/priority
+	// boost caused rescheduling and
+	// will resume running once rescheduled.
 	Health string `json:"health,omitempty"`
 
 	// HealthDescription: Output only.
diff --git a/tpu/v1alpha1/tpu-api.json b/tpu/v1alpha1/tpu-api.json
index 2bea016..074b44e 100644
--- a/tpu/v1alpha1/tpu-api.json
+++ b/tpu/v1alpha1/tpu-api.json
@@ -658,7 +658,7 @@
       }
     }
   },
-  "revision": "20181010",
+  "revision": "20190205",
   "rootUrl": "https://tpu.googleapis.com/",
   "schemas": {
     "AcceleratorType": {
@@ -855,14 +855,18 @@
           "enum": [
             "HEALTH_UNSPECIFIED",
             "HEALTHY",
-            "UNHEALTHY",
-            "TIMEOUT"
+            "DEPRECATED_UNHEALTHY",
+            "TIMEOUT",
+            "UNHEALTHY_TENSORFLOW",
+            "UNHEALTHY_MAINTENANCE"
           ],
           "enumDescriptions": [
             "Health status is unknown: not initialized or failed to retrieve.",
             "The resource is healthy.",
             "The resource is unhealthy.",
-            "The resource is unresponsive."
+            "The resource is unresponsive.",
+            "The in-guest ML stack is unhealthy.",
+            "The node is under maintenance/priority boost caused rescheduling and\nwill resume running once rescheduled."
           ],
           "type": "string"
         },
diff --git a/tpu/v1alpha1/tpu-gen.go b/tpu/v1alpha1/tpu-gen.go
index 5712b55..205a48f 100644
--- a/tpu/v1alpha1/tpu-gen.go
+++ b/tpu/v1alpha1/tpu-gen.go
@@ -510,8 +510,12 @@
 	//   "HEALTH_UNSPECIFIED" - Health status is unknown: not initialized or
 	// failed to retrieve.
 	//   "HEALTHY" - The resource is healthy.
-	//   "UNHEALTHY" - The resource is unhealthy.
+	//   "DEPRECATED_UNHEALTHY" - The resource is unhealthy.
 	//   "TIMEOUT" - The resource is unresponsive.
+	//   "UNHEALTHY_TENSORFLOW" - The in-guest ML stack is unhealthy.
+	//   "UNHEALTHY_MAINTENANCE" - The node is under maintenance/priority
+	// boost caused rescheduling and
+	// will resume running once rescheduled.
 	Health string `json:"health,omitempty"`
 
 	// HealthDescription: Output only.