@liquidmetal-ai/drizzle 0.4.0 → 0.4.2

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.
Files changed (45) hide show
  1. package/.turbo/turbo-build.log +10 -18
  2. package/CHANGELOG.md +12 -0
  3. package/dist/appify/build.d.ts +1 -4
  4. package/dist/appify/build.d.ts.map +1 -1
  5. package/dist/appify/build.js +6 -16
  6. package/dist/appify/build.test.js +8 -41
  7. package/dist/appify/validate.d.ts.map +1 -1
  8. package/dist/appify/validate.js +2 -1
  9. package/dist/liquidmetal/v1alpha1/bucket_name_pb.d.ts +23 -0
  10. package/dist/liquidmetal/v1alpha1/bucket_name_pb.d.ts.map +1 -1
  11. package/dist/liquidmetal/v1alpha1/bucket_name_pb.js +1 -1
  12. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts +125 -0
  13. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts.map +1 -1
  14. package/dist/liquidmetal/v1alpha1/catalog_pb.js +42 -2
  15. package/dist/liquidmetal/v1alpha1/object_pb.d.ts +89 -16
  16. package/dist/liquidmetal/v1alpha1/object_pb.d.ts.map +1 -1
  17. package/dist/liquidmetal/v1alpha1/object_pb.js +5 -2
  18. package/dist/liquidmetal/v1alpha1/rainbow_auth_pb.d.ts.map +1 -1
  19. package/dist/liquidmetal/v1alpha1/rainbow_auth_pb.js +1 -1
  20. package/dist/liquidmetal/v1alpha1/raindrop_pb.d.ts.map +1 -1
  21. package/dist/liquidmetal/v1alpha1/raindrop_pb.js +1 -1
  22. package/dist/liquidmetal/v1alpha1/search_agent_pb.d.ts +129 -175
  23. package/dist/liquidmetal/v1alpha1/search_agent_pb.d.ts.map +1 -1
  24. package/dist/liquidmetal/v1alpha1/search_agent_pb.js +5 -17
  25. package/dist/mrn.d.ts +26 -0
  26. package/dist/mrn.d.ts.map +1 -0
  27. package/dist/mrn.js +135 -0
  28. package/dist/mrn.test.d.ts +2 -0
  29. package/dist/mrn.test.d.ts.map +1 -0
  30. package/dist/mrn.test.js +690 -0
  31. package/package.json +4 -3
  32. package/src/appify/build.test.ts +8 -44
  33. package/src/appify/build.ts +6 -16
  34. package/src/appify/validate.ts +2 -1
  35. package/src/liquidmetal/v1alpha1/bucket_name_pb.ts +24 -1
  36. package/src/liquidmetal/v1alpha1/catalog_pb.ts +158 -2
  37. package/src/liquidmetal/v1alpha1/object_pb.ts +91 -18
  38. package/src/liquidmetal/v1alpha1/rainbow_auth_pb.ts +1 -1
  39. package/src/liquidmetal/v1alpha1/raindrop_pb.ts +1 -1
  40. package/src/liquidmetal/v1alpha1/search_agent_pb.ts +130 -176
  41. package/src/mrn.test.ts +769 -0
  42. package/src/mrn.ts +149 -0
  43. package/tsconfig.tsbuildinfo +1 -1
  44. package/.turbo/turbo-lint.log +0 -6
  45. package/.turbo/turbo-test.log +0 -242
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@liquidmetal-ai/drizzle",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Raindrop core operational libraries",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "prebuild": "npm install --ignore-scripts",
9
- "prepare": "npm run build",
9
+ "prepublishOnly": "npm run build",
10
10
  "build": "shx rm -rf dist && tsc -b",
11
11
  "format": "prettier --write \"**/*.{ts,tsx,md}\"",
12
12
  "lint": "eslint . --max-warnings=0",
@@ -30,7 +30,8 @@
30
30
  "shx": "^0.3.4",
31
31
  "typescript": "^5",
32
32
  "typescript-eslint": "^8.7.0",
33
- "vitest": "^2.1.1"
33
+ "vitest": "^2.1.1",
34
+ "@liquidmetal-ai/raindrop-framework": "*"
34
35
  },
35
36
  "dependencies": {
36
37
  "fflate": "^0.8.2"
@@ -195,7 +195,7 @@ application "foo" {
195
195
  ]);
196
196
  });
197
197
 
198
- test('service with labels and annotations', () => {
198
+ test('service with labels', () => {
199
199
  const CONFIG = `
200
200
  application "my-app" {
201
201
  service "my-service" {
@@ -203,11 +203,6 @@ application "my-app" {
203
203
  environment = "production"
204
204
  team = "platform"
205
205
  }
206
-
207
- annotations = {
208
- description = "Service for handling API requests"
209
- version = "1.0.0"
210
- }
211
206
  }
212
207
  }
213
208
  `;
@@ -223,21 +218,16 @@ application "my-app" {
223
218
  expect(apps.length).toBe(1);
224
219
  expect(apps[0]!.service.length).toBe(1);
225
220
 
226
- // Check the service's labels and annotations
221
+ // Check the service's labels
227
222
  const service = apps[0]!.service[0]!;
228
223
 
229
224
  // Verify labels
230
225
  expect(service.labels).toBeDefined();
231
226
  expect(service.labels!['environment']).toBe('production');
232
227
  expect(service.labels!['team']).toBe('platform');
233
-
234
- // Verify annotations
235
- expect(service.annotations).toBeDefined();
236
- expect(service.annotations!['description']).toBe('Service for handling API requests');
237
- expect(service.annotations!['version']).toBe('1.0.0');
238
228
  });
239
229
 
240
- test('service with non-string labels and annotations', () => {
230
+ test('service with non-string labels', () => {
241
231
  const CONFIG = `
242
232
  application "my-app" {
243
233
  service "my-service" {
@@ -246,11 +236,6 @@ application "my-app" {
246
236
  priority = 1
247
237
  isActive = true
248
238
  }
249
-
250
- annotations = {
251
- description = "Service for handling API requests"
252
- maxInstances = 5
253
- }
254
239
  }
255
240
  }
256
241
  `;
@@ -262,13 +247,12 @@ application "my-app" {
262
247
  const [_, errors] = buildManifest(ast);
263
248
 
264
249
  // Should have errors for non-string values
265
- expect(errors.length).toBe(3);
250
+ expect(errors.length).toBe(2);
266
251
 
267
252
  // Check error messages
268
253
  const errorMessages = errors.map((err) => err.message);
269
254
  expect(errorMessages).toContain('labels must have string values, found non-string value for key "priority"');
270
255
  expect(errorMessages).toContain('labels must have string values, found non-string value for key "isActive"');
271
- expect(errorMessages).toContain('annotations must have string values, found non-string value for key "maxInstances"');
272
256
  });
273
257
 
274
258
  test('service with invalid labels type', () => {
@@ -291,7 +275,7 @@ application "my-app" {
291
275
  expect(errors[0]!.message).toBe('labels must be an object');
292
276
  });
293
277
 
294
- test('actor with labels and annotations', () => {
278
+ test('actor with labels', () => {
295
279
  const CONFIG = `
296
280
  application "my-app" {
297
281
  actor "my-actor" {
@@ -300,11 +284,6 @@ application "my-app" {
300
284
  team = "platform"
301
285
  }
302
286
 
303
- annotations = {
304
- description = "Actor for processing background jobs"
305
- version = "1.0.0"
306
- }
307
-
308
287
  visibility = "protected"
309
288
  }
310
289
  }
@@ -321,7 +300,7 @@ application "my-app" {
321
300
  expect(apps.length).toBe(1);
322
301
  expect(apps[0]!.actor.length).toBe(1);
323
302
 
324
- // Check the actor's labels and annotations
303
+ // Check the actor's labels
325
304
  const actor = apps[0]!.actor[0]!;
326
305
 
327
306
  // Verify labels
@@ -329,16 +308,11 @@ application "my-app" {
329
308
  expect(actor.labels!['environment']).toBe('production');
330
309
  expect(actor.labels!['team']).toBe('platform');
331
310
 
332
- // Verify annotations
333
- expect(actor.annotations).toBeDefined();
334
- expect(actor.annotations!['description']).toBe('Actor for processing background jobs');
335
- expect(actor.annotations!['version']).toBe('1.0.0');
336
-
337
311
  // Verify other properties still work
338
312
  expect(valueOf(actor.visibility!)).toBe('protected');
339
313
  });
340
314
 
341
- test('observer with labels and annotations', () => {
315
+ test('observer with labels', () => {
342
316
  const CONFIG = `
343
317
  application "my-app" {
344
318
  bucket "my-bucket" {}
@@ -349,11 +323,6 @@ application "my-app" {
349
323
  team = "platform"
350
324
  }
351
325
 
352
- annotations = {
353
- description = "Observer for monitoring bucket changes"
354
- version = "1.0.0"
355
- }
356
-
357
326
  source {
358
327
  bucket = "my-bucket"
359
328
  }
@@ -372,7 +341,7 @@ application "my-app" {
372
341
  expect(apps.length).toBe(1);
373
342
  expect(apps[0]!.observer.length).toBe(1);
374
343
 
375
- // Check the observer's labels and annotations
344
+ // Check the observer's labels
376
345
  const observer = apps[0]!.observer[0]!;
377
346
 
378
347
  // Verify labels
@@ -380,11 +349,6 @@ application "my-app" {
380
349
  expect(observer.labels!['environment']).toBe('production');
381
350
  expect(observer.labels!['team']).toBe('platform');
382
351
 
383
- // Verify annotations
384
- expect(observer.annotations).toBeDefined();
385
- expect(observer.annotations!['description']).toBe('Observer for monitoring bucket changes');
386
- expect(observer.annotations!['version']).toBe('1.0.0');
387
-
388
352
  // Verify source still works
389
353
  expect(observer.source.length).toBe(1);
390
354
  expect(valueOf(observer.source[0]!.bucket!)).toBe('my-bucket');
@@ -34,6 +34,12 @@ export interface ConfigObject {
34
34
  start: number;
35
35
  end: number;
36
36
  }
37
+ export const EMPTY_CONFIG_OBJECT: ConfigObject = {
38
+ line: 0,
39
+ column: 0,
40
+ start: 0,
41
+ end: 0,
42
+ } as const;
37
43
 
38
44
  export class ConfigError {
39
45
  message: string;
@@ -222,9 +228,6 @@ export function buildApplication(node: StanzaNode): [Application | undefined, Co
222
228
  case 'labels':
223
229
  buildLabelset(app, 'labels', child, errors);
224
230
  break;
225
- case 'annotations':
226
- buildLabelset(app, 'annotations', child, errors);
227
- break;
228
231
  default:
229
232
  errors.push({ message: 'unexpected assignment', ...child });
230
233
  }
@@ -275,9 +278,6 @@ function buildService(stanza: StanzaNode): [Service, ConfigError[]] {
275
278
  case 'labels':
276
279
  buildLabelset(service, 'labels', child, errors);
277
280
  break;
278
- case 'annotations':
279
- buildLabelset(service, 'annotations', child, errors);
280
- break;
281
281
  default:
282
282
  errors.push({ message: 'unexpected assignment', ...child });
283
283
  }
@@ -502,9 +502,6 @@ function buildObserver(stanza: StanzaNode): [Observer, ConfigError[]] {
502
502
  case 'labels':
503
503
  buildLabelset(observer, 'labels', child, errors);
504
504
  break;
505
- case 'annotations':
506
- buildLabelset(observer, 'annotations', child, errors);
507
- break;
508
505
  default:
509
506
  errors.push({ message: 'unexpected assignment', ...child });
510
507
  }
@@ -548,9 +545,6 @@ function buildActor(stanza: StanzaNode): [Actor, ConfigError[]] {
548
545
  case 'labels':
549
546
  buildLabelset(actor, 'labels', child, errors);
550
547
  break;
551
- case 'annotations':
552
- buildLabelset(actor, 'annotations', child, errors);
553
- break;
554
548
  default:
555
549
  errors.push({ message: 'unexpected assignment', ...child });
556
550
  }
@@ -785,7 +779,6 @@ export class Application {
785
779
  kvStore: KvStore[] = [];
786
780
  smartBucket: SmartBucket[] = [];
787
781
  labels: Record<string, string> = {};
788
- annotations: Record<string, string> = {};
789
782
 
790
783
  constructor(name: TokenString, obj: ConfigObject) {
791
784
  this.name = name;
@@ -807,7 +800,6 @@ export class Service {
807
800
  bindings: Binding[] = [];
808
801
  env: Env[] = [];
809
802
  labels: Record<string, string> = {};
810
- annotations: Record<string, string> = {};
811
803
 
812
804
  constructor(name: TokenString, obj: ConfigObject) {
813
805
  this.name = name;
@@ -822,7 +814,6 @@ export class Actor {
822
814
  env: Env[] = [];
823
815
  visibility?: TokenString;
824
816
  labels: Record<string, string> = {};
825
- annotations: Record<string, string> = {};
826
817
 
827
818
  constructor(name: TokenString, obj: ConfigObject) {
828
819
  this.name = name;
@@ -852,7 +843,6 @@ export class Observer {
852
843
  bindings: Binding[] = [];
853
844
  env: Env[] = [];
854
845
  labels: Record<string, string> = {};
855
- annotations: Record<string, string> = {};
856
846
 
857
847
  constructor(name: TokenString, obj: ConfigObject) {
858
848
  this.name = name;
@@ -310,7 +310,8 @@ const observerSourceValidator: Validator = {
310
310
  }
311
311
  if (
312
312
  source.bucket !== undefined &&
313
- !app.bucket.some((b) => valueOf(b.name) === (source.bucket && valueOf(source.bucket)))
313
+ !app.bucket.some((b) => valueOf(b.name) === (source.bucket && valueOf(source.bucket))) &&
314
+ !app.smartBucket.some((b) => valueOf(b.name) === (source.bucket && valueOf(source.bucket)))
314
315
  ) {
315
316
  errors.push({
316
317
  message: `bucket ${source.bucket.value} not found`,
@@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf";
10
10
  * Describes the file liquidmetal/v1alpha1/bucket_name.proto.
11
11
  */
12
12
  export const file_liquidmetal_v1alpha1_bucket_name: GenFile = /*@__PURE__*/
13
- fileDesc("CiZsaXF1aWRtZXRhbC92MWFscGhhMS9idWNrZXRfbmFtZS5wcm90bxIUbGlxdWlkbWV0YWwudjFhbHBoYTEicAoKQnVja2V0TmFtZRIMCgRuYW1lGAEgASgJEhQKB3ZlcnNpb24YAiABKAlIAIgBARIdChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJSAGIAQFCCgoIX3ZlcnNpb25CEwoRX2FwcGxpY2F0aW9uX25hbWUiawoNQnVja2V0TG9jYXRvchITCgltb2R1bGVfaWQYASABKAlIABIyCgZidWNrZXQYAiABKAsyIC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXROYW1lSABCEQoPYnVja2V0X2xvY2F0aW9uInIKDkJ1Y2tldFJlc3BvbnNlEhEKCW1vZHVsZV9pZBgBIAEoCRITCgtidWNrZXRfbmFtZRgCIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYBSABKAlCnAEKGGNvbS5saXF1aWRtZXRhbC52MWFscGhhMUIPQnVja2V0TmFtZVByb3RvUAGiAgNMWFiqAhRMaXF1aWRtZXRhbC5WMWFscGhhMcoCFExpcXVpZG1ldGFsXFYxYWxwaGEx4gIgTGlxdWlkbWV0YWxcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAhVMaXF1aWRtZXRhbDo6VjFhbHBoYTFiBnByb3RvMw");
13
+ fileDesc("CiZsaXF1aWRtZXRhbC92MWFscGhhMS9idWNrZXRfbmFtZS5wcm90bxIUbGlxdWlkbWV0YWwudjFhbHBoYTEicAoKQnVja2V0TmFtZRIMCgRuYW1lGAEgASgJEhQKB3ZlcnNpb24YAiABKAlIAIgBARIdChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJSAGIAQFCCgoIX3ZlcnNpb25CEwoRX2FwcGxpY2F0aW9uX25hbWUiawoNQnVja2V0TG9jYXRvchITCgltb2R1bGVfaWQYASABKAlIABIyCgZidWNrZXQYAiABKAsyIC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXROYW1lSABCEQoPYnVja2V0X2xvY2F0aW9uInIKDkJ1Y2tldFJlc3BvbnNlEhEKCW1vZHVsZV9pZBgBIAEoCRITCgtidWNrZXRfbmFtZRgCIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYBSABKAlC6gEKGGNvbS5saXF1aWRtZXRhbC52MWFscGhhMUIPQnVja2V0TmFtZVByb3RvUAFaTGdpdGh1Yi5jb20vbGlxdWlkbWV0YWwtYWkvcHJvdG9nZW4yL2xpcXVpZG1ldGFsL3YxYWxwaGExO2xpcXVpZG1ldGFsdjFhbHBoYTGiAgNMWFiqAhRMaXF1aWRtZXRhbC5WMWFscGhhMcoCFExpcXVpZG1ldGFsXFYxYWxwaGEx4gIgTGlxdWlkbWV0YWxcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAhVMaXF1aWRtZXRhbDo6VjFhbHBoYTFiBnByb3RvMw");
14
14
 
15
15
  /**
16
16
  * BucketName represents a bucket name with an optional version
@@ -20,6 +20,8 @@ export const file_liquidmetal_v1alpha1_bucket_name: GenFile = /*@__PURE__*/
20
20
  export type BucketName = Message<"liquidmetal.v1alpha1.BucketName"> & {
21
21
  /**
22
22
  * The name of the bucket
23
+ * __EXAMPLE__ "my-bucket"
24
+ * __REQUIRED__ TRUE
23
25
  *
24
26
  * @generated from field: string name = 1;
25
27
  */
@@ -27,6 +29,8 @@ export type BucketName = Message<"liquidmetal.v1alpha1.BucketName"> & {
27
29
 
28
30
  /**
29
31
  * Optional version of the bucket
32
+ * __EXAMPLE__ "01jtryx2f2f61ryk06vd8mr91p"
33
+ * __REQUIRED__ FALSE
30
34
  *
31
35
  * @generated from field: optional string version = 2;
32
36
  */
@@ -34,6 +38,8 @@ export type BucketName = Message<"liquidmetal.v1alpha1.BucketName"> & {
34
38
 
35
39
  /**
36
40
  * Optional Application
41
+ * __EXAMPLE__ "my-app"
42
+ * __REQUIRED__ FALSE
37
43
  *
38
44
  * @generated from field: optional string application_name = 3;
39
45
  */
@@ -52,16 +58,25 @@ export const BucketNameSchema: GenMessage<BucketName> = /*@__PURE__*/
52
58
  */
53
59
  export type BucketLocator = Message<"liquidmetal.v1alpha1.BucketLocator"> & {
54
60
  /**
61
+ * __EXAMPLE__ { name: 'my-smartbucket' }
62
+ * __REQUIRED__ TRUE
63
+ *
55
64
  * @generated from oneof liquidmetal.v1alpha1.BucketLocator.bucket_location
56
65
  */
57
66
  bucketLocation: {
58
67
  /**
68
+ * __EXAMPLE__ "01jtryx2f2f61ryk06vd8mr91p"
69
+ * __REQUIRED__ FALSE
70
+ *
59
71
  * @generated from field: string module_id = 1;
60
72
  */
61
73
  value: string;
62
74
  case: "moduleId";
63
75
  } | {
64
76
  /**
77
+ * __EXAMPLE__ { name: 'my-smartbucket' }
78
+ * __REQUIRED__ FALSE
79
+ *
65
80
  * @generated from field: liquidmetal.v1alpha1.BucketName bucket = 2;
66
81
  */
67
82
  value: BucketName;
@@ -81,21 +96,29 @@ export const BucketLocatorSchema: GenMessage<BucketLocator> = /*@__PURE__*/
81
96
  */
82
97
  export type BucketResponse = Message<"liquidmetal.v1alpha1.BucketResponse"> & {
83
98
  /**
99
+ * __EXAMPLE__ "01jtryx2f2f61ryk06vd8mr91p"
100
+ *
84
101
  * @generated from field: string module_id = 1;
85
102
  */
86
103
  moduleId: string;
87
104
 
88
105
  /**
106
+ * __EXAMPLE__ "my-smartbucket"
107
+ *
89
108
  * @generated from field: string bucket_name = 2;
90
109
  */
91
110
  bucketName: string;
92
111
 
93
112
  /**
113
+ * __EXAMPLE__ "01jtryx2f2f61ryk06vd8mr91p"
114
+ *
94
115
  * @generated from field: string application_version_id = 4;
95
116
  */
96
117
  applicationVersionId: string;
97
118
 
98
119
  /**
120
+ * __EXAMPLE__ "my-app"
121
+ *
99
122
  * @generated from field: string application_name = 5;
100
123
  */
101
124
  applicationName: string;
@@ -14,7 +14,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
14
14
  * Describes the file liquidmetal/v1alpha1/catalog.proto.
15
15
  */
16
16
  export const file_liquidmetal_v1alpha1_catalog: GenFile = /*@__PURE__*/
17
- fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJItUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEavgYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLFAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDkISChBfbmV4dF9wYWdlX3Rva2VuIqQECg1EZXBsb3lSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb24aLgoTQXBwbGljYXRpb25NZXRhZGF0YRIXCg9ydW50aW1lX3ZlcnNpb24YASABKAka8QIKC0FwcGxpY2F0aW9uEg0KBXN1aXRlGAEgASgJEhMKC2FwcGxpY2F0aW9uGAIgASgJEiAKE3ByZXZpb3VzX3ZlcnNpb25faWQYAyABKAlIAIgBARIfChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAlIAYgBARITCgZicmFuY2gYBSABKAlIAogBARIQCghtYW5pZmVzdBgGIAEoCRJJCghtZXRhZGF0YRgHIAEoCzI3LmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb25NZXRhZGF0YRINCgVhbWVuZBgIIAEoCBIWCglpc19hY3RpdmUYCSABKAhIA4gBARIRCgRsb2NrGAogASgJSASIAQFCFgoUX3ByZXZpb3VzX3ZlcnNpb25faWRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIJCgdfYnJhbmNoQgwKCl9pc19hY3RpdmVCBwoFX2xvY2si1AEKDkRlcGxveVJlc3BvbnNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRJGCgxhcHBsaWNhdGlvbnMYAiADKAsyMC5saXF1aWRtZXRhbC52MWFscGhhMS5EZXBsb3lSZXNwb25zZS5BcHBsaWNhdGlvbhphCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIOCgZicmFuY2gYAyABKAkSDAoEbG9jaxgEIAEoCSLeAQoOU2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEVudnNSZXF1ZXN0LkVudhpqCgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJEg0KBXZhbHVlGAQgASgJEhEKCWlzX3NlY3JldBgFIAEoCCIRCg9TZXRFbnZzUmVzcG9uc2UivAEKDkdldEVudnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjYKBGVudnMYAyADKAsyKC5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVxdWVzdC5FbnYaSAoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCSK2AQoPR2V0RW52c1Jlc3BvbnNlEjcKBGVudnMYASADKAsyKS5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVzcG9uc2UuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIsABCg5SZWxlYXNlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI4CgVsb2NrcxgDIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXF1ZXN0LkxvY2saSgoETG9jaxIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIMCgRsb2NrGAMgASgJIhEKD1JlbGVhc2VSZXNwb25zZSLDAQoMV2F0Y2hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkQKDGFwcGxpY2F0aW9ucxgDIAMoCzIuLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdC5BcHBsaWNhdGlvbhpDCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCSKZAQoNV2F0Y2hSZXNwb25zZRIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIQCghldmVudF9pZBgDIAEoCRJACgpldmVudF90eXBlGAQgASgOMiwubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXNwb25zZUV2ZW50VHlwZSLFAQoNRGVsZXRlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJFCgxhcHBsaWNhdGlvbnMYAyADKAsyLy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIhAKDkRlbGV0ZVJlc3BvbnNlIt4BChBTZXRBY3RpdmVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkgKDGFwcGxpY2F0aW9ucxgDIAMoCzIyLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlcXVlc3QuQXBwbGljYXRpb24aVgoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSEQoJaXNfYWN0aXZlGAMgASgIIhMKEVNldEFjdGl2ZVJlc3BvbnNlIuMBChFTZXRTYW5kYm94UmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJJCgxhcHBsaWNhdGlvbnMYAyADKAsyMy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdC5BcHBsaWNhdGlvbhpZCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIUCgxpc19zYW5kYm94ZWQYAyABKAgiFAoSU2V0U2FuZGJveFJlc3BvbnNlIm8KDVN0YXR1c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAki8AEKDlN0YXR1c1Jlc3BvbnNlEi4KBXN0YXRlGAEgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEjwKB21vZHVsZXMYAiADKAsyKy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXNwb25zZS5Nb2R1bGUSEQoEbG9jaxgDIAEoCUgAiAEBGlQKBk1vZHVsZRIMCgRuYW1lGAEgASgJEi4KBXN0YXRlGAIgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEgwKBHVybHMYAyADKAlCBwoFX2xvY2si3QEKE1F1ZXJ5TW9kdWxlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSHQoQYXBwbGljYXRpb25fbmFtZRgDIAEoCUgAiAEBEiMKFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAlIAYgBARIYCgttb2R1bGVfdHlwZRgFIAEoCUgCiAEBQhMKEV9hcHBsaWNhdGlvbl9uYW1lQhkKF19hcHBsaWNhdGlvbl92ZXJzaW9uX2lkQg4KDF9tb2R1bGVfdHlwZSLgBgoUUXVlcnlNb2R1bGVzUmVzcG9uc2USQgoHbW9kdWxlcxgBIAMoCzIxLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLk1vZHVsZRIcCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAlIAIgBARogChFTbWFydEJ1Y2tldE1vZHVsZRILCgN1cmwYASABKAka/gIKBk1vZHVsZRIXCg9vcmdhbml6YXRpb25faWQYASABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgCIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAMgASgJEhEKCW1vZHVsZV9pZBgEIAEoCRIMCgRuYW1lGAUgASgJEgwKBHR5cGUYBiABKAkSSgoLbW9kdWxlX3R5cGUYByABKA4yNS5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5Nb2R1bGVUeXBlEjUKDGNvbnZlcmdlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBARJUCgxzbWFydF9idWNrZXQYCSABKAsyPC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5TbWFydEJ1Y2tldE1vZHVsZUgAQggKBm1vZHVsZUIPCg1fY29udmVyZ2VkX2F0Iq4CCgpNb2R1bGVUeXBlEhsKF01PRFVMRV9UWVBFX1VOU1BFQ0lGSUVEEAASHAoYTU9EVUxFX1RZUEVfU01BUlRfQlVDS0VUEAESFgoSTU9EVUxFX1RZUEVfQlVDS0VUEAISFwoTTU9EVUxFX1RZUEVfU0VSVklDRRADEhgKFE1PRFVMRV9UWVBFX09CU0VSVkVSEAQSFAoQTU9EVUxFX1RZUEVfVEFTSxAFEhwKGE1PRFVMRV9UWVBFX1NRTF9EQVRBQkFTRRAGEhwKGE1PRFVMRV9UWVBFX1ZFQ1RPUl9JTkRFWBAHEhcKE01PRFVMRV9UWVBFX0VOVl9WQVIQCBIVChFNT0RVTEVfVFlQRV9RVUVVRRAJEhgKFE1PRFVMRV9UWVBFX0tWX1NUT1JFEApCEgoQX25leHRfcGFnZV90b2tlbiKQAQomUmVzb2x2ZUJ1Y2tldExvY2F0aW9uVG9Nb2R1bGVJZFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSPAoPYnVja2V0X2xvY2F0aW9uGAMgASgLMiMubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVja2V0TG9jYXRvciJlCiZSZXNvbHZlTW9kdWxlSWRUb0J1Y2tldExvY2F0aW9uUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIRCgltb2R1bGVfaWQYAyABKAkiXwonUmVzb2x2ZUJ1Y2tldExvY2F0aW9uVG9Nb2R1bGVJZFJlc3BvbnNlEjQKBmJ1Y2tldBgBIAEoCzIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJ1Y2tldFJlc3BvbnNlIl8KJ1Jlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXNwb25zZRI0CgZidWNrZXQYASABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXRSZXNwb25zZSrSAQoJVW5pdFN0YXRlEhoKFlVOSVRfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJVTklUX1NUQVRFX1BFTkRJTkcQARIXChNVTklUX1NUQVRFX1NUQVJUSU5HEAISFgoSVU5JVF9TVEFURV9SVU5OSU5HEAMSFwoTVU5JVF9TVEFURV9TVE9QUElORxAEEhYKElVOSVRfU1RBVEVfU1RPUFBFRBAFEhcKE1VOSVRfU1RBVEVfREVMRVRJTkcQBhIWChJVTklUX1NUQVRFX0RFTEVURUQQBypVChFCdW5kbGVBcmNoaXZlVHlwZRIjCh9CVU5ETEVfQVJDSElWRV9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQlVORExFX0FSQ0hJVkVfVFlQRV9aSVAQASqSAQoWV2F0Y2hSZXNwb25zZUV2ZW50VHlwZRIpCiVXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJQohV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9NRVNTQUdFEAESJgoiV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9DT01QTEVURRACMuwMCg5DYXRhbG9nU2VydmljZRJrCg5RdWVyeVJlc291cmNlcxIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVxdWVzdBosLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2USZQoMUXVlcnlNb2R1bGVzEikubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2USngEKH1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWQSPC5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQnVja2V0TG9jYXRpb25Ub01vZHVsZUlkUmVxdWVzdBo9LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRKeAQofUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvbhI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXF1ZXN0Gj0ubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlc3BvbnNlQpkBChhjb20ubGlxdWlkbWV0YWwudjFhbHBoYTFCDENhdGFsb2dQcm90b1ABogIDTFhYqgIUTGlxdWlkbWV0YWwuVjFhbHBoYTHKAhRMaXF1aWRtZXRhbFxWMWFscGhhMeICIExpcXVpZG1ldGFsXFYxYWxwaGExXEdQQk1ldGFkYXRh6gIVTGlxdWlkbWV0YWw6OlYxYWxwaGExYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_liquidmetal_v1alpha1_bucket_name]);
17
+ fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJItUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEavgYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLFAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDkISChBfbmV4dF9wYWdlX3Rva2VuIqQECg1EZXBsb3lSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb24aLgoTQXBwbGljYXRpb25NZXRhZGF0YRIXCg9ydW50aW1lX3ZlcnNpb24YASABKAka8QIKC0FwcGxpY2F0aW9uEg0KBXN1aXRlGAEgASgJEhMKC2FwcGxpY2F0aW9uGAIgASgJEiAKE3ByZXZpb3VzX3ZlcnNpb25faWQYAyABKAlIAIgBARIfChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAlIAYgBARITCgZicmFuY2gYBSABKAlIAogBARIQCghtYW5pZmVzdBgGIAEoCRJJCghtZXRhZGF0YRgHIAEoCzI3LmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb25NZXRhZGF0YRINCgVhbWVuZBgIIAEoCBIWCglpc19hY3RpdmUYCSABKAhIA4gBARIRCgRsb2NrGAogASgJSASIAQFCFgoUX3ByZXZpb3VzX3ZlcnNpb25faWRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIJCgdfYnJhbmNoQgwKCl9pc19hY3RpdmVCBwoFX2xvY2si1AEKDkRlcGxveVJlc3BvbnNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRJGCgxhcHBsaWNhdGlvbnMYAiADKAsyMC5saXF1aWRtZXRhbC52MWFscGhhMS5EZXBsb3lSZXNwb25zZS5BcHBsaWNhdGlvbhphCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIOCgZicmFuY2gYAyABKAkSDAoEbG9jaxgEIAEoCSLeAQoOU2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEVudnNSZXF1ZXN0LkVudhpqCgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJEg0KBXZhbHVlGAQgASgJEhEKCWlzX3NlY3JldBgFIAEoCCIRCg9TZXRFbnZzUmVzcG9uc2UivAEKDkdldEVudnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjYKBGVudnMYAyADKAsyKC5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVxdWVzdC5FbnYaSAoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCSK2AQoPR2V0RW52c1Jlc3BvbnNlEjcKBGVudnMYASADKAsyKS5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVzcG9uc2UuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIsABCg5SZWxlYXNlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI4CgVsb2NrcxgDIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXF1ZXN0LkxvY2saSgoETG9jaxIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIMCgRsb2NrGAMgASgJIhEKD1JlbGVhc2VSZXNwb25zZSLDAQoMV2F0Y2hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkQKDGFwcGxpY2F0aW9ucxgDIAMoCzIuLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdC5BcHBsaWNhdGlvbhpDCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCSKZAQoNV2F0Y2hSZXNwb25zZRIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIQCghldmVudF9pZBgDIAEoCRJACgpldmVudF90eXBlGAQgASgOMiwubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXNwb25zZUV2ZW50VHlwZSLFAQoNRGVsZXRlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJFCgxhcHBsaWNhdGlvbnMYAyADKAsyLy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIhAKDkRlbGV0ZVJlc3BvbnNlIt4BChBTZXRBY3RpdmVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkgKDGFwcGxpY2F0aW9ucxgDIAMoCzIyLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlcXVlc3QuQXBwbGljYXRpb24aVgoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSEQoJaXNfYWN0aXZlGAMgASgIIhMKEVNldEFjdGl2ZVJlc3BvbnNlIuMBChFTZXRTYW5kYm94UmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJJCgxhcHBsaWNhdGlvbnMYAyADKAsyMy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdC5BcHBsaWNhdGlvbhpZCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIUCgxpc19zYW5kYm94ZWQYAyABKAgiFAoSU2V0U2FuZGJveFJlc3BvbnNlIm8KDVN0YXR1c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAki8AEKDlN0YXR1c1Jlc3BvbnNlEi4KBXN0YXRlGAEgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEjwKB21vZHVsZXMYAiADKAsyKy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXNwb25zZS5Nb2R1bGUSEQoEbG9jaxgDIAEoCUgAiAEBGlQKBk1vZHVsZRIMCgRuYW1lGAEgASgJEi4KBXN0YXRlGAIgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEgwKBHVybHMYAyADKAlCBwoFX2xvY2si3QEKE1F1ZXJ5TW9kdWxlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSHQoQYXBwbGljYXRpb25fbmFtZRgDIAEoCUgAiAEBEiMKFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAlIAYgBARIYCgttb2R1bGVfdHlwZRgFIAEoCUgCiAEBQhMKEV9hcHBsaWNhdGlvbl9uYW1lQhkKF19hcHBsaWNhdGlvbl92ZXJzaW9uX2lkQg4KDF9tb2R1bGVfdHlwZSLpDAoUUXVlcnlNb2R1bGVzUmVzcG9uc2USQgoHbW9kdWxlcxgBIAMoCzIxLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLk1vZHVsZRIcCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAlIAIgBARogChFTbWFydEJ1Y2tldE1vZHVsZRILCgN1cmwYASABKAkaGwoMQnVja2V0TW9kdWxlEgsKA3VybBgBIAEoCRoPCg1TZXJ2aWNlTW9kdWxlGhAKDk9ic2VydmVyTW9kdWxlGgwKClRhc2tNb2R1bGUaEwoRU1FMRGF0YWJhc2VNb2R1bGUaEwoRVmVjdG9ySW5kZXhNb2R1bGUaDQoLUXVldWVNb2R1bGUaDwoNS1ZTdG9yZU1vZHVsZRrvBwoGTW9kdWxlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEQoJbW9kdWxlX2lkGAQgASgJEgwKBG5hbWUYBSABKAkSDAoEdHlwZRgGIAEoCRJKCgttb2R1bGVfdHlwZRgHIAEoDjI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLk1vZHVsZVR5cGUSNQoMY29udmVyZ2VkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBElQKDHNtYXJ0X2J1Y2tldBgJIAEoCzI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlNtYXJ0QnVja2V0TW9kdWxlSAASSQoGYnVja2V0GAogASgLMjcubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuQnVja2V0TW9kdWxlSAASSwoHc2VydmljZRgLIAEoCzI4LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlNlcnZpY2VNb2R1bGVIABJNCghvYnNlcnZlchgMIAEoCzI5LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLk9ic2VydmVyTW9kdWxlSAASRQoEdGFzaxgNIAEoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlRhc2tNb2R1bGVIABJUCgxzcWxfZGF0YWJhc2UYDiABKAsyPC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5TUUxEYXRhYmFzZU1vZHVsZUgAElQKDHZlY3Rvcl9pbmRleBgPIAEoCzI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlZlY3RvckluZGV4TW9kdWxlSAASRwoFcXVldWUYECABKAsyNi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5RdWV1ZU1vZHVsZUgAEkwKCGt2X3N0b3JlGBEgASgLMjgubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuS1ZTdG9yZU1vZHVsZUgAQggKBm1vZHVsZUIPCg1fY29udmVyZ2VkX2F0Iq4CCgpNb2R1bGVUeXBlEhsKF01PRFVMRV9UWVBFX1VOU1BFQ0lGSUVEEAASHAoYTU9EVUxFX1RZUEVfU01BUlRfQlVDS0VUEAESFgoSTU9EVUxFX1RZUEVfQlVDS0VUEAISFwoTTU9EVUxFX1RZUEVfU0VSVklDRRADEhgKFE1PRFVMRV9UWVBFX09CU0VSVkVSEAQSFAoQTU9EVUxFX1RZUEVfVEFTSxAFEhwKGE1PRFVMRV9UWVBFX1NRTF9EQVRBQkFTRRAGEhwKGE1PRFVMRV9UWVBFX1ZFQ1RPUl9JTkRFWBAHEhcKE01PRFVMRV9UWVBFX0VOVl9WQVIQCBIVChFNT0RVTEVfVFlQRV9RVUVVRRAJEhgKFE1PRFVMRV9UWVBFX0tWX1NUT1JFEApCEgoQX25leHRfcGFnZV90b2tlbiKQAQomUmVzb2x2ZUJ1Y2tldExvY2F0aW9uVG9Nb2R1bGVJZFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSPAoPYnVja2V0X2xvY2F0aW9uGAMgASgLMiMubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVja2V0TG9jYXRvciJlCiZSZXNvbHZlTW9kdWxlSWRUb0J1Y2tldExvY2F0aW9uUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIRCgltb2R1bGVfaWQYAyABKAkiXwonUmVzb2x2ZUJ1Y2tldExvY2F0aW9uVG9Nb2R1bGVJZFJlc3BvbnNlEjQKBmJ1Y2tldBgBIAEoCzIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJ1Y2tldFJlc3BvbnNlIl8KJ1Jlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXNwb25zZRI0CgZidWNrZXQYASABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXRSZXNwb25zZSrSAQoJVW5pdFN0YXRlEhoKFlVOSVRfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJVTklUX1NUQVRFX1BFTkRJTkcQARIXChNVTklUX1NUQVRFX1NUQVJUSU5HEAISFgoSVU5JVF9TVEFURV9SVU5OSU5HEAMSFwoTVU5JVF9TVEFURV9TVE9QUElORxAEEhYKElVOSVRfU1RBVEVfU1RPUFBFRBAFEhcKE1VOSVRfU1RBVEVfREVMRVRJTkcQBhIWChJVTklUX1NUQVRFX0RFTEVURUQQBypVChFCdW5kbGVBcmNoaXZlVHlwZRIjCh9CVU5ETEVfQVJDSElWRV9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQlVORExFX0FSQ0hJVkVfVFlQRV9aSVAQASqSAQoWV2F0Y2hSZXNwb25zZUV2ZW50VHlwZRIpCiVXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJQohV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9NRVNTQUdFEAESJgoiV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9DT01QTEVURRACMuwMCg5DYXRhbG9nU2VydmljZRJrCg5RdWVyeVJlc291cmNlcxIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVxdWVzdBosLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2USZQoMUXVlcnlNb2R1bGVzEikubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2USngEKH1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWQSPC5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQnVja2V0TG9jYXRpb25Ub01vZHVsZUlkUmVxdWVzdBo9LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRKeAQofUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvbhI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXF1ZXN0Gj0ubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlc3BvbnNlQucBChhjb20ubGlxdWlkbWV0YWwudjFhbHBoYTFCDENhdGFsb2dQcm90b1ABWkxnaXRodWIuY29tL2xpcXVpZG1ldGFsLWFpL3Byb3RvZ2VuMi9saXF1aWRtZXRhbC92MWFscGhhMTtsaXF1aWRtZXRhbHYxYWxwaGExogIDTFhYqgIUTGlxdWlkbWV0YWwuVjFhbHBoYTHKAhRMaXF1aWRtZXRhbFxWMWFscGhhMeICIExpcXVpZG1ldGFsXFYxYWxwaGExXEdQQk1ldGFkYXRh6gIVTGlxdWlkbWV0YWw6OlYxYWxwaGExYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_liquidmetal_v1alpha1_bucket_name]);
18
18
 
19
19
  /**
20
20
  * @generated from message liquidmetal.v1alpha1.ApplicationsRequest
@@ -1387,6 +1387,114 @@ export type QueryModulesResponse_SmartBucketModule = Message<"liquidmetal.v1alph
1387
1387
  export const QueryModulesResponse_SmartBucketModuleSchema: GenMessage<QueryModulesResponse_SmartBucketModule> = /*@__PURE__*/
1388
1388
  messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 0);
1389
1389
 
1390
+ /**
1391
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.BucketModule
1392
+ */
1393
+ export type QueryModulesResponse_BucketModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.BucketModule"> & {
1394
+ /**
1395
+ * @generated from field: string url = 1;
1396
+ */
1397
+ url: string;
1398
+ };
1399
+
1400
+ /**
1401
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.BucketModule.
1402
+ * Use `create(QueryModulesResponse_BucketModuleSchema)` to create a new message.
1403
+ */
1404
+ export const QueryModulesResponse_BucketModuleSchema: GenMessage<QueryModulesResponse_BucketModule> = /*@__PURE__*/
1405
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 1);
1406
+
1407
+ /**
1408
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.ServiceModule
1409
+ */
1410
+ export type QueryModulesResponse_ServiceModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.ServiceModule"> & {
1411
+ };
1412
+
1413
+ /**
1414
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.ServiceModule.
1415
+ * Use `create(QueryModulesResponse_ServiceModuleSchema)` to create a new message.
1416
+ */
1417
+ export const QueryModulesResponse_ServiceModuleSchema: GenMessage<QueryModulesResponse_ServiceModule> = /*@__PURE__*/
1418
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 2);
1419
+
1420
+ /**
1421
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.ObserverModule
1422
+ */
1423
+ export type QueryModulesResponse_ObserverModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.ObserverModule"> & {
1424
+ };
1425
+
1426
+ /**
1427
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.ObserverModule.
1428
+ * Use `create(QueryModulesResponse_ObserverModuleSchema)` to create a new message.
1429
+ */
1430
+ export const QueryModulesResponse_ObserverModuleSchema: GenMessage<QueryModulesResponse_ObserverModule> = /*@__PURE__*/
1431
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 3);
1432
+
1433
+ /**
1434
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.TaskModule
1435
+ */
1436
+ export type QueryModulesResponse_TaskModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.TaskModule"> & {
1437
+ };
1438
+
1439
+ /**
1440
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.TaskModule.
1441
+ * Use `create(QueryModulesResponse_TaskModuleSchema)` to create a new message.
1442
+ */
1443
+ export const QueryModulesResponse_TaskModuleSchema: GenMessage<QueryModulesResponse_TaskModule> = /*@__PURE__*/
1444
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 4);
1445
+
1446
+ /**
1447
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.SQLDatabaseModule
1448
+ */
1449
+ export type QueryModulesResponse_SQLDatabaseModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.SQLDatabaseModule"> & {
1450
+ };
1451
+
1452
+ /**
1453
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.SQLDatabaseModule.
1454
+ * Use `create(QueryModulesResponse_SQLDatabaseModuleSchema)` to create a new message.
1455
+ */
1456
+ export const QueryModulesResponse_SQLDatabaseModuleSchema: GenMessage<QueryModulesResponse_SQLDatabaseModule> = /*@__PURE__*/
1457
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 5);
1458
+
1459
+ /**
1460
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.VectorIndexModule
1461
+ */
1462
+ export type QueryModulesResponse_VectorIndexModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.VectorIndexModule"> & {
1463
+ };
1464
+
1465
+ /**
1466
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.VectorIndexModule.
1467
+ * Use `create(QueryModulesResponse_VectorIndexModuleSchema)` to create a new message.
1468
+ */
1469
+ export const QueryModulesResponse_VectorIndexModuleSchema: GenMessage<QueryModulesResponse_VectorIndexModule> = /*@__PURE__*/
1470
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 6);
1471
+
1472
+ /**
1473
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.QueueModule
1474
+ */
1475
+ export type QueryModulesResponse_QueueModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.QueueModule"> & {
1476
+ };
1477
+
1478
+ /**
1479
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.QueueModule.
1480
+ * Use `create(QueryModulesResponse_QueueModuleSchema)` to create a new message.
1481
+ */
1482
+ export const QueryModulesResponse_QueueModuleSchema: GenMessage<QueryModulesResponse_QueueModule> = /*@__PURE__*/
1483
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 7);
1484
+
1485
+ /**
1486
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.KVStoreModule
1487
+ */
1488
+ export type QueryModulesResponse_KVStoreModule = Message<"liquidmetal.v1alpha1.QueryModulesResponse.KVStoreModule"> & {
1489
+ };
1490
+
1491
+ /**
1492
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.KVStoreModule.
1493
+ * Use `create(QueryModulesResponse_KVStoreModuleSchema)` to create a new message.
1494
+ */
1495
+ export const QueryModulesResponse_KVStoreModuleSchema: GenMessage<QueryModulesResponse_KVStoreModule> = /*@__PURE__*/
1496
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 8);
1497
+
1390
1498
  /**
1391
1499
  * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.Module
1392
1500
  */
@@ -1443,6 +1551,54 @@ export type QueryModulesResponse_Module = Message<"liquidmetal.v1alpha1.QueryMod
1443
1551
  */
1444
1552
  value: QueryModulesResponse_SmartBucketModule;
1445
1553
  case: "smartBucket";
1554
+ } | {
1555
+ /**
1556
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.BucketModule bucket = 10;
1557
+ */
1558
+ value: QueryModulesResponse_BucketModule;
1559
+ case: "bucket";
1560
+ } | {
1561
+ /**
1562
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.ServiceModule service = 11;
1563
+ */
1564
+ value: QueryModulesResponse_ServiceModule;
1565
+ case: "service";
1566
+ } | {
1567
+ /**
1568
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.ObserverModule observer = 12;
1569
+ */
1570
+ value: QueryModulesResponse_ObserverModule;
1571
+ case: "observer";
1572
+ } | {
1573
+ /**
1574
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.TaskModule task = 13;
1575
+ */
1576
+ value: QueryModulesResponse_TaskModule;
1577
+ case: "task";
1578
+ } | {
1579
+ /**
1580
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.SQLDatabaseModule sql_database = 14;
1581
+ */
1582
+ value: QueryModulesResponse_SQLDatabaseModule;
1583
+ case: "sqlDatabase";
1584
+ } | {
1585
+ /**
1586
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.VectorIndexModule vector_index = 15;
1587
+ */
1588
+ value: QueryModulesResponse_VectorIndexModule;
1589
+ case: "vectorIndex";
1590
+ } | {
1591
+ /**
1592
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.QueueModule queue = 16;
1593
+ */
1594
+ value: QueryModulesResponse_QueueModule;
1595
+ case: "queue";
1596
+ } | {
1597
+ /**
1598
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.KVStoreModule kv_store = 17;
1599
+ */
1600
+ value: QueryModulesResponse_KVStoreModule;
1601
+ case: "kvStore";
1446
1602
  } | { case: undefined; value?: undefined };
1447
1603
  };
1448
1604
 
@@ -1451,7 +1607,7 @@ export type QueryModulesResponse_Module = Message<"liquidmetal.v1alpha1.QueryMod
1451
1607
  * Use `create(QueryModulesResponse_ModuleSchema)` to create a new message.
1452
1608
  */
1453
1609
  export const QueryModulesResponse_ModuleSchema: GenMessage<QueryModulesResponse_Module> = /*@__PURE__*/
1454
- messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 1);
1610
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 9);
1455
1611
 
1456
1612
  /**
1457
1613
  * @generated from enum liquidmetal.v1alpha1.QueryModulesResponse.ModuleType