@valon-technologies/gestalt 0.0.1-alpha.36 → 0.0.1-alpha.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/api.ts CHANGED
@@ -2,16 +2,24 @@
2
2
  * Common request and response types shared across authored Gestalt providers.
3
3
  */
4
4
  import type { AgentToolRef } from "./agent.ts";
5
+ import type { RequestContext as ProtoRequestContext } from "./internal/gen/v1/app_pb.ts";
5
6
 
6
7
  export interface Subject {
7
8
  id: string;
8
9
  credentialSubjectId: string;
9
10
  email: string;
11
+ scopes?: string[] | undefined;
12
+ permissions?: SubjectPermission[] | undefined;
10
13
  kind?: string | undefined;
11
14
  displayName?: string | undefined;
12
15
  authSource?: string | undefined;
13
16
  }
14
17
 
18
+ export interface SubjectPermission {
19
+ app: string;
20
+ operations: string[];
21
+ }
22
+
15
23
  /**
16
24
  * Subject payload authored by provider-side hooks.
17
25
  */
@@ -19,6 +27,9 @@ export interface SubjectInput {
19
27
  id: string;
20
28
  credentialSubjectId?: string | undefined;
21
29
  email?: string | undefined;
30
+ displayName?: string | undefined;
31
+ scopes?: readonly string[] | undefined;
32
+ permissions?: readonly SubjectPermission[] | undefined;
22
33
  }
23
34
 
24
35
  /**
@@ -63,7 +74,7 @@ export interface Request {
63
74
  workflow: Record<string, unknown>;
64
75
  toolRefs: AgentToolRef[];
65
76
  toolRefsSet: boolean;
66
- invocationToken: string;
77
+ __requestContext?: ProtoRequestContext | undefined;
67
78
  }
68
79
 
69
80
  /**
@@ -156,12 +167,12 @@ export function request(
156
167
  credential: Partial<Credential> = {},
157
168
  access: Partial<Access> = {},
158
169
  workflow: Record<string, unknown> = {},
159
- invocationToken = "",
160
170
  idempotencyKey = "",
161
171
  host: Partial<Host> = {},
162
172
  agentSubject: Partial<Subject> = {},
163
173
  toolRefs: readonly AgentToolRef[] = [],
164
174
  toolRefsSet = false,
175
+ requestContext?: ProtoRequestContext,
165
176
  ): Request {
166
177
  return {
167
178
  token,
@@ -172,6 +183,8 @@ export function request(
172
183
  id: subject.id ?? "",
173
184
  credentialSubjectId: subject.credentialSubjectId ?? "",
174
185
  email: subject.email ?? "",
186
+ scopes: [...(subject.scopes ?? [])],
187
+ permissions: cloneSubjectPermissions(subject.permissions),
175
188
  kind: subject.kind,
176
189
  displayName: subject.displayName,
177
190
  authSource: subject.authSource,
@@ -180,6 +193,8 @@ export function request(
180
193
  id: agentSubject.id ?? "",
181
194
  credentialSubjectId: agentSubject.credentialSubjectId ?? "",
182
195
  email: agentSubject.email ?? "",
196
+ scopes: [...(agentSubject.scopes ?? [])],
197
+ permissions: cloneSubjectPermissions(agentSubject.permissions),
183
198
  kind: agentSubject.kind,
184
199
  displayName: agentSubject.displayName,
185
200
  authSource: agentSubject.authSource,
@@ -199,17 +214,34 @@ export function request(
199
214
  },
200
215
  toolRefs: toolRefs.map((ref) => ({
201
216
  ...ref,
202
- runAs: ref.runAs === undefined ? undefined : { ...ref.runAs },
217
+ runAs: ref.runAs === undefined ? undefined : cloneSubjectInput(ref.runAs),
203
218
  })),
204
219
  toolRefsSet,
205
220
  host: {
206
221
  publicBaseUrl: host.publicBaseUrl ?? "",
207
222
  },
208
- invocationToken,
223
+ __requestContext: requestContext,
209
224
  idempotencyKey: idempotencyKey.trim(),
210
225
  };
211
226
  }
212
227
 
228
+ export function cloneSubjectInput<T extends SubjectInput | Subject>(subject: T): T {
229
+ return {
230
+ ...subject,
231
+ scopes: [...(subject.scopes ?? [])],
232
+ permissions: cloneSubjectPermissions(subject.permissions),
233
+ };
234
+ }
235
+
236
+ export function cloneSubjectPermissions(
237
+ permissions?: readonly SubjectPermission[] | undefined,
238
+ ): SubjectPermission[] {
239
+ return permissions?.map((permission) => ({
240
+ app: permission.app,
241
+ operations: [...permission.operations],
242
+ })) ?? [];
243
+ }
244
+
213
245
  /**
214
246
  * Looks up a single connection parameter from a request.
215
247
  */
package/src/app-access.ts CHANGED
@@ -8,7 +8,6 @@ import {
8
8
  structFromObject,
9
9
  type JsonObjectInput,
10
10
  } from "./protocol.ts";
11
- import { hostInvocationContext } from "./invocation-context.ts";
12
11
  import {
13
12
  createHostServiceGrpcTransport,
14
13
  hostServiceMetadataInterceptors,
@@ -27,17 +26,6 @@ export interface AppInvokeOptions {
27
26
  /** Credential mode requested for the target operation. */
28
27
  credentialMode?: ConnectionMode;
29
28
  }
30
- /** Grant included when exchanging an invocation token for a child token. */
31
- export interface AppInvocationGrant {
32
- /** App name that the child token may invoke. */
33
- app: string;
34
- /** Specific operation ids allowed by the child token. */
35
- operations?: string[];
36
- /** Surface names allowed by the child token. */
37
- surfaces?: string[];
38
- /** Whether the child token may invoke every operation on the app. */
39
- allOperations?: boolean;
40
- }
41
29
 
42
30
  /** Options for invoking an app GraphQL surface. */
43
31
  export interface AppGraphQLInvokeOptions
@@ -59,26 +47,21 @@ export interface App {
59
47
  document: string,
60
48
  options?: AppGraphQLInvokeOptions,
61
49
  ): Promise<OperationResult>;
62
- exchangeInvocationToken(options?: {
63
- grants?: AppInvocationGrant[];
64
- ttlSeconds?: number;
65
- }): Promise<string>;
66
50
  }
67
51
 
68
52
  /**
69
53
  * Transport-backed implementation for invoking sibling app operations.
70
54
  *
71
- * The constructor accepts either a Gestalt request or an invocation token. The
72
- * token is attached to every operation, GraphQL, and token-exchange request.
55
+ * The constructor accepts a Gestalt request and forwards its host request
56
+ * context to every operation and GraphQL request.
73
57
  */
74
58
  class AppImpl implements App {
75
59
  private readonly client: Client<typeof AppService>;
76
- private readonly invocationContext: ReturnType<typeof hostInvocationContext>;
60
+ private readonly request: Request;
77
61
 
78
62
  constructor(request: Request);
79
- constructor(invocationToken: string);
80
- constructor(requestOrToken: Request | string) {
81
- this.invocationContext = hostInvocationContext(requestOrToken);
63
+ constructor(request: Request) {
64
+ this.request = request;
82
65
 
83
66
  const { target, token } = requireHostServiceTarget("app");
84
67
  const transport = createHostServiceGrpcTransport(
@@ -96,7 +79,6 @@ class AppImpl implements App {
96
79
  options?: AppInvokeOptions,
97
80
  ): Promise<OperationResult> {
98
81
  const response = await this.client.invoke({
99
- ...this.invocationContext,
100
82
  app,
101
83
  operation,
102
84
  params: structFromObject(params),
@@ -104,6 +86,7 @@ class AppImpl implements App {
104
86
  instance: options?.instance ?? "",
105
87
  idempotencyKey: options?.idempotencyKey?.trim() ?? "",
106
88
  credentialMode: options?.credentialMode?.trim() ?? "",
89
+ context: this.request.__requestContext,
107
90
  });
108
91
  return {
109
92
  status: response.status,
@@ -124,7 +107,6 @@ class AppImpl implements App {
124
107
  }
125
108
 
126
109
  const response = await this.client.invokeGraphQL({
127
- invocationToken: this.invocationContext.invocationToken,
128
110
  app,
129
111
  document: trimmedDocument,
130
112
  ...(options?.variables !== undefined
@@ -133,6 +115,7 @@ class AppImpl implements App {
133
115
  connection: options?.connection ?? "",
134
116
  instance: options?.instance ?? "",
135
117
  idempotencyKey: options?.idempotencyKey?.trim() ?? "",
118
+ context: this.request.__requestContext,
136
119
  });
137
120
  return {
138
121
  status: response.status,
@@ -141,31 +124,6 @@ class AppImpl implements App {
141
124
  };
142
125
  }
143
126
 
144
- /** Exchanges this invocation token for a narrower child token. */
145
- async exchangeInvocationToken(options?: {
146
- /** Grants to attach to the child token. */
147
- grants?: AppInvocationGrant[];
148
- /** Requested child-token time-to-live in seconds. */
149
- ttlSeconds?: number;
150
- }): Promise<string> {
151
- const response = await this.client.exchangeInvocationToken({
152
- parentInvocationToken: this.invocationContext.invocationToken,
153
- grants: (options?.grants ?? [])
154
- .map((grant) => ({
155
- app: grant.app.trim(),
156
- operations: (grant.operations ?? [])
157
- .map((operation) => operation.trim())
158
- .filter(Boolean),
159
- surfaces: (grant.surfaces ?? [])
160
- .map((surface) => surface.trim().toLowerCase())
161
- .filter(Boolean),
162
- allOperations: grant.allOperations ?? false,
163
- }))
164
- .filter((grant) => grant.app.length > 0),
165
- ttlSeconds: BigInt(Math.max(0, options?.ttlSeconds ?? 0)),
166
- });
167
- return response.invocationToken;
168
- }
169
127
  }
170
128
 
171
129
  export const App = AppImpl;
package/src/index.ts CHANGED
@@ -79,7 +79,6 @@ export {
79
79
  export {
80
80
  App,
81
81
  type AppGraphQLInvokeOptions,
82
- type AppInvocationGrant,
83
82
  type AppInvokeOptions,
84
83
  } from "./app-access.ts";
85
84
  export {
@@ -6,7 +6,7 @@ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobu
6
6
  import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
7
7
  import type { Timestamp, Value } from "@bufbuild/protobuf/wkt";
8
8
  import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
- import type { AgentToolRef, OperationAnnotations, SubjectContext } from "./app_pb";
9
+ import type { AgentToolRef, OperationAnnotations, RequestContext, SubjectContext } from "./app_pb";
10
10
  import { file_v1_app } from "./app_pb";
11
11
  import type { JsonObject, Message } from "@bufbuild/protobuf";
12
12
 
@@ -14,7 +14,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
14
14
  * Describes the file v1/agent.proto.
15
15
  */
16
16
  export const file_v1_agent: GenFile = /*@__PURE__*/
17
- fileDesc("Cg52MS9hZ2VudC5wcm90bxITZ2VzdGFsdC5wcm92aWRlci52MSKLAQoMQWdlbnRNZXNzYWdlEgwKBHJvbGUYASABKAkSDAoEdGV4dBgCIAEoCRI0CgVwYXJ0cxgDIAMoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydBIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiYwoYQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEgoKAmlkGAEgASgJEg8KB3Rvb2xfaWQYAiABKAkSKgoJYXJndW1lbnRzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJ8ChpBZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBIUCgx0b29sX2NhbGxfaWQYASABKAkSDgoGc3RhdHVzGAIgASgFEg8KB2NvbnRlbnQYAyABKAkSJwoGb3V0cHV0GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCI6ChhBZ2VudE1lc3NhZ2VQYXJ0SW1hZ2VSZWYSCwoDdXJpGAEgASgJEhEKCW1pbWVfdHlwZRgCIAEoCSLKAgoQQWdlbnRNZXNzYWdlUGFydBI3CgR0eXBlGAEgASgOMikuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VHlwZRIMCgR0ZXh0GAIgASgJEiUKBGpzb24YAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EkAKCXRvb2xfY2FsbBgEIAEoCzItLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEkQKC3Rvb2xfcmVzdWx0GAUgASgLMi8uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBJACglpbWFnZV9yZWYYBiABKAsyLS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50TWVzc2FnZVBhcnRJbWFnZVJlZiJgCg5BZ2VudFdvcmtzcGFjZRJBCgljaGVja291dHMYASADKAsyLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDY3dkGAIgASgJIkMKGUFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDdXJsGAEgASgJEgsKA3JlZhgCIAEoCRIMCgRwYXRoGAMgASgJIjMKFlByZXBhcmVkQWdlbnRXb3Jrc3BhY2USDAoEcm9vdBgBIAEoCRILCgNjd2QYAiABKAkihAEKEVJlc29sdmVkQWdlbnRUb29sEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSMgoRcGFyYW1ldGVyc19zY2hlbWEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SgQIBBAFUgZ0YXJnZXQi5QIKGUFnZW50UHJvdmlkZXJDYXBhYmlsaXRpZXMSFgoOc3RyZWFtaW5nX3RleHQYASABKAgSEgoKdG9vbF9jYWxscxgCIAEoCBIbChNwYXJhbGxlbF90b29sX2NhbGxzGAMgASgIEhQKDGludGVyYWN0aW9ucxgFIAEoCBIXCg9yZXN1bWFibGVfdHVybnMYBiABKAgSGwoTcmVhc29uaW5nX3N1bW1hcmllcxgHIAEoCBIeChZib3VuZGVkX2xpc3RfaHlkcmF0aW9uGAkgASgIEkgKFnN1cHBvcnRlZF90b29sX3NvdXJjZXMYCiADKA4yKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFNvdXJjZU1vZGUSHgoWc3VwcG9ydHNfc2Vzc2lvbl9zdGFydBgLIAEoCBIjChtzdXBwb3J0c19wcmVwYXJlZF93b3Jrc3BhY2UYDCABKAhKBAgIEAkiJQojR2V0QWdlbnRQcm92aWRlckNhcGFiaWxpdGllc1JlcXVlc3QijgMKEEFnZW50SW50ZXJhY3Rpb24SCgoCaWQYASABKAkSNwoEdHlwZRgCIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvblR5cGUSOQoFc3RhdGUYAyABKA4yKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb25TdGF0ZRINCgV0aXRsZRgEIAEoCRIOCgZwcm9tcHQYBSABKAkSKAoHcmVxdWVzdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKwoKcmVzb2x1dGlvbhgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLcmVzb2x2ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3R1cm5faWQYCiABKAkSEgoKc2Vzc2lvbl9pZBgLIAEoCSLnAgoMQWdlbnRTZXNzaW9uEgoKAmlkGAEgASgJEhUKDXByb3ZpZGVyX25hbWUYAiABKAkSDQoFbW9kZWwYAyABKAkSEgoKY2xpZW50X3JlZhgEIAEoCRI1CgVzdGF0ZRgFIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eh0KFWNyZWF0ZWRfYnlfc3ViamVjdF9pZBgHIAEoCRIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3R1cm5fYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIq0ECiFDcmVhdGVBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIXCg9pZGVtcG90ZW5jeV9rZXkYAiABKAkSDQoFbW9kZWwYAyABKAkSEgoKY2xpZW50X3JlZhgEIAEoCRIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSHQoVY3JlYXRlZF9ieV9zdWJqZWN0X2lkGAcgASgJEjQKB3N1YmplY3QYCCABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EkMKDXNlc3Npb25fc3RhcnQYCSABKAsyLC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXJ0Q29uZmlnEkcKEnByZXBhcmVkX3dvcmtzcGFjZRgKIAEoCzIrLmdlc3RhbHQucHJvdmlkZXIudjEuUHJlcGFyZWRBZ2VudFdvcmtzcGFjZRIVCg1wcm92aWRlcl9uYW1lGAsgASgJEhgKEGludm9jYXRpb25fdG9rZW4YDCABKAkSNgoJd29ya3NwYWNlGA0gASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFdvcmtzcGFjZRIpCgh3b3JrZmxvdxgOIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RKBAgGEAdSEHByb3ZpZGVyX29wdGlvbnMiVAoXQWdlbnRTZXNzaW9uU3RhcnRDb25maWcSOQoFaG9va3MYASADKAsyKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXJ0SG9vayKQAgoVQWdlbnRTZXNzaW9uU3RhcnRIb29rEgoKAmlkGAEgASgJEgwKBHR5cGUYAiABKAkSDwoHY29tbWFuZBgDIAMoCRILCgNjd2QYBCABKAkSDwoHdGltZW91dBgFIAEoCRJACgNlbnYYBiADKAsyMy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXJ0SG9vay5FbnZFbnRyeRJACgZvdXRwdXQYByABKAsyMC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXJ0SG9va091dHB1dBoqCghFbnZFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIksKG0FnZW50U2Vzc2lvblN0YXJ0SG9va091dHB1dBIaChJhZGRpdGlvbmFsX2NvbnRleHQYASABKAgSEAoIbWV0YWRhdGEYAiABKAgirwEKHkdldEFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkSKQoId29ya2Zsb3cYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IqUCCiBMaXN0QWdlbnRQcm92aWRlclNlc3Npb25zUmVxdWVzdBI0CgdzdWJqZWN0GAEgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBITCgtzZXNzaW9uX2lkcxgCIAMoCRI1CgVzdGF0ZRgDIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSDQoFbGltaXQYBCABKAUSFAoMc3VtbWFyeV9vbmx5GAUgASgIEhUKDXByb3ZpZGVyX25hbWUYBiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgHIAEoCRIpCgh3b3JrZmxvdxgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiWAohTGlzdEFnZW50UHJvdmlkZXJTZXNzaW9uc1Jlc3BvbnNlEjMKCHNlc3Npb25zGAEgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb24iqAIKIVVwZGF0ZUFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEhIKCmNsaWVudF9yZWYYAiABKAkSNQoFc3RhdGUYAyABKA4yJi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXRlEikKCG1ldGFkYXRhGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBI0CgdzdWJqZWN0GAUgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAYgASgJEikKCHdvcmtmbG93GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKrBAoJQWdlbnRUdXJuEgoKAmlkGAEgASgJEhIKCnNlc3Npb25faWQYAiABKAkSFQoNcHJvdmlkZXJfbmFtZRgDIAEoCRINCgVtb2RlbBgEIAEoCRI5CgZzdGF0dXMYBSABKA4yKS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50RXhlY3V0aW9uU3RhdHVzEjMKCG1lc3NhZ2VzGAYgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2USFgoOc3RhdHVzX21lc3NhZ2UYCSABKAkSHQoVY3JlYXRlZF9ieV9zdWJqZWN0X2lkGAogASgJEi4KCmNyZWF0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnN0YXJ0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKDGNvbXBsZXRlZF9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFQoNZXhlY3V0aW9uX3JlZhgOIAEoCRI4CgR0ZXh0GBQgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm5UZXh0T3V0cHV0SAASRAoKc3RydWN0dXJlZBgVIAEoCzIuLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuU3RydWN0dXJlZE91dHB1dEgAQggKBm91dHB1dCIjChNBZ2VudFR1cm5UZXh0T3V0cHV0EgwKBHRleHQYASABKAkiUQoZQWdlbnRUdXJuU3RydWN0dXJlZE91dHB1dBIMCgR0ZXh0GAEgASgJEiYKBXZhbHVlGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKVAgoQQWdlbnRUdXJuRGlzcGxheRIMCgRraW5kGAEgASgJEg0KBXBoYXNlGAIgASgJEgwKBHRleHQYAyABKAkSDQoFbGFiZWwYBCABKAkSCwoDcmVmGAUgASgJEhIKCnBhcmVudF9yZWYYBiABKAkSJQoFaW5wdXQYByABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSJgoGb3V0cHV0GAggASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEiUKBWVycm9yGAkgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEg4KBmFjdGlvbhgKIAEoCRIOCgZmb3JtYXQYCyABKAkSEAoIbGFuZ3VhZ2UYDCABKAki+QUKHkNyZWF0ZUFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEhIKCnNlc3Npb25faWQYAiABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAMgASgJEg0KBW1vZGVsGAQgASgJEjMKCG1lc3NhZ2VzGAUgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2USNQoFdG9vbHMYBiADKAsyJi5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRUb29sEikKCG1ldGFkYXRhGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIdChVjcmVhdGVkX2J5X3N1YmplY3RfaWQYCiABKAkSFQoNZXhlY3V0aW9uX3JlZhgLIAEoCRI0Cgl0b29sX3JlZnMYDCADKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFJlZhI9Cgt0b29sX3NvdXJjZRgNIAEoDjIoLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUb29sU291cmNlTW9kZRI0CgdzdWJqZWN0GA4gASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIuCg1tb2RlbF9vcHRpb25zGBAgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIRCglydW5fZ3JhbnQYESABKAkSFwoPdGltZW91dF9zZWNvbmRzGBIgASgFEhgKEGludm9jYXRpb25fdG9rZW4YEyABKAkSFQoNdG9vbF9yZWZzX3NldBgUIAEoCBIwCgZvdXRwdXQYFSABKAsyIC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50T3V0cHV0EikKCHdvcmtmbG93GBYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEoECAkQCkoECA8QEFIQcHJvdmlkZXJfb3B0aW9uc1IKdG9vbF9ncmFudCIRCg9BZ2VudFRleHRPdXRwdXQiQAoVQWdlbnRTdHJ1Y3R1cmVkT3V0cHV0EicKBnNjaGVtYRgBIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QijQEKC0FnZW50T3V0cHV0EjQKBHRleHQYASABKAsyJC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VGV4dE91dHB1dEgAEkAKCnN0cnVjdHVyZWQYAiABKAsyKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U3RydWN0dXJlZE91dHB1dEgAQgYKBGtpbmQiqQEKG0dldEFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkSKQoId29ya2Zsb3cYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IqACCh1MaXN0QWdlbnRQcm92aWRlclR1cm5zUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhAKCHR1cm5faWRzGAMgAygJEjkKBnN0YXR1cxgEIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRFeGVjdXRpb25TdGF0dXMSDQoFbGltaXQYBSABKAUSFAoMc3VtbWFyeV9vbmx5GAYgASgIEhgKEGludm9jYXRpb25fdG9rZW4YByABKAkSKQoId29ya2Zsb3cYCCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ik8KHkxpc3RBZ2VudFByb3ZpZGVyVHVybnNSZXNwb25zZRItCgV0dXJucxgBIAMoCzIeLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuIrwBCh5DYW5jZWxBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkSNAoHc3ViamVjdBgDIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSGAoQaW52b2NhdGlvbl90b2tlbhgEIAEoCRIpCgh3b3JrZmxvdxgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi+wEKDkFnZW50VHVybkV2ZW50EgoKAmlkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSCwoDc2VxGAMgASgDEgwKBHR5cGUYBCABKAkSDgoGc291cmNlGAUgASgJEhIKCnZpc2liaWxpdHkYBiABKAkSJQoEZGF0YRgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNgoHZGlzcGxheRgJIAEoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuRGlzcGxheSLSAQoiTGlzdEFnZW50UHJvdmlkZXJUdXJuRXZlbnRzUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEhEKCWFmdGVyX3NlcRgCIAEoAxINCgVsaW1pdBgDIAEoBRI0CgdzdWJqZWN0GAQgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAUgASgJEikKCHdvcmtmbG93GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJaCiNMaXN0QWdlbnRQcm92aWRlclR1cm5FdmVudHNSZXNwb25zZRIzCgZldmVudHMYASADKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybkV2ZW50IowBCiJHZXRBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25SZXF1ZXN0EhYKDmludGVyYWN0aW9uX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkisgEKJExpc3RBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25zUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkSKQoId29ya2Zsb3cYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0ImQKJUxpc3RBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25zUmVzcG9uc2USOwoMaW50ZXJhY3Rpb25zGAEgAygLMiUuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEludGVyYWN0aW9uIvkBCiZSZXNvbHZlQWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBIWCg5pbnRlcmFjdGlvbl9pZBgBIAEoCRIrCgpyZXNvbHV0aW9uGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBI0CgdzdWJqZWN0GAMgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAQgASgJEg8KB3R1cm5faWQYBSABKAkSKQoId29ya2Zsb3cYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Is8BChdFeGVjdXRlQWdlbnRUb29sUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSFAoMdG9vbF9jYWxsX2lkGAMgASgJEg8KB3Rvb2xfaWQYBCABKAkSKgoJYXJndW1lbnRzGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIXCg9pZGVtcG90ZW5jeV9rZXkYByABKAkSEQoJcnVuX2dyYW50GAggASgJSgQIBhAHUgp0b29sX2dyYW50IjgKGEV4ZWN1dGVBZ2VudFRvb2xSZXNwb25zZRIOCgZzdGF0dXMYASABKAUSDAoEYm9keRgCIAEoCSKTAgoPTGlzdGVkQWdlbnRUb29sEgoKAmlkGAEgASgJEhAKCG1jcF9uYW1lGAIgASgJEg0KBXRpdGxlGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhQKDGlucHV0X3NjaGVtYRgFIAEoCRIVCg1vdXRwdXRfc2NoZW1hGAYgASgJEj4KC2Fubm90YXRpb25zGAcgASgLMikuZ2VzdGFsdC5wcm92aWRlci52MS5PcGVyYXRpb25Bbm5vdGF0aW9ucxIuCgNyZWYYCCABKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFJlZhIMCgR0YWdzGAkgAygJEhMKC3NlYXJjaF90ZXh0GAogASgJIpcBChVMaXN0QWdlbnRUb29sc1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIPCgd0dXJuX2lkGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRISCgpwYWdlX3Rva2VuGAQgASgJEhEKCXJ1bl9ncmFudBgGIAEoCRINCgVxdWVyeRgHIAEoCUoECAUQBlIKdG9vbF9ncmFudCJmChZMaXN0QWdlbnRUb29sc1Jlc3BvbnNlEjMKBXRvb2xzGAEgAygLMiQuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0ZWRBZ2VudFRvb2wSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIn0KHVJlc29sdmVBZ2VudENvbm5lY3Rpb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSDwoHdHVybl9pZBgCIAEoCRISCgpjb25uZWN0aW9uGAMgASgJEhAKCGluc3RhbmNlGAQgASgJEhEKCXJ1bl9ncmFudBgFIAEoCSKJAwoXUmVzb2x2ZWRBZ2VudENvbm5lY3Rpb24SFQoNY29ubmVjdGlvbl9pZBgBIAEoCRISCgpjb25uZWN0aW9uGAIgASgJEhAKCGluc3RhbmNlGAMgASgJEgwKBG1vZGUYBCABKAkSSgoHaGVhZGVycxgFIAMoCzI5Lmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZWRBZ2VudENvbm5lY3Rpb24uSGVhZGVyc0VudHJ5EkgKBnBhcmFtcxgGIAMoCzI4Lmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZWRBZ2VudENvbm5lY3Rpb24uUGFyYW1zRW50cnkSLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaLQoLUGFyYW1zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASr6AQoUQWdlbnRNZXNzYWdlUGFydFR5cGUSJwojQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfVU5TUEVDSUZJRUQQABIgChxBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9URVhUEAESIAocQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfSlNPThACEiUKIUFHRU5UX01FU1NBR0VfUEFSVF9UWVBFX1RPT0xfQ0FMTBADEicKI0FHRU5UX01FU1NBR0VfUEFSVF9UWVBFX1RPT0xfUkVTVUxUEAQSJQohQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfSU1BR0VfUkVGEAUqjAEKE0FnZW50VG9vbFNvdXJjZU1vZGUSJgoiQUdFTlRfVE9PTF9TT1VSQ0VfTU9ERV9VTlNQRUNJRklFRBAAEiYKIkFHRU5UX1RPT0xfU09VUkNFX01PREVfTUNQX0NBVEFMT0cQAhIfChtBR0VOVF9UT09MX1NPVVJDRV9NT0RFX05PTkUQAyIECAEQASqiAgoUQWdlbnRFeGVjdXRpb25TdGF0dXMSJgoiQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19VTlNQRUNJRklFRBAAEiIKHkFHRU5UX0VYRUNVVElPTl9TVEFUVVNfUEVORElORxABEiIKHkFHRU5UX0VYRUNVVElPTl9TVEFUVVNfUlVOTklORxACEiQKIEFHRU5UX0VYRUNVVElPTl9TVEFUVVNfU1VDQ0VFREVEEAMSIQodQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19GQUlMRUQQBBIjCh9BR0VOVF9FWEVDVVRJT05fU1RBVFVTX0NBTkNFTEVEEAUSLAooQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19XQUlUSU5HX0ZPUl9JTlBVVBAGKnoKEUFnZW50U2Vzc2lvblN0YXRlEiMKH0FHRU5UX1NFU1NJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIeChpBR0VOVF9TRVNTSU9OX1NUQVRFX0FDVElWRRABEiAKHEFHRU5UX1NFU1NJT05fU1RBVEVfQVJDSElWRUQQAiqvAQoUQWdlbnRJbnRlcmFjdGlvblR5cGUSJgoiQUdFTlRfSU5URVJBQ1RJT05fVFlQRV9VTlNQRUNJRklFRBAAEiMKH0FHRU5UX0lOVEVSQUNUSU9OX1RZUEVfQVBQUk9WQUwQARIoCiRBR0VOVF9JTlRFUkFDVElPTl9UWVBFX0NMQVJJRklDQVRJT04QAhIgChxBR0VOVF9JTlRFUkFDVElPTl9UWVBFX0lOUFVUEAMqsQEKFUFnZW50SW50ZXJhY3Rpb25TdGF0ZRInCiNBR0VOVF9JTlRFUkFDVElPTl9TVEFURV9VTlNQRUNJRklFRBAAEiMKH0FHRU5UX0lOVEVSQUNUSU9OX1NUQVRFX1BFTkRJTkcQARIkCiBBR0VOVF9JTlRFUkFDVElPTl9TVEFURV9SRVNPTFZFRBACEiQKIEFHRU5UX0lOVEVSQUNUSU9OX1NUQVRFX0NBTkNFTEVEEAMy4AsKDUFnZW50UHJvdmlkZXISagoNQ3JlYXRlU2Vzc2lvbhI2Lmdlc3RhbHQucHJvdmlkZXIudjEuQ3JlYXRlQWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0GiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb24SZAoKR2V0U2Vzc2lvbhIzLmdlc3RhbHQucHJvdmlkZXIudjEuR2V0QWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0GiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb24SfQoMTGlzdFNlc3Npb25zEjUuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclNlc3Npb25zUmVxdWVzdBo2Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJTZXNzaW9uc1Jlc3BvbnNlEmoKDVVwZGF0ZVNlc3Npb24SNi5nZXN0YWx0LnByb3ZpZGVyLnYxLlVwZGF0ZUFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBohLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uEmEKCkNyZWF0ZVR1cm4SMy5nZXN0YWx0LnByb3ZpZGVyLnYxLkNyZWF0ZUFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBoeLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuElsKB0dldFR1cm4SMC5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldEFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBoeLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuEnQKCUxpc3RUdXJucxIyLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJUdXJuc1JlcXVlc3QaMy5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyVHVybnNSZXNwb25zZRJhCgpDYW5jZWxUdXJuEjMuZ2VzdGFsdC5wcm92aWRlci52MS5DYW5jZWxBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QaHi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybhKDAQoOTGlzdFR1cm5FdmVudHMSNy5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyVHVybkV2ZW50c1JlcXVlc3QaOC5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyVHVybkV2ZW50c1Jlc3BvbnNlEnAKDkdldEludGVyYWN0aW9uEjcuZ2VzdGFsdC5wcm92aWRlci52MS5HZXRBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25SZXF1ZXN0GiUuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEludGVyYWN0aW9uEokBChBMaXN0SW50ZXJhY3Rpb25zEjkuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlckludGVyYWN0aW9uc1JlcXVlc3QaOi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25zUmVzcG9uc2USeAoSUmVzb2x2ZUludGVyYWN0aW9uEjsuZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlQWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBolLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvbhJ7Cg9HZXRDYXBhYmlsaXRpZXMSOC5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldEFnZW50UHJvdmlkZXJDYXBhYmlsaXRpZXNSZXF1ZXN0Gi4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFByb3ZpZGVyQ2FwYWJpbGl0aWVzMtQCCglBZ2VudEhvc3QSZAoJTGlzdFRvb2xzEiouZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRUb29sc1JlcXVlc3QaKy5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFRvb2xzUmVzcG9uc2USagoLRXhlY3V0ZVRvb2wSLC5nZXN0YWx0LnByb3ZpZGVyLnYxLkV4ZWN1dGVBZ2VudFRvb2xSZXF1ZXN0Gi0uZ2VzdGFsdC5wcm92aWRlci52MS5FeGVjdXRlQWdlbnRUb29sUmVzcG9uc2USdQoRUmVzb2x2ZUNvbm5lY3Rpb24SMi5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVBZ2VudENvbm5lY3Rpb25SZXF1ZXN0GiwuZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlZEFnZW50Q29ubmVjdGlvbmIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_v1_app]);
17
+ fileDesc("Cg52MS9hZ2VudC5wcm90bxITZ2VzdGFsdC5wcm92aWRlci52MSKLAQoMQWdlbnRNZXNzYWdlEgwKBHJvbGUYASABKAkSDAoEdGV4dBgCIAEoCRI0CgVwYXJ0cxgDIAMoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydBIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiYwoYQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEgoKAmlkGAEgASgJEg8KB3Rvb2xfaWQYAiABKAkSKgoJYXJndW1lbnRzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJ8ChpBZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBIUCgx0b29sX2NhbGxfaWQYASABKAkSDgoGc3RhdHVzGAIgASgFEg8KB2NvbnRlbnQYAyABKAkSJwoGb3V0cHV0GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCI6ChhBZ2VudE1lc3NhZ2VQYXJ0SW1hZ2VSZWYSCwoDdXJpGAEgASgJEhEKCW1pbWVfdHlwZRgCIAEoCSLKAgoQQWdlbnRNZXNzYWdlUGFydBI3CgR0eXBlGAEgASgOMikuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VHlwZRIMCgR0ZXh0GAIgASgJEiUKBGpzb24YAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EkAKCXRvb2xfY2FsbBgEIAEoCzItLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEkQKC3Rvb2xfcmVzdWx0GAUgASgLMi8uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBJACglpbWFnZV9yZWYYBiABKAsyLS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50TWVzc2FnZVBhcnRJbWFnZVJlZiJgCg5BZ2VudFdvcmtzcGFjZRJBCgljaGVja291dHMYASADKAsyLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDY3dkGAIgASgJIkMKGUFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDdXJsGAEgASgJEgsKA3JlZhgCIAEoCRIMCgRwYXRoGAMgASgJIjMKFlByZXBhcmVkQWdlbnRXb3Jrc3BhY2USDAoEcm9vdBgBIAEoCRILCgNjd2QYAiABKAkihAEKEVJlc29sdmVkQWdlbnRUb29sEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSMgoRcGFyYW1ldGVyc19zY2hlbWEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SgQIBBAFUgZ0YXJnZXQi5QIKGUFnZW50UHJvdmlkZXJDYXBhYmlsaXRpZXMSFgoOc3RyZWFtaW5nX3RleHQYASABKAgSEgoKdG9vbF9jYWxscxgCIAEoCBIbChNwYXJhbGxlbF90b29sX2NhbGxzGAMgASgIEhQKDGludGVyYWN0aW9ucxgFIAEoCBIXCg9yZXN1bWFibGVfdHVybnMYBiABKAgSGwoTcmVhc29uaW5nX3N1bW1hcmllcxgHIAEoCBIeChZib3VuZGVkX2xpc3RfaHlkcmF0aW9uGAkgASgIEkgKFnN1cHBvcnRlZF90b29sX3NvdXJjZXMYCiADKA4yKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFNvdXJjZU1vZGUSHgoWc3VwcG9ydHNfc2Vzc2lvbl9zdGFydBgLIAEoCBIjChtzdXBwb3J0c19wcmVwYXJlZF93b3Jrc3BhY2UYDCABKAhKBAgIEAkiJQojR2V0QWdlbnRQcm92aWRlckNhcGFiaWxpdGllc1JlcXVlc3QijgMKEEFnZW50SW50ZXJhY3Rpb24SCgoCaWQYASABKAkSNwoEdHlwZRgCIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvblR5cGUSOQoFc3RhdGUYAyABKA4yKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb25TdGF0ZRINCgV0aXRsZRgEIAEoCRIOCgZwcm9tcHQYBSABKAkSKAoHcmVxdWVzdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKwoKcmVzb2x1dGlvbhgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLcmVzb2x2ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3R1cm5faWQYCiABKAkSEgoKc2Vzc2lvbl9pZBgLIAEoCSLnAgoMQWdlbnRTZXNzaW9uEgoKAmlkGAEgASgJEhUKDXByb3ZpZGVyX25hbWUYAiABKAkSDQoFbW9kZWwYAyABKAkSEgoKY2xpZW50X3JlZhgEIAEoCRI1CgVzdGF0ZRgFIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eh0KFWNyZWF0ZWRfYnlfc3ViamVjdF9pZBgHIAEoCRIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3R1cm5fYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIsYECiFDcmVhdGVBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIXCg9pZGVtcG90ZW5jeV9rZXkYAiABKAkSDQoFbW9kZWwYAyABKAkSEgoKY2xpZW50X3JlZhgEIAEoCRIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSHQoVY3JlYXRlZF9ieV9zdWJqZWN0X2lkGAcgASgJEjQKB3N1YmplY3QYCCABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EkMKDXNlc3Npb25fc3RhcnQYCSABKAsyLC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXJ0Q29uZmlnEkcKEnByZXBhcmVkX3dvcmtzcGFjZRgKIAEoCzIrLmdlc3RhbHQucHJvdmlkZXIudjEuUHJlcGFyZWRBZ2VudFdvcmtzcGFjZRIVCg1wcm92aWRlcl9uYW1lGAsgASgJEjYKCXdvcmtzcGFjZRgNIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRXb3Jrc3BhY2USNAoHY29udGV4dBgPIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuUmVxdWVzdENvbnRleHRKBAgGEAdKBAgMEA1KBAgOEA9SEHByb3ZpZGVyX29wdGlvbnNSEGludm9jYXRpb25fdG9rZW5SCHdvcmtmbG93IlQKF0FnZW50U2Vzc2lvblN0YXJ0Q29uZmlnEjkKBWhvb2tzGAEgAygLMiouZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGFydEhvb2sikAIKFUFnZW50U2Vzc2lvblN0YXJ0SG9vaxIKCgJpZBgBIAEoCRIMCgR0eXBlGAIgASgJEg8KB2NvbW1hbmQYAyADKAkSCwoDY3dkGAQgASgJEg8KB3RpbWVvdXQYBSABKAkSQAoDZW52GAYgAygLMjMuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGFydEhvb2suRW52RW50cnkSQAoGb3V0cHV0GAcgASgLMjAuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGFydEhvb2tPdXRwdXQaKgoIRW52RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJLChtBZ2VudFNlc3Npb25TdGFydEhvb2tPdXRwdXQSGgoSYWRkaXRpb25hbF9jb250ZXh0GAEgASgIEhAKCG1ldGFkYXRhGAIgASgIIsgBCh5HZXRBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBI0Cgdjb250ZXh0GAUgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAMQBEoECAQQBVIQaW52b2NhdGlvbl90b2tlblIId29ya2Zsb3civgIKIExpc3RBZ2VudFByb3ZpZGVyU2Vzc2lvbnNSZXF1ZXN0EjQKB3N1YmplY3QYASABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhMKC3Nlc3Npb25faWRzGAIgAygJEjUKBXN0YXRlGAMgASgOMiYuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGF0ZRINCgVsaW1pdBgEIAEoBRIUCgxzdW1tYXJ5X29ubHkYBSABKAgSFQoNcHJvdmlkZXJfbmFtZRgGIAEoCRI0Cgdjb250ZXh0GAkgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAcQCEoECAgQCVIQaW52b2NhdGlvbl90b2tlblIId29ya2Zsb3ciWAohTGlzdEFnZW50UHJvdmlkZXJTZXNzaW9uc1Jlc3BvbnNlEjMKCHNlc3Npb25zGAEgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb24iwQIKIVVwZGF0ZUFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEhIKCmNsaWVudF9yZWYYAiABKAkSNQoFc3RhdGUYAyABKA4yJi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvblN0YXRlEikKCG1ldGFkYXRhGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBI0CgdzdWJqZWN0GAUgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBI0Cgdjb250ZXh0GAggASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAYQB0oECAcQCFIQaW52b2NhdGlvbl90b2tlblIId29ya2Zsb3ciqwQKCUFnZW50VHVybhIKCgJpZBgBIAEoCRISCgpzZXNzaW9uX2lkGAIgASgJEhUKDXByb3ZpZGVyX25hbWUYAyABKAkSDQoFbW9kZWwYBCABKAkSOQoGc3RhdHVzGAUgASgOMikuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEV4ZWN1dGlvblN0YXR1cxIzCghtZXNzYWdlcxgGIAMoCzIhLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlEhYKDnN0YXR1c19tZXNzYWdlGAkgASgJEh0KFWNyZWF0ZWRfYnlfc3ViamVjdF9pZBgKIAEoCRIuCgpjcmVhdGVkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpzdGFydGVkX2F0GAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxjb21wbGV0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhUKDWV4ZWN1dGlvbl9yZWYYDiABKAkSOAoEdGV4dBgUIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuVGV4dE91dHB1dEgAEkQKCnN0cnVjdHVyZWQYFSABKAsyLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVyblN0cnVjdHVyZWRPdXRwdXRIAEIICgZvdXRwdXQiIwoTQWdlbnRUdXJuVGV4dE91dHB1dBIMCgR0ZXh0GAEgASgJIlEKGUFnZW50VHVyblN0cnVjdHVyZWRPdXRwdXQSDAoEdGV4dBgBIAEoCRImCgV2YWx1ZRgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QilQIKEEFnZW50VHVybkRpc3BsYXkSDAoEa2luZBgBIAEoCRINCgVwaGFzZRgCIAEoCRIMCgR0ZXh0GAMgASgJEg0KBWxhYmVsGAQgASgJEgsKA3JlZhgFIAEoCRISCgpwYXJlbnRfcmVmGAYgASgJEiUKBWlucHV0GAcgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEiYKBm91dHB1dBgIIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIlCgVlcnJvchgJIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIOCgZhY3Rpb24YCiABKAkSDgoGZm9ybWF0GAsgASgJEhAKCGxhbmd1YWdlGAwgASgJIpAGCh5DcmVhdGVBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRISCgpzZXNzaW9uX2lkGAIgASgJEhcKD2lkZW1wb3RlbmN5X2tleRgDIAEoCRINCgVtb2RlbBgEIAEoCRIzCghtZXNzYWdlcxgFIAMoCzIhLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlEjUKBXRvb2xzGAYgAygLMiYuZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlZEFnZW50VG9vbBIpCghtZXRhZGF0YRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSHQoVY3JlYXRlZF9ieV9zdWJqZWN0X2lkGAogASgJEhUKDWV4ZWN1dGlvbl9yZWYYCyABKAkSNAoJdG9vbF9yZWZzGAwgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRvb2xSZWYSPQoLdG9vbF9zb3VyY2UYDSABKA4yKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFNvdXJjZU1vZGUSNAoHc3ViamVjdBgOIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSLgoNbW9kZWxfb3B0aW9ucxgQIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFwoPdGltZW91dF9zZWNvbmRzGBIgASgFEhUKDXRvb2xfcmVmc19zZXQYFCABKAgSMAoGb3V0cHV0GBUgASgLMiAuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE91dHB1dBI0Cgdjb250ZXh0GBcgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAkQCkoECA8QEEoECBEQEkoECBMQFEoECBYQF1IQcHJvdmlkZXJfb3B0aW9uc1IKdG9vbF9ncmFudFIJcnVuX2dyYW50UhBpbnZvY2F0aW9uX3Rva2VuUgh3b3JrZmxvdyIRCg9BZ2VudFRleHRPdXRwdXQiQAoVQWdlbnRTdHJ1Y3R1cmVkT3V0cHV0EicKBnNjaGVtYRgBIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QijQEKC0FnZW50T3V0cHV0EjQKBHRleHQYASABKAsyJC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VGV4dE91dHB1dEgAEkAKCnN0cnVjdHVyZWQYAiABKAsyKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U3RydWN0dXJlZE91dHB1dEgAQgYKBGtpbmQiwgEKG0dldEFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EjQKB2NvbnRleHQYBSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlcXVlc3RDb250ZXh0SgQIAxAESgQIBBAFUhBpbnZvY2F0aW9uX3Rva2VuUgh3b3JrZmxvdyK5AgodTGlzdEFnZW50UHJvdmlkZXJUdXJuc1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIQCgh0dXJuX2lkcxgDIAMoCRI5CgZzdGF0dXMYBCABKA4yKS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50RXhlY3V0aW9uU3RhdHVzEg0KBWxpbWl0GAUgASgFEhQKDHN1bW1hcnlfb25seRgGIAEoCBI0Cgdjb250ZXh0GAkgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAcQCEoECAgQCVIQaW52b2NhdGlvbl90b2tlblIId29ya2Zsb3ciTwoeTGlzdEFnZW50UHJvdmlkZXJUdXJuc1Jlc3BvbnNlEi0KBXR1cm5zGAEgAygLMh4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm4i1QEKHkNhbmNlbEFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCRI0CgdzdWJqZWN0GAMgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBI0Cgdjb250ZXh0GAYgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAQQBUoECAUQBlIQaW52b2NhdGlvbl90b2tlblIId29ya2Zsb3ci+wEKDkFnZW50VHVybkV2ZW50EgoKAmlkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSCwoDc2VxGAMgASgDEgwKBHR5cGUYBCABKAkSDgoGc291cmNlGAUgASgJEhIKCnZpc2liaWxpdHkYBiABKAkSJQoEZGF0YRgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNgoHZGlzcGxheRgJIAEoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuRGlzcGxheSLrAQoiTGlzdEFnZW50UHJvdmlkZXJUdXJuRXZlbnRzUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEhEKCWFmdGVyX3NlcRgCIAEoAxINCgVsaW1pdBgDIAEoBRI0CgdzdWJqZWN0GAQgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBI0Cgdjb250ZXh0GAcgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAUQBkoECAYQB1IQaW52b2NhdGlvbl90b2tlblIId29ya2Zsb3ciWgojTGlzdEFnZW50UHJvdmlkZXJUdXJuRXZlbnRzUmVzcG9uc2USMwoGZXZlbnRzGAEgAygLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm5FdmVudCLAAQoiR2V0QWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBIWCg5pbnRlcmFjdGlvbl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBI0Cgdjb250ZXh0GAQgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAMQBFIQaW52b2NhdGlvbl90b2tlbiLLAQokTGlzdEFnZW50UHJvdmlkZXJJbnRlcmFjdGlvbnNSZXF1ZXN0Eg8KB3R1cm5faWQYASABKAkSNAoHc3ViamVjdBgCIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSNAoHY29udGV4dBgFIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuUmVxdWVzdENvbnRleHRKBAgDEARKBAgEEAVSEGludm9jYXRpb25fdG9rZW5SCHdvcmtmbG93ImQKJUxpc3RBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25zUmVzcG9uc2USOwoMaW50ZXJhY3Rpb25zGAEgAygLMiUuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEludGVyYWN0aW9uIpICCiZSZXNvbHZlQWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBIWCg5pbnRlcmFjdGlvbl9pZBgBIAEoCRIrCgpyZXNvbHV0aW9uGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBI0CgdzdWJqZWN0GAMgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIPCgd0dXJuX2lkGAUgASgJEjQKB2NvbnRleHQYByABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlcXVlc3RDb250ZXh0SgQIBBAFSgQIBhAHUhBpbnZvY2F0aW9uX3Rva2VuUgh3b3JrZmxvdyKDAgoXRXhlY3V0ZUFnZW50VG9vbFJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIPCgd0dXJuX2lkGAIgASgJEhQKDHRvb2xfY2FsbF9pZBgDIAEoCRIPCgd0b29sX2lkGAQgASgJEioKCWFyZ3VtZW50cxgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFwoPaWRlbXBvdGVuY3lfa2V5GAcgASgJEjQKB2NvbnRleHQYCSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlcXVlc3RDb250ZXh0SgQIBhAHSgQICBAJUgp0b29sX2dyYW50UglydW5fZ3JhbnQiOAoYRXhlY3V0ZUFnZW50VG9vbFJlc3BvbnNlEg4KBnN0YXR1cxgBIAEoBRIMCgRib2R5GAIgASgJIpMCCg9MaXN0ZWRBZ2VudFRvb2wSCgoCaWQYASABKAkSEAoIbWNwX25hbWUYAiABKAkSDQoFdGl0bGUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSFAoMaW5wdXRfc2NoZW1hGAUgASgJEhUKDW91dHB1dF9zY2hlbWEYBiABKAkSPgoLYW5ub3RhdGlvbnMYByABKAsyKS5nZXN0YWx0LnByb3ZpZGVyLnYxLk9wZXJhdGlvbkFubm90YXRpb25zEi4KA3JlZhgIIAEoCzIhLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUb29sUmVmEgwKBHRhZ3MYCSADKAkSEwoLc2VhcmNoX3RleHQYCiABKAkiywEKFUxpc3RBZ2VudFRvb2xzUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSEQoJcGFnZV9zaXplGAMgASgFEhIKCnBhZ2VfdG9rZW4YBCABKAkSDQoFcXVlcnkYByABKAkSNAoHY29udGV4dBgIIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuUmVxdWVzdENvbnRleHRKBAgFEAZKBAgGEAdSCnRvb2xfZ3JhbnRSCXJ1bl9ncmFudCJmChZMaXN0QWdlbnRUb29sc1Jlc3BvbnNlEjMKBXRvb2xzGAEgAygLMiQuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0ZWRBZ2VudFRvb2wSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIrEBCh1SZXNvbHZlQWdlbnRDb25uZWN0aW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSEgoKY29ubmVjdGlvbhgDIAEoCRIQCghpbnN0YW5jZRgEIAEoCRI0Cgdjb250ZXh0GAYgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5SZXF1ZXN0Q29udGV4dEoECAUQBlIJcnVuX2dyYW50IokDChdSZXNvbHZlZEFnZW50Q29ubmVjdGlvbhIVCg1jb25uZWN0aW9uX2lkGAEgASgJEhIKCmNvbm5lY3Rpb24YAiABKAkSEAoIaW5zdGFuY2UYAyABKAkSDAoEbW9kZRgEIAEoCRJKCgdoZWFkZXJzGAUgAygLMjkuZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlZEFnZW50Q29ubmVjdGlvbi5IZWFkZXJzRW50cnkSSAoGcGFyYW1zGAYgAygLMjguZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlZEFnZW50Q29ubmVjdGlvbi5QYXJhbXNFbnRyeRIuCgpleHBpcmVzX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBouCgxIZWFkZXJzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARotCgtQYXJhbXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBKvoBChRBZ2VudE1lc3NhZ2VQYXJ0VHlwZRInCiNBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9VTlNQRUNJRklFRBAAEiAKHEFHRU5UX01FU1NBR0VfUEFSVF9UWVBFX1RFWFQQARIgChxBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9KU09OEAISJQohQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfVE9PTF9DQUxMEAMSJwojQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfVE9PTF9SRVNVTFQQBBIlCiFBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9JTUFHRV9SRUYQBSqMAQoTQWdlbnRUb29sU291cmNlTW9kZRImCiJBR0VOVF9UT09MX1NPVVJDRV9NT0RFX1VOU1BFQ0lGSUVEEAASJgoiQUdFTlRfVE9PTF9TT1VSQ0VfTU9ERV9NQ1BfQ0FUQUxPRxACEh8KG0FHRU5UX1RPT0xfU09VUkNFX01PREVfTk9ORRADIgQIARABKqICChRBZ2VudEV4ZWN1dGlvblN0YXR1cxImCiJBR0VOVF9FWEVDVVRJT05fU1RBVFVTX1VOU1BFQ0lGSUVEEAASIgoeQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19QRU5ESU5HEAESIgoeQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19SVU5OSU5HEAISJAogQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19TVUNDRUVERUQQAxIhCh1BR0VOVF9FWEVDVVRJT05fU1RBVFVTX0ZBSUxFRBAEEiMKH0FHRU5UX0VYRUNVVElPTl9TVEFUVVNfQ0FOQ0VMRUQQBRIsCihBR0VOVF9FWEVDVVRJT05fU1RBVFVTX1dBSVRJTkdfRk9SX0lOUFVUEAYqegoRQWdlbnRTZXNzaW9uU3RhdGUSIwofQUdFTlRfU0VTU0lPTl9TVEFURV9VTlNQRUNJRklFRBAAEh4KGkFHRU5UX1NFU1NJT05fU1RBVEVfQUNUSVZFEAESIAocQUdFTlRfU0VTU0lPTl9TVEFURV9BUkNISVZFRBACKq8BChRBZ2VudEludGVyYWN0aW9uVHlwZRImCiJBR0VOVF9JTlRFUkFDVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIwofQUdFTlRfSU5URVJBQ1RJT05fVFlQRV9BUFBST1ZBTBABEigKJEFHRU5UX0lOVEVSQUNUSU9OX1RZUEVfQ0xBUklGSUNBVElPThACEiAKHEFHRU5UX0lOVEVSQUNUSU9OX1RZUEVfSU5QVVQQAyqxAQoVQWdlbnRJbnRlcmFjdGlvblN0YXRlEicKI0FHRU5UX0lOVEVSQUNUSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAASIwofQUdFTlRfSU5URVJBQ1RJT05fU1RBVEVfUEVORElORxABEiQKIEFHRU5UX0lOVEVSQUNUSU9OX1NUQVRFX1JFU09MVkVEEAISJAogQUdFTlRfSU5URVJBQ1RJT05fU1RBVEVfQ0FOQ0VMRUQQAzLgCwoNQWdlbnRQcm92aWRlchJqCg1DcmVhdGVTZXNzaW9uEjYuZ2VzdGFsdC5wcm92aWRlci52MS5DcmVhdGVBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QaIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvbhJkCgpHZXRTZXNzaW9uEjMuZ2VzdGFsdC5wcm92aWRlci52MS5HZXRBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QaIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvbhJ9CgxMaXN0U2Vzc2lvbnMSNS5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyU2Vzc2lvbnNSZXF1ZXN0GjYuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclNlc3Npb25zUmVzcG9uc2USagoNVXBkYXRlU2Vzc2lvbhI2Lmdlc3RhbHQucHJvdmlkZXIudjEuVXBkYXRlQWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0GiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb24SYQoKQ3JlYXRlVHVybhIzLmdlc3RhbHQucHJvdmlkZXIudjEuQ3JlYXRlQWdlbnRQcm92aWRlclR1cm5SZXF1ZXN0Gh4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm4SWwoHR2V0VHVybhIwLmdlc3RhbHQucHJvdmlkZXIudjEuR2V0QWdlbnRQcm92aWRlclR1cm5SZXF1ZXN0Gh4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm4SdAoJTGlzdFR1cm5zEjIuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5zUmVxdWVzdBozLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJUdXJuc1Jlc3BvbnNlEmEKCkNhbmNlbFR1cm4SMy5nZXN0YWx0LnByb3ZpZGVyLnYxLkNhbmNlbEFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBoeLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuEoMBCg5MaXN0VHVybkV2ZW50cxI3Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJUdXJuRXZlbnRzUmVxdWVzdBo4Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJUdXJuRXZlbnRzUmVzcG9uc2UScAoOR2V0SW50ZXJhY3Rpb24SNy5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldEFnZW50UHJvdmlkZXJJbnRlcmFjdGlvblJlcXVlc3QaJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb24SiQEKEExpc3RJbnRlcmFjdGlvbnMSOS5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25zUmVxdWVzdBo6Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJJbnRlcmFjdGlvbnNSZXNwb25zZRJ4ChJSZXNvbHZlSW50ZXJhY3Rpb24SOy5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25SZXF1ZXN0GiUuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEludGVyYWN0aW9uEnsKD0dldENhcGFiaWxpdGllcxI4Lmdlc3RhbHQucHJvdmlkZXIudjEuR2V0QWdlbnRQcm92aWRlckNhcGFiaWxpdGllc1JlcXVlc3QaLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50UHJvdmlkZXJDYXBhYmlsaXRpZXMy1AIKCUFnZW50SG9zdBJkCglMaXN0VG9vbHMSKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFRvb2xzUmVxdWVzdBorLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50VG9vbHNSZXNwb25zZRJqCgtFeGVjdXRlVG9vbBIsLmdlc3RhbHQucHJvdmlkZXIudjEuRXhlY3V0ZUFnZW50VG9vbFJlcXVlc3QaLS5nZXN0YWx0LnByb3ZpZGVyLnYxLkV4ZWN1dGVBZ2VudFRvb2xSZXNwb25zZRJ1ChFSZXNvbHZlQ29ubmVjdGlvbhIyLmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZUFnZW50Q29ubmVjdGlvblJlcXVlc3QaLC5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRDb25uZWN0aW9uYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_v1_app]);
18
18
 
19
19
  /**
20
20
  * @generated from message gestalt.provider.v1.AgentMessage
@@ -536,20 +536,15 @@ export type CreateAgentProviderSessionRequest = Message<"gestalt.provider.v1.Cre
536
536
  */
537
537
  providerName: string;
538
538
 
539
- /**
540
- * @generated from field: string invocation_token = 12;
541
- */
542
- invocationToken: string;
543
-
544
539
  /**
545
540
  * @generated from field: gestalt.provider.v1.AgentWorkspace workspace = 13;
546
541
  */
547
542
  workspace?: AgentWorkspace | undefined;
548
543
 
549
544
  /**
550
- * @generated from field: google.protobuf.Struct workflow = 14;
545
+ * @generated from field: gestalt.provider.v1.RequestContext context = 15;
551
546
  */
552
- workflow?: JsonObject | undefined;
547
+ context?: RequestContext | undefined;
553
548
  };
554
549
 
555
550
  /**
@@ -660,14 +655,9 @@ export type GetAgentProviderSessionRequest = Message<"gestalt.provider.v1.GetAge
660
655
  subject?: SubjectContext | undefined;
661
656
 
662
657
  /**
663
- * @generated from field: string invocation_token = 3;
664
- */
665
- invocationToken: string;
666
-
667
- /**
668
- * @generated from field: google.protobuf.Struct workflow = 4;
658
+ * @generated from field: gestalt.provider.v1.RequestContext context = 5;
669
659
  */
670
- workflow?: JsonObject | undefined;
660
+ context?: RequestContext | undefined;
671
661
  };
672
662
 
673
663
  /**
@@ -718,14 +708,9 @@ export type ListAgentProviderSessionsRequest = Message<"gestalt.provider.v1.List
718
708
  providerName: string;
719
709
 
720
710
  /**
721
- * @generated from field: string invocation_token = 7;
711
+ * @generated from field: gestalt.provider.v1.RequestContext context = 9;
722
712
  */
723
- invocationToken: string;
724
-
725
- /**
726
- * @generated from field: google.protobuf.Struct workflow = 8;
727
- */
728
- workflow?: JsonObject | undefined;
713
+ context?: RequestContext | undefined;
729
714
  };
730
715
 
731
716
  /**
@@ -782,14 +767,9 @@ export type UpdateAgentProviderSessionRequest = Message<"gestalt.provider.v1.Upd
782
767
  subject?: SubjectContext | undefined;
783
768
 
784
769
  /**
785
- * @generated from field: string invocation_token = 6;
786
- */
787
- invocationToken: string;
788
-
789
- /**
790
- * @generated from field: google.protobuf.Struct workflow = 7;
770
+ * @generated from field: gestalt.provider.v1.RequestContext context = 8;
791
771
  */
792
- workflow?: JsonObject | undefined;
772
+ context?: RequestContext | undefined;
793
773
  };
794
774
 
795
775
  /**
@@ -1068,11 +1048,6 @@ export type CreateAgentProviderTurnRequest = Message<"gestalt.provider.v1.Create
1068
1048
  */
1069
1049
  modelOptions?: JsonObject | undefined;
1070
1050
 
1071
- /**
1072
- * @generated from field: string run_grant = 17;
1073
- */
1074
- runGrant: string;
1075
-
1076
1051
  /**
1077
1052
  * Optional provider-owned turn execution budget, in seconds.
1078
1053
  * If unset or zero, the provider chooses its own execution timeout. This does
@@ -1082,11 +1057,6 @@ export type CreateAgentProviderTurnRequest = Message<"gestalt.provider.v1.Create
1082
1057
  */
1083
1058
  timeoutSeconds: number;
1084
1059
 
1085
- /**
1086
- * @generated from field: string invocation_token = 19;
1087
- */
1088
- invocationToken: string;
1089
-
1090
1060
  /**
1091
1061
  * @generated from field: bool tool_refs_set = 20;
1092
1062
  */
@@ -1098,9 +1068,9 @@ export type CreateAgentProviderTurnRequest = Message<"gestalt.provider.v1.Create
1098
1068
  output?: AgentOutput | undefined;
1099
1069
 
1100
1070
  /**
1101
- * @generated from field: google.protobuf.Struct workflow = 22;
1071
+ * @generated from field: gestalt.provider.v1.RequestContext context = 23;
1102
1072
  */
1103
- workflow?: JsonObject | undefined;
1073
+ context?: RequestContext | undefined;
1104
1074
  };
1105
1075
 
1106
1076
  /**
@@ -1184,14 +1154,9 @@ export type GetAgentProviderTurnRequest = Message<"gestalt.provider.v1.GetAgentP
1184
1154
  subject?: SubjectContext | undefined;
1185
1155
 
1186
1156
  /**
1187
- * @generated from field: string invocation_token = 3;
1188
- */
1189
- invocationToken: string;
1190
-
1191
- /**
1192
- * @generated from field: google.protobuf.Struct workflow = 4;
1157
+ * @generated from field: gestalt.provider.v1.RequestContext context = 5;
1193
1158
  */
1194
- workflow?: JsonObject | undefined;
1159
+ context?: RequestContext | undefined;
1195
1160
  };
1196
1161
 
1197
1162
  /**
@@ -1243,14 +1208,9 @@ export type ListAgentProviderTurnsRequest = Message<"gestalt.provider.v1.ListAge
1243
1208
  summaryOnly: boolean;
1244
1209
 
1245
1210
  /**
1246
- * @generated from field: string invocation_token = 7;
1211
+ * @generated from field: gestalt.provider.v1.RequestContext context = 9;
1247
1212
  */
1248
- invocationToken: string;
1249
-
1250
- /**
1251
- * @generated from field: google.protobuf.Struct workflow = 8;
1252
- */
1253
- workflow?: JsonObject | undefined;
1213
+ context?: RequestContext | undefined;
1254
1214
  };
1255
1215
 
1256
1216
  /**
@@ -1297,14 +1257,9 @@ export type CancelAgentProviderTurnRequest = Message<"gestalt.provider.v1.Cancel
1297
1257
  subject?: SubjectContext | undefined;
1298
1258
 
1299
1259
  /**
1300
- * @generated from field: string invocation_token = 4;
1301
- */
1302
- invocationToken: string;
1303
-
1304
- /**
1305
- * @generated from field: google.protobuf.Struct workflow = 5;
1260
+ * @generated from field: gestalt.provider.v1.RequestContext context = 6;
1306
1261
  */
1307
- workflow?: JsonObject | undefined;
1262
+ context?: RequestContext | undefined;
1308
1263
  };
1309
1264
 
1310
1265
  /**
@@ -1396,14 +1351,9 @@ export type ListAgentProviderTurnEventsRequest = Message<"gestalt.provider.v1.Li
1396
1351
  subject?: SubjectContext | undefined;
1397
1352
 
1398
1353
  /**
1399
- * @generated from field: string invocation_token = 5;
1400
- */
1401
- invocationToken: string;
1402
-
1403
- /**
1404
- * @generated from field: google.protobuf.Struct workflow = 6;
1354
+ * @generated from field: gestalt.provider.v1.RequestContext context = 7;
1405
1355
  */
1406
- workflow?: JsonObject | undefined;
1356
+ context?: RequestContext | undefined;
1407
1357
  };
1408
1358
 
1409
1359
  /**
@@ -1445,9 +1395,9 @@ export type GetAgentProviderInteractionRequest = Message<"gestalt.provider.v1.Ge
1445
1395
  subject?: SubjectContext | undefined;
1446
1396
 
1447
1397
  /**
1448
- * @generated from field: string invocation_token = 3;
1398
+ * @generated from field: gestalt.provider.v1.RequestContext context = 4;
1449
1399
  */
1450
- invocationToken: string;
1400
+ context?: RequestContext | undefined;
1451
1401
  };
1452
1402
 
1453
1403
  /**
@@ -1472,14 +1422,9 @@ export type ListAgentProviderInteractionsRequest = Message<"gestalt.provider.v1.
1472
1422
  subject?: SubjectContext | undefined;
1473
1423
 
1474
1424
  /**
1475
- * @generated from field: string invocation_token = 3;
1425
+ * @generated from field: gestalt.provider.v1.RequestContext context = 5;
1476
1426
  */
1477
- invocationToken: string;
1478
-
1479
- /**
1480
- * @generated from field: google.protobuf.Struct workflow = 4;
1481
- */
1482
- workflow?: JsonObject | undefined;
1427
+ context?: RequestContext | undefined;
1483
1428
  };
1484
1429
 
1485
1430
  /**
@@ -1525,20 +1470,15 @@ export type ResolveAgentProviderInteractionRequest = Message<"gestalt.provider.v
1525
1470
  */
1526
1471
  subject?: SubjectContext | undefined;
1527
1472
 
1528
- /**
1529
- * @generated from field: string invocation_token = 4;
1530
- */
1531
- invocationToken: string;
1532
-
1533
1473
  /**
1534
1474
  * @generated from field: string turn_id = 5;
1535
1475
  */
1536
1476
  turnId: string;
1537
1477
 
1538
1478
  /**
1539
- * @generated from field: google.protobuf.Struct workflow = 6;
1479
+ * @generated from field: gestalt.provider.v1.RequestContext context = 7;
1540
1480
  */
1541
- workflow?: JsonObject | undefined;
1481
+ context?: RequestContext | undefined;
1542
1482
  };
1543
1483
 
1544
1484
  /**
@@ -1583,9 +1523,9 @@ export type ExecuteAgentToolRequest = Message<"gestalt.provider.v1.ExecuteAgentT
1583
1523
  idempotencyKey: string;
1584
1524
 
1585
1525
  /**
1586
- * @generated from field: string run_grant = 8;
1526
+ * @generated from field: gestalt.provider.v1.RequestContext context = 9;
1587
1527
  */
1588
- runGrant: string;
1528
+ context?: RequestContext | undefined;
1589
1529
  };
1590
1530
 
1591
1531
  /**
@@ -1704,14 +1644,14 @@ export type ListAgentToolsRequest = Message<"gestalt.provider.v1.ListAgentToolsR
1704
1644
  pageToken: string;
1705
1645
 
1706
1646
  /**
1707
- * @generated from field: string run_grant = 6;
1647
+ * @generated from field: string query = 7;
1708
1648
  */
1709
- runGrant: string;
1649
+ query: string;
1710
1650
 
1711
1651
  /**
1712
- * @generated from field: string query = 7;
1652
+ * @generated from field: gestalt.provider.v1.RequestContext context = 8;
1713
1653
  */
1714
- query: string;
1654
+ context?: RequestContext | undefined;
1715
1655
  };
1716
1656
 
1717
1657
  /**
@@ -1768,9 +1708,9 @@ export type ResolveAgentConnectionRequest = Message<"gestalt.provider.v1.Resolve
1768
1708
  instance: string;
1769
1709
 
1770
1710
  /**
1771
- * @generated from field: string run_grant = 5;
1711
+ * @generated from field: gestalt.provider.v1.RequestContext context = 6;
1772
1712
  */
1773
- runGrant: string;
1713
+ context?: RequestContext | undefined;
1774
1714
  };
1775
1715
 
1776
1716
  /**