@valon-technologies/gestalt 0.0.1-alpha.31 → 0.0.1-alpha.33

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valon-technologies/gestalt",
3
- "version": "0.0.1-alpha.31",
3
+ "version": "0.0.1-alpha.33",
4
4
  "description": "TypeScript SDK for Gestalt executable providers",
5
5
  "type": "module",
6
6
  "repository": {
@@ -38,6 +38,7 @@ import {
38
38
  dateFromTimestamp,
39
39
  type JsonObjectInput,
40
40
  } from "./protocol.ts";
41
+ import { hostInvocationContext } from "./invocation-context.ts";
41
42
  import {
42
43
  optionalObjectFromStruct,
43
44
  optionalStruct,
@@ -171,12 +172,12 @@ export interface Agent {
171
172
  */
172
173
  class AgentImpl implements Agent {
173
174
  private readonly client: Client<typeof AgentProviderService>;
174
- private readonly invocationToken: string;
175
+ private readonly invocationContext: ReturnType<typeof hostInvocationContext>;
175
176
 
176
177
  constructor(request: Request);
177
178
  constructor(invocationToken: string);
178
179
  constructor(requestOrToken: Request | string) {
179
- this.invocationToken = normalizeInvocationToken(requestOrToken);
180
+ this.invocationContext = hostInvocationContext(requestOrToken);
180
181
 
181
182
  const target = process.env[ENV_HOST_SERVICE_SOCKET]?.trim();
182
183
  if (!target) {
@@ -203,7 +204,7 @@ class AgentImpl implements Agent {
203
204
  clientRef: request.clientRef ?? "",
204
205
  metadata: optionalStruct(request.metadata),
205
206
  idempotencyKey: request.idempotencyKey ?? "",
206
- invocationToken: this.invocationToken,
207
+ ...this.invocationContext,
207
208
  workspace: workspaceToProto(request.workspace),
208
209
  }),
209
210
  );
@@ -214,7 +215,7 @@ class AgentImpl implements Agent {
214
215
  return agentSessionFromProto(
215
216
  await this.client.getSession({
216
217
  sessionId: request.sessionId,
217
- invocationToken: this.invocationToken,
218
+ ...this.invocationContext,
218
219
  }),
219
220
  );
220
221
  }
@@ -225,7 +226,7 @@ class AgentImpl implements Agent {
225
226
  ): Promise<AgentSession[]> {
226
227
  const response = await this.client.listSessions({
227
228
  providerName: request.providerName ?? "",
228
- invocationToken: this.invocationToken,
229
+ ...this.invocationContext,
229
230
  state: request.state ?? AgentSessionState.UNSPECIFIED,
230
231
  limit: request.limit ?? 0,
231
232
  summaryOnly: request.summaryOnly ?? false,
@@ -243,7 +244,7 @@ class AgentImpl implements Agent {
243
244
  clientRef: request.clientRef ?? "",
244
245
  state: request.state ?? AgentSessionState.UNSPECIFIED,
245
246
  metadata: optionalStruct(request.metadata),
246
- invocationToken: this.invocationToken,
247
+ ...this.invocationContext,
247
248
  }),
248
249
  );
249
250
  }
@@ -260,7 +261,7 @@ class AgentImpl implements Agent {
260
261
  output: agentOutputToProto(request.output),
261
262
  metadata: optionalStruct(request.metadata),
262
263
  idempotencyKey: request.idempotencyKey ?? "",
263
- invocationToken: this.invocationToken,
264
+ ...this.invocationContext,
264
265
  modelOptions: optionalStruct(request.modelOptions),
265
266
  timeoutSeconds: request.timeoutSeconds ?? 0,
266
267
  }),
@@ -272,7 +273,7 @@ class AgentImpl implements Agent {
272
273
  return agentTurnFromProto(
273
274
  await this.client.getTurn({
274
275
  turnId: request.turnId,
275
- invocationToken: this.invocationToken,
276
+ ...this.invocationContext,
276
277
  }),
277
278
  );
278
279
  }
@@ -281,7 +282,7 @@ class AgentImpl implements Agent {
281
282
  async listTurns(request: AgentListTurns): Promise<AgentTurn[]> {
282
283
  const response = await this.client.listTurns({
283
284
  sessionId: request.sessionId,
284
- invocationToken: this.invocationToken,
285
+ ...this.invocationContext,
285
286
  status: request.status ?? AgentExecutionStatus.UNSPECIFIED,
286
287
  limit: request.limit ?? 0,
287
288
  summaryOnly: request.summaryOnly ?? false,
@@ -295,7 +296,7 @@ class AgentImpl implements Agent {
295
296
  await this.client.cancelTurn({
296
297
  turnId: request.turnId,
297
298
  reason: request.reason ?? "",
298
- invocationToken: this.invocationToken,
299
+ ...this.invocationContext,
299
300
  }),
300
301
  );
301
302
  }
@@ -308,7 +309,7 @@ class AgentImpl implements Agent {
308
309
  turnId: request.turnId,
309
310
  afterSeq: BigInt(request.afterSeq ?? 0),
310
311
  limit: request.limit ?? 0,
311
- invocationToken: this.invocationToken,
312
+ ...this.invocationContext,
312
313
  });
313
314
  return response.events.map(agentTurnEventFromProto);
314
315
  }
@@ -319,7 +320,7 @@ class AgentImpl implements Agent {
319
320
  ): Promise<AgentInteraction[]> {
320
321
  const response = await this.client.listInteractions({
321
322
  turnId: request.turnId,
322
- invocationToken: this.invocationToken,
323
+ ...this.invocationContext,
323
324
  });
324
325
  return response.interactions.map(agentInteractionFromProto);
325
326
  }
@@ -333,24 +334,12 @@ class AgentImpl implements Agent {
333
334
  turnId: request.turnId,
334
335
  interactionId: request.interactionId,
335
336
  resolution: optionalStruct(request.resolution),
336
- invocationToken: this.invocationToken,
337
+ ...this.invocationContext,
337
338
  }),
338
339
  );
339
340
  }
340
341
  }
341
342
 
342
- function normalizeInvocationToken(requestOrToken: Request | string): string {
343
- const invocationToken =
344
- typeof requestOrToken === "string"
345
- ? requestOrToken
346
- : requestOrToken.invocationToken;
347
- const trimmed = invocationToken.trim();
348
- if (!trimmed) {
349
- throw new Error("agent: invocation token is not available");
350
- }
351
- return trimmed;
352
- }
353
-
354
343
  function workspaceToProto(workspace?: AgentWorkspace | undefined) {
355
344
  if (workspace === undefined) {
356
345
  return undefined;
package/src/app-access.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  structFromObject,
9
9
  type JsonObjectInput,
10
10
  } from "./protocol.ts";
11
+ import { hostInvocationContext } from "./invocation-context.ts";
11
12
  import {
12
13
  createHostServiceGrpcTransport,
13
14
  hostServiceMetadataInterceptors,
@@ -72,12 +73,12 @@ export interface App {
72
73
  */
73
74
  class AppImpl implements App {
74
75
  private readonly client: Client<typeof AppService>;
75
- private readonly invocationToken: string;
76
+ private readonly invocationContext: ReturnType<typeof hostInvocationContext>;
76
77
 
77
78
  constructor(request: Request);
78
79
  constructor(invocationToken: string);
79
80
  constructor(requestOrToken: Request | string) {
80
- this.invocationToken = normalizeInvocationToken(requestOrToken);
81
+ this.invocationContext = hostInvocationContext(requestOrToken);
81
82
 
82
83
  const { target, token } = requireHostServiceTarget("app");
83
84
  const transport = createHostServiceGrpcTransport(
@@ -95,7 +96,7 @@ class AppImpl implements App {
95
96
  options?: AppInvokeOptions,
96
97
  ): Promise<OperationResult> {
97
98
  const response = await this.client.invoke({
98
- invocationToken: this.invocationToken,
99
+ ...this.invocationContext,
99
100
  app,
100
101
  operation,
101
102
  params: structFromObject(params),
@@ -123,7 +124,7 @@ class AppImpl implements App {
123
124
  }
124
125
 
125
126
  const response = await this.client.invokeGraphQL({
126
- invocationToken: this.invocationToken,
127
+ invocationToken: this.invocationContext.invocationToken,
127
128
  app,
128
129
  document: trimmedDocument,
129
130
  ...(options?.variables !== undefined
@@ -148,7 +149,7 @@ class AppImpl implements App {
148
149
  ttlSeconds?: number;
149
150
  }): Promise<string> {
150
151
  const response = await this.client.exchangeInvocationToken({
151
- parentInvocationToken: this.invocationToken,
152
+ parentInvocationToken: this.invocationContext.invocationToken,
152
153
  grants: (options?.grants ?? [])
153
154
  .map((grant) => ({
154
155
  app: grant.app.trim(),
@@ -168,15 +169,3 @@ class AppImpl implements App {
168
169
  }
169
170
 
170
171
  export const App = AppImpl;
171
-
172
- function normalizeInvocationToken(requestOrToken: Request | string): string {
173
- const invocationToken =
174
- typeof requestOrToken === "string"
175
- ? requestOrToken
176
- : requestOrToken.invocationToken;
177
- const trimmed = invocationToken.trim();
178
- if (!trimmed) {
179
- throw new Error("app: invocation token is not available");
180
- }
181
- return trimmed;
182
- }
@@ -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("Cg52MS9hZ2VudC5wcm90bxITZ2VzdGFsdC5wcm92aWRlci52MSKLAQoMQWdlbnRNZXNzYWdlEgwKBHJvbGUYASABKAkSDAoEdGV4dBgCIAEoCRI0CgVwYXJ0cxgDIAMoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydBIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiYwoYQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEgoKAmlkGAEgASgJEg8KB3Rvb2xfaWQYAiABKAkSKgoJYXJndW1lbnRzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJ8ChpBZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBIUCgx0b29sX2NhbGxfaWQYASABKAkSDgoGc3RhdHVzGAIgASgFEg8KB2NvbnRlbnQYAyABKAkSJwoGb3V0cHV0GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCI6ChhBZ2VudE1lc3NhZ2VQYXJ0SW1hZ2VSZWYSCwoDdXJpGAEgASgJEhEKCW1pbWVfdHlwZRgCIAEoCSLKAgoQQWdlbnRNZXNzYWdlUGFydBI3CgR0eXBlGAEgASgOMikuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VHlwZRIMCgR0ZXh0GAIgASgJEiUKBGpzb24YAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EkAKCXRvb2xfY2FsbBgEIAEoCzItLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEkQKC3Rvb2xfcmVzdWx0GAUgASgLMi8uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBJACglpbWFnZV9yZWYYBiABKAsyLS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50TWVzc2FnZVBhcnRJbWFnZVJlZiJhCgpBZ2VudEFjdG9yEhIKCnN1YmplY3RfaWQYASABKAkSFAoMc3ViamVjdF9raW5kGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRITCgthdXRoX3NvdXJjZRgEIAEoCSJgCg5BZ2VudFdvcmtzcGFjZRJBCgljaGVja291dHMYASADKAsyLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDY3dkGAIgASgJIkMKGUFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDdXJsGAEgASgJEgsKA3JlZhgCIAEoCRIMCgRwYXRoGAMgASgJIjMKFlByZXBhcmVkQWdlbnRXb3Jrc3BhY2USDAoEcm9vdBgBIAEoCRILCgNjd2QYAiABKAkihAEKEVJlc29sdmVkQWdlbnRUb29sEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSMgoRcGFyYW1ldGVyc19zY2hlbWEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SgQIBBAFUgZ0YXJnZXQi5QIKGUFnZW50UHJvdmlkZXJDYXBhYmlsaXRpZXMSFgoOc3RyZWFtaW5nX3RleHQYASABKAgSEgoKdG9vbF9jYWxscxgCIAEoCBIbChNwYXJhbGxlbF90b29sX2NhbGxzGAMgASgIEhQKDGludGVyYWN0aW9ucxgFIAEoCBIXCg9yZXN1bWFibGVfdHVybnMYBiABKAgSGwoTcmVhc29uaW5nX3N1bW1hcmllcxgHIAEoCBIeChZib3VuZGVkX2xpc3RfaHlkcmF0aW9uGAkgASgIEkgKFnN1cHBvcnRlZF90b29sX3NvdXJjZXMYCiADKA4yKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFNvdXJjZU1vZGUSHgoWc3VwcG9ydHNfc2Vzc2lvbl9zdGFydBgLIAEoCBIjChtzdXBwb3J0c19wcmVwYXJlZF93b3Jrc3BhY2UYDCABKAhKBAgIEAkiJQojR2V0QWdlbnRQcm92aWRlckNhcGFiaWxpdGllc1JlcXVlc3QijgMKEEFnZW50SW50ZXJhY3Rpb24SCgoCaWQYASABKAkSNwoEdHlwZRgCIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvblR5cGUSOQoFc3RhdGUYAyABKA4yKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb25TdGF0ZRINCgV0aXRsZRgEIAEoCRIOCgZwcm9tcHQYBSABKAkSKAoHcmVxdWVzdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKwoKcmVzb2x1dGlvbhgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLcmVzb2x2ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3R1cm5faWQYCiABKAkSEgoKc2Vzc2lvbl9pZBgLIAEoCSL9AgoMQWdlbnRTZXNzaW9uEgoKAmlkGAEgASgJEhUKDXByb3ZpZGVyX25hbWUYAiABKAkSDQoFbW9kZWwYAyABKAkSEgoKY2xpZW50X3JlZhgEIAEoCRI1CgVzdGF0ZRgFIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMKCmNyZWF0ZWRfYnkYByABKAsyHy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50QWN0b3ISLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF90dXJuX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKYBAohQ3JlYXRlQWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAIgASgJEg0KBW1vZGVsGAMgASgJEhIKCmNsaWVudF9yZWYYBCABKAkSKQoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMKCmNyZWF0ZWRfYnkYByABKAsyHy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50QWN0b3ISNAoHc3ViamVjdBgIIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSQwoNc2Vzc2lvbl9zdGFydBgJIAEoCzIsLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhcnRDb25maWcSRwoScHJlcGFyZWRfd29ya3NwYWNlGAogASgLMisuZ2VzdGFsdC5wcm92aWRlci52MS5QcmVwYXJlZEFnZW50V29ya3NwYWNlEhUKDXByb3ZpZGVyX25hbWUYCyABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgMIAEoCRI2Cgl3b3Jrc3BhY2UYDSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50V29ya3NwYWNlSgQIBhAHUhBwcm92aWRlcl9vcHRpb25zIlQKF0FnZW50U2Vzc2lvblN0YXJ0Q29uZmlnEjkKBWhvb2tzGAEgAygLMiouZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGFydEhvb2sikAIKFUFnZW50U2Vzc2lvblN0YXJ0SG9vaxIKCgJpZBgBIAEoCRIMCgR0eXBlGAIgASgJEg8KB2NvbW1hbmQYAyADKAkSCwoDY3dkGAQgASgJEg8KB3RpbWVvdXQYBSABKAkSQAoDZW52GAYgAygLMjMuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGFydEhvb2suRW52RW50cnkSQAoGb3V0cHV0GAcgASgLMjAuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGFydEhvb2tPdXRwdXQaKgoIRW52RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJLChtBZ2VudFNlc3Npb25TdGFydEhvb2tPdXRwdXQSGgoSYWRkaXRpb25hbF9jb250ZXh0GAEgASgIEhAKCG1ldGFkYXRhGAIgASgIIoQBCh5HZXRBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJIvoBCiBMaXN0QWdlbnRQcm92aWRlclNlc3Npb25zUmVxdWVzdBI0CgdzdWJqZWN0GAEgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBITCgtzZXNzaW9uX2lkcxgCIAMoCRI1CgVzdGF0ZRgDIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSDQoFbGltaXQYBCABKAUSFAoMc3VtbWFyeV9vbmx5GAUgASgIEhUKDXByb3ZpZGVyX25hbWUYBiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgHIAEoCSJYCiFMaXN0QWdlbnRQcm92aWRlclNlc3Npb25zUmVzcG9uc2USMwoIc2Vzc2lvbnMYASADKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvbiL9AQohVXBkYXRlQWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSEgoKY2xpZW50X3JlZhgCIAEoCRI1CgVzdGF0ZRgDIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSKQoIbWV0YWRhdGEYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjQKB3N1YmplY3QYBSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YBiABKAkiwQQKCUFnZW50VHVybhIKCgJpZBgBIAEoCRISCgpzZXNzaW9uX2lkGAIgASgJEhUKDXByb3ZpZGVyX25hbWUYAyABKAkSDQoFbW9kZWwYBCABKAkSOQoGc3RhdHVzGAUgASgOMikuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEV4ZWN1dGlvblN0YXR1cxIzCghtZXNzYWdlcxgGIAMoCzIhLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlEhYKDnN0YXR1c19tZXNzYWdlGAkgASgJEjMKCmNyZWF0ZWRfYnkYCiABKAsyHy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50QWN0b3ISLgoKY3JlYXRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKc3RhcnRlZF9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMY29tcGxldGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1leGVjdXRpb25fcmVmGA4gASgJEjgKBHRleHQYFCABKAsyKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVyblRleHRPdXRwdXRIABJECgpzdHJ1Y3R1cmVkGBUgASgLMi4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm5TdHJ1Y3R1cmVkT3V0cHV0SABCCAoGb3V0cHV0IiMKE0FnZW50VHVyblRleHRPdXRwdXQSDAoEdGV4dBgBIAEoCSJRChlBZ2VudFR1cm5TdHJ1Y3R1cmVkT3V0cHV0EgwKBHRleHQYASABKAkSJgoFdmFsdWUYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IpUCChBBZ2VudFR1cm5EaXNwbGF5EgwKBGtpbmQYASABKAkSDQoFcGhhc2UYAiABKAkSDAoEdGV4dBgDIAEoCRINCgVsYWJlbBgEIAEoCRILCgNyZWYYBSABKAkSEgoKcGFyZW50X3JlZhgGIAEoCRIlCgVpbnB1dBgHIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRImCgZvdXRwdXQYCCABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSJQoFZXJyb3IYCSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSDgoGYWN0aW9uGAogASgJEg4KBmZvcm1hdBgLIAEoCRIQCghsYW5ndWFnZRgMIAEoCSLkBQoeQ3JlYXRlQWdlbnRQcm92aWRlclR1cm5SZXF1ZXN0Eg8KB3R1cm5faWQYASABKAkSEgoKc2Vzc2lvbl9pZBgCIAEoCRIXCg9pZGVtcG90ZW5jeV9rZXkYAyABKAkSDQoFbW9kZWwYBCABKAkSMwoIbWVzc2FnZXMYBSADKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50TWVzc2FnZRI1CgV0b29scxgGIAMoCzImLmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZWRBZ2VudFRvb2wSKQoIbWV0YWRhdGEYCCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMKCmNyZWF0ZWRfYnkYCiABKAsyHy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50QWN0b3ISFQoNZXhlY3V0aW9uX3JlZhgLIAEoCRI0Cgl0b29sX3JlZnMYDCADKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFJlZhI9Cgt0b29sX3NvdXJjZRgNIAEoDjIoLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUb29sU291cmNlTW9kZRI0CgdzdWJqZWN0GA4gASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIuCg1tb2RlbF9vcHRpb25zGBAgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIRCglydW5fZ3JhbnQYESABKAkSFwoPdGltZW91dF9zZWNvbmRzGBIgASgFEhgKEGludm9jYXRpb25fdG9rZW4YEyABKAkSFQoNdG9vbF9yZWZzX3NldBgUIAEoCBIwCgZvdXRwdXQYFSABKAsyIC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50T3V0cHV0SgQICRAKSgQIDxAQUhBwcm92aWRlcl9vcHRpb25zUgp0b29sX2dyYW50IhEKD0FnZW50VGV4dE91dHB1dCJAChVBZ2VudFN0cnVjdHVyZWRPdXRwdXQSJwoGc2NoZW1hGAEgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKNAQoLQWdlbnRPdXRwdXQSNAoEdGV4dBgBIAEoCzIkLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUZXh0T3V0cHV0SAASQAoKc3RydWN0dXJlZBgCIAEoCzIqLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTdHJ1Y3R1cmVkT3V0cHV0SABCBgoEa2luZCJ+ChtHZXRBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJIvUBCh1MaXN0QWdlbnRQcm92aWRlclR1cm5zUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhAKCHR1cm5faWRzGAMgAygJEjkKBnN0YXR1cxgEIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRFeGVjdXRpb25TdGF0dXMSDQoFbGltaXQYBSABKAUSFAoMc3VtbWFyeV9vbmx5GAYgASgIEhgKEGludm9jYXRpb25fdG9rZW4YByABKAkiTwoeTGlzdEFnZW50UHJvdmlkZXJUdXJuc1Jlc3BvbnNlEi0KBXR1cm5zGAEgAygLMh4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm4ikQEKHkNhbmNlbEFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCRI0CgdzdWJqZWN0GAMgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAQgASgJIvsBCg5BZ2VudFR1cm5FdmVudBIKCgJpZBgBIAEoCRIPCgd0dXJuX2lkGAIgASgJEgsKA3NlcRgDIAEoAxIMCgR0eXBlGAQgASgJEg4KBnNvdXJjZRgFIAEoCRISCgp2aXNpYmlsaXR5GAYgASgJEiUKBGRhdGEYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjYKB2Rpc3BsYXkYCSABKAsyJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybkRpc3BsYXkipwEKIkxpc3RBZ2VudFByb3ZpZGVyVHVybkV2ZW50c1JlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRIRCglhZnRlcl9zZXEYAiABKAMSDQoFbGltaXQYAyABKAUSNAoHc3ViamVjdBgEIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSGAoQaW52b2NhdGlvbl90b2tlbhgFIAEoCSJaCiNMaXN0QWdlbnRQcm92aWRlclR1cm5FdmVudHNSZXNwb25zZRIzCgZldmVudHMYASADKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybkV2ZW50IowBCiJHZXRBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25SZXF1ZXN0EhYKDmludGVyYWN0aW9uX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkihwEKJExpc3RBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25zUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEjQKB3N1YmplY3QYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkiZAolTGlzdEFnZW50UHJvdmlkZXJJbnRlcmFjdGlvbnNSZXNwb25zZRI7CgxpbnRlcmFjdGlvbnMYASADKAsyJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb24izgEKJlJlc29sdmVBZ2VudFByb3ZpZGVySW50ZXJhY3Rpb25SZXF1ZXN0EhYKDmludGVyYWN0aW9uX2lkGAEgASgJEisKCnJlc29sdXRpb24YAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjQKB3N1YmplY3QYAyABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YBCABKAkSDwoHdHVybl9pZBgFIAEoCSLPAQoXRXhlY3V0ZUFnZW50VG9vbFJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIPCgd0dXJuX2lkGAIgASgJEhQKDHRvb2xfY2FsbF9pZBgDIAEoCRIPCgd0b29sX2lkGAQgASgJEioKCWFyZ3VtZW50cxgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFwoPaWRlbXBvdGVuY3lfa2V5GAcgASgJEhEKCXJ1bl9ncmFudBgIIAEoCUoECAYQB1IKdG9vbF9ncmFudCI4ChhFeGVjdXRlQWdlbnRUb29sUmVzcG9uc2USDgoGc3RhdHVzGAEgASgFEgwKBGJvZHkYAiABKAkikwIKD0xpc3RlZEFnZW50VG9vbBIKCgJpZBgBIAEoCRIQCghtY3BfbmFtZRgCIAEoCRINCgV0aXRsZRgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIUCgxpbnB1dF9zY2hlbWEYBSABKAkSFQoNb3V0cHV0X3NjaGVtYRgGIAEoCRI+Cgthbm5vdGF0aW9ucxgHIAEoCzIpLmdlc3RhbHQucHJvdmlkZXIudjEuT3BlcmF0aW9uQW5ub3RhdGlvbnMSLgoDcmVmGAggASgLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRvb2xSZWYSDAoEdGFncxgJIAMoCRITCgtzZWFyY2hfdGV4dBgKIAEoCSKXAQoVTGlzdEFnZW50VG9vbHNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSDwoHdHVybl9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSEgoKcGFnZV90b2tlbhgEIAEoCRIRCglydW5fZ3JhbnQYBiABKAkSDQoFcXVlcnkYByABKAlKBAgFEAZSCnRvb2xfZ3JhbnQiZgoWTGlzdEFnZW50VG9vbHNSZXNwb25zZRIzCgV0b29scxgBIAMoCzIkLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdGVkQWdlbnRUb29sEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSJ9Ch1SZXNvbHZlQWdlbnRDb25uZWN0aW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSEgoKY29ubmVjdGlvbhgDIAEoCRIQCghpbnN0YW5jZRgEIAEoCRIRCglydW5fZ3JhbnQYBSABKAkiiQMKF1Jlc29sdmVkQWdlbnRDb25uZWN0aW9uEhUKDWNvbm5lY3Rpb25faWQYASABKAkSEgoKY29ubmVjdGlvbhgCIAEoCRIQCghpbnN0YW5jZRgDIAEoCRIMCgRtb2RlGAQgASgJEkoKB2hlYWRlcnMYBSADKAsyOS5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRDb25uZWN0aW9uLkhlYWRlcnNFbnRyeRJICgZwYXJhbXMYBiADKAsyOC5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRDb25uZWN0aW9uLlBhcmFtc0VudHJ5Ei4KCmV4cGlyZXNfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGi4KDEhlYWRlcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGi0KC1BhcmFtc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEq+gEKFEFnZW50TWVzc2FnZVBhcnRUeXBlEicKI0FHRU5UX01FU1NBR0VfUEFSVF9UWVBFX1VOU1BFQ0lGSUVEEAASIAocQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfVEVYVBABEiAKHEFHRU5UX01FU1NBR0VfUEFSVF9UWVBFX0pTT04QAhIlCiFBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9UT09MX0NBTEwQAxInCiNBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9UT09MX1JFU1VMVBAEEiUKIUFHRU5UX01FU1NBR0VfUEFSVF9UWVBFX0lNQUdFX1JFRhAFKowBChNBZ2VudFRvb2xTb3VyY2VNb2RlEiYKIkFHRU5UX1RPT0xfU09VUkNFX01PREVfVU5TUEVDSUZJRUQQABImCiJBR0VOVF9UT09MX1NPVVJDRV9NT0RFX01DUF9DQVRBTE9HEAISHwobQUdFTlRfVE9PTF9TT1VSQ0VfTU9ERV9OT05FEAMiBAgBEAEqogIKFEFnZW50RXhlY3V0aW9uU3RhdHVzEiYKIkFHRU5UX0VYRUNVVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIiCh5BR0VOVF9FWEVDVVRJT05fU1RBVFVTX1BFTkRJTkcQARIiCh5BR0VOVF9FWEVDVVRJT05fU1RBVFVTX1JVTk5JTkcQAhIkCiBBR0VOVF9FWEVDVVRJT05fU1RBVFVTX1NVQ0NFRURFRBADEiEKHUFHRU5UX0VYRUNVVElPTl9TVEFUVVNfRkFJTEVEEAQSIwofQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19DQU5DRUxFRBAFEiwKKEFHRU5UX0VYRUNVVElPTl9TVEFUVVNfV0FJVElOR19GT1JfSU5QVVQQBip6ChFBZ2VudFNlc3Npb25TdGF0ZRIjCh9BR0VOVF9TRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAASHgoaQUdFTlRfU0VTU0lPTl9TVEFURV9BQ1RJVkUQARIgChxBR0VOVF9TRVNTSU9OX1NUQVRFX0FSQ0hJVkVEEAIqrwEKFEFnZW50SW50ZXJhY3Rpb25UeXBlEiYKIkFHRU5UX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIjCh9BR0VOVF9JTlRFUkFDVElPTl9UWVBFX0FQUFJPVkFMEAESKAokQUdFTlRfSU5URVJBQ1RJT05fVFlQRV9DTEFSSUZJQ0FUSU9OEAISIAocQUdFTlRfSU5URVJBQ1RJT05fVFlQRV9JTlBVVBADKrEBChVBZ2VudEludGVyYWN0aW9uU3RhdGUSJwojQUdFTlRfSU5URVJBQ1RJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIjCh9BR0VOVF9JTlRFUkFDVElPTl9TVEFURV9QRU5ESU5HEAESJAogQUdFTlRfSU5URVJBQ1RJT05fU1RBVEVfUkVTT0xWRUQQAhIkCiBBR0VOVF9JTlRFUkFDVElPTl9TVEFURV9DQU5DRUxFRBADMuALCg1BZ2VudFByb3ZpZGVyEmoKDUNyZWF0ZVNlc3Npb24SNi5nZXN0YWx0LnByb3ZpZGVyLnYxLkNyZWF0ZUFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBohLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uEmQKCkdldFNlc3Npb24SMy5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldEFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBohLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uEn0KDExpc3RTZXNzaW9ucxI1Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJTZXNzaW9uc1JlcXVlc3QaNi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyU2Vzc2lvbnNSZXNwb25zZRJqCg1VcGRhdGVTZXNzaW9uEjYuZ2VzdGFsdC5wcm92aWRlci52MS5VcGRhdGVBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QaIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvbhJhCgpDcmVhdGVUdXJuEjMuZ2VzdGFsdC5wcm92aWRlci52MS5DcmVhdGVBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QaHi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybhJbCgdHZXRUdXJuEjAuZ2VzdGFsdC5wcm92aWRlci52MS5HZXRBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QaHi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybhJ0CglMaXN0VHVybnMSMi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyVHVybnNSZXF1ZXN0GjMuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5zUmVzcG9uc2USYQoKQ2FuY2VsVHVybhIzLmdlc3RhbHQucHJvdmlkZXIudjEuQ2FuY2VsQWdlbnRQcm92aWRlclR1cm5SZXF1ZXN0Gh4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm4SgwEKDkxpc3RUdXJuRXZlbnRzEjcuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5FdmVudHNSZXF1ZXN0GjguZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5FdmVudHNSZXNwb25zZRJwCg5HZXRJbnRlcmFjdGlvbhI3Lmdlc3RhbHQucHJvdmlkZXIudjEuR2V0QWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBolLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvbhKJAQoQTGlzdEludGVyYWN0aW9ucxI5Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJJbnRlcmFjdGlvbnNSZXF1ZXN0GjouZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlckludGVyYWN0aW9uc1Jlc3BvbnNlEngKElJlc29sdmVJbnRlcmFjdGlvbhI7Lmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZUFnZW50UHJvdmlkZXJJbnRlcmFjdGlvblJlcXVlc3QaJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb24SewoPR2V0Q2FwYWJpbGl0aWVzEjguZ2VzdGFsdC5wcm92aWRlci52MS5HZXRBZ2VudFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVxdWVzdBouLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRQcm92aWRlckNhcGFiaWxpdGllczLUAgoJQWdlbnRIb3N0EmQKCUxpc3RUb29scxIqLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50VG9vbHNSZXF1ZXN0GisuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRUb29sc1Jlc3BvbnNlEmoKC0V4ZWN1dGVUb29sEiwuZ2VzdGFsdC5wcm92aWRlci52MS5FeGVjdXRlQWdlbnRUb29sUmVxdWVzdBotLmdlc3RhbHQucHJvdmlkZXIudjEuRXhlY3V0ZUFnZW50VG9vbFJlc3BvbnNlEnUKEVJlc29sdmVDb25uZWN0aW9uEjIuZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlQWdlbnRDb25uZWN0aW9uUmVxdWVzdBosLmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZWRBZ2VudENvbm5lY3Rpb25iBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_v1_app]);
17
+ fileDesc("Cg52MS9hZ2VudC5wcm90bxITZ2VzdGFsdC5wcm92aWRlci52MSKLAQoMQWdlbnRNZXNzYWdlEgwKBHJvbGUYASABKAkSDAoEdGV4dBgCIAEoCRI0CgVwYXJ0cxgDIAMoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydBIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiYwoYQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEgoKAmlkGAEgASgJEg8KB3Rvb2xfaWQYAiABKAkSKgoJYXJndW1lbnRzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJ8ChpBZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBIUCgx0b29sX2NhbGxfaWQYASABKAkSDgoGc3RhdHVzGAIgASgFEg8KB2NvbnRlbnQYAyABKAkSJwoGb3V0cHV0GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCI6ChhBZ2VudE1lc3NhZ2VQYXJ0SW1hZ2VSZWYSCwoDdXJpGAEgASgJEhEKCW1pbWVfdHlwZRgCIAEoCSLKAgoQQWdlbnRNZXNzYWdlUGFydBI3CgR0eXBlGAEgASgOMikuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VHlwZRIMCgR0ZXh0GAIgASgJEiUKBGpzb24YAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EkAKCXRvb2xfY2FsbBgEIAEoCzItLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRNZXNzYWdlUGFydFRvb2xDYWxsEkQKC3Rvb2xfcmVzdWx0GAUgASgLMi8uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2VQYXJ0VG9vbFJlc3VsdBJACglpbWFnZV9yZWYYBiABKAsyLS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50TWVzc2FnZVBhcnRJbWFnZVJlZiJhCgpBZ2VudEFjdG9yEhIKCnN1YmplY3RfaWQYASABKAkSFAoMc3ViamVjdF9raW5kGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRITCgthdXRoX3NvdXJjZRgEIAEoCSJgCg5BZ2VudFdvcmtzcGFjZRJBCgljaGVja291dHMYASADKAsyLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDY3dkGAIgASgJIkMKGUFnZW50V29ya3NwYWNlR2l0Q2hlY2tvdXQSCwoDdXJsGAEgASgJEgsKA3JlZhgCIAEoCRIMCgRwYXRoGAMgASgJIjMKFlByZXBhcmVkQWdlbnRXb3Jrc3BhY2USDAoEcm9vdBgBIAEoCRILCgNjd2QYAiABKAkihAEKEVJlc29sdmVkQWdlbnRUb29sEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSMgoRcGFyYW1ldGVyc19zY2hlbWEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SgQIBBAFUgZ0YXJnZXQi5QIKGUFnZW50UHJvdmlkZXJDYXBhYmlsaXRpZXMSFgoOc3RyZWFtaW5nX3RleHQYASABKAgSEgoKdG9vbF9jYWxscxgCIAEoCBIbChNwYXJhbGxlbF90b29sX2NhbGxzGAMgASgIEhQKDGludGVyYWN0aW9ucxgFIAEoCBIXCg9yZXN1bWFibGVfdHVybnMYBiABKAgSGwoTcmVhc29uaW5nX3N1bW1hcmllcxgHIAEoCBIeChZib3VuZGVkX2xpc3RfaHlkcmF0aW9uGAkgASgIEkgKFnN1cHBvcnRlZF90b29sX3NvdXJjZXMYCiADKA4yKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFNvdXJjZU1vZGUSHgoWc3VwcG9ydHNfc2Vzc2lvbl9zdGFydBgLIAEoCBIjChtzdXBwb3J0c19wcmVwYXJlZF93b3Jrc3BhY2UYDCABKAhKBAgIEAkiJQojR2V0QWdlbnRQcm92aWRlckNhcGFiaWxpdGllc1JlcXVlc3QijgMKEEFnZW50SW50ZXJhY3Rpb24SCgoCaWQYASABKAkSNwoEdHlwZRgCIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvblR5cGUSOQoFc3RhdGUYAyABKA4yKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb25TdGF0ZRINCgV0aXRsZRgEIAEoCRIOCgZwcm9tcHQYBSABKAkSKAoHcmVxdWVzdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKwoKcmVzb2x1dGlvbhgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLcmVzb2x2ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3R1cm5faWQYCiABKAkSEgoKc2Vzc2lvbl9pZBgLIAEoCSL9AgoMQWdlbnRTZXNzaW9uEgoKAmlkGAEgASgJEhUKDXByb3ZpZGVyX25hbWUYAiABKAkSDQoFbW9kZWwYAyABKAkSEgoKY2xpZW50X3JlZhgEIAEoCRI1CgVzdGF0ZRgFIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMKCmNyZWF0ZWRfYnkYByABKAsyHy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50QWN0b3ISLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF90dXJuX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLDBAohQ3JlYXRlQWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAIgASgJEg0KBW1vZGVsGAMgASgJEhIKCmNsaWVudF9yZWYYBCABKAkSKQoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMKCmNyZWF0ZWRfYnkYByABKAsyHy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50QWN0b3ISNAoHc3ViamVjdBgIIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSQwoNc2Vzc2lvbl9zdGFydBgJIAEoCzIsLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhcnRDb25maWcSRwoScHJlcGFyZWRfd29ya3NwYWNlGAogASgLMisuZ2VzdGFsdC5wcm92aWRlci52MS5QcmVwYXJlZEFnZW50V29ya3NwYWNlEhUKDXByb3ZpZGVyX25hbWUYCyABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgMIAEoCRI2Cgl3b3Jrc3BhY2UYDSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50V29ya3NwYWNlEikKCHdvcmtmbG93GA4gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEoECAYQB1IQcHJvdmlkZXJfb3B0aW9ucyJUChdBZ2VudFNlc3Npb25TdGFydENvbmZpZxI5CgVob29rcxgBIAMoCzIqLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhcnRIb29rIpACChVBZ2VudFNlc3Npb25TdGFydEhvb2sSCgoCaWQYASABKAkSDAoEdHlwZRgCIAEoCRIPCgdjb21tYW5kGAMgAygJEgsKA2N3ZBgEIAEoCRIPCgd0aW1lb3V0GAUgASgJEkAKA2VudhgGIAMoCzIzLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhcnRIb29rLkVudkVudHJ5EkAKBm91dHB1dBgHIAEoCzIwLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhcnRIb29rT3V0cHV0GioKCEVudkVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiSwobQWdlbnRTZXNzaW9uU3RhcnRIb29rT3V0cHV0EhoKEmFkZGl0aW9uYWxfY29udGV4dBgBIAEoCBIQCghtZXRhZGF0YRgCIAEoCCKvAQoeR2V0QWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSNAoHc3ViamVjdBgCIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCRIpCgh3b3JrZmxvdxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QipQIKIExpc3RBZ2VudFByb3ZpZGVyU2Vzc2lvbnNSZXF1ZXN0EjQKB3N1YmplY3QYASABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhMKC3Nlc3Npb25faWRzGAIgAygJEjUKBXN0YXRlGAMgASgOMiYuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFNlc3Npb25TdGF0ZRINCgVsaW1pdBgEIAEoBRIUCgxzdW1tYXJ5X29ubHkYBSABKAgSFQoNcHJvdmlkZXJfbmFtZRgGIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAcgASgJEikKCHdvcmtmbG93GAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJYCiFMaXN0QWdlbnRQcm92aWRlclNlc3Npb25zUmVzcG9uc2USMwoIc2Vzc2lvbnMYASADKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvbiKoAgohVXBkYXRlQWdlbnRQcm92aWRlclNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSEgoKY2xpZW50X3JlZhgCIAEoCRI1CgVzdGF0ZRgDIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uU3RhdGUSKQoIbWV0YWRhdGEYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjQKB3N1YmplY3QYBSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YBiABKAkSKQoId29ya2Zsb3cYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IsEECglBZ2VudFR1cm4SCgoCaWQYASABKAkSEgoKc2Vzc2lvbl9pZBgCIAEoCRIVCg1wcm92aWRlcl9uYW1lGAMgASgJEg0KBW1vZGVsGAQgASgJEjkKBnN0YXR1cxgFIAEoDjIpLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRFeGVjdXRpb25TdGF0dXMSMwoIbWVzc2FnZXMYBiADKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50TWVzc2FnZRIWCg5zdGF0dXNfbWVzc2FnZRgJIAEoCRIzCgpjcmVhdGVkX2J5GAogASgLMh8uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEFjdG9yEi4KCmNyZWF0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnN0YXJ0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKDGNvbXBsZXRlZF9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFQoNZXhlY3V0aW9uX3JlZhgOIAEoCRI4CgR0ZXh0GBQgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm5UZXh0T3V0cHV0SAASRAoKc3RydWN0dXJlZBgVIAEoCzIuLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRUdXJuU3RydWN0dXJlZE91dHB1dEgAQggKBm91dHB1dCIjChNBZ2VudFR1cm5UZXh0T3V0cHV0EgwKBHRleHQYASABKAkiUQoZQWdlbnRUdXJuU3RydWN0dXJlZE91dHB1dBIMCgR0ZXh0GAEgASgJEiYKBXZhbHVlGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKVAgoQQWdlbnRUdXJuRGlzcGxheRIMCgRraW5kGAEgASgJEg0KBXBoYXNlGAIgASgJEgwKBHRleHQYAyABKAkSDQoFbGFiZWwYBCABKAkSCwoDcmVmGAUgASgJEhIKCnBhcmVudF9yZWYYBiABKAkSJQoFaW5wdXQYByABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSJgoGb3V0cHV0GAggASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEiUKBWVycm9yGAkgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEg4KBmFjdGlvbhgKIAEoCRIOCgZmb3JtYXQYCyABKAkSEAoIbGFuZ3VhZ2UYDCABKAkijwYKHkNyZWF0ZUFnZW50UHJvdmlkZXJUdXJuUmVxdWVzdBIPCgd0dXJuX2lkGAEgASgJEhIKCnNlc3Npb25faWQYAiABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAMgASgJEg0KBW1vZGVsGAQgASgJEjMKCG1lc3NhZ2VzGAUgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE1lc3NhZ2USNQoFdG9vbHMYBiADKAsyJi5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRUb29sEikKCG1ldGFkYXRhGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIzCgpjcmVhdGVkX2J5GAogASgLMh8uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudEFjdG9yEhUKDWV4ZWN1dGlvbl9yZWYYCyABKAkSNAoJdG9vbF9yZWZzGAwgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRvb2xSZWYSPQoLdG9vbF9zb3VyY2UYDSABKA4yKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VG9vbFNvdXJjZU1vZGUSNAoHc3ViamVjdBgOIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSLgoNbW9kZWxfb3B0aW9ucxgQIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSEQoJcnVuX2dyYW50GBEgASgJEhcKD3RpbWVvdXRfc2Vjb25kcxgSIAEoBRIYChBpbnZvY2F0aW9uX3Rva2VuGBMgASgJEhUKDXRvb2xfcmVmc19zZXQYFCABKAgSMAoGb3V0cHV0GBUgASgLMiAuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE91dHB1dBIpCgh3b3JrZmxvdxgWIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RKBAgJEApKBAgPEBBSEHByb3ZpZGVyX29wdGlvbnNSCnRvb2xfZ3JhbnQiEQoPQWdlbnRUZXh0T3V0cHV0IkAKFUFnZW50U3RydWN0dXJlZE91dHB1dBInCgZzY2hlbWEYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Io0BCgtBZ2VudE91dHB1dBI0CgR0ZXh0GAEgASgLMiQuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRleHRPdXRwdXRIABJACgpzdHJ1Y3R1cmVkGAIgASgLMiouZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFN0cnVjdHVyZWRPdXRwdXRIAEIGCgRraW5kIqkBChtHZXRBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJEikKCHdvcmtmbG93GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKgAgodTGlzdEFnZW50UHJvdmlkZXJUdXJuc1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIQCgh0dXJuX2lkcxgDIAMoCRI5CgZzdGF0dXMYBCABKA4yKS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50RXhlY3V0aW9uU3RhdHVzEg0KBWxpbWl0GAUgASgFEhQKDHN1bW1hcnlfb25seRgGIAEoCBIYChBpbnZvY2F0aW9uX3Rva2VuGAcgASgJEikKCHdvcmtmbG93GAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJPCh5MaXN0QWdlbnRQcm92aWRlclR1cm5zUmVzcG9uc2USLQoFdHVybnMYASADKAsyHi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybiK8AQoeQ2FuY2VsQWdlbnRQcm92aWRlclR1cm5SZXF1ZXN0Eg8KB3R1cm5faWQYASABKAkSDgoGcmVhc29uGAIgASgJEjQKB3N1YmplY3QYAyABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0EhgKEGludm9jYXRpb25fdG9rZW4YBCABKAkSKQoId29ya2Zsb3cYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IvsBCg5BZ2VudFR1cm5FdmVudBIKCgJpZBgBIAEoCRIPCgd0dXJuX2lkGAIgASgJEgsKA3NlcRgDIAEoAxIMCgR0eXBlGAQgASgJEg4KBnNvdXJjZRgFIAEoCRISCgp2aXNpYmlsaXR5GAYgASgJEiUKBGRhdGEYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjYKB2Rpc3BsYXkYCSABKAsyJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybkRpc3BsYXki0gEKIkxpc3RBZ2VudFByb3ZpZGVyVHVybkV2ZW50c1JlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRIRCglhZnRlcl9zZXEYAiABKAMSDQoFbGltaXQYAyABKAUSNAoHc3ViamVjdBgEIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSGAoQaW52b2NhdGlvbl90b2tlbhgFIAEoCRIpCgh3b3JrZmxvdxgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiWgojTGlzdEFnZW50UHJvdmlkZXJUdXJuRXZlbnRzUmVzcG9uc2USMwoGZXZlbnRzGAEgAygLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm5FdmVudCKMAQoiR2V0QWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBIWCg5pbnRlcmFjdGlvbl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJIrIBCiRMaXN0QWdlbnRQcm92aWRlckludGVyYWN0aW9uc1JlcXVlc3QSDwoHdHVybl9pZBgBIAEoCRI0CgdzdWJqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dBIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJEikKCHdvcmtmbG93GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJkCiVMaXN0QWdlbnRQcm92aWRlckludGVyYWN0aW9uc1Jlc3BvbnNlEjsKDGludGVyYWN0aW9ucxgBIAMoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvbiL5AQomUmVzb2x2ZUFnZW50UHJvdmlkZXJJbnRlcmFjdGlvblJlcXVlc3QSFgoOaW50ZXJhY3Rpb25faWQYASABKAkSKwoKcmVzb2x1dGlvbhgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNAoHc3ViamVjdBgDIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuU3ViamVjdENvbnRleHQSGAoQaW52b2NhdGlvbl90b2tlbhgEIAEoCRIPCgd0dXJuX2lkGAUgASgJEikKCHdvcmtmbG93GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLPAQoXRXhlY3V0ZUFnZW50VG9vbFJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIPCgd0dXJuX2lkGAIgASgJEhQKDHRvb2xfY2FsbF9pZBgDIAEoCRIPCgd0b29sX2lkGAQgASgJEioKCWFyZ3VtZW50cxgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFwoPaWRlbXBvdGVuY3lfa2V5GAcgASgJEhEKCXJ1bl9ncmFudBgIIAEoCUoECAYQB1IKdG9vbF9ncmFudCI4ChhFeGVjdXRlQWdlbnRUb29sUmVzcG9uc2USDgoGc3RhdHVzGAEgASgFEgwKBGJvZHkYAiABKAkikwIKD0xpc3RlZEFnZW50VG9vbBIKCgJpZBgBIAEoCRIQCghtY3BfbmFtZRgCIAEoCRINCgV0aXRsZRgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIUCgxpbnB1dF9zY2hlbWEYBSABKAkSFQoNb3V0cHV0X3NjaGVtYRgGIAEoCRI+Cgthbm5vdGF0aW9ucxgHIAEoCzIpLmdlc3RhbHQucHJvdmlkZXIudjEuT3BlcmF0aW9uQW5ub3RhdGlvbnMSLgoDcmVmGAggASgLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRvb2xSZWYSDAoEdGFncxgJIAMoCRITCgtzZWFyY2hfdGV4dBgKIAEoCSKXAQoVTGlzdEFnZW50VG9vbHNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSDwoHdHVybl9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSEgoKcGFnZV90b2tlbhgEIAEoCRIRCglydW5fZ3JhbnQYBiABKAkSDQoFcXVlcnkYByABKAlKBAgFEAZSCnRvb2xfZ3JhbnQiZgoWTGlzdEFnZW50VG9vbHNSZXNwb25zZRIzCgV0b29scxgBIAMoCzIkLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdGVkQWdlbnRUb29sEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSJ9Ch1SZXNvbHZlQWdlbnRDb25uZWN0aW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEg8KB3R1cm5faWQYAiABKAkSEgoKY29ubmVjdGlvbhgDIAEoCRIQCghpbnN0YW5jZRgEIAEoCRIRCglydW5fZ3JhbnQYBSABKAkiiQMKF1Jlc29sdmVkQWdlbnRDb25uZWN0aW9uEhUKDWNvbm5lY3Rpb25faWQYASABKAkSEgoKY29ubmVjdGlvbhgCIAEoCRIQCghpbnN0YW5jZRgDIAEoCRIMCgRtb2RlGAQgASgJEkoKB2hlYWRlcnMYBSADKAsyOS5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRDb25uZWN0aW9uLkhlYWRlcnNFbnRyeRJICgZwYXJhbXMYBiADKAsyOC5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc29sdmVkQWdlbnRDb25uZWN0aW9uLlBhcmFtc0VudHJ5Ei4KCmV4cGlyZXNfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGi4KDEhlYWRlcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGi0KC1BhcmFtc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEq+gEKFEFnZW50TWVzc2FnZVBhcnRUeXBlEicKI0FHRU5UX01FU1NBR0VfUEFSVF9UWVBFX1VOU1BFQ0lGSUVEEAASIAocQUdFTlRfTUVTU0FHRV9QQVJUX1RZUEVfVEVYVBABEiAKHEFHRU5UX01FU1NBR0VfUEFSVF9UWVBFX0pTT04QAhIlCiFBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9UT09MX0NBTEwQAxInCiNBR0VOVF9NRVNTQUdFX1BBUlRfVFlQRV9UT09MX1JFU1VMVBAEEiUKIUFHRU5UX01FU1NBR0VfUEFSVF9UWVBFX0lNQUdFX1JFRhAFKowBChNBZ2VudFRvb2xTb3VyY2VNb2RlEiYKIkFHRU5UX1RPT0xfU09VUkNFX01PREVfVU5TUEVDSUZJRUQQABImCiJBR0VOVF9UT09MX1NPVVJDRV9NT0RFX01DUF9DQVRBTE9HEAISHwobQUdFTlRfVE9PTF9TT1VSQ0VfTU9ERV9OT05FEAMiBAgBEAEqogIKFEFnZW50RXhlY3V0aW9uU3RhdHVzEiYKIkFHRU5UX0VYRUNVVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIiCh5BR0VOVF9FWEVDVVRJT05fU1RBVFVTX1BFTkRJTkcQARIiCh5BR0VOVF9FWEVDVVRJT05fU1RBVFVTX1JVTk5JTkcQAhIkCiBBR0VOVF9FWEVDVVRJT05fU1RBVFVTX1NVQ0NFRURFRBADEiEKHUFHRU5UX0VYRUNVVElPTl9TVEFUVVNfRkFJTEVEEAQSIwofQUdFTlRfRVhFQ1VUSU9OX1NUQVRVU19DQU5DRUxFRBAFEiwKKEFHRU5UX0VYRUNVVElPTl9TVEFUVVNfV0FJVElOR19GT1JfSU5QVVQQBip6ChFBZ2VudFNlc3Npb25TdGF0ZRIjCh9BR0VOVF9TRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAASHgoaQUdFTlRfU0VTU0lPTl9TVEFURV9BQ1RJVkUQARIgChxBR0VOVF9TRVNTSU9OX1NUQVRFX0FSQ0hJVkVEEAIqrwEKFEFnZW50SW50ZXJhY3Rpb25UeXBlEiYKIkFHRU5UX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIjCh9BR0VOVF9JTlRFUkFDVElPTl9UWVBFX0FQUFJPVkFMEAESKAokQUdFTlRfSU5URVJBQ1RJT05fVFlQRV9DTEFSSUZJQ0FUSU9OEAISIAocQUdFTlRfSU5URVJBQ1RJT05fVFlQRV9JTlBVVBADKrEBChVBZ2VudEludGVyYWN0aW9uU3RhdGUSJwojQUdFTlRfSU5URVJBQ1RJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIjCh9BR0VOVF9JTlRFUkFDVElPTl9TVEFURV9QRU5ESU5HEAESJAogQUdFTlRfSU5URVJBQ1RJT05fU1RBVEVfUkVTT0xWRUQQAhIkCiBBR0VOVF9JTlRFUkFDVElPTl9TVEFURV9DQU5DRUxFRBADMuALCg1BZ2VudFByb3ZpZGVyEmoKDUNyZWF0ZVNlc3Npb24SNi5nZXN0YWx0LnByb3ZpZGVyLnYxLkNyZWF0ZUFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBohLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uEmQKCkdldFNlc3Npb24SMy5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldEFnZW50UHJvdmlkZXJTZXNzaW9uUmVxdWVzdBohLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRTZXNzaW9uEn0KDExpc3RTZXNzaW9ucxI1Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJTZXNzaW9uc1JlcXVlc3QaNi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyU2Vzc2lvbnNSZXNwb25zZRJqCg1VcGRhdGVTZXNzaW9uEjYuZ2VzdGFsdC5wcm92aWRlci52MS5VcGRhdGVBZ2VudFByb3ZpZGVyU2Vzc2lvblJlcXVlc3QaIS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50U2Vzc2lvbhJhCgpDcmVhdGVUdXJuEjMuZ2VzdGFsdC5wcm92aWRlci52MS5DcmVhdGVBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QaHi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybhJbCgdHZXRUdXJuEjAuZ2VzdGFsdC5wcm92aWRlci52MS5HZXRBZ2VudFByb3ZpZGVyVHVyblJlcXVlc3QaHi5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50VHVybhJ0CglMaXN0VHVybnMSMi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RBZ2VudFByb3ZpZGVyVHVybnNSZXF1ZXN0GjMuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5zUmVzcG9uc2USYQoKQ2FuY2VsVHVybhIzLmdlc3RhbHQucHJvdmlkZXIudjEuQ2FuY2VsQWdlbnRQcm92aWRlclR1cm5SZXF1ZXN0Gh4uZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFR1cm4SgwEKDkxpc3RUdXJuRXZlbnRzEjcuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5FdmVudHNSZXF1ZXN0GjguZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlclR1cm5FdmVudHNSZXNwb25zZRJwCg5HZXRJbnRlcmFjdGlvbhI3Lmdlc3RhbHQucHJvdmlkZXIudjEuR2V0QWdlbnRQcm92aWRlckludGVyYWN0aW9uUmVxdWVzdBolLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRJbnRlcmFjdGlvbhKJAQoQTGlzdEludGVyYWN0aW9ucxI5Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50UHJvdmlkZXJJbnRlcmFjdGlvbnNSZXF1ZXN0GjouZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRQcm92aWRlckludGVyYWN0aW9uc1Jlc3BvbnNlEngKElJlc29sdmVJbnRlcmFjdGlvbhI7Lmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZUFnZW50UHJvdmlkZXJJbnRlcmFjdGlvblJlcXVlc3QaJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkFnZW50SW50ZXJhY3Rpb24SewoPR2V0Q2FwYWJpbGl0aWVzEjguZ2VzdGFsdC5wcm92aWRlci52MS5HZXRBZ2VudFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVxdWVzdBouLmdlc3RhbHQucHJvdmlkZXIudjEuQWdlbnRQcm92aWRlckNhcGFiaWxpdGllczLUAgoJQWdlbnRIb3N0EmQKCUxpc3RUb29scxIqLmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdEFnZW50VG9vbHNSZXF1ZXN0GisuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0QWdlbnRUb29sc1Jlc3BvbnNlEmoKC0V4ZWN1dGVUb29sEiwuZ2VzdGFsdC5wcm92aWRlci52MS5FeGVjdXRlQWdlbnRUb29sUmVxdWVzdBotLmdlc3RhbHQucHJvdmlkZXIudjEuRXhlY3V0ZUFnZW50VG9vbFJlc3BvbnNlEnUKEVJlc29sdmVDb25uZWN0aW9uEjIuZ2VzdGFsdC5wcm92aWRlci52MS5SZXNvbHZlQWdlbnRDb25uZWN0aW9uUmVxdWVzdBosLmdlc3RhbHQucHJvdmlkZXIudjEuUmVzb2x2ZWRBZ2VudENvbm5lY3Rpb25iBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_v1_app]);
18
18
 
19
19
  /**
20
20
  * @generated from message gestalt.provider.v1.AgentMessage
@@ -577,6 +577,11 @@ export type CreateAgentProviderSessionRequest = Message<"gestalt.provider.v1.Cre
577
577
  * @generated from field: gestalt.provider.v1.AgentWorkspace workspace = 13;
578
578
  */
579
579
  workspace?: AgentWorkspace | undefined;
580
+
581
+ /**
582
+ * @generated from field: google.protobuf.Struct workflow = 14;
583
+ */
584
+ workflow?: JsonObject | undefined;
580
585
  };
581
586
 
582
587
  /**
@@ -690,6 +695,11 @@ export type GetAgentProviderSessionRequest = Message<"gestalt.provider.v1.GetAge
690
695
  * @generated from field: string invocation_token = 3;
691
696
  */
692
697
  invocationToken: string;
698
+
699
+ /**
700
+ * @generated from field: google.protobuf.Struct workflow = 4;
701
+ */
702
+ workflow?: JsonObject | undefined;
693
703
  };
694
704
 
695
705
  /**
@@ -743,6 +753,11 @@ export type ListAgentProviderSessionsRequest = Message<"gestalt.provider.v1.List
743
753
  * @generated from field: string invocation_token = 7;
744
754
  */
745
755
  invocationToken: string;
756
+
757
+ /**
758
+ * @generated from field: google.protobuf.Struct workflow = 8;
759
+ */
760
+ workflow?: JsonObject | undefined;
746
761
  };
747
762
 
748
763
  /**
@@ -802,6 +817,11 @@ export type UpdateAgentProviderSessionRequest = Message<"gestalt.provider.v1.Upd
802
817
  * @generated from field: string invocation_token = 6;
803
818
  */
804
819
  invocationToken: string;
820
+
821
+ /**
822
+ * @generated from field: google.protobuf.Struct workflow = 7;
823
+ */
824
+ workflow?: JsonObject | undefined;
805
825
  };
806
826
 
807
827
  /**
@@ -1104,6 +1124,11 @@ export type CreateAgentProviderTurnRequest = Message<"gestalt.provider.v1.Create
1104
1124
  * @generated from field: gestalt.provider.v1.AgentOutput output = 21;
1105
1125
  */
1106
1126
  output?: AgentOutput | undefined;
1127
+
1128
+ /**
1129
+ * @generated from field: google.protobuf.Struct workflow = 22;
1130
+ */
1131
+ workflow?: JsonObject | undefined;
1107
1132
  };
1108
1133
 
1109
1134
  /**
@@ -1190,6 +1215,11 @@ export type GetAgentProviderTurnRequest = Message<"gestalt.provider.v1.GetAgentP
1190
1215
  * @generated from field: string invocation_token = 3;
1191
1216
  */
1192
1217
  invocationToken: string;
1218
+
1219
+ /**
1220
+ * @generated from field: google.protobuf.Struct workflow = 4;
1221
+ */
1222
+ workflow?: JsonObject | undefined;
1193
1223
  };
1194
1224
 
1195
1225
  /**
@@ -1244,6 +1274,11 @@ export type ListAgentProviderTurnsRequest = Message<"gestalt.provider.v1.ListAge
1244
1274
  * @generated from field: string invocation_token = 7;
1245
1275
  */
1246
1276
  invocationToken: string;
1277
+
1278
+ /**
1279
+ * @generated from field: google.protobuf.Struct workflow = 8;
1280
+ */
1281
+ workflow?: JsonObject | undefined;
1247
1282
  };
1248
1283
 
1249
1284
  /**
@@ -1293,6 +1328,11 @@ export type CancelAgentProviderTurnRequest = Message<"gestalt.provider.v1.Cancel
1293
1328
  * @generated from field: string invocation_token = 4;
1294
1329
  */
1295
1330
  invocationToken: string;
1331
+
1332
+ /**
1333
+ * @generated from field: google.protobuf.Struct workflow = 5;
1334
+ */
1335
+ workflow?: JsonObject | undefined;
1296
1336
  };
1297
1337
 
1298
1338
  /**
@@ -1387,6 +1427,11 @@ export type ListAgentProviderTurnEventsRequest = Message<"gestalt.provider.v1.Li
1387
1427
  * @generated from field: string invocation_token = 5;
1388
1428
  */
1389
1429
  invocationToken: string;
1430
+
1431
+ /**
1432
+ * @generated from field: google.protobuf.Struct workflow = 6;
1433
+ */
1434
+ workflow?: JsonObject | undefined;
1390
1435
  };
1391
1436
 
1392
1437
  /**
@@ -1458,6 +1503,11 @@ export type ListAgentProviderInteractionsRequest = Message<"gestalt.provider.v1.
1458
1503
  * @generated from field: string invocation_token = 3;
1459
1504
  */
1460
1505
  invocationToken: string;
1506
+
1507
+ /**
1508
+ * @generated from field: google.protobuf.Struct workflow = 4;
1509
+ */
1510
+ workflow?: JsonObject | undefined;
1461
1511
  };
1462
1512
 
1463
1513
  /**
@@ -1512,6 +1562,11 @@ export type ResolveAgentProviderInteractionRequest = Message<"gestalt.provider.v
1512
1562
  * @generated from field: string turn_id = 5;
1513
1563
  */
1514
1564
  turnId: string;
1565
+
1566
+ /**
1567
+ * @generated from field: google.protobuf.Struct workflow = 6;
1568
+ */
1569
+ workflow?: JsonObject | undefined;
1515
1570
  };
1516
1571
 
1517
1572
  /**
@@ -8,7 +8,7 @@ import type { EmptySchema, Timestamp, Value } from "@bufbuild/protobuf/wkt";
8
8
  import { file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
9
  import type { AgentOutput } from "./agent_pb";
10
10
  import { file_v1_agent } from "./agent_pb";
11
- import type { AgentToolRef } from "./app_pb";
11
+ import type { AgentToolRef, SubjectContext } from "./app_pb";
12
12
  import { file_v1_app } from "./app_pb";
13
13
  import type { JsonObject, Message } from "@bufbuild/protobuf";
14
14
 
@@ -16,7 +16,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
16
16
  * Describes the file v1/workflow.proto.
17
17
  */
18
18
  export const file_v1_workflow: GenFile = /*@__PURE__*/
19
- fileDesc("ChF2MS93b3JrZmxvdy5wcm90bxITZ2VzdGFsdC5wcm92aWRlci52MSJNChNCb3VuZFdvcmtmbG93VGFyZ2V0EjAKBXN0ZXBzGAggAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBKBAgBEAgivQMKDFdvcmtmbG93U3RlcBIKCgJpZBgBIAEoCRI9CgZpbnB1dHMYAiADKAsyLS5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93U3RlcC5JbnB1dHNFbnRyeRIzCgR3aGVuGAMgASgLMiUuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBXaGVuEhcKD3RpbWVvdXRfc2Vjb25kcxgEIAEoBRIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNwoDYXBwGAogASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBBcHBDYWxsSAASOwoFYWdlbnQYCyABKAsyKi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93U3RlcEFnZW50VHVybkgAGlEKC0lucHV0c0VudHJ5EgsKA2tleRgBIAEoCRIxCgV2YWx1ZRgCIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dWYWx1ZToCOAFCCAoGYWN0aW9uSgQIBRAGSgQIBxAISgQICBAJSgQICRAKIqgBChNXb3JrZmxvd1N0ZXBBcHBDYWxsEgwKBG5hbWUYASABKAkSEQoJb3BlcmF0aW9uGAIgASgJEjEKBWlucHV0GAMgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1ZhbHVlEhIKCmNvbm5lY3Rpb24YBCABKAkSEAoIaW5zdGFuY2UYBSABKAkSFwoPY3JlZGVudGlhbF9tb2RlGAYgASgJItECChVXb3JrZmxvd1N0ZXBBZ2VudFR1cm4SEAoIcHJvdmlkZXIYASABKAkSDQoFbW9kZWwYAiABKAkSEwoLc2Vzc2lvbl9rZXkYAyABKAkSMQoGcHJvbXB0GAQgASgLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1RleHQSOwoIbWVzc2FnZXMYBSADKAsyKS5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWdlbnRNZXNzYWdlEjAKBXRvb2xzGAYgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRvb2xSZWYSMAoGb3V0cHV0GAcgASgLMiAuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE91dHB1dBIuCg1tb2RlbF9vcHRpb25zGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKAAQoUV29ya2Zsb3dBZ2VudE1lc3NhZ2USDAoEcm9sZRgBIAEoCRIvCgR0ZXh0GAIgASgLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1RleHQSKQoIbWV0YWRhdGEYAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IiAKDFdvcmtmbG93VGV4dBIQCgh0ZW1wbGF0ZRgBIAEoCSJtChBXb3JrZmxvd1N0ZXBXaGVuEjEKBXZhbHVlGAEgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1ZhbHVlEiYKBmVxdWFscxgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSLEAwoNV29ya2Zsb3dWYWx1ZRIpCgdsaXRlcmFsGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSAASNQoGb2JqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd09iamVjdEgAEjMKBWFycmF5GAMgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FycmF5SAASNQoIdGVtcGxhdGUYBCABKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93VGV4dEgAEjwKCXJ1bl9pbnB1dBgFIAEoCzInLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dQYXRoU291cmNlSAASQQoOc2lnbmFsX3BheWxvYWQYBiABKAsyJy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93UGF0aFNvdXJjZUgAEkQKC3N0ZXBfb3V0cHV0GAkgASgLMi0uZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBPdXRwdXRTb3VyY2VIAEIGCgRraW5kSgQIBxAISgQICBAJSgQIChALSgQICxAMIqQBCg5Xb3JrZmxvd09iamVjdBI/CgZmaWVsZHMYASADKAsyLy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93T2JqZWN0LkZpZWxkc0VudHJ5GlEKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIxCgV2YWx1ZRgCIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dWYWx1ZToCOAEiQwoNV29ya2Zsb3dBcnJheRIyCgZ2YWx1ZXMYASADKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93VmFsdWUiIgoSV29ya2Zsb3dQYXRoU291cmNlEgwKBHBhdGgYASABKAkiOQoYV29ya2Zsb3dTdGVwT3V0cHV0U291cmNlEg8KB3N0ZXBfaWQYASABKAkSDAoEcGF0aBgCIAEoCSJkCg1Xb3JrZmxvd0FjdG9yEhIKCnN1YmplY3RfaWQYASABKAkSFAoMc3ViamVjdF9raW5kGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRITCgthdXRoX3NvdXJjZRgEIAEoCSLdAgoNV29ya2Zsb3dFdmVudBIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSFAoMc3BlY192ZXJzaW9uGAMgASgJEgwKBHR5cGUYBCABKAkSDwoHc3ViamVjdBgFIAEoCRIoCgR0aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9kYXRhY29udGVudHR5cGUYByABKAkSJQoEZGF0YRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSRgoKZXh0ZW5zaW9ucxgJIAMoCzIyLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudC5FeHRlbnNpb25zRW50cnkaSQoPRXh0ZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiQwoSV29ya2Zsb3dFdmVudE1hdGNoEgwKBHR5cGUYASABKAkSDgoGc291cmNlGAIgASgJEg8KB3N1YmplY3QYAyABKAkiFwoVV29ya2Zsb3dNYW51YWxUcmlnZ2VyImEKF1dvcmtmbG93U2NoZWR1bGVUcmlnZ2VyEhMKC3NjaGVkdWxlX2lkGAEgASgJEjEKDXNjaGVkdWxlZF9mb3IYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wImcKHldvcmtmbG93RXZlbnRUcmlnZ2VySW52b2NhdGlvbhISCgp0cmlnZ2VyX2lkGAEgASgJEjEKBWV2ZW50GAIgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0V2ZW50IuIBChJXb3JrZmxvd1J1blRyaWdnZXISPAoGbWFudWFsGAEgASgLMiouZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd01hbnVhbFRyaWdnZXJIABJACghzY2hlZHVsZRgCIAEoCzIsLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dTY2hlZHVsZVRyaWdnZXJIABJECgVldmVudBgDIAEoCzIzLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudFRyaWdnZXJJbnZvY2F0aW9uSABCBgoEa2luZCKFBAoQQm91bmRXb3JrZmxvd1J1bhIKCgJpZBgBIAEoCRI2CgZzdGF0dXMYAiABKA4yJi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93UnVuU3RhdHVzEjgKBnRhcmdldBgDIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBI4Cgd0cmlnZ2VyGAQgASgLMicuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1J1blRyaWdnZXISLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKc3RhcnRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMY29tcGxldGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5zdGF0dXNfbWVzc2FnZRgIIAEoCRITCgtyZXN1bHRfYm9keRgJIAEoCRI2CgpjcmVhdGVkX2J5GAogASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEhQKDHdvcmtmbG93X2tleRgMIAEoCRIVCg1wcm92aWRlcl9uYW1lGA0gASgJEhUKDWRlZmluaXRpb25faWQYDiABKAkihAMKFUJvdW5kV29ya2Zsb3dTY2hlZHVsZRIKCgJpZBgBIAEoCRIMCgRjcm9uGAIgASgJEhAKCHRpbWV6b25lGAMgASgJEjgKBnRhcmdldBgEIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBIOCgZwYXVzZWQYBSABKAgSLgoKY3JlYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLbmV4dF9ydW5fYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjYKCmNyZWF0ZWRfYnkYCSABKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWN0b3ISFQoNcHJvdmlkZXJfbmFtZRgLIAEoCRIVCg1kZWZpbml0aW9uX2lkGAwgASgJIu8CChlCb3VuZFdvcmtmbG93RXZlbnRUcmlnZ2VyEgoKAmlkGAEgASgJEjYKBW1hdGNoGAIgASgLMicuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0V2ZW50TWF0Y2gSOAoGdGFyZ2V0GAMgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0Eg4KBnBhdXNlZBgEIAEoCBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI2CgpjcmVhdGVkX2J5GAcgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEhUKDXByb3ZpZGVyX25hbWUYCSABKAkSFQoNZGVmaW5pdGlvbl9pZBgKIAEoCSLeAQoXQm91bmRXb3JrZmxvd0RlZmluaXRpb24SCgoCaWQYASABKAkSOAoGdGFyZ2V0GAIgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0EjYKCmNyZWF0ZWRfYnkYAyABKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWN0b3ISLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFQoNcHJvdmlkZXJfbmFtZRgFIAEoCSKSAgoOV29ya2Zsb3dTaWduYWwSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIoCgdwYXlsb2FkGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNgoKY3JlYXRlZF9ieRgFIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIuCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9pZGVtcG90ZW5jeV9rZXkYByABKAkSEAoIc2VxdWVuY2UYCCABKAMiigIKH1N0YXJ0V29ya2Zsb3dQcm92aWRlclJ1blJlcXVlc3QSOAoGdGFyZ2V0GAEgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0EhcKD2lkZW1wb3RlbmN5X2tleRgCIAEoCRI2CgpjcmVhdGVkX2J5GAQgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEhQKDHdvcmtmbG93X2tleRgGIAEoCRIVCg1wcm92aWRlcl9uYW1lGAcgASgJEhgKEGludm9jYXRpb25fdG9rZW4YCCABKAkSFQoNZGVmaW5pdGlvbl9pZBgJIAEoCSJJCh1HZXRXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBIOCgZydW5faWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSKuAQofTGlzdFdvcmtmbG93UHJvdmlkZXJSdW5zUmVxdWVzdBIRCglwYWdlX3NpemUYASABKAUSEgoKcGFnZV90b2tlbhgCIAEoCRI2CgZzdGF0dXMYAyABKA4yJi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93UnVuU3RhdHVzEhgKEGludm9jYXRpb25fdG9rZW4YBCABKAkSEgoKdGFyZ2V0X2FwcBgFIAEoCSJwCiBMaXN0V29ya2Zsb3dQcm92aWRlclJ1bnNSZXNwb25zZRIzCgRydW5zGAEgAygLMiUuZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93UnVuEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSJcCiBDYW5jZWxXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBIOCgZydW5faWQYAiABKAkSDgoGcmVhc29uGAMgASgJEhgKEGludm9jYXRpb25fdG9rZW4YBCABKAkigQEKIFNpZ25hbFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0Eg4KBnJ1bl9pZBgBIAEoCRIzCgZzaWduYWwYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93U2lnbmFsEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkixwIKJ1NpZ25hbE9yU3RhcnRXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBIUCgx3b3JrZmxvd19rZXkYASABKAkSOAoGdGFyZ2V0GAIgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0EhcKD2lkZW1wb3RlbmN5X2tleRgDIAEoCRI2CgpjcmVhdGVkX2J5GAQgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEjMKBnNpZ25hbBgGIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dTaWduYWwSFQoNcHJvdmlkZXJfbmFtZRgHIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAggASgJEhUKDWRlZmluaXRpb25faWQYCSABKAkirwEKGVNpZ25hbFdvcmtmbG93UnVuUmVzcG9uc2USMgoDcnVuGAEgASgLMiUuZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93UnVuEjMKBnNpZ25hbBgCIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dTaWduYWwSEwoLc3RhcnRlZF9ydW4YAyABKAgSFAoMd29ya2Zsb3dfa2V5GAQgASgJIsECCiVVcHNlcnRXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVSZXF1ZXN0EhMKC3NjaGVkdWxlX2lkGAEgASgJEgwKBGNyb24YAiABKAkSEAoIdGltZXpvbmUYAyABKAkSOAoGdGFyZ2V0GAQgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0Eg4KBnBhdXNlZBgFIAEoCBI4CgxyZXF1ZXN0ZWRfYnkYByABKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWN0b3ISFQoNcHJvdmlkZXJfbmFtZRgJIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAogASgJEhcKD2lkZW1wb3RlbmN5X2tleRgLIAEoCRIVCg1kZWZpbml0aW9uX2lkGAwgASgJIlMKIkdldFdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QSEwoLc2NoZWR1bGVfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJACiRMaXN0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlc1JlcXVlc3QSGAoQaW52b2NhdGlvbl90b2tlbhgBIAEoCSJmCiVMaXN0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlc1Jlc3BvbnNlEj0KCXNjaGVkdWxlcxgBIAMoCzIqLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1NjaGVkdWxlIlYKJURlbGV0ZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QSEwoLc2NoZWR1bGVfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJVCiRQYXVzZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QSEwoLc2NoZWR1bGVfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJWCiVSZXN1bWVXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVSZXF1ZXN0EhMKC3NjaGVkdWxlX2lkGAIgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAki3AIKKVVwc2VydFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0EhIKCnRyaWdnZXJfaWQYASABKAkSNgoFbWF0Y2gYAiABKAsyJy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93RXZlbnRNYXRjaBI4CgZ0YXJnZXQYAyABKAsyKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dUYXJnZXQSDgoGcGF1c2VkGAQgASgIEjgKDHJlcXVlc3RlZF9ieRgGIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIVCg1wcm92aWRlcl9uYW1lGAggASgJEhgKEGludm9jYXRpb25fdG9rZW4YCSABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAogASgJEhUKDWRlZmluaXRpb25faWQYCyABKAkiVgomR2V0V29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlclJlcXVlc3QSEgoKdHJpZ2dlcl9pZBgCIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJIkQKKExpc3RXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2Vyc1JlcXVlc3QSGAoQaW52b2NhdGlvbl90b2tlbhgBIAEoCSJtCilMaXN0V29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlcnNSZXNwb25zZRJACgh0cmlnZ2VycxgBIAMoCzIuLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd0V2ZW50VHJpZ2dlciJZCilEZWxldGVXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBISCgp0cmlnZ2VyX2lkGAIgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkiWAooUGF1c2VXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBISCgp0cmlnZ2VyX2lkGAIgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkiWQopUmVzdW1lV29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlclJlcXVlc3QSEgoKdHJpZ2dlcl9pZBgCIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJItUBCiNQdWJsaXNoV29ya2Zsb3dQcm92aWRlckV2ZW50UmVxdWVzdBIQCghhcHBfbmFtZRgBIAEoCRIxCgVldmVudBgCIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudBI4CgxwdWJsaXNoZWRfYnkYAyABKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWN0b3ISGAoQaW52b2NhdGlvbl90b2tlbhgEIAEoCRIVCg1wcm92aWRlcl9uYW1lGAUgASgJIuUBCidDcmVhdGVXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QSFQoNcHJvdmlkZXJfbmFtZRgBIAEoCRI4CgZ0YXJnZXQYAiABKAsyKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dUYXJnZXQSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCRIXCg9pZGVtcG90ZW5jeV9rZXkYBCABKAkSNgoKY3JlYXRlZF9ieRgFIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvciJXCiRHZXRXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QSFQoNZGVmaW5pdGlvbl9pZBgBIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAIgASgJIuUBCidVcGRhdGVXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QSFQoNZGVmaW5pdGlvbl9pZBgBIAEoCRIVCg1wcm92aWRlcl9uYW1lGAIgASgJEjgKBnRhcmdldBgDIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBIYChBpbnZvY2F0aW9uX3Rva2VuGAQgASgJEjgKDHJlcXVlc3RlZF9ieRgFIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvciJaCidEZWxldGVXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QSFQoNZGVmaW5pdGlvbl9pZBgBIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAIgASgJKt8BChFXb3JrZmxvd1J1blN0YXR1cxIjCh9XT1JLRkxPV19SVU5fU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobV09SS0ZMT1dfUlVOX1NUQVRVU19QRU5ESU5HEAESHwobV09SS0ZMT1dfUlVOX1NUQVRVU19SVU5OSU5HEAISIQodV09SS0ZMT1dfUlVOX1NUQVRVU19TVUNDRUVERUQQAxIeChpXT1JLRkxPV19SVU5fU1RBVFVTX0ZBSUxFRBAEEiAKHFdPUktGTE9XX1JVTl9TVEFUVVNfQ0FOQ0VMRUQQBTLyFQoQV29ya2Zsb3dQcm92aWRlchJ+ChBDcmVhdGVEZWZpbml0aW9uEjwuZ2VzdGFsdC5wcm92aWRlci52MS5DcmVhdGVXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QaLC5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dEZWZpbml0aW9uEngKDUdldERlZmluaXRpb24SOS5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldFdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBosLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd0RlZmluaXRpb24SfgoQVXBkYXRlRGVmaW5pdGlvbhI8Lmdlc3RhbHQucHJvdmlkZXIudjEuVXBkYXRlV29ya2Zsb3dQcm92aWRlckRlZmluaXRpb25SZXF1ZXN0GiwuZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93RGVmaW5pdGlvbhJoChBEZWxldGVEZWZpbml0aW9uEjwuZ2VzdGFsdC5wcm92aWRlci52MS5EZWxldGVXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZwoIU3RhcnRSdW4SNC5nZXN0YWx0LnByb3ZpZGVyLnYxLlN0YXJ0V29ya2Zsb3dQcm92aWRlclJ1blJlcXVlc3QaJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dSdW4SYwoGR2V0UnVuEjIuZ2VzdGFsdC5wcm92aWRlci52MS5HZXRXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBolLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1J1bhJ3CghMaXN0UnVucxI0Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdFdvcmtmbG93UHJvdmlkZXJSdW5zUmVxdWVzdBo1Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdFdvcmtmbG93UHJvdmlkZXJSdW5zUmVzcG9uc2USaQoJQ2FuY2VsUnVuEjUuZ2VzdGFsdC5wcm92aWRlci52MS5DYW5jZWxXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBolLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1J1bhJyCglTaWduYWxSdW4SNS5nZXN0YWx0LnByb3ZpZGVyLnYxLlNpZ25hbFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0Gi4uZ2VzdGFsdC5wcm92aWRlci52MS5TaWduYWxXb3JrZmxvd1J1blJlc3BvbnNlEoABChBTaWduYWxPclN0YXJ0UnVuEjwuZ2VzdGFsdC5wcm92aWRlci52MS5TaWduYWxPclN0YXJ0V29ya2Zsb3dQcm92aWRlclJ1blJlcXVlc3QaLi5nZXN0YWx0LnByb3ZpZGVyLnYxLlNpZ25hbFdvcmtmbG93UnVuUmVzcG9uc2USeAoOVXBzZXJ0U2NoZWR1bGUSOi5nZXN0YWx0LnByb3ZpZGVyLnYxLlVwc2VydFdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QaKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dTY2hlZHVsZRJyCgtHZXRTY2hlZHVsZRI3Lmdlc3RhbHQucHJvdmlkZXIudjEuR2V0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlUmVxdWVzdBoqLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1NjaGVkdWxlEoYBCg1MaXN0U2NoZWR1bGVzEjkuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlc1JlcXVlc3QaOi5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVzUmVzcG9uc2USZAoORGVsZXRlU2NoZWR1bGUSOi5nZXN0YWx0LnByb3ZpZGVyLnYxLkRlbGV0ZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSdgoNUGF1c2VTY2hlZHVsZRI5Lmdlc3RhbHQucHJvdmlkZXIudjEuUGF1c2VXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVSZXF1ZXN0GiouZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93U2NoZWR1bGUSeAoOUmVzdW1lU2NoZWR1bGUSOi5nZXN0YWx0LnByb3ZpZGVyLnYxLlJlc3VtZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QaKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dTY2hlZHVsZRKEAQoSVXBzZXJ0RXZlbnRUcmlnZ2VyEj4uZ2VzdGFsdC5wcm92aWRlci52MS5VcHNlcnRXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBouLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd0V2ZW50VHJpZ2dlchJ+Cg9HZXRFdmVudFRyaWdnZXISOy5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0Gi4uZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93RXZlbnRUcmlnZ2VyEpIBChFMaXN0RXZlbnRUcmlnZ2VycxI9Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJzUmVxdWVzdBo+Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJzUmVzcG9uc2USbAoSRGVsZXRlRXZlbnRUcmlnZ2VyEj4uZ2VzdGFsdC5wcm92aWRlci52MS5EZWxldGVXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRKCAQoRUGF1c2VFdmVudFRyaWdnZXISPS5nZXN0YWx0LnByb3ZpZGVyLnYxLlBhdXNlV29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlclJlcXVlc3QaLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dFdmVudFRyaWdnZXIShAEKElJlc3VtZUV2ZW50VHJpZ2dlchI+Lmdlc3RhbHQucHJvdmlkZXIudjEuUmVzdW1lV29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlclJlcXVlc3QaLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dFdmVudFRyaWdnZXISbAoMUHVibGlzaEV2ZW50EjguZ2VzdGFsdC5wcm92aWRlci52MS5QdWJsaXNoV29ya2Zsb3dQcm92aWRlckV2ZW50UmVxdWVzdBoiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudGIGcHJvdG8z", [file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_v1_agent, file_v1_app]);
19
+ fileDesc("ChF2MS93b3JrZmxvdy5wcm90bxITZ2VzdGFsdC5wcm92aWRlci52MSJNChNCb3VuZFdvcmtmbG93VGFyZ2V0EjAKBXN0ZXBzGAggAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBKBAgBEAgivQMKDFdvcmtmbG93U3RlcBIKCgJpZBgBIAEoCRI9CgZpbnB1dHMYAiADKAsyLS5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93U3RlcC5JbnB1dHNFbnRyeRIzCgR3aGVuGAMgASgLMiUuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBXaGVuEhcKD3RpbWVvdXRfc2Vjb25kcxgEIAEoBRIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNwoDYXBwGAogASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBBcHBDYWxsSAASOwoFYWdlbnQYCyABKAsyKi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93U3RlcEFnZW50VHVybkgAGlEKC0lucHV0c0VudHJ5EgsKA2tleRgBIAEoCRIxCgV2YWx1ZRgCIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dWYWx1ZToCOAFCCAoGYWN0aW9uSgQIBRAGSgQIBxAISgQICBAJSgQICRAKIqgBChNXb3JrZmxvd1N0ZXBBcHBDYWxsEgwKBG5hbWUYASABKAkSEQoJb3BlcmF0aW9uGAIgASgJEjEKBWlucHV0GAMgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1ZhbHVlEhIKCmNvbm5lY3Rpb24YBCABKAkSEAoIaW5zdGFuY2UYBSABKAkSFwoPY3JlZGVudGlhbF9tb2RlGAYgASgJItECChVXb3JrZmxvd1N0ZXBBZ2VudFR1cm4SEAoIcHJvdmlkZXIYASABKAkSDQoFbW9kZWwYAiABKAkSEwoLc2Vzc2lvbl9rZXkYAyABKAkSMQoGcHJvbXB0GAQgASgLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1RleHQSOwoIbWVzc2FnZXMYBSADKAsyKS5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWdlbnRNZXNzYWdlEjAKBXRvb2xzGAYgAygLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudFRvb2xSZWYSMAoGb3V0cHV0GAcgASgLMiAuZ2VzdGFsdC5wcm92aWRlci52MS5BZ2VudE91dHB1dBIuCg1tb2RlbF9vcHRpb25zGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKAAQoUV29ya2Zsb3dBZ2VudE1lc3NhZ2USDAoEcm9sZRgBIAEoCRIvCgR0ZXh0GAIgASgLMiEuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1RleHQSKQoIbWV0YWRhdGEYAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IiAKDFdvcmtmbG93VGV4dBIQCgh0ZW1wbGF0ZRgBIAEoCSJtChBXb3JrZmxvd1N0ZXBXaGVuEjEKBXZhbHVlGAEgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1ZhbHVlEiYKBmVxdWFscxgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSLEAwoNV29ya2Zsb3dWYWx1ZRIpCgdsaXRlcmFsGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSAASNQoGb2JqZWN0GAIgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd09iamVjdEgAEjMKBWFycmF5GAMgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FycmF5SAASNQoIdGVtcGxhdGUYBCABKAsyIS5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93VGV4dEgAEjwKCXJ1bl9pbnB1dBgFIAEoCzInLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dQYXRoU291cmNlSAASQQoOc2lnbmFsX3BheWxvYWQYBiABKAsyJy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93UGF0aFNvdXJjZUgAEkQKC3N0ZXBfb3V0cHV0GAkgASgLMi0uZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1N0ZXBPdXRwdXRTb3VyY2VIAEIGCgRraW5kSgQIBxAISgQICBAJSgQIChALSgQICxAMIqQBCg5Xb3JrZmxvd09iamVjdBI/CgZmaWVsZHMYASADKAsyLy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93T2JqZWN0LkZpZWxkc0VudHJ5GlEKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIxCgV2YWx1ZRgCIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dWYWx1ZToCOAEiQwoNV29ya2Zsb3dBcnJheRIyCgZ2YWx1ZXMYASADKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93VmFsdWUiIgoSV29ya2Zsb3dQYXRoU291cmNlEgwKBHBhdGgYASABKAkiOQoYV29ya2Zsb3dTdGVwT3V0cHV0U291cmNlEg8KB3N0ZXBfaWQYASABKAkSDAoEcGF0aBgCIAEoCSJkCg1Xb3JrZmxvd0FjdG9yEhIKCnN1YmplY3RfaWQYASABKAkSFAoMc3ViamVjdF9raW5kGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRITCgthdXRoX3NvdXJjZRgEIAEoCSLdAgoNV29ya2Zsb3dFdmVudBIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSFAoMc3BlY192ZXJzaW9uGAMgASgJEgwKBHR5cGUYBCABKAkSDwoHc3ViamVjdBgFIAEoCRIoCgR0aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9kYXRhY29udGVudHR5cGUYByABKAkSJQoEZGF0YRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSRgoKZXh0ZW5zaW9ucxgJIAMoCzIyLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudC5FeHRlbnNpb25zRW50cnkaSQoPRXh0ZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiQwoSV29ya2Zsb3dFdmVudE1hdGNoEgwKBHR5cGUYASABKAkSDgoGc291cmNlGAIgASgJEg8KB3N1YmplY3QYAyABKAkiFwoVV29ya2Zsb3dNYW51YWxUcmlnZ2VyImEKF1dvcmtmbG93U2NoZWR1bGVUcmlnZ2VyEhMKC3NjaGVkdWxlX2lkGAEgASgJEjEKDXNjaGVkdWxlZF9mb3IYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wImcKHldvcmtmbG93RXZlbnRUcmlnZ2VySW52b2NhdGlvbhISCgp0cmlnZ2VyX2lkGAEgASgJEjEKBWV2ZW50GAIgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0V2ZW50IuIBChJXb3JrZmxvd1J1blRyaWdnZXISPAoGbWFudWFsGAEgASgLMiouZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd01hbnVhbFRyaWdnZXJIABJACghzY2hlZHVsZRgCIAEoCzIsLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dTY2hlZHVsZVRyaWdnZXJIABJECgVldmVudBgDIAEoCzIzLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudFRyaWdnZXJJbnZvY2F0aW9uSABCBgoEa2luZCK6BAoQQm91bmRXb3JrZmxvd1J1bhIKCgJpZBgBIAEoCRI2CgZzdGF0dXMYAiABKA4yJi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93UnVuU3RhdHVzEjgKBnRhcmdldBgDIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBI4Cgd0cmlnZ2VyGAQgASgLMicuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1J1blRyaWdnZXISLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKc3RhcnRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMY29tcGxldGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5zdGF0dXNfbWVzc2FnZRgIIAEoCRITCgtyZXN1bHRfYm9keRgJIAEoCRI2CgpjcmVhdGVkX2J5GAogASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEhQKDHdvcmtmbG93X2tleRgMIAEoCRIVCg1wcm92aWRlcl9uYW1lGA0gASgJEhUKDWRlZmluaXRpb25faWQYDiABKAkSMwoGcnVuX2FzGA8gASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dCK5AwoVQm91bmRXb3JrZmxvd1NjaGVkdWxlEgoKAmlkGAEgASgJEgwKBGNyb24YAiABKAkSEAoIdGltZXpvbmUYAyABKAkSOAoGdGFyZ2V0GAQgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0Eg4KBnBhdXNlZBgFIAEoCBIuCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtuZXh0X3J1bl9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNgoKY3JlYXRlZF9ieRgJIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIVCg1wcm92aWRlcl9uYW1lGAsgASgJEhUKDWRlZmluaXRpb25faWQYDCABKAkSMwoGcnVuX2FzGA0gASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dCKkAwoZQm91bmRXb3JrZmxvd0V2ZW50VHJpZ2dlchIKCgJpZBgBIAEoCRI2CgVtYXRjaBgCIAEoCzInLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dFdmVudE1hdGNoEjgKBnRhcmdldBgDIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBIOCgZwYXVzZWQYBCABKAgSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNgoKY3JlYXRlZF9ieRgHIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIVCg1wcm92aWRlcl9uYW1lGAkgASgJEhUKDWRlZmluaXRpb25faWQYCiABKAkSMwoGcnVuX2FzGAsgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dCLeAQoXQm91bmRXb3JrZmxvd0RlZmluaXRpb24SCgoCaWQYASABKAkSOAoGdGFyZ2V0GAIgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0EjYKCmNyZWF0ZWRfYnkYAyABKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWN0b3ISLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFQoNcHJvdmlkZXJfbmFtZRgFIAEoCSKSAgoOV29ya2Zsb3dTaWduYWwSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIoCgdwYXlsb2FkGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNgoKY3JlYXRlZF9ieRgFIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIuCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9pZGVtcG90ZW5jeV9rZXkYByABKAkSEAoIc2VxdWVuY2UYCCABKAMivwIKH1N0YXJ0V29ya2Zsb3dQcm92aWRlclJ1blJlcXVlc3QSOAoGdGFyZ2V0GAEgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0EhcKD2lkZW1wb3RlbmN5X2tleRgCIAEoCRI2CgpjcmVhdGVkX2J5GAQgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEhQKDHdvcmtmbG93X2tleRgGIAEoCRIVCg1wcm92aWRlcl9uYW1lGAcgASgJEhgKEGludm9jYXRpb25fdG9rZW4YCCABKAkSFQoNZGVmaW5pdGlvbl9pZBgJIAEoCRIzCgZydW5fYXMYCiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0IkkKHUdldFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0Eg4KBnJ1bl9pZBgCIAEoCRIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJIq4BCh9MaXN0V29ya2Zsb3dQcm92aWRlclJ1bnNSZXF1ZXN0EhEKCXBhZ2Vfc2l6ZRgBIAEoBRISCgpwYWdlX3Rva2VuGAIgASgJEjYKBnN0YXR1cxgDIAEoDjImLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dSdW5TdGF0dXMSGAoQaW52b2NhdGlvbl90b2tlbhgEIAEoCRISCgp0YXJnZXRfYXBwGAUgASgJInAKIExpc3RXb3JrZmxvd1Byb3ZpZGVyUnVuc1Jlc3BvbnNlEjMKBHJ1bnMYASADKAsyJS5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dSdW4SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIlwKIENhbmNlbFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0Eg4KBnJ1bl9pZBgCIAEoCRIOCgZyZWFzb24YAyABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgEIAEoCSKBAQogU2lnbmFsV29ya2Zsb3dQcm92aWRlclJ1blJlcXVlc3QSDgoGcnVuX2lkGAEgASgJEjMKBnNpZ25hbBgCIAEoCzIjLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dTaWduYWwSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSL8AgonU2lnbmFsT3JTdGFydFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0EhQKDHdvcmtmbG93X2tleRgBIAEoCRI4CgZ0YXJnZXQYAiABKAsyKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dUYXJnZXQSFwoPaWRlbXBvdGVuY3lfa2V5GAMgASgJEjYKCmNyZWF0ZWRfYnkYBCABKAsyIi5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93QWN0b3ISMwoGc2lnbmFsGAYgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd1NpZ25hbBIVCg1wcm92aWRlcl9uYW1lGAcgASgJEhgKEGludm9jYXRpb25fdG9rZW4YCCABKAkSFQoNZGVmaW5pdGlvbl9pZBgJIAEoCRIzCgZydW5fYXMYCiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0Iq8BChlTaWduYWxXb3JrZmxvd1J1blJlc3BvbnNlEjIKA3J1bhgBIAEoCzIlLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1J1bhIzCgZzaWduYWwYAiABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93U2lnbmFsEhMKC3N0YXJ0ZWRfcnVuGAMgASgIEhQKDHdvcmtmbG93X2tleRgEIAEoCSL2AgolVXBzZXJ0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlUmVxdWVzdBITCgtzY2hlZHVsZV9pZBgBIAEoCRIMCgRjcm9uGAIgASgJEhAKCHRpbWV6b25lGAMgASgJEjgKBnRhcmdldBgEIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBIOCgZwYXVzZWQYBSABKAgSOAoMcmVxdWVzdGVkX2J5GAcgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yEhUKDXByb3ZpZGVyX25hbWUYCSABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgKIAEoCRIXCg9pZGVtcG90ZW5jeV9rZXkYCyABKAkSFQoNZGVmaW5pdGlvbl9pZBgMIAEoCRIzCgZydW5fYXMYDSABKAsyIy5nZXN0YWx0LnByb3ZpZGVyLnYxLlN1YmplY3RDb250ZXh0IlMKIkdldFdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QSEwoLc2NoZWR1bGVfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJACiRMaXN0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlc1JlcXVlc3QSGAoQaW52b2NhdGlvbl90b2tlbhgBIAEoCSJmCiVMaXN0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlc1Jlc3BvbnNlEj0KCXNjaGVkdWxlcxgBIAMoCzIqLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1NjaGVkdWxlIlYKJURlbGV0ZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QSEwoLc2NoZWR1bGVfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJVCiRQYXVzZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QSEwoLc2NoZWR1bGVfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJWCiVSZXN1bWVXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVSZXF1ZXN0EhMKC3NjaGVkdWxlX2lkGAIgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkikQMKKVVwc2VydFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0EhIKCnRyaWdnZXJfaWQYASABKAkSNgoFbWF0Y2gYAiABKAsyJy5nZXN0YWx0LnByb3ZpZGVyLnYxLldvcmtmbG93RXZlbnRNYXRjaBI4CgZ0YXJnZXQYAyABKAsyKC5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dUYXJnZXQSDgoGcGF1c2VkGAQgASgIEjgKDHJlcXVlc3RlZF9ieRgGIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIVCg1wcm92aWRlcl9uYW1lGAggASgJEhgKEGludm9jYXRpb25fdG9rZW4YCSABKAkSFwoPaWRlbXBvdGVuY3lfa2V5GAogASgJEhUKDWRlZmluaXRpb25faWQYCyABKAkSMwoGcnVuX2FzGAwgASgLMiMuZ2VzdGFsdC5wcm92aWRlci52MS5TdWJqZWN0Q29udGV4dCJWCiZHZXRXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBISCgp0cmlnZ2VyX2lkGAIgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAkiRAooTGlzdFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJzUmVxdWVzdBIYChBpbnZvY2F0aW9uX3Rva2VuGAEgASgJIm0KKUxpc3RXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2Vyc1Jlc3BvbnNlEkAKCHRyaWdnZXJzGAEgAygLMi4uZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93RXZlbnRUcmlnZ2VyIlkKKURlbGV0ZVdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0EhIKCnRyaWdnZXJfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJYCihQYXVzZVdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0EhIKCnRyaWdnZXJfaWQYAiABKAkSGAoQaW52b2NhdGlvbl90b2tlbhgDIAEoCSJZCilSZXN1bWVXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBISCgp0cmlnZ2VyX2lkGAIgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAyABKAki1QEKI1B1Ymxpc2hXb3JrZmxvd1Byb3ZpZGVyRXZlbnRSZXF1ZXN0EhAKCGFwcF9uYW1lGAEgASgJEjEKBWV2ZW50GAIgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0V2ZW50EjgKDHB1Ymxpc2hlZF9ieRgDIAEoCzIiLmdlc3RhbHQucHJvdmlkZXIudjEuV29ya2Zsb3dBY3RvchIYChBpbnZvY2F0aW9uX3Rva2VuGAQgASgJEhUKDXByb3ZpZGVyX25hbWUYBSABKAki5QEKJ0NyZWF0ZVdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBIVCg1wcm92aWRlcl9uYW1lGAEgASgJEjgKBnRhcmdldBgCIAEoCzIoLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1RhcmdldBIYChBpbnZvY2F0aW9uX3Rva2VuGAMgASgJEhcKD2lkZW1wb3RlbmN5X2tleRgEIAEoCRI2CgpjcmVhdGVkX2J5GAUgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yIlcKJEdldFdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBIVCg1kZWZpbml0aW9uX2lkGAEgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAiABKAki5QEKJ1VwZGF0ZVdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBIVCg1kZWZpbml0aW9uX2lkGAEgASgJEhUKDXByb3ZpZGVyX25hbWUYAiABKAkSOAoGdGFyZ2V0GAMgASgLMiguZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93VGFyZ2V0EhgKEGludm9jYXRpb25fdG9rZW4YBCABKAkSOAoMcmVxdWVzdGVkX2J5GAUgASgLMiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0FjdG9yIloKJ0RlbGV0ZVdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBIVCg1kZWZpbml0aW9uX2lkGAEgASgJEhgKEGludm9jYXRpb25fdG9rZW4YAiABKAkq3wEKEVdvcmtmbG93UnVuU3RhdHVzEiMKH1dPUktGTE9XX1JVTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIfChtXT1JLRkxPV19SVU5fU1RBVFVTX1BFTkRJTkcQARIfChtXT1JLRkxPV19SVU5fU1RBVFVTX1JVTk5JTkcQAhIhCh1XT1JLRkxPV19SVU5fU1RBVFVTX1NVQ0NFRURFRBADEh4KGldPUktGTE9XX1JVTl9TVEFUVVNfRkFJTEVEEAQSIAocV09SS0ZMT1dfUlVOX1NUQVRVU19DQU5DRUxFRBAFMvIVChBXb3JrZmxvd1Byb3ZpZGVyEn4KEENyZWF0ZURlZmluaXRpb24SPC5nZXN0YWx0LnByb3ZpZGVyLnYxLkNyZWF0ZVdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBosLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd0RlZmluaXRpb24SeAoNR2V0RGVmaW5pdGlvbhI5Lmdlc3RhbHQucHJvdmlkZXIudjEuR2V0V29ya2Zsb3dQcm92aWRlckRlZmluaXRpb25SZXF1ZXN0GiwuZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93RGVmaW5pdGlvbhJ+ChBVcGRhdGVEZWZpbml0aW9uEjwuZ2VzdGFsdC5wcm92aWRlci52MS5VcGRhdGVXb3JrZmxvd1Byb3ZpZGVyRGVmaW5pdGlvblJlcXVlc3QaLC5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dEZWZpbml0aW9uEmgKEERlbGV0ZURlZmluaXRpb24SPC5nZXN0YWx0LnByb3ZpZGVyLnYxLkRlbGV0ZVdvcmtmbG93UHJvdmlkZXJEZWZpbml0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJnCghTdGFydFJ1bhI0Lmdlc3RhbHQucHJvdmlkZXIudjEuU3RhcnRXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBolLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1J1bhJjCgZHZXRSdW4SMi5nZXN0YWx0LnByb3ZpZGVyLnYxLkdldFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0GiUuZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93UnVuEncKCExpc3RSdW5zEjQuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0V29ya2Zsb3dQcm92aWRlclJ1bnNSZXF1ZXN0GjUuZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0V29ya2Zsb3dQcm92aWRlclJ1bnNSZXNwb25zZRJpCglDYW5jZWxSdW4SNS5nZXN0YWx0LnByb3ZpZGVyLnYxLkNhbmNlbFdvcmtmbG93UHJvdmlkZXJSdW5SZXF1ZXN0GiUuZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93UnVuEnIKCVNpZ25hbFJ1bhI1Lmdlc3RhbHQucHJvdmlkZXIudjEuU2lnbmFsV29ya2Zsb3dQcm92aWRlclJ1blJlcXVlc3QaLi5nZXN0YWx0LnByb3ZpZGVyLnYxLlNpZ25hbFdvcmtmbG93UnVuUmVzcG9uc2USgAEKEFNpZ25hbE9yU3RhcnRSdW4SPC5nZXN0YWx0LnByb3ZpZGVyLnYxLlNpZ25hbE9yU3RhcnRXb3JrZmxvd1Byb3ZpZGVyUnVuUmVxdWVzdBouLmdlc3RhbHQucHJvdmlkZXIudjEuU2lnbmFsV29ya2Zsb3dSdW5SZXNwb25zZRJ4Cg5VcHNlcnRTY2hlZHVsZRI6Lmdlc3RhbHQucHJvdmlkZXIudjEuVXBzZXJ0V29ya2Zsb3dQcm92aWRlclNjaGVkdWxlUmVxdWVzdBoqLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1NjaGVkdWxlEnIKC0dldFNjaGVkdWxlEjcuZ2VzdGFsdC5wcm92aWRlci52MS5HZXRXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVSZXF1ZXN0GiouZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93U2NoZWR1bGUShgEKDUxpc3RTY2hlZHVsZXMSOS5nZXN0YWx0LnByb3ZpZGVyLnYxLkxpc3RXb3JrZmxvd1Byb3ZpZGVyU2NoZWR1bGVzUmVxdWVzdBo6Lmdlc3RhbHQucHJvdmlkZXIudjEuTGlzdFdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZXNSZXNwb25zZRJkCg5EZWxldGVTY2hlZHVsZRI6Lmdlc3RhbHQucHJvdmlkZXIudjEuRGVsZXRlV29ya2Zsb3dQcm92aWRlclNjaGVkdWxlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJ2Cg1QYXVzZVNjaGVkdWxlEjkuZ2VzdGFsdC5wcm92aWRlci52MS5QYXVzZVdvcmtmbG93UHJvdmlkZXJTY2hlZHVsZVJlcXVlc3QaKi5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dTY2hlZHVsZRJ4Cg5SZXN1bWVTY2hlZHVsZRI6Lmdlc3RhbHQucHJvdmlkZXIudjEuUmVzdW1lV29ya2Zsb3dQcm92aWRlclNjaGVkdWxlUmVxdWVzdBoqLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd1NjaGVkdWxlEoQBChJVcHNlcnRFdmVudFRyaWdnZXISPi5nZXN0YWx0LnByb3ZpZGVyLnYxLlVwc2VydFdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0Gi4uZ2VzdGFsdC5wcm92aWRlci52MS5Cb3VuZFdvcmtmbG93RXZlbnRUcmlnZ2VyEn4KD0dldEV2ZW50VHJpZ2dlchI7Lmdlc3RhbHQucHJvdmlkZXIudjEuR2V0V29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlclJlcXVlc3QaLi5nZXN0YWx0LnByb3ZpZGVyLnYxLkJvdW5kV29ya2Zsb3dFdmVudFRyaWdnZXISkgEKEUxpc3RFdmVudFRyaWdnZXJzEj0uZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0V29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlcnNSZXF1ZXN0Gj4uZ2VzdGFsdC5wcm92aWRlci52MS5MaXN0V29ya2Zsb3dQcm92aWRlckV2ZW50VHJpZ2dlcnNSZXNwb25zZRJsChJEZWxldGVFdmVudFRyaWdnZXISPi5nZXN0YWx0LnByb3ZpZGVyLnYxLkRlbGV0ZVdvcmtmbG93UHJvdmlkZXJFdmVudFRyaWdnZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EoIBChFQYXVzZUV2ZW50VHJpZ2dlchI9Lmdlc3RhbHQucHJvdmlkZXIudjEuUGF1c2VXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBouLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd0V2ZW50VHJpZ2dlchKEAQoSUmVzdW1lRXZlbnRUcmlnZ2VyEj4uZ2VzdGFsdC5wcm92aWRlci52MS5SZXN1bWVXb3JrZmxvd1Byb3ZpZGVyRXZlbnRUcmlnZ2VyUmVxdWVzdBouLmdlc3RhbHQucHJvdmlkZXIudjEuQm91bmRXb3JrZmxvd0V2ZW50VHJpZ2dlchJsCgxQdWJsaXNoRXZlbnQSOC5nZXN0YWx0LnByb3ZpZGVyLnYxLlB1Ymxpc2hXb3JrZmxvd1Byb3ZpZGVyRXZlbnRSZXF1ZXN0GiIuZ2VzdGFsdC5wcm92aWRlci52MS5Xb3JrZmxvd0V2ZW50YgZwcm90bzM", [file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_v1_agent, file_v1_app]);
20
20
 
21
21
  /**
22
22
  * @generated from message gestalt.provider.v1.BoundWorkflowTarget
@@ -657,6 +657,11 @@ export type BoundWorkflowRun = Message<"gestalt.provider.v1.BoundWorkflowRun"> &
657
657
  * @generated from field: string definition_id = 14;
658
658
  */
659
659
  definitionId: string;
660
+
661
+ /**
662
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 15;
663
+ */
664
+ runAs?: SubjectContext | undefined;
660
665
  };
661
666
 
662
667
  /**
@@ -724,6 +729,11 @@ export type BoundWorkflowSchedule = Message<"gestalt.provider.v1.BoundWorkflowSc
724
729
  * @generated from field: string definition_id = 12;
725
730
  */
726
731
  definitionId: string;
732
+
733
+ /**
734
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 13;
735
+ */
736
+ runAs?: SubjectContext | undefined;
727
737
  };
728
738
 
729
739
  /**
@@ -781,6 +791,11 @@ export type BoundWorkflowEventTrigger = Message<"gestalt.provider.v1.BoundWorkfl
781
791
  * @generated from field: string definition_id = 10;
782
792
  */
783
793
  definitionId: string;
794
+
795
+ /**
796
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 11;
797
+ */
798
+ runAs?: SubjectContext | undefined;
784
799
  };
785
800
 
786
801
  /**
@@ -917,6 +932,11 @@ export type StartWorkflowProviderRunRequest = Message<"gestalt.provider.v1.Start
917
932
  * @generated from field: string definition_id = 9;
918
933
  */
919
934
  definitionId: string;
935
+
936
+ /**
937
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 10;
938
+ */
939
+ runAs?: SubjectContext | undefined;
920
940
  };
921
941
 
922
942
  /**
@@ -1104,6 +1124,11 @@ export type SignalOrStartWorkflowProviderRunRequest = Message<"gestalt.provider.
1104
1124
  * @generated from field: string definition_id = 9;
1105
1125
  */
1106
1126
  definitionId: string;
1127
+
1128
+ /**
1129
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 10;
1130
+ */
1131
+ runAs?: SubjectContext | undefined;
1107
1132
  };
1108
1133
 
1109
1134
  /**
@@ -1198,6 +1223,11 @@ export type UpsertWorkflowProviderScheduleRequest = Message<"gestalt.provider.v1
1198
1223
  * @generated from field: string definition_id = 12;
1199
1224
  */
1200
1225
  definitionId: string;
1226
+
1227
+ /**
1228
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 13;
1229
+ */
1230
+ runAs?: SubjectContext | undefined;
1201
1231
  };
1202
1232
 
1203
1233
  /**
@@ -1377,6 +1407,11 @@ export type UpsertWorkflowProviderEventTriggerRequest = Message<"gestalt.provide
1377
1407
  * @generated from field: string definition_id = 11;
1378
1408
  */
1379
1409
  definitionId: string;
1410
+
1411
+ /**
1412
+ * @generated from field: gestalt.provider.v1.SubjectContext run_as = 12;
1413
+ */
1414
+ runAs?: SubjectContext | undefined;
1380
1415
  };
1381
1416
 
1382
1417
  /**
@@ -0,0 +1,15 @@
1
+ import type { Request } from "./api.ts";
2
+
3
+ export function hostInvocationContext(requestOrToken: Request | string) {
4
+ const invocationToken = (typeof requestOrToken === "string" ? requestOrToken : requestOrToken.invocationToken).trim();
5
+ if (typeof requestOrToken === "string") {
6
+ return { invocationToken };
7
+ }
8
+ const providerName = stringValue(requestOrToken.workflow.providerName) || stringValue(requestOrToken.workflow.provider);
9
+ const runId = stringValue(requestOrToken.workflow.runId);
10
+ return providerName && runId
11
+ ? { invocationToken, workflow: { provider: providerName, providerName, runId } }
12
+ : { invocationToken };
13
+ }
14
+
15
+ const stringValue = (value: unknown) => (typeof value === "string" ? value.trim() : "");
package/src/runtime.ts CHANGED
@@ -875,7 +875,7 @@ function providerRequest(
875
875
  function providerRequestToolRefs(
876
876
  requestContext?: ProtoRequestContext,
877
877
  ): AgentToolRef[] {
878
- return requestContext?.toolRefs.map(agentToolRefFromProto) ?? [];
878
+ return requestContext?.toolRefs?.map(agentToolRefFromProto) ?? [];
879
879
  }
880
880
 
881
881
  function providerHTTPSubjectRequest(