@toshicloud/sdk 0.5.1 → 0.6.0

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.
@@ -10,7 +10,7 @@ import { file_toshi_workspace_v1_roles } from "./roles_pb.js";
10
10
  /**
11
11
  * Describes the file toshi/workspace/v1/workspace_service.proto.
12
12
  */
13
- export const file_toshi_workspace_v1_workspace_service = /*@__PURE__*/ fileDesc("Cip0b3NoaS93b3Jrc3BhY2UvdjEvd29ya3NwYWNlX3NlcnZpY2UucHJvdG8SEnRvc2hpLndvcmtzcGFjZS52MSIVChNHZXRXb3Jrc3BhY2VSZXF1ZXN0IkgKFEdldFdvcmtzcGFjZVJlc3BvbnNlEjAKCXdvcmtzcGFjZRgBIAEoCzIdLnRvc2hpLndvcmtzcGFjZS52MS5Xb3Jrc3BhY2UiOQoWRGVsZXRlV29ya3NwYWNlUmVxdWVzdBIPCgdjb25maXJtGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJLChdEZWxldGVXb3Jrc3BhY2VSZXNwb25zZRIwCgl3b3Jrc3BhY2UYASABKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlIiAKHkNhbmNlbFdvcmtzcGFjZURlbGV0aW9uUmVxdWVzdCJTCh9DYW5jZWxXb3Jrc3BhY2VEZWxldGlvblJlc3BvbnNlEjAKCXdvcmtzcGFjZRgBIAEoCzIdLnRvc2hpLndvcmtzcGFjZS52MS5Xb3Jrc3BhY2UiewoWVXBkYXRlV29ya3NwYWNlUmVxdWVzdBIwCgl3b3Jrc3BhY2UYASABKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlEi8KC3VwZGF0ZV9tYXNrGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayJLChdVcGRhdGVXb3Jrc3BhY2VSZXNwb25zZRIwCgl3b3Jrc3BhY2UYASABKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlIj4KFUxpc3RXb3Jrc3BhY2VzUmVxdWVzdBIRCglwYWdlX3NpemUYASABKAUSEgoKcGFnZV90b2tlbhgCIAEoCSJkChZMaXN0V29ya3NwYWNlc1Jlc3BvbnNlEjEKCndvcmtzcGFjZXMYASADKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSIsChpHZXRXb3Jrc3BhY2VCaWxsaW5nUmVxdWVzdBIOCgZtb250aHMYASABKAUiVAobR2V0V29ya3NwYWNlQmlsbGluZ1Jlc3BvbnNlEjUKB2JpbGxpbmcYASABKAsyJC50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlQmlsbGluZyI6ChxHZXRXb3Jrc3BhY2VTdGF0ZW1lbnRSZXF1ZXN0Eg0KBW1vbnRoGAEgASgJEgsKA2NzdhgCIAEoCCJnCh1HZXRXb3Jrc3BhY2VTdGF0ZW1lbnRSZXNwb25zZRI5CglzdGF0ZW1lbnQYASABKAsyJi50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlU3RhdGVtZW50EgsKA2NzdhgCIAEoCSKRAgoEU2VhdBIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEi8KC2Fzc2lnbmVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgthc3NpZ25lZF9ieRgEIAEoCzIbLnRvc2hpLndvcmtzcGFjZS52MS5TdWJqZWN0Ei4KCnJlbW92ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KCnJlbW92ZWRfYnkYBiABKAsyGy50b3NoaS53b3Jrc3BhY2UudjEuU3ViamVjdBIQCghyZXBsYWNlcxgHIAEoCRIWCg5yZXBsYWNlX3JlYXNvbhgIIAEoCSIhChBMaXN0U2VhdHNSZXF1ZXN0Eg0KBW1vbnRoGAEgASgJIjwKEUxpc3RTZWF0c1Jlc3BvbnNlEicKBXNlYXRzGAEgAygLMhgudG9zaGkud29ya3NwYWNlLnYxLlNlYXQiJAoRQXNzaWduU2VhdFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCSI8ChJBc3NpZ25TZWF0UmVzcG9uc2USJgoEc2VhdBgBIAEoCzIYLnRvc2hpLndvcmtzcGFjZS52MS5TZWF0IiQKEVJlbW92ZVNlYXRSZXF1ZXN0Eg8KB3NlYXRfaWQYASABKAkiPAoSUmVtb3ZlU2VhdFJlc3BvbnNlEiYKBHNlYXQYASABKAsyGC50b3NoaS53b3Jrc3BhY2UudjEuU2VhdCI9ChRMaXN0RWdyZXNzSVBzUmVxdWVzdBIRCglwYWdlX3NpemUYASABKAUSEgoKcGFnZV90b2tlbhgCIAEoCSJ+ChVMaXN0RWdyZXNzSVBzUmVzcG9uc2USCwoDaXBzGAEgAygJEi0KBWhvc3RzGAIgAygLMh4udG9zaGkud29ya3NwYWNlLnYxLkVncmVzc0hvc3QSEAoIY29tcGxldGUYAyABKAgSFwoPbmV4dF9wYWdlX3Rva2VuGAQgASgJImMKD0dldFVzYWdlUmVxdWVzdBIoCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi9wEKEEdldFVzYWdlUmVzcG9uc2USKgoEcm93cxgBIAMoCzIcLnRvc2hpLndvcmtzcGFjZS52MS5Vc2FnZVJvdxIoCgRmcm9tGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoGZmlsbGVyGAQgASgLMh8udG9zaGkud29ya3NwYWNlLnYxLkZpbGxlclVzYWdlEjQKB3N0b3JhZ2UYBSADKAsyIy50b3NoaS53b3Jrc3BhY2UudjEuU3RvcmFnZVVzYWdlUm93ImgKFEdldFF1ZXVlVGltZXNSZXF1ZXN0EigKBGZyb20YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLoAQoVR2V0UXVldWVUaW1lc1Jlc3BvbnNlEgwKBGpvYnMYASABKAMSDgoGcDUwX21zGAIgASgDEg4KBnA5MF9tcxgDIAEoAxIOCgZtYXhfbXMYBCABKAMSEgoKd2FybV9zaGFyZRgFIAEoARIoCgRmcm9tGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoEaGVsZBgIIAMoCzIdLnRvc2hpLndvcmtzcGFjZS52MS5Ib2xkVGltZXMiawoXR2V0V29ya2Zsb3dVc2FnZVJlcXVlc3QSKAoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoCdG8YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIqABChhHZXRXb3JrZmxvd1VzYWdlUmVzcG9uc2USMgoEcm93cxgBIAMoCzIkLnRvc2hpLndvcmtzcGFjZS52MS5Xb3JrZmxvd1VzYWdlUm93EigKBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCI5ChBMaXN0UGxhbnNSZXF1ZXN0EhEKCXBhZ2Vfc2l6ZRgBIAEoBRISCgpwYWdlX3Rva2VuGAIgASgJIlUKEUxpc3RQbGFuc1Jlc3BvbnNlEicKBXBsYW5zGAEgAygLMhgudG9zaGkud29ya3NwYWNlLnYxLlBsYW4SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIkAKHENyZWF0ZUNoZWNrb3V0U2Vzc2lvblJlcXVlc3QSDAoEcGxhbhgBIAEoCRISCgpyZXR1cm5fdXJsGAIgASgJIiwKHUNyZWF0ZUNoZWNrb3V0U2Vzc2lvblJlc3BvbnNlEgsKA3VybBgBIAEoCSI3CiFDcmVhdGVCaWxsaW5nUG9ydGFsU2Vzc2lvblJlcXVlc3QSEgoKcmV0dXJuX3VybBgBIAEoCSIxCiJDcmVhdGVCaWxsaW5nUG9ydGFsU2Vzc2lvblJlc3BvbnNlEgsKA3VybBgBIAEoCSITChFHZXRWZXJzaW9uUmVxdWVzdCJiChJHZXRWZXJzaW9uUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCRIOCgZjb21taXQYAiABKAkSDAoEZGF0ZRgDIAEoCRIdChVtaW5pbXVtX2FnZW50X3ZlcnNpb24YBCABKAkiiAwKCVdvcmtzcGFjZRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhwKD2NvbmN1cnJlbmN5X2NhcBgDIAEoBUgAiAEBEi4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgwKBHBsYW4YBSABKAkSHQoVZWZmZWN0aXZlX2NvbmN1cnJlbmN5GAYgASgFEg4KBnN0YXR1cxgHIAEoCRIjChtlZmZlY3RpdmVfbWF4X2pvYnNfcGVyX2hvdXIYCyABKAUSHAoUc3RhcnRlcl9jcmVkaXRfY2VudHMYDCABKAMSPQoZc3RhcnRlcl9jcmVkaXRfZ3JhbnRlZF9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNQoMcmVzZXJ2YXRpb25zGBAgAygLMh8udG9zaGkud29ya3NwYWNlLnYxLlJlc2VydmF0aW9uEg0KBXN0YXRlGBEgASgJEhQKDHN0YXRlX3JlYXNvbhgSIAEoCRIvCgtzdGF0ZV9zaW5jZRgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLcHVyZ2VfYWZ0ZXIYFCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC2RlbGV0aW9uX2J5GCcgASgJEh4KFmhpc3RvcnlfZGF5c19lZmZlY3RpdmUYFiABKAUSHAoPc2VjcmV0X21heF9zZXRzGBggASgFSAGIAQESHAoPc2VjcmV0X21heF9rZXlzGBkgASgFSAKIAQESGwoOc2VjcmV0X21heF9raWIYGiABKANIA4gBARIeChFwcmV2aWV3X21heF9wb3J0cxgbIAEoBUgEiAEBEiEKGXNlY3JldF9tYXhfc2V0c19lZmZlY3RpdmUYHCABKAUSIQoZc2VjcmV0X21heF9rZXlzX2VmZmVjdGl2ZRgdIAEoBRIgChhzZWNyZXRfbWF4X2tpYl9lZmZlY3RpdmUYHiABKAMSIwobcHJldmlld19tYXhfcG9ydHNfZWZmZWN0aXZlGB8gASgFEjcKCHNldHRpbmdzGCEgASgLMiUudG9zaGkud29ya3NwYWNlLnYxLldvcmtzcGFjZVNldHRpbmdzEgwKBGV0YWcYIiABKAkSQwoTaG9zdGluZ19jZXJ0aWZpY2F0ZRgjIAEoCzImLnRvc2hpLndvcmtzcGFjZS52MS5Ib3N0aW5nQ2VydGlmaWNhdGUSHQoVa2VlcF92bV9tYXhfZWZmZWN0aXZlGCQgASgFEj0KEmtlZXBfdm1fbWF4X3NvdXJjZRgpIAEoDjIhLnRvc2hpLndvcmtzcGFjZS52MS5GZWF0dXJlU291cmNlEhUKDWtlZXBfdm1fY291bnQYJSABKAUSIgoaa2VlcF92bV9zdG9wcGVkX2xvbmdfY291bnQYJiABKAUSRQoRcmVjb3JkaW5nX2NoYW5nZWQYKCABKAsyKi50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlU2V0dGluZ0NoYW5nZRJRCh1yZWNvcmRpbmdfaHVtYW5fc3BhbnNfY2hhbmdlZBgqIAEoCzIqLnRvc2hpLndvcmtzcGFjZS52MS5Xb3Jrc3BhY2VTZXR0aW5nQ2hhbmdlQhIKEF9jb25jdXJyZW5jeV9jYXBCEgoQX3NlY3JldF9tYXhfc2V0c0ISChBfc2VjcmV0X21heF9rZXlzQhEKD19zZWNyZXRfbWF4X2tpYkIUChJfcHJldmlld19tYXhfcG9ydHNKBAgIEAlKBAgJEApKBAgKEAtKBAgOEA9KBAgPEBBKBAgVEBZKBAgXEBhKBAggECFSDm93bl9ob3N0c19vbmx5Ug9zcGVuZF9jYXBfY2VudHNSEW1heF9qb2JzX3Blcl9ob3VyUg5hbGxvd19vdmVyZmxvd1IQYWxsb3dfY2FjaGVfd2FybVIMaGlzdG9yeV9kYXlzUhZjYW5jZWxfcnVuX29uX3ZtX2RlYXRoUgttZW1iZXJfam9pbiL4AQoSSG9zdGluZ0NlcnRpZmljYXRlEgwKBG5hbWUYASABKAkSOgoFc3RhdGUYAiABKA4yKy50b3NoaS53b3Jrc3BhY2UudjEuSG9zdGluZ0NlcnRpZmljYXRlU3RhdGUSLQoJbm90X2FmdGVyGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCghyZW5ld19hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLAoIcmV0cnlfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBWVycm9yGAYgASgJItkDChFXb3Jrc3BhY2VTZXR0aW5ncxITCgttZW1iZXJfam9pbhgBIAEoCRJKCgdzaWduX2luGAIgASgLMiMudG9zaGkud29ya3NwYWNlLnYxLldvcmtzcGFjZVNpZ25JbkIU2vMYEHdvcmtzcGFjZS5zaWduaW4SGQoMaGlzdG9yeV9kYXlzGAMgASgFSACIAQESFgoOb3duX2hvc3RzX29ubHkYBCABKAgSFgoOYWxsb3dfb3ZlcmZsb3cYBSABKAgSGAoQYWxsb3dfY2FjaGVfd2FybRgGIAEoCBIeChZjYW5jZWxfcnVuX29uX3ZtX2RlYXRoGAcgASgIEioKD3NwZW5kX2NhcF9jZW50cxgIIAEoA0IR2vMYDWJpbGxpbmcud3JpdGUSLAoRbWF4X2pvYnNfcGVyX2hvdXIYCSABKAVCEdrzGA1iaWxsaW5nLndyaXRlEg8KB2tlZXBfdm0YCiABKAgSFgoJcmVjb3JkaW5nGAsgASgISAGIAQESIgoVcmVjb3JkaW5nX2h1bWFuX3NwYW5zGAwgASgISAKIAQFCDwoNX2hpc3RvcnlfZGF5c0IMCgpfcmVjb3JkaW5nQhgKFl9yZWNvcmRpbmdfaHVtYW5fc3BhbnMieQoWV29ya3NwYWNlU2V0dGluZ0NoYW5nZRIvCgpjaGFuZ2VkX2J5GAEgASgLMhsudG9zaGkud29ya3NwYWNlLnYxLlN1YmplY3QSLgoKY2hhbmdlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAibwoPV29ya3NwYWNlU2lnbkluEhAKCHByb3ZpZGVyGAEgASgJEg4KBmlzc3VlchgCIAEoCRIOCgZzZXRfYnkYAyABKAkSKgoGc2V0X2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJICgtSZXNlcnZhdGlvbhIMCgRzaXplGAEgASgJEg0KBXNsb3RzGAIgASgFEgwKBHdhcm0YAyABKAUSDgoGc291cmNlGAQgASgJIscHChBXb3Jrc3BhY2VCaWxsaW5nEhMKC2N1c3RvbWVyX2lkGAEgASgJEhcKD3N1YnNjcmlwdGlvbl9pZBgCIAEoCRI2ChJiaWxsaW5nX3N0YXJ0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKE3N1YnNjcmlwdGlvbl9zdGF0dXMYBCABKAkSPQoZc3Vic2NyaXB0aW9uX3N0YXR1c19zaW5jZRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMQoGdG90YWxzGAYgAygLMiEudG9zaGkud29ya3NwYWNlLnYxLkJpbGxpbmdUb3RhbHMSPgoNZmFpbGVkX2V2ZW50cxgHIAMoCzInLnRvc2hpLndvcmtzcGFjZS52MS5CaWxsaW5nRXZlbnRGYWlsdXJlEhoKEm1pbnV0ZXNfdGhpc19tb250aBgIIAEoAxIeChZmcmVlX21pbnV0ZXNfcGVyX21vbnRoGAkgASgDEhUKDWNhcmRfdmVyaWZpZWQYCiABKAgSNAoQY2FyZF92ZXJpZmllZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoPc3BlbmRfY2FwX2NlbnRzGAwgASgDEhMKC3NwZW5kX2NlbnRzGA0gASgDEhMKC3NwZW5kX2xldmVsGA4gASgFEhAKCGN1cnJlbmN5GA8gASgJEhMKC3NwZW5kX2tub3duGBAgASgIEhwKFHN0YXJ0ZXJfY3JlZGl0X2NlbnRzGBEgASgDEiEKGXN0YXJ0ZXJfY3JlZGl0X2xlZnRfY2VudHMYEiABKAMSPQoZc3RhcnRlcl9jcmVkaXRfYXBwbGllZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoPYmlsbGluZ19lbmFibGVkGBQgASgIEj8KCGhlbGRfbm93GBUgAygLMi0udG9zaGkud29ya3NwYWNlLnYxLldvcmtzcGFjZUJpbGxpbmcuSGVsZEpvYnMSGAoQY29uY3VycmVuY3lfdXNlZBgWIAEoAxIlChhkZXNrdG9wX3NlYXRfcHJpY2VfY2VudHMYGiABKANIAIgBARpTCghIZWxkSm9icxIOCgZyZWFzb24YFyABKAkSDAoEam9icxgYIAEoAxIpCgVzaW5jZRgZIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCGwoZX2Rlc2t0b3Bfc2VhdF9wcmljZV9jZW50cyK3AQoNQmlsbGluZ1RvdGFscxINCgVtb250aBgBIAEoCRIMCgRzaXplGAIgASgJEhMKC3NlbnRfZXZlbnRzGAMgASgDEhQKDHNlbnRfbWludXRlcxgEIAEoAxIWCg5wZW5kaW5nX2V2ZW50cxgFIAEoAxIXCg9wZW5kaW5nX21pbnV0ZXMYBiABKAMSFQoNZmFpbGVkX2V2ZW50cxgHIAEoAxIWCg5mYWlsZWRfbWludXRlcxgIIAEoAyLeAQoTQmlsbGluZ0V2ZW50RmFpbHVyZRIOCgZqb2JfaWQYASABKAkSDAoEc2l6ZRgCIAEoCRISCgpldmVudF9uYW1lGAMgASgJEg8KB21pbnV0ZXMYBCABKAMSLwoLb2NjdXJyZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCWZhaWxlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEAoIYXR0ZW1wdHMYByABKAUSEgoKbGFzdF9lcnJvchgIIAEoCSKYBwoSV29ya3NwYWNlU3RhdGVtZW50Eg0KBW1vbnRoGAEgASgJEigKBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIMCgRwbGFuGAQgASgJEjEKBXVzYWdlGAUgAygLMiIudG9zaGkud29ya3NwYWNlLnYxLlN0YXRlbWVudFVzYWdlEjEKBXRvdGFsGAYgASgLMiIudG9zaGkud29ya3NwYWNlLnYxLlN0YXRlbWVudFVzYWdlEjQKB2NoYXJnZXMYByADKAsyIy50b3NoaS53b3Jrc3BhY2UudjEuU3RhdGVtZW50Q2hhcmdlEhcKD2VzdGltYXRlZF9jZW50cxgIIAEoAxIQCghjdXJyZW5jeRgJIAEoCRIWCg5lc3RpbWF0ZV9rbm93bhgKIAEoCBIkChxzdGFydGVyX2NyZWRpdF9hcHBsaWVkX2NlbnRzGAsgASgDEj0KGXN0YXJ0ZXJfY3JlZGl0X2FwcGxpZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKBGhlbGQYDSADKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuSG9sZFRpbWVzEh0KFWN1cnJlbnRfcHJpY2VfbWludXRlcxgOIAEoAxIvCgZmaWxsZXIYDyABKAsyHy50b3NoaS53b3Jrc3BhY2UudjEuRmlsbGVyVXNhZ2USFwoPYmlsbGluZ19lbmFibGVkGBAgASgIEjgKFHNwZW5kX2NhcF9yZWFjaGVkX2F0GBEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIfChdzcGVuZF9jYXBfcmVhY2hlZF9jZW50cxgSIAEoAxIXCg9zcGVuZF9jYXBfY2VudHMYEyABKAMSNAoMb3duX2hvc3RfZmVlGBQgASgLMh4udG9zaGkud29ya3NwYWNlLnYxLk93bkhvc3RGZWUSKAoFYXdha2UYFSADKAsyGS50b3NoaS53b3Jrc3BhY2UudjEuQXdha2USLAoHc3RvcmFnZRgWIAEoCzIbLnRvc2hpLndvcmtzcGFjZS52MS5TdG9yYWdlEjcKDWRlc2t0b3Bfc2VhdHMYFyABKAsyIC50b3NoaS53b3Jrc3BhY2UudjEuRGVza3RvcFNlYXRzIpsBCgxEZXNrdG9wU2VhdHMSFAoMYmlsbGVkX3NlYXRzGAEgASgDEhgKEHNlYXRfcHJpY2VfY2VudHMYAiABKAMSEAoIdW5wcmljZWQYAyABKAgSFwoPZXN0aW1hdGVkX2NlbnRzGAQgASgDEjAKBXNlYXRzGAUgAygLMiEudG9zaGkud29ya3NwYWNlLnYxLlN0YXRlbWVudFNlYXQiwgEKDVN0YXRlbWVudFNlYXQSDwoHc2VhdF9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSLwoLYXNzaWduZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnJlbW92ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhAKCHJlcGxhY2VzGAYgASgJEg4KBmJpbGxlZBgHIAEoCCJkCgpPd25Ib3N0RmVlEg8KB3NlY29uZHMYASABKAESFAoMZnJlZV9zZWNvbmRzGAIgASgDEhYKDmJpbGxlZF9zZWNvbmRzGAMgASgDEhcKD2VzdGltYXRlZF9jZW50cxgEIAEoAyJ7CgVBd2FrZRIMCgRzaXplGAEgASgJEgwKBHJ1bnMYAiABKAMSDwoHc2Vjb25kcxgDIAEoARIUCgxpZGxlX3NlY29uZHMYBCABKAESFgoOYmlsbGVkX3NlY29uZHMYBSABKAMSFwoPZXN0aW1hdGVkX2NlbnRzGAYgASgDIqsBCgdTdG9yYWdlEi0KBWtpbmRzGAEgAygLMh4udG9zaGkud29ya3NwYWNlLnYxLlN0b3JlZEtpbmQSEwoLaW5jbHVkZWRfZ2IYAiABKAMSEAoIZ2JfaG91cnMYAyABKAESFwoPZXhjZXNzX2diX2hvdXJzGAQgASgBEhgKEGJpbGxlZF9nYl9tb250aHMYBSABKAESFwoPZXN0aW1hdGVkX2NlbnRzGAYgASgDIjsKClN0b3JlZEtpbmQSDAoEa2luZBgBIAEoCRINCgVieXRlcxgCIAEoAxIQCghnYl9ob3VycxgDIAEoASJNCg9TdG9yYWdlVXNhZ2VSb3cSCwoDZGF5GAEgASgJEgwKBGtpbmQYAiABKAkSEAoIZ2JfaG91cnMYAyABKAESDQoFYnl0ZXMYBCABKAMi7QEKDlN0YXRlbWVudFVzYWdlEgwKBHNpemUYASABKAkSCgoCb3MYAiABKAkSDAoEam9icxgDIAEoAxIPCgdtaW51dGVzGAQgASgDEhgKEG93bl9ob3N0X21pbnV0ZXMYBSABKAMSFQoNZGVidWdfbWludXRlcxgGIAEoAxIYChBvdmVyZmxvd19taW51dGVzGAcgASgDEhsKE3Jlc2VydmVkX3Nsb3RfaG91cnMYCCABKAMSDwoHb3V0Y29tZRgJIAEoCRIPCgdzZWNvbmRzGAogASgBEhgKEG93bl9ob3N0X3NlY29uZHMYCyABKAEiSQoPU3RhdGVtZW50Q2hhcmdlEgwKBHNpemUYASABKAkSDwoHbWludXRlcxgCIAEoAxIXCg9lc3RpbWF0ZWRfY2VudHMYAyABKAMinAEKCUhvbGRUaW1lcxIOCgZyZWFzb24YASABKAkSDAoEam9icxgCIAEoAxIOCgZwNTBfbXMYAyABKAMSDgoGcDkwX21zGAQgASgDEg4KBm1heF9tcxgFIAEoAxIRCglvcGVuX2pvYnMYBiABKAMSLgoKb3Blbl9zaW5jZRgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLAoLRmlsbGVyVXNhZ2USDAoEam9icxgBIAEoAxIPCgdtaW51dGVzGAIgASgDIqkCCghVc2FnZVJvdxILCgNkYXkYASABKAkSEgoKY29uY2x1c2lvbhgCIAEoCRIMCgRqb2JzGAMgASgDEg8KB21pbnV0ZXMYBCABKAMSGAoQb3duX2hvc3RfbWludXRlcxgFIAEoAxIVCg1kZWJ1Z19taW51dGVzGAYgASgDEhgKEG92ZXJmbG93X21pbnV0ZXMYByABKAMSGwoTcmVzZXJ2ZWRfc2xvdF9ob3VycxgIIAEoAxIPCgdvdXRjb21lGAkgASgJEgwKBGtpbmQYCiABKAkSDwoHc2Vjb25kcxgLIAEoARIYChBvd25faG9zdF9zZWNvbmRzGAwgASgBEhUKDWF3YWtlX3NlY29uZHMYDSABKAESFAoMaWRsZV9zZWNvbmRzGA4gASgBIsQBChBXb3JrZmxvd1VzYWdlUm93EhIKCnJlcG9zaXRvcnkYASABKAkSEAoId29ya2Zsb3cYAiABKAkSDAoEam9icxgDIAEoAxIPCgdtaW51dGVzGAQgASgDEhgKEG93bl9ob3N0X21pbnV0ZXMYBSABKAMSEwoLZmFpbGVkX2pvYnMYBiABKAMSEgoKdGltZWRfam9icxgHIAEoAxITCgtwNTBfc2Vjb25kcxgIIAEoAxITCgtwOTVfc2Vjb25kcxgJIAEoAyKYAwoEUGxhbhIMCgRuYW1lGAEgASgJEhMKC2NvbmN1cnJlbmN5GAIgASgFEhcKD21heF9qb2JfbWludXRlcxgDIAEoBRISCgppc19kZWZhdWx0GAQgASgIEhIKCnNlbGZfc2VydmUYBSABKAgSEgoKYWxsb3dlZF9vcxgGIAMoCRIQCghtYXhfc2l6ZRgHIAEoCRIQCghtYXhfdmNwdRgIIAEoBRIeChZmcmVlX21pbnV0ZXNfcGVyX21vbnRoGAkgASgFEg0KBXNpemVzGAogAygJEhkKEWNhcmRfcmVxdWlyZWRfZm9yGAsgAygJEhkKEW1heF9qb2JzX3Blcl9ob3VyGAwgASgFEhgKEGJ1cnN0X2d1YXJkX2pvYnMYDSABKAUSHAoUc3RhcnRlcl9jcmVkaXRfY2VudHMYDiABKAMSFAoMaGlzdG9yeV9kYXlzGA8gASgFEhUKDWRlYnVnX21pbnV0ZXMYECABKAUSFQoNbWF4X293bl9ob3N0cxgRIAEoBRITCgtvcGVuX3NvdXJjZRgSIAEoCCK3AQoKRWdyZXNzSG9zdBIPCgdob3N0X2lkGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGc2hhcmVkGAMgASgIEi4KBmVncmVzcxgEIAEoCzIeLnRvc2hpLndvcmtzcGFjZS52MS5Ib3N0RWdyZXNzEhIKCnJlY2VudF9pcHMYBSADKAkSDQoFY2xvdWQYBiABKAkSFAoMY2xvdWRfZWdyZXNzGAcgASgJEhEKCWNvbmZpcm1lZBgIIAEoCCqWAgoXSG9zdGluZ0NlcnRpZmljYXRlU3RhdGUSKQolSE9TVElOR19DRVJUSUZJQ0FURV9TVEFURV9VTlNQRUNJRklFRBAAEiUKIUhPU1RJTkdfQ0VSVElGSUNBVEVfU1RBVEVfSVNTVUlORxABEioKJkhPU1RJTkdfQ0VSVElGSUNBVEVfU1RBVEVfUkFURV9MSU1JVEVEEAISIwofSE9TVElOR19DRVJUSUZJQ0FURV9TVEFURV9WQUxJRBADEi0KKUhPU1RJTkdfQ0VSVElGSUNBVEVfU1RBVEVfUkVORVdBTF9GQUlMSU5HEAQSKQolSE9TVElOR19DRVJUSUZJQ0FURV9TVEFURV9TRUxGX1NJR05FRBAFMtcTChBXb3Jrc3BhY2VTZXJ2aWNlEnUKDEdldFdvcmtzcGFjZRInLnRvc2hpLndvcmtzcGFjZS52MS5HZXRXb3Jrc3BhY2VSZXF1ZXN0GigudG9zaGkud29ya3NwYWNlLnYxLkdldFdvcmtzcGFjZVJlc3BvbnNlIhLC8xgOd29ya3NwYWNlLnJlYWQSgwEKD1VwZGF0ZVdvcmtzcGFjZRIqLnRvc2hpLndvcmtzcGFjZS52MS5VcGRhdGVXb3Jrc3BhY2VSZXF1ZXN0GisudG9zaGkud29ya3NwYWNlLnYxLlVwZGF0ZVdvcmtzcGFjZVJlc3BvbnNlIhfC8xgPd29ya3NwYWNlLndyaXRl4PMYARJ7Cg5MaXN0V29ya3NwYWNlcxIpLnRvc2hpLndvcmtzcGFjZS52MS5MaXN0V29ya3NwYWNlc1JlcXVlc3QaKi50b3NoaS53b3Jrc3BhY2UudjEuTGlzdFdvcmtzcGFjZXNSZXNwb25zZSISwvMYDndvcmtzcGFjZS5yZWFkEogBChNHZXRXb3Jrc3BhY2VCaWxsaW5nEi4udG9zaGkud29ya3NwYWNlLnYxLkdldFdvcmtzcGFjZUJpbGxpbmdSZXF1ZXN0Gi8udG9zaGkud29ya3NwYWNlLnYxLkdldFdvcmtzcGFjZUJpbGxpbmdSZXNwb25zZSIQwvMYDGJpbGxpbmcucmVhZBKOAQoVR2V0V29ya3NwYWNlU3RhdGVtZW50EjAudG9zaGkud29ya3NwYWNlLnYxLkdldFdvcmtzcGFjZVN0YXRlbWVudFJlcXVlc3QaMS50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya3NwYWNlU3RhdGVtZW50UmVzcG9uc2UiEMLzGAxiaWxsaW5nLnJlYWQSaAoJTGlzdFNlYXRzEiQudG9zaGkud29ya3NwYWNlLnYxLkxpc3RTZWF0c1JlcXVlc3QaJS50b3NoaS53b3Jrc3BhY2UudjEuTGlzdFNlYXRzUmVzcG9uc2UiDsLzGApzZWF0cy5yZWFkEpYBCgpBc3NpZ25TZWF0EiUudG9zaGkud29ya3NwYWNlLnYxLkFzc2lnblNlYXRSZXF1ZXN0GiYudG9zaGkud29ya3NwYWNlLnYxLkFzc2lnblNlYXRSZXNwb25zZSI5wvMYC3NlYXRzLndyaXRl0vMYJgoNc2VhdC5hc3NpZ25lZBIVc2VhdDpyZXNwb25zZS5zZWF0LmlkEn4KClJlbW92ZVNlYXQSJS50b3NoaS53b3Jrc3BhY2UudjEuUmVtb3ZlU2VhdFJlcXVlc3QaJi50b3NoaS53b3Jrc3BhY2UudjEuUmVtb3ZlU2VhdFJlc3BvbnNlIiHC8xgLc2VhdHMud3JpdGXS8xgOCgxzZWF0LnJlbW92ZWQSeAoNTGlzdEVncmVzc0lQcxIoLnRvc2hpLndvcmtzcGFjZS52MS5MaXN0RWdyZXNzSVBzUmVxdWVzdBopLnRvc2hpLndvcmtzcGFjZS52MS5MaXN0RWdyZXNzSVBzUmVzcG9uc2UiEsLzGA53b3Jrc3BhY2UucmVhZBJpCghHZXRVc2FnZRIjLnRvc2hpLndvcmtzcGFjZS52MS5HZXRVc2FnZVJlcXVlc3QaJC50b3NoaS53b3Jrc3BhY2UudjEuR2V0VXNhZ2VSZXNwb25zZSISwvMYDndvcmtzcGFjZS5yZWFkEngKDUdldFF1ZXVlVGltZXMSKC50b3NoaS53b3Jrc3BhY2UudjEuR2V0UXVldWVUaW1lc1JlcXVlc3QaKS50b3NoaS53b3Jrc3BhY2UudjEuR2V0UXVldWVUaW1lc1Jlc3BvbnNlIhLC8xgOd29ya3NwYWNlLnJlYWQSgQEKEEdldFdvcmtmbG93VXNhZ2USKy50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya2Zsb3dVc2FnZVJlcXVlc3QaLC50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya2Zsb3dVc2FnZVJlc3BvbnNlIhLC8xgOd29ya3NwYWNlLnJlYWQSagoJTGlzdFBsYW5zEiQudG9zaGkud29ya3NwYWNlLnYxLkxpc3RQbGFuc1JlcXVlc3QaJS50b3NoaS53b3Jrc3BhY2UudjEuTGlzdFBsYW5zUmVzcG9uc2UiEMLzGAxiaWxsaW5nLnJlYWQSwQEKFUNyZWF0ZUNoZWNrb3V0U2Vzc2lvbhIwLnRvc2hpLndvcmtzcGFjZS52MS5DcmVhdGVDaGVja291dFNlc3Npb25SZXF1ZXN0GjEudG9zaGkud29ya3NwYWNlLnYxLkNyZWF0ZUNoZWNrb3V0U2Vzc2lvblJlc3BvbnNlIkPC8xgNYmlsbGluZy53cml0ZdLzGC4KF2JpbGxpbmcuY2hlY2tvdXRfb3BlbmVkEhN3b3Jrc3BhY2U6d29ya3NwYWNlEs4BChpDcmVhdGVCaWxsaW5nUG9ydGFsU2Vzc2lvbhI1LnRvc2hpLndvcmtzcGFjZS52MS5DcmVhdGVCaWxsaW5nUG9ydGFsU2Vzc2lvblJlcXVlc3QaNi50b3NoaS53b3Jrc3BhY2UudjEuQ3JlYXRlQmlsbGluZ1BvcnRhbFNlc3Npb25SZXNwb25zZSJBwvMYDWJpbGxpbmcud3JpdGXS8xgsChViaWxsaW5nLnBvcnRhbF9vcGVuZWQSE3dvcmtzcGFjZTp3b3Jrc3BhY2USbwoKR2V0VmVyc2lvbhIlLnRvc2hpLndvcmtzcGFjZS52MS5HZXRWZXJzaW9uUmVxdWVzdBomLnRvc2hpLndvcmtzcGFjZS52MS5HZXRWZXJzaW9uUmVzcG9uc2UiEsLzGA53b3Jrc3BhY2UucmVhZBKiAQoPRGVsZXRlV29ya3NwYWNlEioudG9zaGkud29ya3NwYWNlLnYxLkRlbGV0ZVdvcmtzcGFjZVJlcXVlc3QaKy50b3NoaS53b3Jrc3BhY2UudjEuRGVsZXRlV29ya3NwYWNlUmVzcG9uc2UiNsLzGBB3b3Jrc3BhY2UuZGVsZXRl0vMYHgocd29ya3NwYWNlLmRlbGV0aW9uX3NjaGVkdWxlZBKvAQoXQ2FuY2VsV29ya3NwYWNlRGVsZXRpb24SMi50b3NoaS53b3Jrc3BhY2UudjEuQ2FuY2VsV29ya3NwYWNlRGVsZXRpb25SZXF1ZXN0GjMudG9zaGkud29ya3NwYWNlLnYxLkNhbmNlbFdvcmtzcGFjZURlbGV0aW9uUmVzcG9uc2UiK8LzGBB3b3Jrc3BhY2UuZGVsZXRl0vMYEwoRd29ya3NwYWNlLnJlc3VtZWRCIlogZ28udG9zaGljbG91ZC5pby9hcGkvd29ya3NwYWNldjFiBnByb3RvMw", [file_google_protobuf_field_mask, file_google_protobuf_timestamp, file_toshi_permission, file_toshi_workspace_v1_discovery, file_toshi_workspace_v1_hosts, file_toshi_workspace_v1_roles]);
13
+ export const file_toshi_workspace_v1_workspace_service = /*@__PURE__*/ fileDesc("Cip0b3NoaS93b3Jrc3BhY2UvdjEvd29ya3NwYWNlX3NlcnZpY2UucHJvdG8SEnRvc2hpLndvcmtzcGFjZS52MSIVChNHZXRXb3Jrc3BhY2VSZXF1ZXN0IkgKFEdldFdvcmtzcGFjZVJlc3BvbnNlEjAKCXdvcmtzcGFjZRgBIAEoCzIdLnRvc2hpLndvcmtzcGFjZS52MS5Xb3Jrc3BhY2UiOQoWRGVsZXRlV29ya3NwYWNlUmVxdWVzdBIPCgdjb25maXJtGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJLChdEZWxldGVXb3Jrc3BhY2VSZXNwb25zZRIwCgl3b3Jrc3BhY2UYASABKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlIiAKHkNhbmNlbFdvcmtzcGFjZURlbGV0aW9uUmVxdWVzdCJTCh9DYW5jZWxXb3Jrc3BhY2VEZWxldGlvblJlc3BvbnNlEjAKCXdvcmtzcGFjZRgBIAEoCzIdLnRvc2hpLndvcmtzcGFjZS52MS5Xb3Jrc3BhY2UiewoWVXBkYXRlV29ya3NwYWNlUmVxdWVzdBIwCgl3b3Jrc3BhY2UYASABKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlEi8KC3VwZGF0ZV9tYXNrGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayJLChdVcGRhdGVXb3Jrc3BhY2VSZXNwb25zZRIwCgl3b3Jrc3BhY2UYASABKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlIj4KFUxpc3RXb3Jrc3BhY2VzUmVxdWVzdBIRCglwYWdlX3NpemUYASABKAUSEgoKcGFnZV90b2tlbhgCIAEoCSJkChZMaXN0V29ya3NwYWNlc1Jlc3BvbnNlEjEKCndvcmtzcGFjZXMYASADKAsyHS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSIsChpHZXRXb3Jrc3BhY2VCaWxsaW5nUmVxdWVzdBIOCgZtb250aHMYASABKAUiVAobR2V0V29ya3NwYWNlQmlsbGluZ1Jlc3BvbnNlEjUKB2JpbGxpbmcYASABKAsyJC50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlQmlsbGluZyI6ChxHZXRXb3Jrc3BhY2VTdGF0ZW1lbnRSZXF1ZXN0Eg0KBW1vbnRoGAEgASgJEgsKA2NzdhgCIAEoCCJnCh1HZXRXb3Jrc3BhY2VTdGF0ZW1lbnRSZXNwb25zZRI5CglzdGF0ZW1lbnQYASABKAsyJi50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlU3RhdGVtZW50EgsKA2NzdhgCIAEoCSIkCiJHZXRXb3Jrc3BhY2VVcGNvbWluZ0ludm9pY2VSZXF1ZXN0ItsBCiNHZXRXb3Jrc3BhY2VVcGNvbWluZ0ludm9pY2VSZXNwb25zZRI0CgdpbnZvaWNlGAEgASgLMiMudG9zaGkud29ya3NwYWNlLnYxLlVwY29taW5nSW52b2ljZRIxCghwcm9qZWN0cxgCIAMoCzIfLnRvc2hpLndvcmtzcGFjZS52MS5Qcm9qZWN0Q29zdBIaChJtb250aF9zb19mYXJfY2VudHMYAyABKAMSHQoVZXN0aW1hdGVkX21vbnRoX2NlbnRzGAQgASgDEhAKCGN1cnJlbmN5GAUgASgJIuIBCg9VcGNvbWluZ0ludm9pY2USFAoMYW1vdW50X2NlbnRzGAEgASgDEhAKCGN1cnJlbmN5GAIgASgJEjAKDHBlcmlvZF9zdGFydBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKcGVyaW9kX2VuZBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMgoObWV0ZXJzX3JlYWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhEKCWF2YWlsYWJsZRgGIAEoCCJyCgtQcm9qZWN0Q29zdBISCgpwcm9qZWN0X2lkGAEgASgJEhQKDHByb2plY3RfbmFtZRgCIAEoCRIaChJtb250aF9zb19mYXJfY2VudHMYAyABKAMSHQoVZXN0aW1hdGVkX21vbnRoX2NlbnRzGAQgASgDIpECCgRTZWF0EgoKAmlkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSLwoLYXNzaWduZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKC2Fzc2lnbmVkX2J5GAQgASgLMhsudG9zaGkud29ya3NwYWNlLnYxLlN1YmplY3QSLgoKcmVtb3ZlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoKcmVtb3ZlZF9ieRgGIAEoCzIbLnRvc2hpLndvcmtzcGFjZS52MS5TdWJqZWN0EhAKCHJlcGxhY2VzGAcgASgJEhYKDnJlcGxhY2VfcmVhc29uGAggASgJIiEKEExpc3RTZWF0c1JlcXVlc3QSDQoFbW9udGgYASABKAkiPAoRTGlzdFNlYXRzUmVzcG9uc2USJwoFc2VhdHMYASADKAsyGC50b3NoaS53b3Jrc3BhY2UudjEuU2VhdCIkChFBc3NpZ25TZWF0UmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJIjwKEkFzc2lnblNlYXRSZXNwb25zZRImCgRzZWF0GAEgASgLMhgudG9zaGkud29ya3NwYWNlLnYxLlNlYXQiJAoRUmVtb3ZlU2VhdFJlcXVlc3QSDwoHc2VhdF9pZBgBIAEoCSI8ChJSZW1vdmVTZWF0UmVzcG9uc2USJgoEc2VhdBgBIAEoCzIYLnRvc2hpLndvcmtzcGFjZS52MS5TZWF0Ij0KFExpc3RFZ3Jlc3NJUHNSZXF1ZXN0EhEKCXBhZ2Vfc2l6ZRgBIAEoBRISCgpwYWdlX3Rva2VuGAIgASgJIn4KFUxpc3RFZ3Jlc3NJUHNSZXNwb25zZRILCgNpcHMYASADKAkSLQoFaG9zdHMYAiADKAsyHi50b3NoaS53b3Jrc3BhY2UudjEuRWdyZXNzSG9zdBIQCghjb21wbGV0ZRgDIAEoCBIXCg9uZXh0X3BhZ2VfdG9rZW4YBCABKAkiYwoPR2V0VXNhZ2VSZXF1ZXN0EigKBGZyb20YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCL3AQoQR2V0VXNhZ2VSZXNwb25zZRIqCgRyb3dzGAEgAygLMhwudG9zaGkud29ya3NwYWNlLnYxLlVzYWdlUm93EigKBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgZmaWxsZXIYBCABKAsyHy50b3NoaS53b3Jrc3BhY2UudjEuRmlsbGVyVXNhZ2USNAoHc3RvcmFnZRgFIAMoCzIjLnRvc2hpLndvcmtzcGFjZS52MS5TdG9yYWdlVXNhZ2VSb3ciaAoUR2V0UXVldWVUaW1lc1JlcXVlc3QSKAoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoCdG8YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIugBChVHZXRRdWV1ZVRpbWVzUmVzcG9uc2USDAoEam9icxgBIAEoAxIOCgZwNTBfbXMYAiABKAMSDgoGcDkwX21zGAMgASgDEg4KBm1heF9tcxgEIAEoAxISCgp3YXJtX3NoYXJlGAUgASgBEigKBGZyb20YBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgRoZWxkGAggAygLMh0udG9zaGkud29ya3NwYWNlLnYxLkhvbGRUaW1lcyJrChdHZXRXb3JrZmxvd1VzYWdlUmVxdWVzdBIoCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAioAEKGEdldFdvcmtmbG93VXNhZ2VSZXNwb25zZRIyCgRyb3dzGAEgAygLMiQudG9zaGkud29ya3NwYWNlLnYxLldvcmtmbG93VXNhZ2VSb3cSKAoEZnJvbRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjkKEExpc3RQbGFuc1JlcXVlc3QSEQoJcGFnZV9zaXplGAEgASgFEhIKCnBhZ2VfdG9rZW4YAiABKAkiVQoRTGlzdFBsYW5zUmVzcG9uc2USJwoFcGxhbnMYASADKAsyGC50b3NoaS53b3Jrc3BhY2UudjEuUGxhbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkiQAocQ3JlYXRlQ2hlY2tvdXRTZXNzaW9uUmVxdWVzdBIMCgRwbGFuGAEgASgJEhIKCnJldHVybl91cmwYAiABKAkiLAodQ3JlYXRlQ2hlY2tvdXRTZXNzaW9uUmVzcG9uc2USCwoDdXJsGAEgASgJIjcKIUNyZWF0ZUJpbGxpbmdQb3J0YWxTZXNzaW9uUmVxdWVzdBISCgpyZXR1cm5fdXJsGAEgASgJIjEKIkNyZWF0ZUJpbGxpbmdQb3J0YWxTZXNzaW9uUmVzcG9uc2USCwoDdXJsGAEgASgJIhMKEUdldFZlcnNpb25SZXF1ZXN0ImIKEkdldFZlcnNpb25SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEg4KBmNvbW1pdBgCIAEoCRIMCgRkYXRlGAMgASgJEh0KFW1pbmltdW1fYWdlbnRfdmVyc2lvbhgEIAEoCSKIDAoJV29ya3NwYWNlEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSHAoPY29uY3VycmVuY3lfY2FwGAMgASgFSACIAQESLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDAoEcGxhbhgFIAEoCRIdChVlZmZlY3RpdmVfY29uY3VycmVuY3kYBiABKAUSDgoGc3RhdHVzGAcgASgJEiMKG2VmZmVjdGl2ZV9tYXhfam9ic19wZXJfaG91chgLIAEoBRIcChRzdGFydGVyX2NyZWRpdF9jZW50cxgMIAEoAxI9ChlzdGFydGVyX2NyZWRpdF9ncmFudGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI1CgxyZXNlcnZhdGlvbnMYECADKAsyHy50b3NoaS53b3Jrc3BhY2UudjEuUmVzZXJ2YXRpb24SDQoFc3RhdGUYESABKAkSFAoMc3RhdGVfcmVhc29uGBIgASgJEi8KC3N0YXRlX3NpbmNlGBMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtwdXJnZV9hZnRlchgUIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEwoLZGVsZXRpb25fYnkYJyABKAkSHgoWaGlzdG9yeV9kYXlzX2VmZmVjdGl2ZRgWIAEoBRIcCg9zZWNyZXRfbWF4X3NldHMYGCABKAVIAYgBARIcCg9zZWNyZXRfbWF4X2tleXMYGSABKAVIAogBARIbCg5zZWNyZXRfbWF4X2tpYhgaIAEoA0gDiAEBEh4KEXByZXZpZXdfbWF4X3BvcnRzGBsgASgFSASIAQESIQoZc2VjcmV0X21heF9zZXRzX2VmZmVjdGl2ZRgcIAEoBRIhChlzZWNyZXRfbWF4X2tleXNfZWZmZWN0aXZlGB0gASgFEiAKGHNlY3JldF9tYXhfa2liX2VmZmVjdGl2ZRgeIAEoAxIjChtwcmV2aWV3X21heF9wb3J0c19lZmZlY3RpdmUYHyABKAUSNwoIc2V0dGluZ3MYISABKAsyJS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlU2V0dGluZ3MSDAoEZXRhZxgiIAEoCRJDChNob3N0aW5nX2NlcnRpZmljYXRlGCMgASgLMiYudG9zaGkud29ya3NwYWNlLnYxLkhvc3RpbmdDZXJ0aWZpY2F0ZRIdChVrZWVwX3ZtX21heF9lZmZlY3RpdmUYJCABKAUSPQoSa2VlcF92bV9tYXhfc291cmNlGCkgASgOMiEudG9zaGkud29ya3NwYWNlLnYxLkZlYXR1cmVTb3VyY2USFQoNa2VlcF92bV9jb3VudBglIAEoBRIiChprZWVwX3ZtX3N0b3BwZWRfbG9uZ19jb3VudBgmIAEoBRJFChFyZWNvcmRpbmdfY2hhbmdlZBgoIAEoCzIqLnRvc2hpLndvcmtzcGFjZS52MS5Xb3Jrc3BhY2VTZXR0aW5nQ2hhbmdlElEKHXJlY29yZGluZ19odW1hbl9zcGFuc19jaGFuZ2VkGCogASgLMioudG9zaGkud29ya3NwYWNlLnYxLldvcmtzcGFjZVNldHRpbmdDaGFuZ2VCEgoQX2NvbmN1cnJlbmN5X2NhcEISChBfc2VjcmV0X21heF9zZXRzQhIKEF9zZWNyZXRfbWF4X2tleXNCEQoPX3NlY3JldF9tYXhfa2liQhQKEl9wcmV2aWV3X21heF9wb3J0c0oECAgQCUoECAkQCkoECAoQC0oECA4QD0oECA8QEEoECBUQFkoECBcQGEoECCAQIVIOb3duX2hvc3RzX29ubHlSD3NwZW5kX2NhcF9jZW50c1IRbWF4X2pvYnNfcGVyX2hvdXJSDmFsbG93X292ZXJmbG93UhBhbGxvd19jYWNoZV93YXJtUgxoaXN0b3J5X2RheXNSFmNhbmNlbF9ydW5fb25fdm1fZGVhdGhSC21lbWJlcl9qb2luIvgBChJIb3N0aW5nQ2VydGlmaWNhdGUSDAoEbmFtZRgBIAEoCRI6CgVzdGF0ZRgCIAEoDjIrLnRvc2hpLndvcmtzcGFjZS52MS5Ib3N0aW5nQ2VydGlmaWNhdGVTdGF0ZRItCglub3RfYWZ0ZXIYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiwKCHJlbmV3X2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCghyZXRyeV9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFZXJyb3IYBiABKAki2QMKEVdvcmtzcGFjZVNldHRpbmdzEhMKC21lbWJlcl9qb2luGAEgASgJEkoKB3NpZ25faW4YAiABKAsyIy50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlU2lnbkluQhTa8xgQd29ya3NwYWNlLnNpZ25pbhIZCgxoaXN0b3J5X2RheXMYAyABKAVIAIgBARIWCg5vd25faG9zdHNfb25seRgEIAEoCBIWCg5hbGxvd19vdmVyZmxvdxgFIAEoCBIYChBhbGxvd19jYWNoZV93YXJtGAYgASgIEh4KFmNhbmNlbF9ydW5fb25fdm1fZGVhdGgYByABKAgSKgoPc3BlbmRfY2FwX2NlbnRzGAggASgDQhHa8xgNYmlsbGluZy53cml0ZRIsChFtYXhfam9ic19wZXJfaG91chgJIAEoBUIR2vMYDWJpbGxpbmcud3JpdGUSDwoHa2VlcF92bRgKIAEoCBIWCglyZWNvcmRpbmcYCyABKAhIAYgBARIiChVyZWNvcmRpbmdfaHVtYW5fc3BhbnMYDCABKAhIAogBAUIPCg1faGlzdG9yeV9kYXlzQgwKCl9yZWNvcmRpbmdCGAoWX3JlY29yZGluZ19odW1hbl9zcGFucyJ5ChZXb3Jrc3BhY2VTZXR0aW5nQ2hhbmdlEi8KCmNoYW5nZWRfYnkYASABKAsyGy50b3NoaS53b3Jrc3BhY2UudjEuU3ViamVjdBIuCgpjaGFuZ2VkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJvCg9Xb3Jrc3BhY2VTaWduSW4SEAoIcHJvdmlkZXIYASABKAkSDgoGaXNzdWVyGAIgASgJEg4KBnNldF9ieRgDIAEoCRIqCgZzZXRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIkgKC1Jlc2VydmF0aW9uEgwKBHNpemUYASABKAkSDQoFc2xvdHMYAiABKAUSDAoEd2FybRgDIAEoBRIOCgZzb3VyY2UYBCABKAkixwcKEFdvcmtzcGFjZUJpbGxpbmcSEwoLY3VzdG9tZXJfaWQYASABKAkSFwoPc3Vic2NyaXB0aW9uX2lkGAIgASgJEjYKEmJpbGxpbmdfc3RhcnRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTc3Vic2NyaXB0aW9uX3N0YXR1cxgEIAEoCRI9ChlzdWJzY3JpcHRpb25fc3RhdHVzX3NpbmNlGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCgZ0b3RhbHMYBiADKAsyIS50b3NoaS53b3Jrc3BhY2UudjEuQmlsbGluZ1RvdGFscxI+Cg1mYWlsZWRfZXZlbnRzGAcgAygLMicudG9zaGkud29ya3NwYWNlLnYxLkJpbGxpbmdFdmVudEZhaWx1cmUSGgoSbWludXRlc190aGlzX21vbnRoGAggASgDEh4KFmZyZWVfbWludXRlc19wZXJfbW9udGgYCSABKAMSFQoNY2FyZF92ZXJpZmllZBgKIAEoCBI0ChBjYXJkX3ZlcmlmaWVkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9zcGVuZF9jYXBfY2VudHMYDCABKAMSEwoLc3BlbmRfY2VudHMYDSABKAMSEwoLc3BlbmRfbGV2ZWwYDiABKAUSEAoIY3VycmVuY3kYDyABKAkSEwoLc3BlbmRfa25vd24YECABKAgSHAoUc3RhcnRlcl9jcmVkaXRfY2VudHMYESABKAMSIQoZc3RhcnRlcl9jcmVkaXRfbGVmdF9jZW50cxgSIAEoAxI9ChlzdGFydGVyX2NyZWRpdF9hcHBsaWVkX2F0GBMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9iaWxsaW5nX2VuYWJsZWQYFCABKAgSPwoIaGVsZF9ub3cYFSADKAsyLS50b3NoaS53b3Jrc3BhY2UudjEuV29ya3NwYWNlQmlsbGluZy5IZWxkSm9icxIYChBjb25jdXJyZW5jeV91c2VkGBYgASgDEiUKGGRlc2t0b3Bfc2VhdF9wcmljZV9jZW50cxgaIAEoA0gAiAEBGlMKCEhlbGRKb2JzEg4KBnJlYXNvbhgXIAEoCRIMCgRqb2JzGBggASgDEikKBXNpbmNlGBkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIbChlfZGVza3RvcF9zZWF0X3ByaWNlX2NlbnRzIrcBCg1CaWxsaW5nVG90YWxzEg0KBW1vbnRoGAEgASgJEgwKBHNpemUYAiABKAkSEwoLc2VudF9ldmVudHMYAyABKAMSFAoMc2VudF9taW51dGVzGAQgASgDEhYKDnBlbmRpbmdfZXZlbnRzGAUgASgDEhcKD3BlbmRpbmdfbWludXRlcxgGIAEoAxIVCg1mYWlsZWRfZXZlbnRzGAcgASgDEhYKDmZhaWxlZF9taW51dGVzGAggASgDIt4BChNCaWxsaW5nRXZlbnRGYWlsdXJlEg4KBmpvYl9pZBgBIAEoCRIMCgRzaXplGAIgASgJEhIKCmV2ZW50X25hbWUYAyABKAkSDwoHbWludXRlcxgEIAEoAxIvCgtvY2N1cnJlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJZmFpbGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIQCghhdHRlbXB0cxgHIAEoBRISCgpsYXN0X2Vycm9yGAggASgJIpgHChJXb3Jrc3BhY2VTdGF0ZW1lbnQSDQoFbW9udGgYASABKAkSKAoEZnJvbRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgwKBHBsYW4YBCABKAkSMQoFdXNhZ2UYBSADKAsyIi50b3NoaS53b3Jrc3BhY2UudjEuU3RhdGVtZW50VXNhZ2USMQoFdG90YWwYBiABKAsyIi50b3NoaS53b3Jrc3BhY2UudjEuU3RhdGVtZW50VXNhZ2USNAoHY2hhcmdlcxgHIAMoCzIjLnRvc2hpLndvcmtzcGFjZS52MS5TdGF0ZW1lbnRDaGFyZ2USFwoPZXN0aW1hdGVkX2NlbnRzGAggASgDEhAKCGN1cnJlbmN5GAkgASgJEhYKDmVzdGltYXRlX2tub3duGAogASgIEiQKHHN0YXJ0ZXJfY3JlZGl0X2FwcGxpZWRfY2VudHMYCyABKAMSPQoZc3RhcnRlcl9jcmVkaXRfYXBwbGllZF9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoEaGVsZBgNIAMoCzIdLnRvc2hpLndvcmtzcGFjZS52MS5Ib2xkVGltZXMSHQoVY3VycmVudF9wcmljZV9taW51dGVzGA4gASgDEi8KBmZpbGxlchgPIAEoCzIfLnRvc2hpLndvcmtzcGFjZS52MS5GaWxsZXJVc2FnZRIXCg9iaWxsaW5nX2VuYWJsZWQYECABKAgSOAoUc3BlbmRfY2FwX3JlYWNoZWRfYXQYESABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEh8KF3NwZW5kX2NhcF9yZWFjaGVkX2NlbnRzGBIgASgDEhcKD3NwZW5kX2NhcF9jZW50cxgTIAEoAxI0Cgxvd25faG9zdF9mZWUYFCABKAsyHi50b3NoaS53b3Jrc3BhY2UudjEuT3duSG9zdEZlZRIoCgVhd2FrZRgVIAMoCzIZLnRvc2hpLndvcmtzcGFjZS52MS5Bd2FrZRIsCgdzdG9yYWdlGBYgASgLMhsudG9zaGkud29ya3NwYWNlLnYxLlN0b3JhZ2USNwoNZGVza3RvcF9zZWF0cxgXIAEoCzIgLnRvc2hpLndvcmtzcGFjZS52MS5EZXNrdG9wU2VhdHMimwEKDERlc2t0b3BTZWF0cxIUCgxiaWxsZWRfc2VhdHMYASABKAMSGAoQc2VhdF9wcmljZV9jZW50cxgCIAEoAxIQCgh1bnByaWNlZBgDIAEoCBIXCg9lc3RpbWF0ZWRfY2VudHMYBCABKAMSMAoFc2VhdHMYBSADKAsyIS50b3NoaS53b3Jrc3BhY2UudjEuU3RhdGVtZW50U2VhdCLCAQoNU3RhdGVtZW50U2VhdBIPCgdzZWF0X2lkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSDAoEbmFtZRgDIAEoCRIvCgthc3NpZ25lZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKcmVtb3ZlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEAoIcmVwbGFjZXMYBiABKAkSDgoGYmlsbGVkGAcgASgIImQKCk93bkhvc3RGZWUSDwoHc2Vjb25kcxgBIAEoARIUCgxmcmVlX3NlY29uZHMYAiABKAMSFgoOYmlsbGVkX3NlY29uZHMYAyABKAMSFwoPZXN0aW1hdGVkX2NlbnRzGAQgASgDInsKBUF3YWtlEgwKBHNpemUYASABKAkSDAoEcnVucxgCIAEoAxIPCgdzZWNvbmRzGAMgASgBEhQKDGlkbGVfc2Vjb25kcxgEIAEoARIWCg5iaWxsZWRfc2Vjb25kcxgFIAEoAxIXCg9lc3RpbWF0ZWRfY2VudHMYBiABKAMiqwEKB1N0b3JhZ2USLQoFa2luZHMYASADKAsyHi50b3NoaS53b3Jrc3BhY2UudjEuU3RvcmVkS2luZBITCgtpbmNsdWRlZF9nYhgCIAEoAxIQCghnYl9ob3VycxgDIAEoARIXCg9leGNlc3NfZ2JfaG91cnMYBCABKAESGAoQYmlsbGVkX2diX21vbnRocxgFIAEoARIXCg9lc3RpbWF0ZWRfY2VudHMYBiABKAMiOwoKU3RvcmVkS2luZBIMCgRraW5kGAEgASgJEg0KBWJ5dGVzGAIgASgDEhAKCGdiX2hvdXJzGAMgASgBIk0KD1N0b3JhZ2VVc2FnZVJvdxILCgNkYXkYASABKAkSDAoEa2luZBgCIAEoCRIQCghnYl9ob3VycxgDIAEoARINCgVieXRlcxgEIAEoAyLtAQoOU3RhdGVtZW50VXNhZ2USDAoEc2l6ZRgBIAEoCRIKCgJvcxgCIAEoCRIMCgRqb2JzGAMgASgDEg8KB21pbnV0ZXMYBCABKAMSGAoQb3duX2hvc3RfbWludXRlcxgFIAEoAxIVCg1kZWJ1Z19taW51dGVzGAYgASgDEhgKEG92ZXJmbG93X21pbnV0ZXMYByABKAMSGwoTcmVzZXJ2ZWRfc2xvdF9ob3VycxgIIAEoAxIPCgdvdXRjb21lGAkgASgJEg8KB3NlY29uZHMYCiABKAESGAoQb3duX2hvc3Rfc2Vjb25kcxgLIAEoASJJCg9TdGF0ZW1lbnRDaGFyZ2USDAoEc2l6ZRgBIAEoCRIPCgdtaW51dGVzGAIgASgDEhcKD2VzdGltYXRlZF9jZW50cxgDIAEoAyKcAQoJSG9sZFRpbWVzEg4KBnJlYXNvbhgBIAEoCRIMCgRqb2JzGAIgASgDEg4KBnA1MF9tcxgDIAEoAxIOCgZwOTBfbXMYBCABKAMSDgoGbWF4X21zGAUgASgDEhEKCW9wZW5fam9icxgGIAEoAxIuCgpvcGVuX3NpbmNlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIsCgtGaWxsZXJVc2FnZRIMCgRqb2JzGAEgASgDEg8KB21pbnV0ZXMYAiABKAMiqQIKCFVzYWdlUm93EgsKA2RheRgBIAEoCRISCgpjb25jbHVzaW9uGAIgASgJEgwKBGpvYnMYAyABKAMSDwoHbWludXRlcxgEIAEoAxIYChBvd25faG9zdF9taW51dGVzGAUgASgDEhUKDWRlYnVnX21pbnV0ZXMYBiABKAMSGAoQb3ZlcmZsb3dfbWludXRlcxgHIAEoAxIbChNyZXNlcnZlZF9zbG90X2hvdXJzGAggASgDEg8KB291dGNvbWUYCSABKAkSDAoEa2luZBgKIAEoCRIPCgdzZWNvbmRzGAsgASgBEhgKEG93bl9ob3N0X3NlY29uZHMYDCABKAESFQoNYXdha2Vfc2Vjb25kcxgNIAEoARIUCgxpZGxlX3NlY29uZHMYDiABKAEixAEKEFdvcmtmbG93VXNhZ2VSb3cSEgoKcmVwb3NpdG9yeRgBIAEoCRIQCgh3b3JrZmxvdxgCIAEoCRIMCgRqb2JzGAMgASgDEg8KB21pbnV0ZXMYBCABKAMSGAoQb3duX2hvc3RfbWludXRlcxgFIAEoAxITCgtmYWlsZWRfam9icxgGIAEoAxISCgp0aW1lZF9qb2JzGAcgASgDEhMKC3A1MF9zZWNvbmRzGAggASgDEhMKC3A5NV9zZWNvbmRzGAkgASgDIpgDCgRQbGFuEgwKBG5hbWUYASABKAkSEwoLY29uY3VycmVuY3kYAiABKAUSFwoPbWF4X2pvYl9taW51dGVzGAMgASgFEhIKCmlzX2RlZmF1bHQYBCABKAgSEgoKc2VsZl9zZXJ2ZRgFIAEoCBISCgphbGxvd2VkX29zGAYgAygJEhAKCG1heF9zaXplGAcgASgJEhAKCG1heF92Y3B1GAggASgFEh4KFmZyZWVfbWludXRlc19wZXJfbW9udGgYCSABKAUSDQoFc2l6ZXMYCiADKAkSGQoRY2FyZF9yZXF1aXJlZF9mb3IYCyADKAkSGQoRbWF4X2pvYnNfcGVyX2hvdXIYDCABKAUSGAoQYnVyc3RfZ3VhcmRfam9icxgNIAEoBRIcChRzdGFydGVyX2NyZWRpdF9jZW50cxgOIAEoAxIUCgxoaXN0b3J5X2RheXMYDyABKAUSFQoNZGVidWdfbWludXRlcxgQIAEoBRIVCg1tYXhfb3duX2hvc3RzGBEgASgFEhMKC29wZW5fc291cmNlGBIgASgIIrcBCgpFZ3Jlc3NIb3N0Eg8KB2hvc3RfaWQYASABKAkSDAoEbmFtZRgCIAEoCRIOCgZzaGFyZWQYAyABKAgSLgoGZWdyZXNzGAQgASgLMh4udG9zaGkud29ya3NwYWNlLnYxLkhvc3RFZ3Jlc3MSEgoKcmVjZW50X2lwcxgFIAMoCRINCgVjbG91ZBgGIAEoCRIUCgxjbG91ZF9lZ3Jlc3MYByABKAkSEQoJY29uZmlybWVkGAggASgIKpYCChdIb3N0aW5nQ2VydGlmaWNhdGVTdGF0ZRIpCiVIT1NUSU5HX0NFUlRJRklDQVRFX1NUQVRFX1VOU1BFQ0lGSUVEEAASJQohSE9TVElOR19DRVJUSUZJQ0FURV9TVEFURV9JU1NVSU5HEAESKgomSE9TVElOR19DRVJUSUZJQ0FURV9TVEFURV9SQVRFX0xJTUlURUQQAhIjCh9IT1NUSU5HX0NFUlRJRklDQVRFX1NUQVRFX1ZBTElEEAMSLQopSE9TVElOR19DRVJUSUZJQ0FURV9TVEFURV9SRU5FV0FMX0ZBSUxJTkcQBBIpCiVIT1NUSU5HX0NFUlRJRklDQVRFX1NUQVRFX1NFTEZfU0lHTkVEEAUy+hQKEFdvcmtzcGFjZVNlcnZpY2USdQoMR2V0V29ya3NwYWNlEicudG9zaGkud29ya3NwYWNlLnYxLkdldFdvcmtzcGFjZVJlcXVlc3QaKC50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya3NwYWNlUmVzcG9uc2UiEsLzGA53b3Jrc3BhY2UucmVhZBKDAQoPVXBkYXRlV29ya3NwYWNlEioudG9zaGkud29ya3NwYWNlLnYxLlVwZGF0ZVdvcmtzcGFjZVJlcXVlc3QaKy50b3NoaS53b3Jrc3BhY2UudjEuVXBkYXRlV29ya3NwYWNlUmVzcG9uc2UiF8LzGA93b3Jrc3BhY2Uud3JpdGXg8xgBEnsKDkxpc3RXb3Jrc3BhY2VzEikudG9zaGkud29ya3NwYWNlLnYxLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdBoqLnRvc2hpLndvcmtzcGFjZS52MS5MaXN0V29ya3NwYWNlc1Jlc3BvbnNlIhLC8xgOd29ya3NwYWNlLnJlYWQSiAEKE0dldFdvcmtzcGFjZUJpbGxpbmcSLi50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya3NwYWNlQmlsbGluZ1JlcXVlc3QaLy50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya3NwYWNlQmlsbGluZ1Jlc3BvbnNlIhDC8xgMYmlsbGluZy5yZWFkEo4BChVHZXRXb3Jrc3BhY2VTdGF0ZW1lbnQSMC50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya3NwYWNlU3RhdGVtZW50UmVxdWVzdBoxLnRvc2hpLndvcmtzcGFjZS52MS5HZXRXb3Jrc3BhY2VTdGF0ZW1lbnRSZXNwb25zZSIQwvMYDGJpbGxpbmcucmVhZBKgAQobR2V0V29ya3NwYWNlVXBjb21pbmdJbnZvaWNlEjYudG9zaGkud29ya3NwYWNlLnYxLkdldFdvcmtzcGFjZVVwY29taW5nSW52b2ljZVJlcXVlc3QaNy50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya3NwYWNlVXBjb21pbmdJbnZvaWNlUmVzcG9uc2UiEMLzGAxiaWxsaW5nLnJlYWQSaAoJTGlzdFNlYXRzEiQudG9zaGkud29ya3NwYWNlLnYxLkxpc3RTZWF0c1JlcXVlc3QaJS50b3NoaS53b3Jrc3BhY2UudjEuTGlzdFNlYXRzUmVzcG9uc2UiDsLzGApzZWF0cy5yZWFkEpYBCgpBc3NpZ25TZWF0EiUudG9zaGkud29ya3NwYWNlLnYxLkFzc2lnblNlYXRSZXF1ZXN0GiYudG9zaGkud29ya3NwYWNlLnYxLkFzc2lnblNlYXRSZXNwb25zZSI5wvMYC3NlYXRzLndyaXRl0vMYJgoNc2VhdC5hc3NpZ25lZBIVc2VhdDpyZXNwb25zZS5zZWF0LmlkEn4KClJlbW92ZVNlYXQSJS50b3NoaS53b3Jrc3BhY2UudjEuUmVtb3ZlU2VhdFJlcXVlc3QaJi50b3NoaS53b3Jrc3BhY2UudjEuUmVtb3ZlU2VhdFJlc3BvbnNlIiHC8xgLc2VhdHMud3JpdGXS8xgOCgxzZWF0LnJlbW92ZWQSeAoNTGlzdEVncmVzc0lQcxIoLnRvc2hpLndvcmtzcGFjZS52MS5MaXN0RWdyZXNzSVBzUmVxdWVzdBopLnRvc2hpLndvcmtzcGFjZS52MS5MaXN0RWdyZXNzSVBzUmVzcG9uc2UiEsLzGA53b3Jrc3BhY2UucmVhZBJpCghHZXRVc2FnZRIjLnRvc2hpLndvcmtzcGFjZS52MS5HZXRVc2FnZVJlcXVlc3QaJC50b3NoaS53b3Jrc3BhY2UudjEuR2V0VXNhZ2VSZXNwb25zZSISwvMYDndvcmtzcGFjZS5yZWFkEngKDUdldFF1ZXVlVGltZXMSKC50b3NoaS53b3Jrc3BhY2UudjEuR2V0UXVldWVUaW1lc1JlcXVlc3QaKS50b3NoaS53b3Jrc3BhY2UudjEuR2V0UXVldWVUaW1lc1Jlc3BvbnNlIhLC8xgOd29ya3NwYWNlLnJlYWQSgQEKEEdldFdvcmtmbG93VXNhZ2USKy50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya2Zsb3dVc2FnZVJlcXVlc3QaLC50b3NoaS53b3Jrc3BhY2UudjEuR2V0V29ya2Zsb3dVc2FnZVJlc3BvbnNlIhLC8xgOd29ya3NwYWNlLnJlYWQSagoJTGlzdFBsYW5zEiQudG9zaGkud29ya3NwYWNlLnYxLkxpc3RQbGFuc1JlcXVlc3QaJS50b3NoaS53b3Jrc3BhY2UudjEuTGlzdFBsYW5zUmVzcG9uc2UiEMLzGAxiaWxsaW5nLnJlYWQSwQEKFUNyZWF0ZUNoZWNrb3V0U2Vzc2lvbhIwLnRvc2hpLndvcmtzcGFjZS52MS5DcmVhdGVDaGVja291dFNlc3Npb25SZXF1ZXN0GjEudG9zaGkud29ya3NwYWNlLnYxLkNyZWF0ZUNoZWNrb3V0U2Vzc2lvblJlc3BvbnNlIkPC8xgNYmlsbGluZy53cml0ZdLzGC4KF2JpbGxpbmcuY2hlY2tvdXRfb3BlbmVkEhN3b3Jrc3BhY2U6d29ya3NwYWNlEs4BChpDcmVhdGVCaWxsaW5nUG9ydGFsU2Vzc2lvbhI1LnRvc2hpLndvcmtzcGFjZS52MS5DcmVhdGVCaWxsaW5nUG9ydGFsU2Vzc2lvblJlcXVlc3QaNi50b3NoaS53b3Jrc3BhY2UudjEuQ3JlYXRlQmlsbGluZ1BvcnRhbFNlc3Npb25SZXNwb25zZSJBwvMYDWJpbGxpbmcud3JpdGXS8xgsChViaWxsaW5nLnBvcnRhbF9vcGVuZWQSE3dvcmtzcGFjZTp3b3Jrc3BhY2USbwoKR2V0VmVyc2lvbhIlLnRvc2hpLndvcmtzcGFjZS52MS5HZXRWZXJzaW9uUmVxdWVzdBomLnRvc2hpLndvcmtzcGFjZS52MS5HZXRWZXJzaW9uUmVzcG9uc2UiEsLzGA53b3Jrc3BhY2UucmVhZBKiAQoPRGVsZXRlV29ya3NwYWNlEioudG9zaGkud29ya3NwYWNlLnYxLkRlbGV0ZVdvcmtzcGFjZVJlcXVlc3QaKy50b3NoaS53b3Jrc3BhY2UudjEuRGVsZXRlV29ya3NwYWNlUmVzcG9uc2UiNsLzGBB3b3Jrc3BhY2UuZGVsZXRl0vMYHgocd29ya3NwYWNlLmRlbGV0aW9uX3NjaGVkdWxlZBKvAQoXQ2FuY2VsV29ya3NwYWNlRGVsZXRpb24SMi50b3NoaS53b3Jrc3BhY2UudjEuQ2FuY2VsV29ya3NwYWNlRGVsZXRpb25SZXF1ZXN0GjMudG9zaGkud29ya3NwYWNlLnYxLkNhbmNlbFdvcmtzcGFjZURlbGV0aW9uUmVzcG9uc2UiK8LzGBB3b3Jrc3BhY2UuZGVsZXRl0vMYEwoRd29ya3NwYWNlLnJlc3VtZWRCIlogZ28udG9zaGljbG91ZC5pby9hcGkvd29ya3NwYWNldjFiBnByb3RvMw", [file_google_protobuf_field_mask, file_google_protobuf_timestamp, file_toshi_permission, file_toshi_workspace_v1_discovery, file_toshi_workspace_v1_hosts, file_toshi_workspace_v1_roles]);
14
14
  /**
15
15
  * Describes the message toshi.workspace.v1.GetWorkspaceRequest.
16
16
  * Use `create(GetWorkspaceRequestSchema)` to create a new message.
@@ -81,251 +81,271 @@ export const GetWorkspaceStatementRequestSchema = /*@__PURE__*/ messageDesc(file
81
81
  * Use `create(GetWorkspaceStatementResponseSchema)` to create a new message.
82
82
  */
83
83
  export const GetWorkspaceStatementResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 13);
84
+ /**
85
+ * Describes the message toshi.workspace.v1.GetWorkspaceUpcomingInvoiceRequest.
86
+ * Use `create(GetWorkspaceUpcomingInvoiceRequestSchema)` to create a new message.
87
+ */
88
+ export const GetWorkspaceUpcomingInvoiceRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 14);
89
+ /**
90
+ * Describes the message toshi.workspace.v1.GetWorkspaceUpcomingInvoiceResponse.
91
+ * Use `create(GetWorkspaceUpcomingInvoiceResponseSchema)` to create a new message.
92
+ */
93
+ export const GetWorkspaceUpcomingInvoiceResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 15);
94
+ /**
95
+ * Describes the message toshi.workspace.v1.UpcomingInvoice.
96
+ * Use `create(UpcomingInvoiceSchema)` to create a new message.
97
+ */
98
+ export const UpcomingInvoiceSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 16);
99
+ /**
100
+ * Describes the message toshi.workspace.v1.ProjectCost.
101
+ * Use `create(ProjectCostSchema)` to create a new message.
102
+ */
103
+ export const ProjectCostSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 17);
84
104
  /**
85
105
  * Describes the message toshi.workspace.v1.Seat.
86
106
  * Use `create(SeatSchema)` to create a new message.
87
107
  */
88
- export const SeatSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 14);
108
+ export const SeatSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 18);
89
109
  /**
90
110
  * Describes the message toshi.workspace.v1.ListSeatsRequest.
91
111
  * Use `create(ListSeatsRequestSchema)` to create a new message.
92
112
  */
93
- export const ListSeatsRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 15);
113
+ export const ListSeatsRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 19);
94
114
  /**
95
115
  * Describes the message toshi.workspace.v1.ListSeatsResponse.
96
116
  * Use `create(ListSeatsResponseSchema)` to create a new message.
97
117
  */
98
- export const ListSeatsResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 16);
118
+ export const ListSeatsResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 20);
99
119
  /**
100
120
  * Describes the message toshi.workspace.v1.AssignSeatRequest.
101
121
  * Use `create(AssignSeatRequestSchema)` to create a new message.
102
122
  */
103
- export const AssignSeatRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 17);
123
+ export const AssignSeatRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 21);
104
124
  /**
105
125
  * Describes the message toshi.workspace.v1.AssignSeatResponse.
106
126
  * Use `create(AssignSeatResponseSchema)` to create a new message.
107
127
  */
108
- export const AssignSeatResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 18);
128
+ export const AssignSeatResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 22);
109
129
  /**
110
130
  * Describes the message toshi.workspace.v1.RemoveSeatRequest.
111
131
  * Use `create(RemoveSeatRequestSchema)` to create a new message.
112
132
  */
113
- export const RemoveSeatRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 19);
133
+ export const RemoveSeatRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 23);
114
134
  /**
115
135
  * Describes the message toshi.workspace.v1.RemoveSeatResponse.
116
136
  * Use `create(RemoveSeatResponseSchema)` to create a new message.
117
137
  */
118
- export const RemoveSeatResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 20);
138
+ export const RemoveSeatResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 24);
119
139
  /**
120
140
  * Describes the message toshi.workspace.v1.ListEgressIPsRequest.
121
141
  * Use `create(ListEgressIPsRequestSchema)` to create a new message.
122
142
  */
123
- export const ListEgressIPsRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 21);
143
+ export const ListEgressIPsRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 25);
124
144
  /**
125
145
  * Describes the message toshi.workspace.v1.ListEgressIPsResponse.
126
146
  * Use `create(ListEgressIPsResponseSchema)` to create a new message.
127
147
  */
128
- export const ListEgressIPsResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 22);
148
+ export const ListEgressIPsResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 26);
129
149
  /**
130
150
  * Describes the message toshi.workspace.v1.GetUsageRequest.
131
151
  * Use `create(GetUsageRequestSchema)` to create a new message.
132
152
  */
133
- export const GetUsageRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 23);
153
+ export const GetUsageRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 27);
134
154
  /**
135
155
  * Describes the message toshi.workspace.v1.GetUsageResponse.
136
156
  * Use `create(GetUsageResponseSchema)` to create a new message.
137
157
  */
138
- export const GetUsageResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 24);
158
+ export const GetUsageResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 28);
139
159
  /**
140
160
  * Describes the message toshi.workspace.v1.GetQueueTimesRequest.
141
161
  * Use `create(GetQueueTimesRequestSchema)` to create a new message.
142
162
  */
143
- export const GetQueueTimesRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 25);
163
+ export const GetQueueTimesRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 29);
144
164
  /**
145
165
  * Describes the message toshi.workspace.v1.GetQueueTimesResponse.
146
166
  * Use `create(GetQueueTimesResponseSchema)` to create a new message.
147
167
  */
148
- export const GetQueueTimesResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 26);
168
+ export const GetQueueTimesResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 30);
149
169
  /**
150
170
  * Describes the message toshi.workspace.v1.GetWorkflowUsageRequest.
151
171
  * Use `create(GetWorkflowUsageRequestSchema)` to create a new message.
152
172
  */
153
- export const GetWorkflowUsageRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 27);
173
+ export const GetWorkflowUsageRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 31);
154
174
  /**
155
175
  * Describes the message toshi.workspace.v1.GetWorkflowUsageResponse.
156
176
  * Use `create(GetWorkflowUsageResponseSchema)` to create a new message.
157
177
  */
158
- export const GetWorkflowUsageResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 28);
178
+ export const GetWorkflowUsageResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 32);
159
179
  /**
160
180
  * Describes the message toshi.workspace.v1.ListPlansRequest.
161
181
  * Use `create(ListPlansRequestSchema)` to create a new message.
162
182
  */
163
- export const ListPlansRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 29);
183
+ export const ListPlansRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 33);
164
184
  /**
165
185
  * Describes the message toshi.workspace.v1.ListPlansResponse.
166
186
  * Use `create(ListPlansResponseSchema)` to create a new message.
167
187
  */
168
- export const ListPlansResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 30);
188
+ export const ListPlansResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 34);
169
189
  /**
170
190
  * Describes the message toshi.workspace.v1.CreateCheckoutSessionRequest.
171
191
  * Use `create(CreateCheckoutSessionRequestSchema)` to create a new message.
172
192
  */
173
- export const CreateCheckoutSessionRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 31);
193
+ export const CreateCheckoutSessionRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 35);
174
194
  /**
175
195
  * Describes the message toshi.workspace.v1.CreateCheckoutSessionResponse.
176
196
  * Use `create(CreateCheckoutSessionResponseSchema)` to create a new message.
177
197
  */
178
- export const CreateCheckoutSessionResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 32);
198
+ export const CreateCheckoutSessionResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 36);
179
199
  /**
180
200
  * Describes the message toshi.workspace.v1.CreateBillingPortalSessionRequest.
181
201
  * Use `create(CreateBillingPortalSessionRequestSchema)` to create a new message.
182
202
  */
183
- export const CreateBillingPortalSessionRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 33);
203
+ export const CreateBillingPortalSessionRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 37);
184
204
  /**
185
205
  * Describes the message toshi.workspace.v1.CreateBillingPortalSessionResponse.
186
206
  * Use `create(CreateBillingPortalSessionResponseSchema)` to create a new message.
187
207
  */
188
- export const CreateBillingPortalSessionResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 34);
208
+ export const CreateBillingPortalSessionResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 38);
189
209
  /**
190
210
  * Describes the message toshi.workspace.v1.GetVersionRequest.
191
211
  * Use `create(GetVersionRequestSchema)` to create a new message.
192
212
  */
193
- export const GetVersionRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 35);
213
+ export const GetVersionRequestSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 39);
194
214
  /**
195
215
  * Describes the message toshi.workspace.v1.GetVersionResponse.
196
216
  * Use `create(GetVersionResponseSchema)` to create a new message.
197
217
  */
198
- export const GetVersionResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 36);
218
+ export const GetVersionResponseSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 40);
199
219
  /**
200
220
  * Describes the message toshi.workspace.v1.Workspace.
201
221
  * Use `create(WorkspaceSchema)` to create a new message.
202
222
  */
203
- export const WorkspaceSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 37);
223
+ export const WorkspaceSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 41);
204
224
  /**
205
225
  * Describes the message toshi.workspace.v1.HostingCertificate.
206
226
  * Use `create(HostingCertificateSchema)` to create a new message.
207
227
  */
208
- export const HostingCertificateSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 38);
228
+ export const HostingCertificateSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 42);
209
229
  /**
210
230
  * Describes the message toshi.workspace.v1.WorkspaceSettings.
211
231
  * Use `create(WorkspaceSettingsSchema)` to create a new message.
212
232
  */
213
- export const WorkspaceSettingsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 39);
233
+ export const WorkspaceSettingsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 43);
214
234
  /**
215
235
  * Describes the message toshi.workspace.v1.WorkspaceSettingChange.
216
236
  * Use `create(WorkspaceSettingChangeSchema)` to create a new message.
217
237
  */
218
- export const WorkspaceSettingChangeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 40);
238
+ export const WorkspaceSettingChangeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 44);
219
239
  /**
220
240
  * Describes the message toshi.workspace.v1.WorkspaceSignIn.
221
241
  * Use `create(WorkspaceSignInSchema)` to create a new message.
222
242
  */
223
- export const WorkspaceSignInSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 41);
243
+ export const WorkspaceSignInSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 45);
224
244
  /**
225
245
  * Describes the message toshi.workspace.v1.Reservation.
226
246
  * Use `create(ReservationSchema)` to create a new message.
227
247
  */
228
- export const ReservationSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 42);
248
+ export const ReservationSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 46);
229
249
  /**
230
250
  * Describes the message toshi.workspace.v1.WorkspaceBilling.
231
251
  * Use `create(WorkspaceBillingSchema)` to create a new message.
232
252
  */
233
- export const WorkspaceBillingSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 43);
253
+ export const WorkspaceBillingSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 47);
234
254
  /**
235
255
  * Describes the message toshi.workspace.v1.WorkspaceBilling.HeldJobs.
236
256
  * Use `create(WorkspaceBilling_HeldJobsSchema)` to create a new message.
237
257
  */
238
- export const WorkspaceBilling_HeldJobsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 43, 0);
258
+ export const WorkspaceBilling_HeldJobsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 47, 0);
239
259
  /**
240
260
  * Describes the message toshi.workspace.v1.BillingTotals.
241
261
  * Use `create(BillingTotalsSchema)` to create a new message.
242
262
  */
243
- export const BillingTotalsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 44);
263
+ export const BillingTotalsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 48);
244
264
  /**
245
265
  * Describes the message toshi.workspace.v1.BillingEventFailure.
246
266
  * Use `create(BillingEventFailureSchema)` to create a new message.
247
267
  */
248
- export const BillingEventFailureSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 45);
268
+ export const BillingEventFailureSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 49);
249
269
  /**
250
270
  * Describes the message toshi.workspace.v1.WorkspaceStatement.
251
271
  * Use `create(WorkspaceStatementSchema)` to create a new message.
252
272
  */
253
- export const WorkspaceStatementSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 46);
273
+ export const WorkspaceStatementSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 50);
254
274
  /**
255
275
  * Describes the message toshi.workspace.v1.DesktopSeats.
256
276
  * Use `create(DesktopSeatsSchema)` to create a new message.
257
277
  */
258
- export const DesktopSeatsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 47);
278
+ export const DesktopSeatsSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 51);
259
279
  /**
260
280
  * Describes the message toshi.workspace.v1.StatementSeat.
261
281
  * Use `create(StatementSeatSchema)` to create a new message.
262
282
  */
263
- export const StatementSeatSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 48);
283
+ export const StatementSeatSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 52);
264
284
  /**
265
285
  * Describes the message toshi.workspace.v1.OwnHostFee.
266
286
  * Use `create(OwnHostFeeSchema)` to create a new message.
267
287
  */
268
- export const OwnHostFeeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 49);
288
+ export const OwnHostFeeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 53);
269
289
  /**
270
290
  * Describes the message toshi.workspace.v1.Awake.
271
291
  * Use `create(AwakeSchema)` to create a new message.
272
292
  */
273
- export const AwakeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 50);
293
+ export const AwakeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 54);
274
294
  /**
275
295
  * Describes the message toshi.workspace.v1.Storage.
276
296
  * Use `create(StorageSchema)` to create a new message.
277
297
  */
278
- export const StorageSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 51);
298
+ export const StorageSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 55);
279
299
  /**
280
300
  * Describes the message toshi.workspace.v1.StoredKind.
281
301
  * Use `create(StoredKindSchema)` to create a new message.
282
302
  */
283
- export const StoredKindSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 52);
303
+ export const StoredKindSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 56);
284
304
  /**
285
305
  * Describes the message toshi.workspace.v1.StorageUsageRow.
286
306
  * Use `create(StorageUsageRowSchema)` to create a new message.
287
307
  */
288
- export const StorageUsageRowSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 53);
308
+ export const StorageUsageRowSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 57);
289
309
  /**
290
310
  * Describes the message toshi.workspace.v1.StatementUsage.
291
311
  * Use `create(StatementUsageSchema)` to create a new message.
292
312
  */
293
- export const StatementUsageSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 54);
313
+ export const StatementUsageSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 58);
294
314
  /**
295
315
  * Describes the message toshi.workspace.v1.StatementCharge.
296
316
  * Use `create(StatementChargeSchema)` to create a new message.
297
317
  */
298
- export const StatementChargeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 55);
318
+ export const StatementChargeSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 59);
299
319
  /**
300
320
  * Describes the message toshi.workspace.v1.HoldTimes.
301
321
  * Use `create(HoldTimesSchema)` to create a new message.
302
322
  */
303
- export const HoldTimesSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 56);
323
+ export const HoldTimesSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 60);
304
324
  /**
305
325
  * Describes the message toshi.workspace.v1.FillerUsage.
306
326
  * Use `create(FillerUsageSchema)` to create a new message.
307
327
  */
308
- export const FillerUsageSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 57);
328
+ export const FillerUsageSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 61);
309
329
  /**
310
330
  * Describes the message toshi.workspace.v1.UsageRow.
311
331
  * Use `create(UsageRowSchema)` to create a new message.
312
332
  */
313
- export const UsageRowSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 58);
333
+ export const UsageRowSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 62);
314
334
  /**
315
335
  * Describes the message toshi.workspace.v1.WorkflowUsageRow.
316
336
  * Use `create(WorkflowUsageRowSchema)` to create a new message.
317
337
  */
318
- export const WorkflowUsageRowSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 59);
338
+ export const WorkflowUsageRowSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 63);
319
339
  /**
320
340
  * Describes the message toshi.workspace.v1.Plan.
321
341
  * Use `create(PlanSchema)` to create a new message.
322
342
  */
323
- export const PlanSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 60);
343
+ export const PlanSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 64);
324
344
  /**
325
345
  * Describes the message toshi.workspace.v1.EgressHost.
326
346
  * Use `create(EgressHostSchema)` to create a new message.
327
347
  */
328
- export const EgressHostSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 61);
348
+ export const EgressHostSchema = /*@__PURE__*/ messageDesc(file_toshi_workspace_v1_workspace_service, 65);
329
349
  /**
330
350
  * @generated from enum toshi.workspace.v1.HostingCertificateState
331
351
  */
package/dist/retry.js CHANGED
@@ -67,6 +67,10 @@ const procedureRetryClass = {
67
67
  "/toshi.workspace.v1.WorkloadService/StopService": "keyed",
68
68
  "/toshi.workspace.v1.WorkloadService/SetServiceMode": "keyed",
69
69
  "/toshi.workspace.v1.WorkloadService/WakeService": "keyed",
70
+ // Operator-only, and neither takes a request key: a lost answer is reported
71
+ // rather than repeated.
72
+ "/toshi.workspace.v1.WorkloadService/HoldWorkload": "none",
73
+ "/toshi.workspace.v1.WorkloadService/ReleaseWorkload": "none",
70
74
  "/toshi.workspace.v1.WorkloadService/HoldService": "keyed",
71
75
  "/toshi.workspace.v1.WorkloadService/ReleaseService": "keyed",
72
76
  "/toshi.workspace.v1.WorkloadService/ListServiceRevisions": "read",
@@ -177,6 +181,7 @@ const procedureRetryClass = {
177
181
  "/toshi.workspace.v1.WorkspaceService/ListWorkspaces": "read",
178
182
  "/toshi.workspace.v1.WorkspaceService/GetWorkspaceBilling": "read",
179
183
  "/toshi.workspace.v1.WorkspaceService/GetWorkspaceStatement": "read",
184
+ "/toshi.workspace.v1.WorkspaceService/GetWorkspaceUpcomingInvoice": "read",
180
185
  "/toshi.workspace.v1.WorkspaceService/ListEgressIPs": "read",
181
186
  "/toshi.workspace.v1.WorkspaceService/GetUsage": "read",
182
187
  "/toshi.workspace.v1.WorkspaceService/GetQueueTimes": "read",
@@ -0,0 +1,29 @@
1
+ import type { DeleteServiceAlarmRequest, DeleteServiceAlarmResponse, GetServiceAlarmRequest, GetServiceAlarmResponse, ListServiceAlarmsRequest, ListServiceAlarmsResponse, PauseServiceAlarmRequest, PauseServiceAlarmResponse, ResumeServiceAlarmRequest, ResumeServiceAlarmResponse, RunServiceAlarmNowRequest, RunServiceAlarmNowResponse, SetServiceAlarmRequest, SetServiceAlarmResponse } from "../gen/toshi/workspace/v1/workloads_pb.js";
2
+ /**
3
+ * The alarms the fake keeps for any service ID: the fake holds no services. It
4
+ * has no clock, so an alarm publishes nothing on its own and a cron alarm has
5
+ * no next instant.
6
+ */
7
+ export declare class AlarmStore {
8
+ private readonly alarms;
9
+ private readonly runs;
10
+ /** Creates the alarm at generation 1, or replaces it at the next generation, resumed. */
11
+ set(request: SetServiceAlarmRequest): SetServiceAlarmResponse;
12
+ /** Returns the alarm and its most recent occurrences, newest first. */
13
+ get(request: GetServiceAlarmRequest): GetServiceAlarmResponse;
14
+ /** Returns every alarm of the service, by name. */
15
+ list(request: ListServiceAlarmsRequest): ListServiceAlarmsResponse;
16
+ /** Removes an alarm and its occurrences. */
17
+ delete(request: DeleteServiceAlarmRequest): DeleteServiceAlarmResponse;
18
+ /** Pauses an alarm; pausing a paused alarm changes nothing. */
19
+ pause(request: PauseServiceAlarmRequest): PauseServiceAlarmResponse;
20
+ /** Resumes an alarm; resuming a running alarm changes nothing. */
21
+ resume(request: ResumeServiceAlarmRequest): ResumeServiceAlarmResponse;
22
+ /**
23
+ * Records a manual occurrence at the alarm's generation. A request key the
24
+ * fake has already answered returns the same occurrence.
25
+ */
26
+ runNow(request: RunServiceAlarmNowRequest): RunServiceAlarmNowResponse;
27
+ /** Returns the alarm of a service with this name. */
28
+ private alarm;
29
+ }
@@ -0,0 +1,144 @@
1
+ import { clone, create } from "@bufbuild/protobuf";
2
+ import { DurationSchema, TimestampSchema } from "@bufbuild/protobuf/wkt";
3
+ import { Code, ConnectError } from "@connectrpc/connect";
4
+ import { DeleteServiceAlarmResponseSchema, GetServiceAlarmResponseSchema, ListServiceAlarmsResponseSchema, PauseServiceAlarmResponseSchema, ResumeServiceAlarmResponseSchema, RunServiceAlarmNowResponseSchema, ServiceAlarmMisfire, ServiceAlarmOccurrenceSchema, ServiceAlarmSchema, SetServiceAlarmResponseSchema, } from "../gen/toshi/workspace/v1/workloads_pb.js";
5
+ /** How late a missed instant may be published when SetServiceAlarm names no deadline. */
6
+ const defaultStartingDeadline = create(DurationSchema, { seconds: 600n });
7
+ /** How many occurrences GetServiceAlarm returns. */
8
+ const maxOccurrences = 20;
9
+ /**
10
+ * The alarms the fake keeps for any service ID: the fake holds no services. It
11
+ * has no clock, so an alarm publishes nothing on its own and a cron alarm has
12
+ * no next instant.
13
+ */
14
+ export class AlarmStore {
15
+ alarms = new Map();
16
+ runs = new Map();
17
+ /** Creates the alarm at generation 1, or replaces it at the next generation, resumed. */
18
+ set(request) {
19
+ const alarm = create(ServiceAlarmSchema, {
20
+ name: request.name,
21
+ timezone: request.timezone,
22
+ channel: request.channel,
23
+ event: request.event,
24
+ data: request.data.slice(),
25
+ misfire: request.misfire,
26
+ startingDeadline: clone(DurationSchema, request.startingDeadline ?? defaultStartingDeadline),
27
+ generation: 1n,
28
+ });
29
+ switch (request.schedule.case) {
30
+ case "cron":
31
+ alarm.schedule = { case: "cron", value: request.schedule.value };
32
+ break;
33
+ case "at":
34
+ alarm.schedule = { case: "at", value: clone(TimestampSchema, request.schedule.value) };
35
+ alarm.nextAt = clone(TimestampSchema, request.schedule.value);
36
+ break;
37
+ }
38
+ if (alarm.misfire === ServiceAlarmMisfire.UNSPECIFIED) {
39
+ alarm.misfire = ServiceAlarmMisfire.COALESCE;
40
+ }
41
+ const key = alarmKey(request.serviceId, request.name);
42
+ const held = this.alarms.get(key);
43
+ if (held === undefined) {
44
+ this.alarms.set(key, {
45
+ serviceId: request.serviceId,
46
+ name: request.name,
47
+ alarm,
48
+ occurrences: [],
49
+ });
50
+ }
51
+ else {
52
+ alarm.generation = held.alarm.generation + 1n;
53
+ held.alarm = alarm;
54
+ }
55
+ return create(SetServiceAlarmResponseSchema, { alarm: clone(ServiceAlarmSchema, alarm) });
56
+ }
57
+ /** Returns the alarm and its most recent occurrences, newest first. */
58
+ get(request) {
59
+ const record = this.alarm(request.serviceId, request.name);
60
+ return create(GetServiceAlarmResponseSchema, {
61
+ alarm: clone(ServiceAlarmSchema, record.alarm),
62
+ occurrences: record.occurrences
63
+ .slice(0, maxOccurrences)
64
+ .map((occurrence) => clone(ServiceAlarmOccurrenceSchema, occurrence)),
65
+ });
66
+ }
67
+ /** Returns every alarm of the service, by name. */
68
+ list(request) {
69
+ const alarms = [];
70
+ for (const record of this.alarms.values()) {
71
+ if (record.serviceId === request.serviceId) {
72
+ alarms.push(clone(ServiceAlarmSchema, record.alarm));
73
+ }
74
+ }
75
+ alarms.sort((a, b) => compareNames(a.name, b.name));
76
+ return create(ListServiceAlarmsResponseSchema, { alarms });
77
+ }
78
+ /** Removes an alarm and its occurrences. */
79
+ delete(request) {
80
+ this.alarm(request.serviceId, request.name);
81
+ this.alarms.delete(alarmKey(request.serviceId, request.name));
82
+ return create(DeleteServiceAlarmResponseSchema, {});
83
+ }
84
+ /** Pauses an alarm; pausing a paused alarm changes nothing. */
85
+ pause(request) {
86
+ const record = this.alarm(request.serviceId, request.name);
87
+ record.alarm.paused = true;
88
+ return create(PauseServiceAlarmResponseSchema, { alarm: clone(ServiceAlarmSchema, record.alarm) });
89
+ }
90
+ /** Resumes an alarm; resuming a running alarm changes nothing. */
91
+ resume(request) {
92
+ const record = this.alarm(request.serviceId, request.name);
93
+ record.alarm.paused = false;
94
+ return create(ResumeServiceAlarmResponseSchema, { alarm: clone(ServiceAlarmSchema, record.alarm) });
95
+ }
96
+ /**
97
+ * Records a manual occurrence at the alarm's generation. A request key the
98
+ * fake has already answered returns the same occurrence.
99
+ */
100
+ runNow(request) {
101
+ if (request.requestKey !== "") {
102
+ const answered = this.runs.get(request.requestKey);
103
+ if (answered !== undefined) {
104
+ return create(RunServiceAlarmNowResponseSchema, {
105
+ occurrence: clone(ServiceAlarmOccurrenceSchema, answered),
106
+ });
107
+ }
108
+ }
109
+ const record = this.alarm(request.serviceId, request.name);
110
+ const occurrence = create(ServiceAlarmOccurrenceSchema, {
111
+ generation: record.alarm.generation,
112
+ manual: true,
113
+ });
114
+ record.occurrences.unshift(occurrence);
115
+ if (request.requestKey !== "") {
116
+ this.runs.set(request.requestKey, occurrence);
117
+ }
118
+ return create(RunServiceAlarmNowResponseSchema, { occurrence: clone(ServiceAlarmOccurrenceSchema, occurrence) });
119
+ }
120
+ /** Returns the alarm of a service with this name. */
121
+ alarm(serviceId, name) {
122
+ const record = this.alarms.get(alarmKey(serviceId, name));
123
+ if (record === undefined) {
124
+ throw new ConnectError(`toshi: no alarm "${serviceId}/${name}"`, Code.NotFound);
125
+ }
126
+ return record;
127
+ }
128
+ }
129
+ /** The map key of one alarm: its service and its name. */
130
+ function alarmKey(serviceId, name) {
131
+ return JSON.stringify([serviceId, name]);
132
+ }
133
+ /** Compares two names by the bytes of their UTF-8 encoding, as Go's strings.Compare does. */
134
+ function compareNames(a, b) {
135
+ const left = new TextEncoder().encode(a);
136
+ const right = new TextEncoder().encode(b);
137
+ const shared = Math.min(left.length, right.length);
138
+ for (let index = 0; index < shared; index += 1) {
139
+ if (left[index] !== right[index]) {
140
+ return left[index] < right[index] ? -1 : 1;
141
+ }
142
+ }
143
+ return left.length - right.length;
144
+ }