@githolon/runtime 0.112.11 → 0.113.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.
- package/dist/RUNTIME-SOURCES.sha256 +21 -21
- package/dist/application-reception.js +1 -1
- package/dist/nomos-native-runtime.js +457 -35
- package/dist/nomos-runner-web.js +44 -3
- package/dist/nomos-runner-worker.js +788 -79
- package/dist/nomos-runner.js +601 -68
- package/dist/remote-reception.cjs +3 -3
- package/dist/remote-reception.js +3 -3
- package/dist/typescript-application-desk.js +3 -3
- package/package.json +1 -1
- package/runner/build.ts +23 -11
- package/runner/node-entry.mjs +493 -37
- package/src/protocol/nomos/kernel/v1/kernel_pb.d.ts +13 -0
- package/src/protocol/nomos/kernel/v1/kernel_pb.js +1 -1
- package/src/protocol/nomos/runtime/v2/correspondence_desk_pb.d.ts +45 -1
- package/src/protocol/nomos/runtime/v2/correspondence_desk_pb.js +30 -23
- package/src/protocol/nomos/runtime/v2/observability_desk_pb.d.ts +13 -0
- package/src/protocol/nomos/runtime/v2/observability_desk_pb.js +1 -1
|
@@ -7599,7 +7599,7 @@
|
|
|
7599
7599
|
// ../../adapter/proto/nomos/kernel/v1/kernel_pb.js
|
|
7600
7600
|
init_define_NOMOS_KERNEL_RELEASE();
|
|
7601
7601
|
init_shims();
|
|
7602
|
-
var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIp0ECg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCEINCgtfaW50ZW50X291dEIPCg1fa2VybmVsX3NwYW5zQhUKE19pbnN0YWxsZWRfbGF3X2hhc2hCDAoKX3BsYWNlbWVudCItChFPZmZlckFnZ3JlZ2F0ZVJlZhIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJIjAKDUJvcm5Xb3Jrc3BhY2USEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkiywMKDEJpcnRoT3V0Y29tZRIWCgl3b3Jrc3BhY2UYASABKAlIAIgBARIzCgZzdGF0dXMYAiABKA4yIy5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lU3RhdHVzEhMKBnJlYXNvbhgDIAEoCUgBiAEBEhEKBGNvZGUYBCABKAlIAogBARIQCghyZXBsYXllZBgFIAEoCBIVCghsYXdfaGFzaBgGIAEoCUgDiAEBEh0KEHBhcmVudF93b3Jrc3BhY2UYByABKAlIBIgBARIcCg9jaGlsZF93b3Jrc3BhY2UYCCABKAlIBYgBARInChpjZXJ0aWZpY2F0ZV9yZWZ1c2FsX3JlYXNvbhgJIAEoCUgGiAEBEjQKB3JlZnVzYWwYCiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgHiAEBQgwKCl93b3Jrc3BhY2VCCQoHX3JlYXNvbkIHCgVfY29kZUILCglfbGF3X2hhc2hCEwoRX3BhcmVudF93b3Jrc3BhY2VCEgoQX2NoaWxkX3dvcmtzcGFjZUIdChtfY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb25CCgoIX3JlZnVzYWwiLwoQS2VybmVsU3Bhbk1ldHJpYxIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgEIqMBCgpLZXJuZWxTcGFuEg0KBWxhYmVsGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEEg8KB3JlY29yZHMYAyABKAQSMQoGcGhhc2VzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMSMAoFbm90ZXMYBSADKAsyIS5ub21vcy5rZXJuZWwudjEuS2VybmVsU3Bhbk1ldHJpYyJxCgtLZXJuZWxTcGFucxIvCgpvcGVyYXRpb25zGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW4SMQoGZW5naW5lGAIgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMiYQoNRG9tYWluUmVmdXNhbBISCgpsYXdfc2hhMjU2GAEgASgMEhEKCWludmFyaWFudBgCIAEoCRIVCg10eXBlX2lkZW50aXR5GAMgASgJEhIKCnZhbHVlX3VzZGEYBCABKAwizgEKDE9mZmVyUmVmdXNlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEi8KB3JlZnVzYWwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbBIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBI2Cg5kb21haW5fcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5Eb21haW5SZWZ1c2FsQgsKCV9vZmZlcl9pZCJ6ChFPZmZlckRlYWRMZXR0ZXJlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQirgEKEE9mZmVyUXVhcmFudGluZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEg4KBnJlYXNvbhgEIAEoCRIxCgtkaWFnbm9zdGljcxgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQigQEKGE9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeRIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBmRldGFpbBgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQivwEKDU9mZmVyUHJlcGFyZWQSHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRIhChlhdXRob3Jfc2lnbmF0dXJlX3JlcXVpcmVkGAQgASgIEjgKCGRldGFjaGVkGAUgASgLMiYubm9tb3Mua2VybmVsLnYxLkRldGFjaGVkU2lnbmluZ0lucHV0cyJjChVEZXRhY2hlZFNpZ25pbmdJbnB1dHMSEgoKcHVibGljX2tleRgBIAEoDBIRCglpbnRlbnRfaWQYAiABKAkSDgoGYXV0aG9yGAMgASgMEhMKC29mZmVyX3Rva2VuGAQgASgJIpUBChREZXRhY2hlZFNpZ25lZENoYW5nZRIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMEhgKEGF1dGhvcl9zaWduYXR1cmUYAyABKAwSEgoKb2ZmZXJfYmFzZRgEIAEoCRIdChVvZmZlcl90b2tlbl9zaWduYXR1cmUYBSABKAwiagoYU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0EhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhUKDWF1dGhvcl9zZWNyZXQYAyABKAwiNwoZU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZRIaChJzaWduZWRfY2hhbmdlX3VzZGEYASABKAwirQEKGVByZXBhcmVSZW1vdGVPZmZlclJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhIKCnB1YmxpY19rZXkYBCABKAwSEQoJc2lnbmF0dXJlGAUgASgMEh0KFXJlcXVpcmVkX2N1c3RvZHlfaGVhZBgGIAEoCSJQChlPZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAEgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAiABKAkimQEKGlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlEj8KCWNoYWxsZW5nZRgBIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5PZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlSAASLwoFb2ZmZXIYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAQgkKB291dGNvbWUigAEKG1NpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdBIVCg1vZmZlcl9yZXF1ZXN0GAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDCJFChxTaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlEhIKCnB1YmxpY19rZXkYASABKAwSEQoJc2lnbmF0dXJlGAIgASgMIqQBChZTaWduaW5nSWRlbnRpdHlSZXF1ZXN0EjsKCGdlbmVyYXRlGAEgASgLMicubm9tb3Mua2VybmVsLnYxLkdlbmVyYXRlU2lnbmluZ0tleVBhaXJIABJACg1kZXJpdmVfcHVibGljGAIgASgLMicubm9tb3Mua2VybmVsLnYxLkRlcml2ZVNpZ25pbmdQdWJsaWNLZXlIAEILCglvcGVyYXRpb24iGAoWR2VuZXJhdGVTaWduaW5nS2V5UGFpciIoChZEZXJpdmVTaWduaW5nUHVibGljS2V5Eg4KBnNlY3JldBgBIAEoDCKWAQoXU2lnbmluZ0lkZW50aXR5UmVzcG9uc2USNAoJZ2VuZXJhdGVkGAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdLZXlQYWlySAASOwoOZGVyaXZlZF9wdWJsaWMYAiABKAsyIS5ub21vcy5rZXJuZWwudjEuU2lnbmluZ1B1YmxpY0tleUgAQggKBnJlc3VsdCI0Cg5TaWduaW5nS2V5UGFpchIOCgZzZWNyZXQYASABKAwSEgoKcHVibGljX2tleRgCIAEoDCImChBTaWduaW5nUHVibGljS2V5EhIKCnB1YmxpY19rZXkYASABKAwinAEKH1NpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlcXVlc3QSFQoNc2lnbmVyX3NlY3JldBgBIAEoDBIaChJhc3NlcnRlcl93b3Jrc3BhY2UYAiABKAkSDgoGb2JqZWN0GAMgASgJEhAKCHJlbGF0aW9uGAQgASgJEg8KB3N1YmplY3QYBSABKAkSEwoLYXR0ZXN0ZWRfYXQYBiABKAkiSQogU2lnbkF1dGhvcml0eUF0dGVzdGF0aW9uUmVzcG9uc2USEQoJc2lnbmF0dXJlGAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiRAoSTWludFR5cGVkSWRSZXF1ZXN0EhAKCHR5cGVfdGFnGAEgASgJEhwKFGNhcHR1cmVkX3VuaXhfbWlsbGlzGAIgASgEIiEKE01pbnRUeXBlZElkUmVzcG9uc2USCgoCaWQYASABKAkiGwoZRW5jcnlwdGlvbklkZW50aXR5UmVxdWVzdCJEChpFbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZRISCgpzZWNyZXRfa2V5GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiRgoTV3JhcFNjb3BlS2V5UmVxdWVzdBIcChRyZWNpcGllbnRfcHVibGljX2tleRgBIAEoDBIRCglzY29wZV9rZXkYAiABKAwiSAoUV3JhcFNjb3BlS2V5UmVzcG9uc2USHAoUZXBoZW1lcmFsX3B1YmxpY19rZXkYASABKAwSEgoKY2lwaGVydGV4dBgCIAEoDCJnChVVbndyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3NlY3JldF9rZXkYASABKAwSHAoUZXBoZW1lcmFsX3B1YmxpY19rZXkYAiABKAwSEgoKY2lwaGVydGV4dBgDIAEoDCIrChZVbndyYXBTY29wZUtleVJlc3BvbnNlEhEKCXNjb3BlX2tleRgBIAEoDCKTAQoNS2VybmVsUmVmdXNhbBIwCgRjb2RlGAEgASgOMiIubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxDb2RlEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIQCgh0ZXJtaW5hbBgEIAEoCCLtDAoNUXVlcnlSZXNwb25zZRIVCgtyZXN1bHRfdXNkYRgCIAEoDEgAEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJKChNhdXRob3JpemF0aW9uX2NoZWNrGAogASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1Jlc3BvbnNlSAASTAoUYXV0aG9yaXphdGlvbl9leHBhbmQYCyABKAsyLC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlSAASPgoNb3NnaV9yZXNvdXJjZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVzb3VyY2VSZXNwb25zZUgAEkoKE2Zyb250aWVyX3RyYW5zaXRpb24YDSABKAsyKy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVzcG9uc2VIABJLChRvd25lZF9kZXZpY2VfcmVxdWVzdBgOIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5Pd25lZERldmljZVJlcXVlc3RSZXNwb25zZUgAEk8KFm93bmVkX3ByZXBhcmVfYXBwcm92YWwYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZUgAEhcKDWludGVnZXJfdmFsdWUYECABKBJIABJQChZhdXRoZW50aWNhdGlvbl9wb3N0dXJlGBEgASgLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlSAASSAoQY2hpbGRfd29ya3NwYWNlcxgSIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVzcG9uc2VIABJZChZhdXRob3JpbmdfcmVxdWlyZW1lbnRzGBMgASgLMjcubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlSAASPgoNd2FybV9wcm9ncmVzcxgVIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5XYXJtUHJvZ3Jlc3NSZXNwb25zZUgAElUKGWlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3MYFiABKAsyMC5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NSZXNwb25zZUgAElIKF2ludGVyZmFjZV9jb21wYXRpYmlsaXR5GBcgASgLMi8ubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZUNvbXBhdGliaWxpdHlSZXNwb25zZUgAEjIKEmFwcGxpY2F0aW9uX3Jlc3VsdBgYIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIABJKChNtYWludGVuYW5jZV9xdWFudHVtGBkgASgLMisubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUXVhbnR1bVJlc3BvbnNlSAASPwoScmVhZF9pbmRleF9wZW5kaW5nGBogASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdIABJHChJmdWxsX2hpc3RvcnlfYXVkaXQYGyABKAsyKS5ub21vcy5rZXJuZWwudjEuRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlSAASUwoYd29ya3NwYWNlX2VmZmVjdF9yZWNlaXB0GBwgASgLMi8ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZUVmZmVjdFJlY2VpcHRSZXNwb25zZUgAEksKFG9wZW5fYXBpX2Rlc2NyaXB0aW9uGB0gASgLMisubm9tb3Mua2VybmVsLnYxLk9wZW5BcGlEZXNjcmlwdGlvblJlc3BvbnNlSAASVwoaaW5zdGFsbGVkX2xhd19kZWNsYXJhdGlvbnMYHiABKAsyMS5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljc0IICgZyZXN1bHQiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSI+ChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIooBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJIv8BChRXYXJtUHJvZ3Jlc3NSZXNwb25zZRIbChNtYWludGVuYW5jZV9wZW5kaW5nGAEgASgIEiQKF3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluGAIgASgJSACIAQESJQoYcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlGAMgASgJSAGIAQESJgoZcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvchgEIAEoCUgCiAEBQhoKGF9wcmVwYXJlZF9jb21tYW5kX2RvbWFpbkIbChlfcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlQhwKGl9wcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yIlEKEFJlYWRJbmRleFBlbmRpbmcSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIaChJyZXF1ZXN0ZWRfZnJvbnRpZXIYAyABKAkijQIKF01haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5Eh0KEHJlcXVlc3RlZF9kb21haW4YASABKAlIAIgBARIeChFyZXF1ZXN0ZWRfcGFja2FnZRgCIAEoCUgBiAEBEiAKE3JlcXVlc3RlZF9kaXJlY3RpdmUYAyABKAlIAogBARIXCg9sb2NhbF9yZWFkX29ubHkYBCABKAgSHAoUbWFpbnRhaW5fZ2l0X2N1c3RvZHkYBSABKAgSFwoPcmVhZF9pbmRleF9vbmx5GAYgASgIQhMKEV9yZXF1ZXN0ZWRfZG9tYWluQhQKEl9yZXF1ZXN0ZWRfcGFja2FnZUIWChRfcmVxdWVzdGVkX2RpcmVjdGl2ZSKCBAoaTWFpbnRlbmFuY2VRdWFudHVtUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYAiABKAgSMAoFcGhhc2UYAyABKA4yIS5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VQaGFzZRIZCgxnaXRfZnJvbnRpZXIYBCABKAlIAIgBARIaCg1yZWFkX2Zyb250aWVyGAUgASgJSAGIAQESHAoPc3FsaXRlX2Zyb250aWVyGAYgASgJSAKIAQESEgoKd29ya191bml0cxgHIAEoBBIWCg5lbGFwc2VkX21pY3JvcxgIIAEoBBIkChdwcmVwYXJlZF9jb21tYW5kX2RvbWFpbhgJIAEoCUgDiAEBEiUKGHByZXBhcmVkX2NvbW1hbmRfcGFja2FnZRgKIAEoCUgEiAEBEiYKGXByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IYCyABKAlIBYgBAUIPCg1fZ2l0X2Zyb250aWVyQhAKDl9yZWFkX2Zyb250aWVyQhIKEF9zcWxpdGVfZnJvbnRpZXJCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IiSAoNT3NnaUF0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJEhEKBHR5cGUYAyABKAlIAIgBAUIHCgVfdHlwZSIsCg1Pc2dpRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiiwEKDk9zZ2lDYXBhYmlsaXR5EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIowBCg9Pc2dpUmVxdWlyZW1lbnQSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUimgEKFE9zZ2lSZXNvdXJjZVJlc3BvbnNlEhMKC3NvdXJjZV91c2RhGAEgASgMEjUKDGNhcGFiaWxpdGllcxgCIAMoCzIfLm5vbW9zLmtlcm5lbC52MS5Pc2dpQ2FwYWJpbGl0eRI2CgxyZXF1aXJlbWVudHMYAyADKAsyIC5ub21vcy5rZXJuZWwudjEuT3NnaVJlcXVpcmVtZW50IucBChNWZXJpZnlDaGFpblN0ZXBTcGFuEg0KBWluZGV4GAEgASgEEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRIQCgh0b3RhbF91cxgFIAEoBBI2CgZwaGFzZXMYBiABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEkAKDmVuZ2luZV90aW1pbmdzGAcgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nIpgCChVWZXJpZnlDaGFpblN0ZXBQaGFzZXMSHgoWcnVudGltZV9sYXdfcmVmcmVzaF91cxgBIAEoBBITCgttYW5pZmVzdF91cxgCIAEoBBIZChFsYXdfcmVzb2x1dGlvbl91cxgDIAEoBBIdChVtYW5hZ2VkX3RyYW5zaXRpb25fdXMYBCABKAQSFAoMcHJpbmNpcGFsX3VzGAUgASgEEhQKDGV2b2x1dGlvbl91cxgGIAEoBBIaChJjb2xvY2F0ZWRfcmVhZHNfdXMYByABKAQSIQoZdHlwZWRfaW5zdGFsbF92ZXJpZmllcl91cxgIIAEoBBIUCgxhZG1pc3Npb25fdXMYCSABKAQSDwoHZm9sZF91cxgKIAEoBCLaBQoWVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIuCgR3YWxrGAEgASgOMiAubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluV2FsaxIQCgh0b3RhbF91cxgCIAEoBBIbChNyZWZlcmVuY2VfbG9va3VwX3VzGAMgASgEEhoKEnJlcG9zaXRvcnlfb3Blbl91cxgEIAEoBBIVCg1jaGFpbl9yZWFkX3VzGAUgASgEEhYKDmVuZ2luZV9pbml0X3VzGAYgASgEEhgKEHRpbWVsaW5lX3JlYWRfdXMYByABKAQSGAoQbGF3X2h5ZHJhdGlvbl91cxgIIAEoBBIbChNyZWNvdmVyeV9wcmVzY2FuX3VzGAkgASgEEhgKEGZvbGRfZnJvbnRpZXJfdXMYCiABKAQSMwoFc3RlcHMYCyADKAsyJC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwU3BhbhJACg5lbmdpbmVfdGltaW5ncxgMIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZxJNChVsYXdfaHlkcmF0aW9uX3RpbWluZ3MYDSADKAsyLi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSGQoRbGF3X2Nsb3N1cmVfY291bnQYDiABKAQSHgoWbGF3X2Nsb3N1cmVfY2FjaGVfaGl0cxgPIAEoBBIgChhsYXdfY2xvc3VyZV9jYWNoZV9taXNzZXMYECABKAQSEgoKc3RlcF9jb3VudBgRIAEoBBIVCg1zdGVwX3RvdGFsX3VzGBIgASgEEkEKEXN0ZXBfcGhhc2VfdG90YWxzGBMgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxIaChJvbWl0dGVkX3N0ZXBfY291bnQYFCABKAQiOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiQAodVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiqwEKFEh0dHBzRXhlY3V0aW9uUG9saWN5EjwKCXBsYWNlbWVudBgBIAEoDjIpLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25QbGFjZW1lbnQSQAoLY2FyZGluYWxpdHkYAiABKA4yKy5ub21vcy5rZXJuZWwudjEuRWZmZWN0RXhlY3V0aW9uQ2FyZGluYWxpdHkSEwoLbGF3X2Nsb3N1cmUYAyABKAkiWwoSSHR0cHNPdXRib3VuZFJvdXRlEgsKA3VybBgBIAEoCRI4CglleGVjdXRpb24YAiABKAsyJS5ub21vcy5rZXJuZWwudjEuSHR0cHNFeGVjdXRpb25Qb2xpY3kiKwoWV29ya3NwYWNlT3V0Ym91bmRSb3V0ZRIRCgl3b3Jrc3BhY2UYASABKAkihQIKFUNhcnJpZWRXb3Jrc3BhY2VPZmZlchIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhUKDXNvdXJjZV9jb21taXQYAiABKAkSGQoRc291cmNlX29mZmVyX3BhdGgYAyABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYBSABKAwSIwobYWRtaXNzaW9uX2NoZWNrcG9pbnRfc2VjcmV0GAYgASgMEhUKDWVmZmVjdF9kaWdlc3QYByABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAggASgJSgQIBBAFUgZ0YXJnZXQizAQKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSFwoLZGVzdGluYXRpb24YAiABKAlCAhgBEhQKDHNlYWxlZF9vZmZlchgDIAEoDBIUCgxjb250ZW50X3R5cGUYBCABKAkSGAoQc291cmNlX3dvcmtzcGFjZRgFIAEoCRIUCgxjdXN0b2R5X2hlYWQYBiABKAkSFwoPY2F1c2VkX2J5X29mZmVyGAcgASgJEhsKE3NjaGVkdWxlZF9hdF9taWxsaXMYCCABKAQSGgoSZGVhZGxpbmVfYXRfbWlsbGlzGAkgASgEEhQKDGN1c3RvZHlfcGF0aBgKIAEoCRITCgtjdXN0b2R5X29pZBgLIAEoCRIUCgxkZWxpdmVyeV9yZWYYDCABKAkSFQoNb2JsaWdhdGlvbl9pZBgNIAEoCRI6CgtodHRwc19yb3V0ZRgOIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYDyABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAEhUKDXNvdXJjZV9jb21taXQYECABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYESABKAwSGQoRc291cmNlX29mZmVyX3BhdGgYEiABKAkSFQoNZWZmZWN0X2RpZ2VzdBgTIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYFCABKAlCBwoFcm91dGUi7gEKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBEi0KB2VudHJpZXMYAyADKAsyHC5ub21vcy5rZXJuZWwudjEuT3V0Ym94RW50cnkSFAoMd29ya19wZW5kaW5nGAQgASgIEhUKDWVudHJpZXNfdG90YWwYBSABKA0SGAoQZW50cmllc19wcmVwYXJlZBgGIAEoDUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIr0BCgtPdXRib3hFbnRyeRIKCgJpZBgBIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgCIAEoCRI6CgtodHRwc19yb3V0ZRgDIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYBCABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAQgcKBXJvdXRlIpQBChRQcmVwYXJlT3V0Ym91bmRPZmZlchIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEhoKDXNvdXJjZV9jb21taXQYAiABKAlIAIgBARIeChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCUgBiAEBQhAKDl9zb3VyY2VfY29tbWl0QhQKEl9zb3VyY2Vfb2ZmZXJfcGF0aCLxBAoMU3luY1Jlc3BvbnNlEhAKCGFkbWl0dGVkGAIgASgIEgwKBGhlYWQYAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkSHAoUYWRtaXR0ZWRfcmVtb3RlX2hlYWQYBSABKAkSHAoUcmVwbGF5ZWRfcmVtb3RlX2hlYWQYBiABKAkSPAoPYWRtaXR0ZWRfcmVtb3RlGAcgAygLMiMubm9tb3Mua2VybmVsLnYxLlN5bmNBZG1pdHRlZEludGVudBI8ChVyZW1vdGVfYmlydGhfb3V0Y29tZXMYCCADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEjkKDnJlbW90ZV9yZWZ1c2FsGAkgASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2FsSACIAQESOwoOcmVwbGF5ZWRfbG9jYWwYCiADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY1JlcGxheWVkSW50ZW50EiAKGHNraXBwZWRfbG9jYWxfaW50ZW50X2lkcxgLIAMoCRI5Cg1yZWZ1c2VkX2xvY2FsGAwgAygLMiIubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2VkSW50ZW50EkcKFGN1c3RvZHlfZGlzYWdyZWVtZW50GA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlEaXNhZ3JlZW1lbnRIAYgBARIZChFwYXJrZWRfbG9jYWxfcmVmcxgOIAMoCUIRCg9fcmVtb3RlX3JlZnVzYWxCFwoVX2N1c3RvZHlfZGlzYWdyZWVtZW50SgQIARACUgZyZXN1bHQiUQoTQ3VzdG9keURpc2FncmVlbWVudBISCgpsb2NhbF9oZWFkGAEgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAIgASgJEg4KBnJlYXNvbhgDIAEoCSJPChJTeW5jQWRtaXR0ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEhgKEGNhbmRpZGF0ZV9jb21taXQYAiABKAkSDAoEaGVhZBgDIAEoCSJsChJTeW5jUmVwbGF5ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEgwKBGhlYWQYAiABKAkSNQoOYmlydGhfb3V0Y29tZXMYAyADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lIqEBCgtTeW5jUmVmdXNhbBIWCglpbnRlbnRfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSEQoEY29kZRgDIAEoCUgBiAEBEjQKB3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgCiAEBQgwKCl9pbnRlbnRfaWRCBwoFX2NvZGVCCgoIX3JlZnVzYWwijQEKEVN5bmNSZWZ1c2VkSW50ZW50EhEKCWludGVudF9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkSEwoLY2hhbmdlX3VzZGEYAyABKAwSNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSACIAQFCCgoIX3JlZnVzYWwiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIIg4KDEdlbmVzaXNPZmZlciKjAQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEicKCW9wZXJhdGlvbhgFIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSFgoOYXJndW1lbnRzX2pzb24YBiABKAlKBAgDEARKBAgEEAVSCWNhbGxfdXNkYVIHcGF5bG9hZFIObGVnYWN5X3BheWxvYWQi1gIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSFAoMcHJlcGFyZV9vbmx5GAwgASgIQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSJsChtTaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3QSNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIVCg1zaWduZXJfc2VjcmV0GAIgASgMIlYKHFNpZ25CaXJ0aENlcnRpZmljYXRlUmVzcG9uc2USNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZSLsAgoUTW9kZWxMaWZlY3ljbGVJbnRlbnQSOwoJb3BlcmF0aW9uGAEgASgOMigubm9tb3Mua2VybmVsLnYxLk1vZGVsTGlmZWN5Y2xlT3BlcmF0aW9uEhQKDGluc3RhbGxlZF9ieRgCIAEoCRIXCgpzdXBlcnNlZGVzGAMgASgJSACIAQESRAoKdHJhbnNpdGlvbhgEIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25SZXNwb25zZUgBiAEBEhUKCHJlcGxhY2VzGAUgASgJSAKIAQESHgoRYWNjZXB0YW5jZV9yZWFzb24YBiABKAlIA4gBARIZCgxsYXdfaWRlbnRpdHkYByABKAlIBIgBAUINCgtfc3VwZXJzZWRlc0INCgtfdHJhbnNpdGlvbkILCglfcmVwbGFjZXNCFAoSX2FjY2VwdGFuY2VfcmVhc29uQg8KDV9sYXdfaWRlbnRpdHkiOwofSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbhIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJIucHCgxPZmZlclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCgRjYWxsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUNhbGxIABIcChJzZWFsZWRfY2hhbmdlX3VzZGEYByABKAxIABJACg9tb2RlbF9saWZlY3ljbGUYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVJbnRlbnRIABJeCiJpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzX2Fkb3B0aW9uGA0gASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQWRvcHRpb25IABIwCgdnZW5lc2lzGA4gASgLMh0ubm9tb3Mua2VybmVsLnYxLkdlbmVzaXNPZmZlckgAEkkKF2NhcnJpZWRfd29ya3NwYWNlX29mZmVyGA8gASgLMiYubm9tb3Mua2VybmVsLnYxLkNhcnJpZWRXb3Jrc3BhY2VPZmZlckgAEjQKCXBsYWNlbWVudBgQIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5QbGFjZW1lbnRPZmZlckgAEkcKFmRldGFjaGVkX3NpZ25lZF9jaGFuZ2UYEiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2VIABI0CglhdXRob3JpbmcYAyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaW5nT3B0aW9ucxIQCghsYXdfdXNkehgEIAEoDBIzCgxhdHRlc3RhdGlvbnMYBSADKAsyHS5ub21vcy5rZXJuZWwudjEuQXR0ZXN0ZWRSZWFkEj0KEmNvbmZsaWN0X3NuYXBzaG90cxgGIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5Db25mbGljdFNuYXBzaG90EhoKEmV4ZWN1dGlvbl9sYXdfdXNkehgIIAEoDBIgChNjb250cm9sbGVyX2xhd19oYXNoGAkgASgJSAGIAQESHQoQY2FuZGlkYXRlX2NvbW1pdBgKIAEoCUgCiAEBEjwKEWJpcnRoX2NlcnRpZmljYXRlGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUSKwoJbGF3X3VuaXRzGBEgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXRCCAoGaW50ZW50QhYKFF9jb250cm9sbGVyX2xhd19oYXNoQhMKEV9jYW5kaWRhdGVfY29tbWl0IjYKB0xhd1VuaXQSKwoFZmlsZXMYASADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEZpbGUiLAoLTGF3VW5pdEZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIsUBCgxBdHRlc3RlZFJlYWQSEAoIcXVlcnlfaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EisKBnJlc3VsdBgDIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlEjIKCGV2aWRlbmNlGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRBdHRlc3RhdGlvbkoECAQQBVILYXR0ZXN0YXRpb24i1QEKD1JlYWRBdHRlc3RhdGlvbhIPCgd2ZXJzaW9uGAEgASgDEhgKEHNvdXJjZV93b3Jrc3BhY2UYAiABKAkSFgoOc291cmNlX2dlbmVzaXMYAyABKAkSEwoLc291cmNlX2hlYWQYBCABKAkSEQoJZm9sZF9yb290GAUgASgJEhQKDHNvdXJjZV9lcG9jaBgGIAEoAxIaChJhdHRlc3RlZF9hdF9taWxsaXMYByABKAMSEgoKcHVibGljX2tleRgIIAEoDBIRCglzaWduYXR1cmUYCSABKAwidQoQQ29uZmxpY3RTbmFwc2hvdBIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSDQoFZmllbGQYAyABKAkSFQoNdGFyZ2V0X3NjaGVtYRgEIAEoCRINCgV0b2tlbhgFIAEoCSKQDwoMUXVlcnlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSMgoJYXV0aG9yaXR5GAIgASgLMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5QXV0aG9yaXR5Eg0KBXNwYW5zGAMgASgIEjkKDXJlc3VsdF9mb3JtYXQYBCABKA4yIi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXN1bHRGb3JtYXQSKgoEcm93cxgKIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Sb3dzUXVlcnlIABIqCgRwYWdlGAsgASgLMhoubm9tb3Mua2VybmVsLnYxLlBhZ2VRdWVyeUgAEisKBWJ5X2lkGAwgASgLMhoubm9tb3Mua2VybmVsLnYxLkJ5SWRRdWVyeUgAEjkKDHJlc29sdmVfcmVmcxgNIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmc1F1ZXJ5SAASRQoScmVmZXJlbmNlX3ZlcnNpb25zGA4gASgLMicubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25zUXVlcnlIABIsCgVjb3VudBgPIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASKgoDc3VtGBAgASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIwCgdzcGF0aWFsGBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlNwYXRpYWxRdWVyeUgAEiwKBW5hbWVkGBIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5hbWVkUXVlcnlIABJJChNhdXRob3JpemF0aW9uX2NoZWNrGBMgASgLMioubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1JlcXVlc3RIABJLChRhdXRob3JpemF0aW9uX2V4cGFuZBgUIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdEgAEkkKE2Zyb250aWVyX3RyYW5zaXRpb24YFSABKAsyKi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdEgAEi8KB2J5X3R5cGUYFiABKAsyHC5ub21vcy5rZXJuZWwudjEuQnlUeXBlUXVlcnlIABJIChRvd25lZF9kZXZpY2VfcmVxdWVzdBgXIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Pd25lZERldmljZVJlcXVlc3RRdWVyeUgAEkwKFm93bmVkX3ByZXBhcmVfYXBwcm92YWwYGCABKAsyKi5ub21vcy5rZXJuZWwudjEuT3duZWRQcmVwYXJlQXBwcm92YWxRdWVyeUgAEkMKEXBlbmRpbmdfY29uZmxpY3RzGBkgASgLMiYubm9tb3Mua2VybmVsLnYxLlBlbmRpbmdDb25mbGljdHNRdWVyeUgAElAKGHBlbmRpbmdfY29uZmxpY3Rfc3VtbWFyeRgaIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5QZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnlIABJNChZhdXRoZW50aWNhdGlvbl9wb3N0dXJlGBsgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5SAASQAoQY2hpbGRfd29ya3NwYWNlcxgcIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5SAASVgoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgdIAEoCzI0Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNRdWVyeUgAElIKGWlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3MYHiABKAsyLS5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NRdWVyeUgAEk8KF2ludGVyZmFjZV9jb21wYXRpYmlsaXR5GB8gASgLMiwubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZUNvbXBhdGliaWxpdHlRdWVyeUgAEkcKE21haW50ZW5hbmNlX3F1YW50dW0YICABKAsyKC5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VRdWFudHVtUXVlcnlIABJEChJmdWxsX2hpc3RvcnlfYXVkaXQYISABKAsyJi5ub21vcy5rZXJuZWwudjEuRnVsbEhpc3RvcnlBdWRpdFF1ZXJ5SAASUAoYd29ya3NwYWNlX2VmZmVjdF9yZWNlaXB0GCIgASgLMiwubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZUVmZmVjdFJlY2VpcHRRdWVyeUgAElQKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGCMgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5SABCBwoFcXVlcnkiVgobV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5EiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgBIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAIgASgJIuQBCh5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2USGAoQdGFyZ2V0X3dvcmtzcGFjZRgBIAEoCRIgChh0YXJnZXRfd29ya3NwYWNlX2dlbmVzaXMYAiABKAkSFQoNb2JzZXJ2ZWRfaGVhZBgDIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYBCABKAkSFQoNZWZmZWN0X2RpZ2VzdBgFIAEoCRIfChJhZG1pdHRlZF9pbnRlbnRfaWQYBiABKAlIAIgBAUIVChNfYWRtaXR0ZWRfaW50ZW50X2lkIhcKFUZ1bGxIaXN0b3J5QXVkaXRRdWVyeSKwAwoYRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEi4KBHdhbGsYAiABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhEKBGhlYWQYAyABKAlIAIgBARIUCgdpbnRlbnRzGAQgASgESAGIAQESGAoLcGxhbnNfcmVydW4YBSABKARIAogBARIcCg9jb250cm9sbGVyX2hhc2gYBiABKAlIA4gBARIZChFpbnN0YWxsZWRfZG9tYWlucxgHIAMoCRISCgVjaGVjaxgIIAEoCUgEiAEBEhUKCGF0X2luZGV4GAkgASgESAWIAQESEgoFZXJyb3IYCiABKAlIBogBARI0CgdyZWZ1c2FsGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIHCgVfaGVhZEIKCghfaW50ZW50c0IOCgxfcGxhbnNfcmVydW5CEgoQX2NvbnRyb2xsZXJfaGFzaEIICgZfY2hlY2tCCwoJX2F0X2luZGV4QggKBl9lcnJvckIKCghfcmVmdXNhbCIeChxJZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5IosCChpJZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRIPCgdvcmRpbmFsGAEgASgEEgsKA2t0eRgCIAEoCRIQCgNraWQYAyABKAlIAIgBARIQCgNhbGcYBCABKAlIAYgBARIQCgN1c2UYBSABKAlIAogBARIQCgNjcnYYBiABKAlIA4gBARIOCgF4GAcgASgJSASIAQESDgoBeRgIIAEoCUgFiAEBEg4KAW4YCSABKAlIBogBARIOCgFlGAogASgJSAeIAQESDwoHa2V5X29wcxgLIAMoCUIGCgRfa2lkQgYKBF9hbGdCBgoEX3VzZUIGCgRfY3J2QgQKAl94QgQKAl95QgQKAl9uQgQKAl9lImMKIklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSEwoLa2V5X29yZGluYWwYASABKAQSGwoTY2VydGlmaWNhdGVfb3JkaW5hbBgCIAEoBBILCgNkZXIYAyABKAwixQQKH0lkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2USGAoQc291cmNlX3dvcmtzcGFjZRgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRITCgtzb3VyY2VfaGVhZBgDIAEoCRINCgVlcG9jaBgEIAEoBBIfChJwcmVkZWNlc3Nvcl9zaGEyNTYYBSABKAxIAIgBARIOCgZpc3N1ZXIYBiABKAkSFQoIYXVkaWVuY2UYByABKAlIAYgBARIXCg9wcmluY2lwYWxfY2xhaW0YCCABKAkSIQoUZGV2aWNlX2JpbmRpbmdfY2xhaW0YCSABKAlIAogBARIeChZyZXF1aXJlX2RldmljZV9iaW5kaW5nGAogASgIEjkKBGtleXMYCyADKAsyKy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NLZXkSSQoMY2VydGlmaWNhdGVzGAwgAygLMjMubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSFwoPbWF0ZXJpYWxfc2hhMjU2GA0gASgMEjMKDGF0dGVzdGF0aW9ucxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWRCFQoTX3ByZWRlY2Vzc29yX3NoYTI1NkILCglfYXVkaWVuY2VCFwoVX2RldmljZV9iaW5kaW5nX2NsYWltSgQIDhAPUhFzb3VyY2VfcHJvb2ZfdXNkYSIVChNDaGlsZFdvcmtzcGFjZVF1ZXJ5IpABChlDaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkEhEKCXdvcmtzcGFjZRgBIAEoCRI+CgZzdGF0dXMYAiABKA4yLi5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSFAoHYm9ybl9hdBgDIAEoCUgAiAEBQgoKCF9ib3JuX2F0IlsKG0NoaWxkV29ya3NwYWNlUXVlcnlSZXNwb25zZRI8CghjaGlsZHJlbhgBIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkIh8KHUluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5IjcKEEluc3RhbGxlZExhd1VuaXQSEAoIdW5pdF9rZXkYASABKAkSEQoJdW5pdF9oYXNoGAIgASgJIowBChNJbnN0YWxsZWRMYXdVbml0U2V0EhQKDHNldF9pZGVudGl0eRgBIAEoCRIYChBjb21wb3Nlcl92ZXJzaW9uGAIgASgJEhMKC29wZW51c2RfcmV2GAMgASgJEjAKBXVuaXRzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd1VuaXQigQIKHkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlchIOCgZkb21haW4YASABKAkSDgoGbWVtYmVyGAIgASgJEjsKC21lbWJlcl9raW5kGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkTGF3TWVtYmVyS2luZBJBCgRraW5kGAQgASgOMjMubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSDQoFc2NvcGUYBSABKAkSHAoPaWRlbnRpdHlfc2hhMjU2GAYgASgJSACIAQFCEgoQX2lkZW50aXR5X3NoYTI1NiLpAQofSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucxIYChBjbG9zdXJlX2lkZW50aXR5GAEgASgJEg8KB2RvbWFpbnMYAiADKAkSOwoIdW5pdF9zZXQYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdFNldEgAiAEBElEKGGF1dGhlbnRpY2F0aW9uX3Byb3ZpZGVycxgEIAMoCzIvLm5vbW9zLmtlcm5lbC52MS5EZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJCCwoJX3VuaXRfc2V0InQKIEluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSQgoIY2xvc3VyZXMYAiADKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucyLKAQojRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnkSEQoJZGlyZWN0aXZlGAEgASgJEhYKCXByaW5jaXBhbBgCIAEoCUgAiAEBEhcKCnB1YmxpY19rZXkYAyABKAxIAYgBARIVCghrZXlfaGFzaBgEIAEoCUgCiAEBEhMKBmRvbWFpbhgFIAEoCUgDiAEBQgwKCl9wcmluY2lwYWxCDQoLX3B1YmxpY19rZXlCCwoJX2tleV9oYXNoQgkKB19kb21haW4ijAIKJkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlEg0KBWZvdW5kGAEgASgIEhMKBmRvbWFpbhgCIAEoCUgAiAEBEhUKCHJlbGF0aW9uGAMgASgJSAGIAQESEwoGb2JqZWN0GAQgASgJSAKIAQESEgoFYWN0b3IYBSABKAlIA4gBARIVCghrZXlfaGFzaBgGIAEoCUgEiAEBEhcKD3NpZ25lcl9lbnJvbGxlZBgHIAEoCBIUCgxyb2xlX2FsbG93ZWQYCCABKAhCCQoHX2RvbWFpbkILCglfcmVsYXRpb25CCQoHX29iamVjdEIICgZfYWN0b3JCCwoJX2tleV9oYXNoInIKGkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5Eh4KFmluY2x1ZGVfYmlydGhfZXZpZGVuY2UYASABKAgSHgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxIAIgBAUIUChJfZGV2aWNlX3B1YmxpY19rZXki7AIKHUF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlEkgKDnByb3ZpZGVyX3Rva2VuGAEgASgOMjAubm9tb3Mua2VybmVsLnYxLlByb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSFwoPZW5yb2xsZWRfZGV2aWNlGAIgASgIEhoKEnJlc29sdmVkX3ByaW5jaXBhbBgDIAEoCRJECg5iaXJ0aF9ldmlkZW5jZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5CaXJ0aEV2aWRlbmNlUmVhZGluZXNzSACIAQESQQoUZGV2aWNlX3NpZ25lcl9zdGF0dXMYBSABKA4yIy5ub21vcy5rZXJuZWwudjEuRGV2aWNlU2lnbmVyU3RhdHVzEhoKEmRldmljZV9rZXlfc3ViamVjdBgGIAEoCRIUCgxzaWduZXJfZXBvY2gYByABKANCEQoPX2JpcnRoX2V2aWRlbmNlIl4KFkJpcnRoRXZpZGVuY2VSZWFkaW5lc3MSNAoGc3RhdHVzGAEgASgOMiQubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VTdGF0dXMSDgoGZGV0YWlsGAIgASgJIigKF093bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5Eg0KBXNjb3BlGAEgASgJIjIKGk93bmVkRGV2aWNlUmVxdWVzdFJlc3BvbnNlEhQKDHJlcXVlc3RfdXNkYRgBIAEoDCJAChlPd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5Eg0KBXNjb3BlGAEgASgJEhQKDHJlcXVlc3RfdXNkYRgCIAEoDCK/AQocT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZRIXCg9uZXdfa2V5X3N1YmplY3QYASABKAkSGgoSb3duZWRfY3VzdG9keV91c2RhGAIgASgMEhQKDHZlcmlmaWVkX3ZpYRgDIAEoCRIYChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgEEh8KF2FwcHJvdmVkX2F0X3VuaXhfbWlsbGlzGAUgASgEEhkKEW93bmVkX2tleV9zdWJqZWN0GAYgASgJIpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMIqgBCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgEIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYBSABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IsYBCglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgGIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIjgKC0J5VHlwZVF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJImIKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEhYKCWdyb3VwX2tleRgEIAEoCUgAiAEBQgwKCl9ncm91cF9rZXlKBAgCEANSCWFyZ3VtZW50cyJ6CgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg0KBW1pbl94GAQgASgBEg0KBW1pbl95GAUgASgBEg0KBW1heF94GAYgASgBEg0KBW1heF95GAcgASgBSgQIAhADUglhcmd1bWVudHMiWgoVUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5EhsKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJSACIAQESEQoJcHJpbmNpcGFsGAIgASgJQhEKD19hZ2dyZWdhdGVfdHlwZSIwChtQZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnkSEQoJcHJpbmNpcGFsGAEgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKxAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBAUIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24iqAEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEjYKB3ByZXBhcmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUHJlcGFyZU91dGJvdW5kT2ZmZXIimQEKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkSGgoScGFya19yZWZ1c2VkX2xvY2FsGAQgASgIEhgKEHBhcmtlZF9hdF9taWxsaXMYBSABKAQiOwoaS2VybmVsQ29uZmlndXJhdGlvblJlcXVlc3QSHQoVdHJ1c3Rfcm9vdF9wdWJsaWNfa2V5GAEgASgMIkwKG0tlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkIvMRCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAEkcKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlcXVlc3RIABJBCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJi5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXF1ZXN0SAASWgoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIyLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3RIABI+Cg5vcGVuX2dpdF9zdGF0ZRggIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5PcGVuR2l0U3RhdGVSZXF1ZXN0SAASTgoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJUChlpbnNwZWN0X2N1c3RvZHlfcGxhY2VtZW50GCMgASgLMi8ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDdXN0b2R5UGxhY2VtZW50UmVxdWVzdEgAElAKF3JlbGVhc2Vfd29ya3NwYWNlX3N0YXRlGCQgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlcXVlc3RIABJfCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMjQubm9tb3Mua2VybmVsLnYxLlJlY29yZFdvcmtzcGFjZUVmZmVjdE91dGNvbWVSZXF1ZXN0SAASTAoVYXR0YWNoX2xvY2FsX2Zyb250aWVyGCYgASgLMisubm9tb3Mua2VybmVsLnYxLkF0dGFjaExvY2FsRnJvbnRpZXJSZXF1ZXN0SAASQwoQYWdncmVnYXRlX2NlbnN1cxgnIAEoCzInLm5vbW9zLmtlcm5lbC52MS5BZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0SAASPQoNYXVkaXRfY3VzdG9keRgoIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXF1ZXN0SAASSAoTZXhwb3J0X2xhd19wcm9kdWN0cxgpIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5FeHBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJIChNpbXBvcnRfbGF3X3Byb2R1Y3RzGCogASgLMikubm9tb3Mua2VybmVsLnYxLkltcG9ydExhd1Byb2R1Y3RzUmVxdWVzdEgAQgsKCW9wZXJhdGlvbkoECCIQI1IXYWRvcHRfY3VzdG9keV9wbGFjZW1lbnQiXgoWQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCnR5cGVfbGltaXQYAiABKA0iMQoSQWdncmVnYXRlVHlwZUNvdW50EgwKBHR5cGUYASABKAkSDQoFY291bnQYAiABKAQi+wEKF0FnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlEhEKBGhlYWQYASABKAlIAIgBARIcCg9hZ2dyZWdhdGVfY291bnQYAiABKARIAYgBARIXCgpzdGF0ZV9yb290GAMgASgJSAKIAQESNgoJdG9wX3R5cGVzGAQgAygLMiMubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZVR5cGVDb3VudBIdChB0eXBlc19zdGF0ZV9yb290GAUgASgJSAOIAQFCBwoFX2hlYWRCEgoQX2FnZ3JlZ2F0ZV9jb3VudEINCgtfc3RhdGVfcm9vdEITChFfdHlwZXNfc3RhdGVfcm9vdCIoChhSZXNpZGVudEZvb3RwcmludFJlcXVlc3QSDAoEZGVlcBgBIAEoCCL0AwoRUmVzaWRlbnRGb290cHJpbnQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIYChByZWFkX21vZGVsX2J5dGVzGAMgASgEEh0KFXJlYWRfbW9kZWxfcnVzdF9ieXRlcxgEIAEoBBIYChBmb2xkX3N0YXRlX2J5dGVzGAUgASgEEhMKC2ZvbGRfaW1hZ2VzGAYgASgNEh8KF3NoYXJlZF9hdHRyaWJ1dGVkX2J5dGVzGAcgASgEEhIKCmFnZ3JlZ2F0ZXMYCCABKAQSNgoKY29tcG9uZW50cxgJIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudBISCgpjb21wdXRlX3VzGAogASgEEkUKEXJlYWRfc3RvcmFnZV9raW5kGAsgASgOMioubm9tb3Mua2VybmVsLnYxLlJlYWRQcm9qZWN0aW9uU3RvcmFnZUtpbmQSHwoXc3FsaXRlX2NhY2hlX3VzZWRfYnl0ZXMYDCABKAQSGAoQZmxhdF9zY2FsYXJfcm93cxgNIAEoBBIdChVmbGF0X3NjYWxhcl9yb3dzX3JlYWQYDiABKAQSHQoQZnVsbF9yZXBsYXlfaGVhZBgPIAEoCUgAiAEBQhMKEV9mdWxsX3JlcGxheV9oZWFkImkKEVJlc2lkZW50Q29tcG9uZW50EjQKBGtpbmQYASABKA4yJi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnRLaW5kEg0KBWJ5dGVzGAIgASgEEg8KB2NlaWxpbmcYAyABKAgiygEKGVJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2USNQoJcmVzaWRlbnRzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50EhwKFGFsbG9jYXRvcl9saXZlX2J5dGVzGAIgASgEEhgKEGF0dHJpYnV0ZWRfYnl0ZXMYAyABKAQSGQoRdW5hY2NvdW50ZWRfYnl0ZXMYBCABKAQSFQoNYWNjb3VudGluZ191cxgFIAEoBBIMCgRkZWVwGAYgASgIIpwBChBQYWNrRGVsdGFSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSHQoQc3RhZ2VkX3BhY2tfZmlsZRgFIAEoCUgCiAEBQgcKBV9oZWFkQgcKBV9iYXNlQhMKEV9zdGFnZWRfcGFja19maWxlIpYBChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIRCgRoZWFkGAMgASgJSAGIAQESDwoHc2hhbGxvdxgFIAMoCRIRCgl1bnNoYWxsb3cYBiADKAlCCAoGc291cmNlQgcKBV9oZWFkIiAKEFJlcG9TdGF0c1JlcXVlc3QSDAoEcmVwbxgBIAEoCSKsAQoTSW50ZW50c0Fib3ZlUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEg0KBWxpbWl0GAUgASgEEhgKEGNvbXBsZXRlX2xvZ2ljYWwYBiABKAgSFgoOY29tcGFjdF9zdG9yZWQYByABKAhCBwoFX2hlYWRCBwoFX2Jhc2UibQoVSGlzdG9yeVN1bW1hcnlSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEg4KBmJyYW5jaBgDIAEoCRIRCgRiYXNlGAQgASgJSAGIAQFCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMItQBChVDb21wYWN0aW9uRXF1aXZhbGVuY2USEwoLc291cmNlX2hlYWQYASABKAkSFgoOc291cmNlX2dlbmVzaXMYAiABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAyABKAkSGQoRY2FuZGlkYXRlX2dlbmVzaXMYBCABKAkSFgoOc291cmNlX2ludGVudHMYBSABKAQSFwoPY2FycmllZF9pbnRlbnRzGAYgASgEEhYKDnBhcmtlZF9pbnRlbnRzGAcgASgEEhIKCmVxdWl2YWxlbnQYCCABKAgifQohUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0EhMKC3NvdXJjZV9yZXBvGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhYKDmNhbmRpZGF0ZV9yZXBvGAMgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAQgASgJIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIjQKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIjYKD1BoeXNpY2FsUmVmRmlsZRIRCglyZWZlcmVuY2UYASABKAkSEAoIY29udGVudHMYAiABKAwipwIKD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCRIYChBsb29zZV9yZWZlcmVuY2VzGAMgAygJEiAKGGxvb3NlX2ludmVudG9yeV9jb21wbGV0ZRgEIAEoCBIgChNwYWNrZWRfcmVmc19wcmVzZW50GAUgASgISACIAQESPQoTcGh5c2ljYWxfbG9vc2VfcmVmcxgGIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5QaHlzaWNhbFJlZkZpbGUSHAoUcGh5c2ljYWxfcGFja2VkX3JlZnMYByABKAwSIwobcGh5c2ljYWxfaW52ZW50b3J5X2NvbXBsZXRlGAggASgIQhYKFF9wYWNrZWRfcmVmc19wcmVzZW50IkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIu0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQESDgoGd2Fsa2VkGBIgASgIQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCKZAgoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRITCgtkaWFnbm9zdGljcxgDIAEoCBIYChBvcGVyYXRvcl9jdXN0b2R5GAQgASgIEiAKE2V4cGVjdGVkX2xvY2FsX2hlYWQYBSABKAlIAIgBARJAChNjdXN0b2R5X2NlcnRpZmljYXRlGAYgASgLMiMubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlDZXJ0aWZpY2F0ZRIYChBwcm92aWRlcl9jdXN0b2R5GAcgASgIQhYKFF9leHBlY3RlZF9sb2NhbF9oZWFkIm0KE0F1ZGl0Q3VzdG9keVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIVCg1idWRnZXRfbWljcm9zGAIgASgNEg0KBXN0YXJ0GAMgASgIIpQBChRBdWRpdEN1c3RvZHlSZXNwb25zZRIPCgdwZW5kaW5nGAEgASgIEgwKBGhlYWQYAiABKAkSDgoGd2Fsa2VkGAMgASgEEg0KBXRvdGFsGAQgASgEEg8KB291dGNvbWUYBSABKAkSLQoHdmVyZGljdBgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJ+CgtMYXdQcm9kdWN0cxIUCgxsYXdfaWRlbnRpdHkYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKA0SEgoKcmVhZF9sYXllchgDIAEoDBIVCg1jb21tYW5kX2xheWVyGAQgASgMEhYKDnNlbWFudGljX2xheWVyGAUgASgMIkwKGEV4cG9ydExhd1Byb2R1Y3RzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0IlkKGUV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyJ8ChhJbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyItChlJbXBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEhAKCGltcG9ydGVkGAEgAygJIm8KEkN1c3RvZHlDZXJ0aWZpY2F0ZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglrZXlfZXBvY2gYAyABKAMSEgoKcHVibGljX2tleRgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwiZAoTT3BlbkdpdFN0YXRlUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSDQoFc3BhbnMYAyABKAgiawoaQXR0YWNoTG9jYWxGcm9udGllclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIIlMKDUN1c3RvZHlSZW1vdGUSDAoEbmFtZRgBIAEoCRILCgN1cmwYAiABKAkSFQoNcGVlcl9pZGVudGl0eRgDIAEoCRIQCghwcmlvcml0eRgEIAEoDSLGAQoUQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKcGVlcl9jbGFzcxgBIAEoCRJAChBrZXJuZWxfcmVzaWRlbmN5GAIgASgOMiYubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlc2lkZW5jeUludGVudBJCChFjdXN0b2R5X3JldGVudGlvbhgDIAEoDjInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmV0ZW50aW9uSW50ZW50EhQKDHJlbW90ZV9uYW1lcxgEIAMoCSKuAgoWQ3VzdG9keVBsYWNlbWVudFBvbGljeRITCgtkZWNsYXJhdGlvbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRI0CgVydWxlcxgDIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UnVsZRISCgphZG9wdGVkX2J5GAQgASgJEg4KBnJlYXNvbhgFIAEoCRIeChZlZmZlY3RpdmVfdGltZV9zZWNvbmRzGAYgASgSEi8KB3JlbW90ZXMYByADKAsyHi5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlbW90ZRIiChVyZWNpcGllbnRfbWFpbGJveF91cmwYCCABKAlIAIgBAUIYChZfcmVjaXBpZW50X21haWxib3hfdXJsIlkKG0N1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhIQCgZhYnNlbnQYASABKAhIABINCgNvaWQYAiABKAlIABINCgNhbnkYAyABKAhIAEIKCghmcm9udGllciIrChtSZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3QSDAoEcmVwbxgBIAEoCSI1Ch5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3QSEwoLcG9saWN5X3VzZGEYASABKAwiiQEKDlBsYWNlbWVudE9mZmVyEj4KCGV4cGVjdGVkGAEgASgLMiwubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhI3CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIoUSCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSAASSAoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMioubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2VIABJCCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJy5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXNwb25zZUgAElsKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMy5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZUgAEj8KDm9wZW5fZ2l0X3N0YXRlGCAgASgLMiUubm9tb3Mua2VybmVsLnYxLk9wZW5HaXRTdGF0ZVJlc3BvbnNlSAASTwoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASVQoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASUQoXcmVsZWFzZV93b3Jrc3BhY2Vfc3RhdGUYJCABKAsyLi5ub21vcy5rZXJuZWwudjEuUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2VIABJaCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMi8ubm9tb3Mua2VybmVsLnYxLlJlY29yZGVkV29ya3NwYWNlRWZmZWN0T3V0Y29tZUgAEk0KFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2VIABJEChBhZ2dyZWdhdGVfY2Vuc3VzGCcgASgLMigubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlSAASPgoNYXVkaXRfY3VzdG9keRgoIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXNwb25zZUgAEkkKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKi5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEkkKE2ltcG9ydF9sYXdfcHJvZHVjdHMYKiABKAsyKi5ub21vcy5rZXJuZWwudjEuSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAQgsKCW9wZXJhdGlvbkoECCIQI1IXYWRvcHRfY3VzdG9keV9wbGFjZW1lbnQiMAoRUGFja0RlbHRhUmVzcG9uc2USDAoEcGFjaxgBIAEoDBINCgVieXRlcxgCIAEoBCKFAQoRQXBwbHlQYWNrUmVzcG9uc2USFAoMb2JqZWN0X2NvdW50GAEgASgEEhEKCXBhY2tfaGFzaBgCIAEoCRI7CgdjbG9zdXJlGAMgASgLMiUubm9tb3Mua2VybmVsLnYxLlBoeXNpY2FsQ2xvc3VyZUNoZWNrSACIAQFCCgoIX2Nsb3N1cmUibQoUUGh5c2ljYWxDbG9zdXJlQ2hlY2sSFgoOcmV1c2VkX3JlY2VpcHQYASABKAgSFAoMY29tbWl0c19yZWFkGAIgASgEEhIKCnRyZWVzX3JlYWQYAyABKAQSEwoLbGVhdmVzX3JlYWQYBCABKAQiuAEKEVJlcG9TdGF0c1Jlc3BvbnNlEhMKC3RvdGFsX2J5dGVzGAEgASgEEhQKDG9iamVjdF9ieXRlcxgCIAEoBBIVCg1sb29zZV9vYmplY3RzGAMgASgEEhMKC2xvb3NlX2J5dGVzGAQgASgEEhIKCnBhY2tfZmlsZXMYBSABKAQSEgoKcGFja19ieXRlcxgGIAEoBBITCgtpbmRleF9ieXRlcxgHIAEoBBIPCgdzaGFsbG93GAggAygJIuIBCgxJbnRlbnRSZWNvcmQSCwoDb2lkGAEgASgJEhEKCWludGVudF9pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhMKC2NoYW5nZV91c2RhGAUgASgMEi4KCHNlbWFudGljGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EkoKFXRyYW5zcG9ydF9yZXF1aXJlbWVudBgHIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudCJGChRJbnRlbnRzQWJvdmVSZXNwb25zZRIuCgdpbnRlbnRzGAEgAygLMh0ubm9tb3Mua2VybmVsLnYxLkludGVudFJlY29yZCJ0ChZIaXN0b3J5U3VtbWFyeVJlc3BvbnNlEgwKBGhlYWQYASABKAkSDgoGb2xkZXN0GAIgASgJEhQKDGNvbW1pdF9jb3VudBgDIAEoBBIQCghjb21wbGV0ZRgEIAEoCBIUCgxyZWFjaGVkX2Jhc2UYBSABKAgiQgoTTm9taW5hbENhbGxJZGVudGl0eRITCgtkb21haW5fcGF0aBgBIAEoCRIWCg5kaXJlY3RpdmVfcGF0aBgCIAEoCSKIAQoYTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5Eh8KF3RhcmdldF9jbG9zdXJlX2lkZW50aXR5GAEgASgJEhQKDGluc3RhbGxlZF9ieRgCIAEoCRI1CgVwaGFzZRgDIAEoDjImLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsUGhhc2UiWgodV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQSEQoJd29ya3NwYWNlGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhEKCWZvbGRfcm9vdBgDIAEoCSK0AgoVSW5zcGVjdENoYW5nZVJlc3BvbnNlEi4KCHNlbWFudGljGAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCWludGVudF9pZBgCIAEoCRIyCgRjYWxsGAMgASgLMiQubm9tb3Mua2VybmVsLnYxLk5vbWluYWxDYWxsSWRlbnRpdHkSEAoIYXV0aG9yZWQYBCABKAgSRAoRbGlmZWN5Y2xlX2luc3RhbGwYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5EkwKFHJlcXVpcmVkX3Jlc2lkZW5jaWVzGAYgAygLMi4ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVtZW50IkwKHFJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2USGgoNcmVzb2x2ZWRfaGVhZBgBIAEoCUgAiAEBQhAKDl9yZXNvbHZlZF9oZWFkIjQKHEVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2USFAoMdmVyZGljdF91c2RhGAEgASgMIlEKHUluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlEjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QidQoiUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZRI4CghldmlkZW5jZRgBIAEoCzImLm5vbW9zLmtlcm5lbC52MS5Db21wYWN0aW9uRXF1aXZhbGVuY2USFQoNZXZpZGVuY2VfdXNkYRgCIAEoDCIvChBSZWFkQmxvYlJlc3BvbnNlEg0KBWZvdW5kGAEgASgIEgwKBGJsb2IYAiABKAwiLgoSUmVzb2x2ZVJlZlJlc3BvbnNlEhAKA29pZBgBIAEoCUgAiAEBQgYKBF9vaWQiKwoJUmVmUmVjb3JkEhEKCXJlZmVyZW5jZRgBIAEoCRILCgNvaWQYAiABKAkiPAoQTGlzdFJlZnNSZXNwb25zZRIoCgRyZWZzGAEgAygLMhoubm9tb3Mua2VybmVsLnYxLlJlZlJlY29yZCIOCgxBY2tub3dsZWRnZWQiJgoXV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2USCwoDb2lkGAEgASgJIoMBChZMYXdDbG9zdXJlSW5mb1Jlc3BvbnNlEhAKCGlkZW50aXR5GAEgASgJEhkKEXJvb3RfbG9naWNhbF9wYXRoGAIgASgJEhMKC2Fzc2V0X2NvdW50GAMgASgEEhIKCnByaW1fY291bnQYBCABKAQSEwoLZG9tYWluX2tleXMYBSADKAki3wMKGENoZWNrcG9pbnRFeHBvcnRSZXNwb25zZRINCgVlbXB0eRgBIAEoCBITCgZjdXJzb3IYAiABKAlIAIgBARIQCghmcm9udGllchgDIAEoDBIXCgpzdGF0ZV9yb290GAQgASgJSAGIAQESEgoKc3RhdGVfdHJlZRgFIAEoCBIOCgZwaW5uZWQYBiABKAgSGwoTcmVhZF9pbmRleF9zbmFwc2hvdBgHIAEoCBIjChtyZWFkX2luZGV4X3NuYXBzaG90X3BlbmRpbmcYCCABKAgSJAoXcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXMYCSABKARIAogBARIlChhyZWFkX2luZGV4X2N1c3RvZHlfYnl0ZXMYCiABKARIA4gBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAsgASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SASIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIaChhfcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXNCGwoZX3JlYWRfaW5kZXhfY3VzdG9keV9ieXRlc0IcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCLrAgoYQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlEhAKCHJlc3RvcmVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEhcKD2Zyb250aWVyX3NlZWRlZBgDIAEoCBIlCh1mcm9udGllcl92ZXJpZmljYXRpb25fcGVuZGluZxgEIAEoCBIXCg9hZ2dyZWdhdGVfY291bnQYBSABKAQSKwoFc3BhbnMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEwoGY3Vyc29yGAcgASgJSAGIAQESEQoJcmVhZF9vbmx5GAggASgIEhcKD2xhenlfcmVhZF9pbmRleBgJIAEoCBI3Cglhc3N1cmFuY2UYCiABKA4yJC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEFzc3VyYW5jZRISCgpyZWFkX3JlYWR5GAsgASgIQgkKB19yZWFzb25CCQoHX2N1cnNvciLAAQoUT3BlbkdpdFN0YXRlUmVzcG9uc2USDgoGb3BlbmVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEhcKD2FnZ3JlZ2F0ZV9jb3VudBgDIAEoBBIrCgVzcGFucxgEIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYBSABKAlIAYgBARISCgpyZWFkX3JlYWR5GAYgASgIQgkKB19yZWFzb25CCQoHX2N1cnNvciLpAQobQXR0YWNoTG9jYWxGcm9udGllclJlc3BvbnNlEhAKCGF0dGFjaGVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEgwKBGhlYWQYAyABKAkSEgoKc3RhdGVfcm9vdBgEIAEoCRIXCg9hZ2dyZWdhdGVfY291bnQYBSABKAQSKwoFc3BhbnMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEgoKcmVhZF9yZWFkeRgHIAEoCBIcChRmb3JlaWduX3NvdXJjZV9yZWFkeRgIIAEoCEIJCgdfcmVhc29uIjEKHFJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlcXVlc3QSEQoJd29ya3NwYWNlGAEgASgJIjEKHVJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlc3BvbnNlEhAKCHJlbGVhc2VkGAEgASgIIosBChxSZWFkQ3VzdG9keVBsYWNlbWVudFJlc3BvbnNlEhUKCGZyb250aWVyGAEgASgJSACIAQESPAoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3lIAYgBAUILCglfZnJvbnRpZXJCCQoHX3BvbGljeSJdChBQbGFjZW1lbnRBZG9wdGVkEhAKCGZyb250aWVyGAEgASgJEjcKBnBvbGljeRgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UG9saWN5IloKH0luc3BlY3RDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USNwoGcG9saWN5GAEgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiSgoXQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2USFwoPYWdncmVnYXRlX2NvdW50GAEgASgEEhYKDnJlc2VydmVkX2J5dGVzGAIgASgEIvkCChBSZXN0b3JlTWFpblNwYW5zEhAKCHRvdGFsX3VzGAEgASgEEhoKEmxpdmVfcmVmX2xvb2t1cF91cxgCIAEoBBIYChB0YXJnZXRfZGVjb2RlX3VzGAMgASgEEiQKHGN1c3RvZHlfY29tcGxldGVuZXNzX3JlYWRfdXMYBCABKAQSGQoRcXVhcmFudGluZV9yZWZfdXMYBSABKAQSJQodY2hhaW5fc2lnbmF0dXJlX2xhd19yZXBsYXlfdXMYBiABKAQSGQoRdmVyZGljdF9kZWNvZGVfdXMYByABKAQSIwobcHJvbW90ZV9hbmRfY2xlYW51cF9yZWZzX3VzGAggASgEEhsKE2Zyb250aWVyX3JlYnVpbGRfdXMYCSABKAQSGQoRZnJvbnRpZXJfc3RvcmVfdXMYCiABKAQSPQoMdmVyaWZpY2F0aW9uGAsgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3Mi7wEKE1Jlc3RvcmVNYWluUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIQCgh2ZXJpZmllZBgCIAEoCBIMCgR3YWxrGAMgASgJEjAKBXNwYW5zGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluU3BhbnMSLQoHdmVyZGljdBgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBI3Cglhc3N1cmFuY2UYBiABKA4yJC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEFzc3VyYW5jZRIQCghhY2NlcHRlZBgHIAEoCCKbAgoKTm9tb3NWYWx1ZRIlCgRudWxsGAEgASgLMhUubm9tb3Mua2VybmVsLnYxLk51bGxIABIRCgdib29sZWFuGAIgASgISAASGAoOc2lnbmVkX2ludGVnZXIYAyABKBJIABIaChB1bnNpZ25lZF9pbnRlZ2VyGAQgASgESAASGAoOZmxvYXRpbmdfcG9pbnQYBSABKAFIABIOCgR0ZXh0GAYgASgJSAASDwoFYnl0ZXMYByABKAxIABIqCgRsaXN0GAggASgLMhoubm9tb3Mua2VybmVsLnYxLk5vbW9zTGlzdEgAEi4KBm9iamVjdBgJIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEgAQgYKBGtpbmQiBgoETnVsbCI4CglOb21vc0xpc3QSKwoGdmFsdWVzGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUikwEKC05vbW9zU3RydWN0EjgKBmZpZWxkcxgBIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdC5GaWVsZHNFbnRyeRpKCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSKgoFdmFsdWUYAiABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZToCOAEiOgoPSGlzdG9yeVJlcXVpcmVkEhEKCXdvcmtzcGFjZRgBIAEoCRIUCgx1bnRpbF9jb21taXQYAiABKAkq6gEKEkJpcnRoT3V0Y29tZVN0YXR1cxIkCiBCSVJUSF9PVVRDT01FX1NUQVRVU19VTlNQRUNJRklFRBAAEh0KGUJJUlRIX09VVENPTUVfU1RBVFVTX0JPUk4QARIhCh1CSVJUSF9PVVRDT01FX1NUQVRVU19ERUZFUlJFRBACEh8KG0JJUlRIX09VVENPTUVfU1RBVFVTX0ZBSUxFRBADEiAKHEJJUlRIX09VVENPTUVfU1RBVFVTX1JFRlVTRUQQBBIpCiVCSVJUSF9PVVRDT01FX1NUQVRVU19VTldBUlJBTlRFRF9DRVJUEAUqzBQKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fUkVGVVNFRBA0EjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfSU5WQVJJQU5UX0VYRUNVVElPTl9GQVVMVBA1EjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfQ0hFQ0tQT0lOVF9TSUdORVJfVU5BVkFJTEFCTEUQNhIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09GRkVSX0JBU0VfU1RBTEUQNxIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JJUlRIX1JFRlVTRUQQOCrJAQoTSW50ZXJmYWNlTWVtYmVyS2luZBIlCiFJTlRFUkZBQ0VfTUVNQkVSX0tJTkRfVU5TUEVDSUZJRUQQABIgChxJTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRE9NQUlOEAESIwofSU5URVJGQUNFX01FTUJFUl9LSU5EX0RJUkVDVElWRRACEiMKH0lOVEVSRkFDRV9NRU1CRVJfS0lORF9BR0dSRUdBVEUQAxIfChtJTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRklFTEQQBCqIAgocSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxIuCipJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIoCiRJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfRVhBQ1QQARItCilJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfQ09NUEFUSUJMRRACEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19VTkFWQUlMQUJMRRADEi8KK0lOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19JTkNPTVBBVElCTEUQBCrDAwocSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIuCipJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fVU5TUEVDSUZJRUQQABIxCi1JTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fRE9NQUlOX01JU1NJTkcQARIxCi1JTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fTUVNQkVSX01JU1NJTkcQAhIwCixJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fRklFTERfTUlTU0lORxADEjUKMUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9WQUxVRV9LSU5EX0NIQU5HRUQQBBI3CjNJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fUkVRVUlSRURfSU5QVVRfQURERUQQBRIxCi1JTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fTUFUUklYX0lOVkFMSUQQBhI4CjRJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fV0lSRV9DT05UUkFDVF9DSEFOR0VEEAcqtwIKEE1haW50ZW5hbmNlUGhhc2USIQodTUFJTlRFTkFOQ0VfUEhBU0VfVU5TUEVDSUZJRUQQABIkCiBNQUlOVEVOQU5DRV9QSEFTRV9SRUFEX0RPQ1VNRU5UUxABEiIKHk1BSU5URU5BTkNFX1BIQVNFX1NRTElURV9JTkRFWBACEiYKIk1BSU5URU5BTkNFX1BIQVNFX0NPTU1BTkRfRlJPTlRJRVIQAxIjCh9NQUlOVEVOQU5DRV9QSEFTRV9DT01NQU5EX1JPVVRFEAQSIQodTUFJTlRFTkFOQ0VfUEhBU0VfR0lUX0NVU1RPRFkQBRImCiJNQUlOVEVOQU5DRV9QSEFTRV9SRUFEX0lOREVYX0NBQ0hFEAYSHgoaTUFJTlRFTkFOQ0VfUEhBU0VfQ09NUExFVEUQByqKAQoPVmVyaWZ5Q2hhaW5XYWxrEiEKHVZFUklGWV9DSEFJTl9XQUxLX1VOU1BFQ0lGSUVEEAASGgoWVkVSSUZZX0NIQUlOX1dBTEtfRlVMTBABEhwKGFZFUklGWV9DSEFJTl9XQUxLX1NVRkZJWBACEhoKFlZFUklGWV9DSEFJTl9XQUxLX01FTU8QAypwChhFZmZlY3RFeGVjdXRpb25QbGFjZW1lbnQSKgomRUZGRUNUX0VYRUNVVElPTl9QTEFDRU1FTlRfVU5TUEVDSUZJRUQQABIoCiRFRkZFQ1RfRVhFQ1VUSU9OX1BMQUNFTUVOVF9DVVNUT0RJQU4QASp2ChpFZmZlY3RFeGVjdXRpb25DYXJkaW5hbGl0eRIsCihFRkZFQ1RfRVhFQ1VUSU9OX0NBUkRJTkFMSVRZX1VOU1BFQ0lGSUVEEAASKgomRUZGRUNUX0VYRUNVVElPTl9DQVJESU5BTElUWV9TSU5HTEVUT04QASq3AQoXTW9kZWxMaWZlY3ljbGVPcGVyYXRpb24SKQolTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9VTlNQRUNJRklFRBAAEiUKIU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fSU5TVEFMTBABEiMKH01PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fU1RBR0UQAhIlCiFNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1BST01PVEUQAyrcAQodQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSMAosQ0hJTERfV09SS1NQQUNFX0xJRkVDWUNMRV9TVEFUVVNfVU5TUEVDSUZJRUQQABIrCidDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19BQ1RJVkUQARIsCihDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19SRVRJUkVEEAISLgoqQ0hJTERfV09SS1NQQUNFX0xJRkVDWUNMRV9TVEFUVVNfUkVDTEFJTUVEEAMq+AEKIkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSNQoxREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9VTlNQRUNJRklFRBAAEjIKLkRFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfU0VMRUNURUQQARIyCi5ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX0VOUk9MTEVEEAISMwovREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9TT1ZFUkVJR04QAyqKAQoVRGVjbGFyZWRMYXdNZW1iZXJLaW5kEigKJERFQ0xBUkVEX0xBV19NRU1CRVJfS0lORF9VTlNQRUNJRklFRBAAEiQKIERFQ0xBUkVEX0xBV19NRU1CRVJfS0lORF9DT01NQU5EEAESIQodREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX1JFQUQQAiqLBgofUHJvdmlkZXJUb2tlblZlcmlmaWNhdGlvblN0YXR1cxIyCi5QUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1VOU1BFQ0lGSUVEEAASLAooUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19WQUxJRBABEjYKMlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTk9fTUFUQ0hJTkdfS0VZEAISLgoqUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19FWFBJUkVEEAMSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT1RfWUVUX1ZBTElEEAQSNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19JU1NVRVJfTUlTTUFUQ0gQBRI4CjRQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0FVRElFTkNFX01JU01BVENIEAYSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19CQURfU0lHTkFUVVJFEAcSMAosUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NQUxGT1JNRUQQCBI8CjhQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1VOU1VQUE9SVEVEX0FMR09SSVRITRAJEi4KKlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQkFEX0tFWRAKEjYKMlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTUlTU0lOR19TVUJKRUNUEAsSMgouUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT19WRVJJRklFUhAMEjQKMFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTUlTU0lOR19UT0tFThANKsgBChJEZXZpY2VTaWduZXJTdGF0dXMSJAogREVWSUNFX1NJR05FUl9TVEFUVVNfVU5TUEVDSUZJRUQQABIfChtERVZJQ0VfU0lHTkVSX1NUQVRVU19BQ1RJVkUQARIfChtERVZJQ0VfU0lHTkVSX1NUQVRVU19BQlNFTlQQAhIgChxERVZJQ0VfU0lHTkVSX1NUQVRVU19SRVZPS0VEEAMSKAokREVWSUNFX1NJR05FUl9TVEFUVVNfS0VZX1VOQVZBSUxBQkxFEAQq1wEKE0JpcnRoRXZpZGVuY2VTdGF0dXMSJQohQklSVEhfRVZJREVOQ0VfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQklSVEhfRVZJREVOQ0VfU1RBVFVTX05PVF9SRVFVSVJFRBABEh8KG0JJUlRIX0VWSURFTkNFX1NUQVRVU19SRUFEWRACEi0KKUJJUlRIX0VWSURFTkNFX1NUQVRVU19ERUxFR0FUSU9OX1JFUVVJUkVEEAMSIQodQklSVEhfRVZJREVOQ0VfU1RBVFVTX0lOVkFMSUQQBCqyAQoRUXVlcnlSZXN1bHRGb3JtYXQSIwofUVVFUllfUkVTVUxUX0ZPUk1BVF9VTlNQRUNJRklFRBAAEiQKIFFVRVJZX1JFU1VMVF9GT1JNQVRfTEVHQUNZX1ZBTFVFEAESJAogUVVFUllfUkVTVUxUX0ZPUk1BVF9OT01JTkFMX1VTREEQAhIsCihRVUVSWV9SRVNVTFRfRk9STUFUX0FQUExJQ0FUSU9OX1BST1RPQlVGEAMqlQwKDlF1ZXJ5T3BlcmF0aW9uEh8KG1FVRVJZX09QRVJBVElPTl9VTlNQRUNJRklFRBAAEhwKGFFVRVJZX09QRVJBVElPTl9FWFRSRU1VTRABEiAKHFFVRVJZX09QRVJBVElPTl9SRUFEX1BPU1RVUkUQBBIfChtRVUVSWV9PUEVSQVRJT05fQ1VSUkVOVF9MQVcQBRIjCh9RVUVSWV9PUEVSQVRJT05fSU5URVJGQUNFX09GRkVSEAYSJwojUVVFUllfT1BFUkFUSU9OX1JFTEFUSU9OX0dBVEVfT0ZGRVIQBxIdChlRVUVSWV9PUEVSQVRJT05fU0NFTkVfTEFXEAgSIQodUVVFUllfT1BFUkFUSU9OX0lOU1RBTExFRF9MQVcQCRIcChhRVUVSWV9PUEVSQVRJT05fREVTQ1JJQkUQChIjCh9RVUVSWV9PUEVSQVRJT05fS0VSTkVMX1JFU09VUkNFEAsSIwofUVVFUllfT1BFUkFUSU9OX0RFVkVMT1BFUl9TUEFOUxAMEikKJVFVRVJZX09QRVJBVElPTl9ERUNMQVJFRF9DQVBBQklMSVRJRVMQDRIdChlRVUVSWV9PUEVSQVRJT05fUkVBRElORVNTEA4SJAogUVVFUllfT1BFUkFUSU9OX1BST0pFQ1RJT05fU1RBVFMQDxIlCiFRVUVSWV9PUEVSQVRJT05fTUVNT1JZX0RST1BfUFJPQkUQEBIYChRRVUVSWV9PUEVSQVRJT05fV0FSTRAREhsKF1FVRVJZX09QRVJBVElPTl9SRUZSRVNIEBISIAocUVVFUllfT1BFUkFUSU9OX1ZFUklGWV9DSEFJThATEiIKHlFVRVJZX09QRVJBVElPTl9DT1VOVEVSRkFDVFVBTBAUEhkKFVFVRVJZX09QRVJBVElPTl9ST1VURRAVEiUKIVFVRVJZX09QRVJBVElPTl9DUllQVE9fU0VBTF9GSUVMRBAYEiwKKFFVRVJZX09QRVJBVElPTl9DUllQVE9fQkxJTkRfSU5ERVhfVE9LRU4QGRIqCiZRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX1NDT1BFX0tFWRAaEi8KK1FVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfREVWSUNFX1JFUVVFU1QQGxIxCi1RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX1BSRVBBUkVfQVBQUk9WQUwQHBIxCi1RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX1BSRVBBUkVfUkVDT1ZFUlkQHRIgChxRVUVSWV9PUEVSQVRJT05fUkVDRUlQVF9QQVRIECISHQoZUVVFUllfT1BFUkFUSU9OX0NFUlRfU0lHThAjEiUKIVFVRVJZX09QRVJBVElPTl9CSVJUSF9UUlVTVF9TVEFURRAkEiEKHVFVRVJZX09QRVJBVElPTl9FUkFfQ0VSVF9TSUdOECUSKAokUVVFUllfT1BFUkFUSU9OX0RFTEVHQVRJT05fQ0VSVF9TSUdOECYSKQolUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9GUk9OVElFUhAnEisKJ1FVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfUFJPSkVDVElPThAoIgQIAhACIgQIAxADIgQIFhAWIgQIFxAXIgQIHhAeIgQIHxAfIgQIIBAgIgQIIRAhKiFRVUVSWV9PUEVSQVRJT05fUEVORElOR19DT05GTElDVFMqKFFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUX1NVTU1BUlkqFFFVRVJZX09QRVJBVElPTl9NSU5UKh1RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0tFWUdFTiofUVVFUllfT1BFUkFUSU9OX0NSWVBUT19XUkFQX0tFWSohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19VTldSQVBfS0VZKh1RVUVSWV9PUEVSQVRJT05fQVVUSE9SX0tFWUdFTiogUVVFUllfT1BFUkFUSU9OX0FUVEVTVEFUSU9OX1NJR04qqQEKGVJlYWRQcm9qZWN0aW9uU3RvcmFnZUtpbmQSLAooUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9VTlNQRUNJRklFRBAAEikKJVJFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfUkVTSURFTlQQARIzCi9SRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX0ZJTEVfQkFDS0VEX1NDQUxBUhACKtICChVSZXNpZGVudENvbXBvbmVudEtpbmQSJwojUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfVU5TUEVDSUZJRUQQABImCiJSRVNJREVOVF9DT01QT05FTlRfS0lORF9GT0xEX1NUQVRFEAESLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9TUUxJVEUQAhIuCipSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX0lOREVYRVMQAxItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9TSEFSRURfQVRUUklCVVRFRBAEEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1dPUktTUEFDRV9DQUNIRVMQBRIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9HSVRfT0JKRUNUX0NBQ0hFEAYqbAoTS2VybmVsTGF3Q2FwYWJpbGl0eRIlCiFLRVJORUxfTEFXX0NBUEFCSUxJVFlfVU5TUEVDSUZJRUQQABIuCipLRVJORUxfTEFXX0NBUEFCSUxJVFlfU1RBR0VfWkVST19CT09UU1RSQVAQASpZChVDaGVja3BvaW50Q29tcHJlc3Npb24SHwobQ0hFQ0tQT0lOVF9DT01QUkVTU0lPTl9OT05FEAASHwobQ0hFQ0tQT0lOVF9DT01QUkVTU0lPTl9HWklQEAEqkQEKHENoZWNrcG9pbnRWZXJpZmljYXRpb25Qb2xpY3kSMwovQ0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1ZFUklGWV9DQU5PTklDQUwQABI8CjhDSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVFJVU1RfUFJFVklPVVNMWV9WRVJJRklFRBABKoABChNDaGVja3BvaW50QXNzdXJhbmNlEiQKIENIRUNLUE9JTlRfQVNTVVJBTkNFX1VOU1BFQ0lGSUVEEAASIAocQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVFJVU1RFRBABEiEKHUNIRUNLUE9JTlRfQVNTVVJBTkNFX1ZFUklGSUVEEAIqiQEKFUtlcm5lbFJlc2lkZW5jeUludGVudBInCiNLRVJORUxfUkVTSURFTkNZX0lOVEVOVF9VTlNQRUNJRklFRBAAEiAKHEtFUk5FTF9SRVNJREVOQ1lfSU5URU5UX1dBUk0QARIlCiFLRVJORUxfUkVTSURFTkNZX0lOVEVOVF9PTl9ERU1BTkQQAiquAQoWQ3VzdG9keVJldGVudGlvbkludGVudBIoCiRDVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfVU5TUEVDSUZJRUQQABIjCh9DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfUkVUQUlOEAESIgoeQ1VTVE9EWV9SRVRFTlRJT05fSU5URU5UX0NBQ0hFEAISIQodQ1VTVE9EWV9SRVRFTlRJT05fSU5URU5UX05PTkUQAyqoAQoaSW50ZW50VHJhbnNwb3J0UmVxdWlyZW1lbnQSLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9VTlNQRUNJRklFRBAAEi4KKklOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfU0VBTEVEX0NIQU5HRRABEiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfQ09NTUlUX1RSRUUQAiqJAQoVTGlmZWN5Y2xlSW5zdGFsbFBoYXNlEicKI0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1VOU1BFQ0lGSUVEEAASIgoeTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfQUNUSVZFEAESIwofTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfUEVORElORxACMlkKEk5vbW9zS2VybmVsU2VydmljZRJDCgRDYWxsEhwubm9tb3Mua2VybmVsLnYxLkNhbGxSZXF1ZXN0Gh0ubm9tb3Mua2VybmVsLnYxLkNhbGxSZXNwb25zZWIGcHJvdG8z", [file_google_protobuf_any]);
|
|
7602
|
+
var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIp0ECg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCEINCgtfaW50ZW50X291dEIPCg1fa2VybmVsX3NwYW5zQhUKE19pbnN0YWxsZWRfbGF3X2hhc2hCDAoKX3BsYWNlbWVudCItChFPZmZlckFnZ3JlZ2F0ZVJlZhIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJIjAKDUJvcm5Xb3Jrc3BhY2USEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkiywMKDEJpcnRoT3V0Y29tZRIWCgl3b3Jrc3BhY2UYASABKAlIAIgBARIzCgZzdGF0dXMYAiABKA4yIy5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lU3RhdHVzEhMKBnJlYXNvbhgDIAEoCUgBiAEBEhEKBGNvZGUYBCABKAlIAogBARIQCghyZXBsYXllZBgFIAEoCBIVCghsYXdfaGFzaBgGIAEoCUgDiAEBEh0KEHBhcmVudF93b3Jrc3BhY2UYByABKAlIBIgBARIcCg9jaGlsZF93b3Jrc3BhY2UYCCABKAlIBYgBARInChpjZXJ0aWZpY2F0ZV9yZWZ1c2FsX3JlYXNvbhgJIAEoCUgGiAEBEjQKB3JlZnVzYWwYCiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgHiAEBQgwKCl93b3Jrc3BhY2VCCQoHX3JlYXNvbkIHCgVfY29kZUILCglfbGF3X2hhc2hCEwoRX3BhcmVudF93b3Jrc3BhY2VCEgoQX2NoaWxkX3dvcmtzcGFjZUIdChtfY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb25CCgoIX3JlZnVzYWwiLwoQS2VybmVsU3Bhbk1ldHJpYxIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgEIqMBCgpLZXJuZWxTcGFuEg0KBWxhYmVsGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEEg8KB3JlY29yZHMYAyABKAQSMQoGcGhhc2VzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMSMAoFbm90ZXMYBSADKAsyIS5ub21vcy5rZXJuZWwudjEuS2VybmVsU3Bhbk1ldHJpYyJxCgtLZXJuZWxTcGFucxIvCgpvcGVyYXRpb25zGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW4SMQoGZW5naW5lGAIgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMiYQoNRG9tYWluUmVmdXNhbBISCgpsYXdfc2hhMjU2GAEgASgMEhEKCWludmFyaWFudBgCIAEoCRIVCg10eXBlX2lkZW50aXR5GAMgASgJEhIKCnZhbHVlX3VzZGEYBCABKAwizgEKDE9mZmVyUmVmdXNlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEi8KB3JlZnVzYWwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbBIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBI2Cg5kb21haW5fcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5Eb21haW5SZWZ1c2FsQgsKCV9vZmZlcl9pZCJ6ChFPZmZlckRlYWRMZXR0ZXJlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQirgEKEE9mZmVyUXVhcmFudGluZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEg4KBnJlYXNvbhgEIAEoCRIxCgtkaWFnbm9zdGljcxgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQigQEKGE9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeRIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBmRldGFpbBgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQivwEKDU9mZmVyUHJlcGFyZWQSHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRIhChlhdXRob3Jfc2lnbmF0dXJlX3JlcXVpcmVkGAQgASgIEjgKCGRldGFjaGVkGAUgASgLMiYubm9tb3Mua2VybmVsLnYxLkRldGFjaGVkU2lnbmluZ0lucHV0cyJjChVEZXRhY2hlZFNpZ25pbmdJbnB1dHMSEgoKcHVibGljX2tleRgBIAEoDBIRCglpbnRlbnRfaWQYAiABKAkSDgoGYXV0aG9yGAMgASgMEhMKC29mZmVyX3Rva2VuGAQgASgJIpUBChREZXRhY2hlZFNpZ25lZENoYW5nZRIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMEhgKEGF1dGhvcl9zaWduYXR1cmUYAyABKAwSEgoKb2ZmZXJfYmFzZRgEIAEoCRIdChVvZmZlcl90b2tlbl9zaWduYXR1cmUYBSABKAwiagoYU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0EhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhUKDWF1dGhvcl9zZWNyZXQYAyABKAwiNwoZU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZRIaChJzaWduZWRfY2hhbmdlX3VzZGEYASABKAwirQEKGVByZXBhcmVSZW1vdGVPZmZlclJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhIKCnB1YmxpY19rZXkYBCABKAwSEQoJc2lnbmF0dXJlGAUgASgMEh0KFXJlcXVpcmVkX2N1c3RvZHlfaGVhZBgGIAEoCSJQChlPZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAEgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAiABKAkimQEKGlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlEj8KCWNoYWxsZW5nZRgBIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5PZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlSAASLwoFb2ZmZXIYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAQgkKB291dGNvbWUigAEKG1NpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdBIVCg1vZmZlcl9yZXF1ZXN0GAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDCJFChxTaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlEhIKCnB1YmxpY19rZXkYASABKAwSEQoJc2lnbmF0dXJlGAIgASgMIqQBChZTaWduaW5nSWRlbnRpdHlSZXF1ZXN0EjsKCGdlbmVyYXRlGAEgASgLMicubm9tb3Mua2VybmVsLnYxLkdlbmVyYXRlU2lnbmluZ0tleVBhaXJIABJACg1kZXJpdmVfcHVibGljGAIgASgLMicubm9tb3Mua2VybmVsLnYxLkRlcml2ZVNpZ25pbmdQdWJsaWNLZXlIAEILCglvcGVyYXRpb24iGAoWR2VuZXJhdGVTaWduaW5nS2V5UGFpciIoChZEZXJpdmVTaWduaW5nUHVibGljS2V5Eg4KBnNlY3JldBgBIAEoDCKWAQoXU2lnbmluZ0lkZW50aXR5UmVzcG9uc2USNAoJZ2VuZXJhdGVkGAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdLZXlQYWlySAASOwoOZGVyaXZlZF9wdWJsaWMYAiABKAsyIS5ub21vcy5rZXJuZWwudjEuU2lnbmluZ1B1YmxpY0tleUgAQggKBnJlc3VsdCI0Cg5TaWduaW5nS2V5UGFpchIOCgZzZWNyZXQYASABKAwSEgoKcHVibGljX2tleRgCIAEoDCImChBTaWduaW5nUHVibGljS2V5EhIKCnB1YmxpY19rZXkYASABKAwinAEKH1NpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlcXVlc3QSFQoNc2lnbmVyX3NlY3JldBgBIAEoDBIaChJhc3NlcnRlcl93b3Jrc3BhY2UYAiABKAkSDgoGb2JqZWN0GAMgASgJEhAKCHJlbGF0aW9uGAQgASgJEg8KB3N1YmplY3QYBSABKAkSEwoLYXR0ZXN0ZWRfYXQYBiABKAkiSQogU2lnbkF1dGhvcml0eUF0dGVzdGF0aW9uUmVzcG9uc2USEQoJc2lnbmF0dXJlGAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiRAoSTWludFR5cGVkSWRSZXF1ZXN0EhAKCHR5cGVfdGFnGAEgASgJEhwKFGNhcHR1cmVkX3VuaXhfbWlsbGlzGAIgASgEIiEKE01pbnRUeXBlZElkUmVzcG9uc2USCgoCaWQYASABKAkiGwoZRW5jcnlwdGlvbklkZW50aXR5UmVxdWVzdCJEChpFbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZRISCgpzZWNyZXRfa2V5GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiRgoTV3JhcFNjb3BlS2V5UmVxdWVzdBIcChRyZWNpcGllbnRfcHVibGljX2tleRgBIAEoDBIRCglzY29wZV9rZXkYAiABKAwiSAoUV3JhcFNjb3BlS2V5UmVzcG9uc2USHAoUZXBoZW1lcmFsX3B1YmxpY19rZXkYASABKAwSEgoKY2lwaGVydGV4dBgCIAEoDCJnChVVbndyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3NlY3JldF9rZXkYASABKAwSHAoUZXBoZW1lcmFsX3B1YmxpY19rZXkYAiABKAwSEgoKY2lwaGVydGV4dBgDIAEoDCIrChZVbndyYXBTY29wZUtleVJlc3BvbnNlEhEKCXNjb3BlX2tleRgBIAEoDCKTAQoNS2VybmVsUmVmdXNhbBIwCgRjb2RlGAEgASgOMiIubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxDb2RlEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIQCgh0ZXJtaW5hbBgEIAEoCCLtDAoNUXVlcnlSZXNwb25zZRIVCgtyZXN1bHRfdXNkYRgCIAEoDEgAEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJKChNhdXRob3JpemF0aW9uX2NoZWNrGAogASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1Jlc3BvbnNlSAASTAoUYXV0aG9yaXphdGlvbl9leHBhbmQYCyABKAsyLC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlSAASPgoNb3NnaV9yZXNvdXJjZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVzb3VyY2VSZXNwb25zZUgAEkoKE2Zyb250aWVyX3RyYW5zaXRpb24YDSABKAsyKy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVzcG9uc2VIABJLChRvd25lZF9kZXZpY2VfcmVxdWVzdBgOIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5Pd25lZERldmljZVJlcXVlc3RSZXNwb25zZUgAEk8KFm93bmVkX3ByZXBhcmVfYXBwcm92YWwYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZUgAEhcKDWludGVnZXJfdmFsdWUYECABKBJIABJQChZhdXRoZW50aWNhdGlvbl9wb3N0dXJlGBEgASgLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlSAASSAoQY2hpbGRfd29ya3NwYWNlcxgSIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVzcG9uc2VIABJZChZhdXRob3JpbmdfcmVxdWlyZW1lbnRzGBMgASgLMjcubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlSAASPgoNd2FybV9wcm9ncmVzcxgVIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5XYXJtUHJvZ3Jlc3NSZXNwb25zZUgAElUKGWlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3MYFiABKAsyMC5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NSZXNwb25zZUgAElIKF2ludGVyZmFjZV9jb21wYXRpYmlsaXR5GBcgASgLMi8ubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZUNvbXBhdGliaWxpdHlSZXNwb25zZUgAEjIKEmFwcGxpY2F0aW9uX3Jlc3VsdBgYIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIABJKChNtYWludGVuYW5jZV9xdWFudHVtGBkgASgLMisubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUXVhbnR1bVJlc3BvbnNlSAASPwoScmVhZF9pbmRleF9wZW5kaW5nGBogASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdIABJHChJmdWxsX2hpc3RvcnlfYXVkaXQYGyABKAsyKS5ub21vcy5rZXJuZWwudjEuRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlSAASUwoYd29ya3NwYWNlX2VmZmVjdF9yZWNlaXB0GBwgASgLMi8ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZUVmZmVjdFJlY2VpcHRSZXNwb25zZUgAEksKFG9wZW5fYXBpX2Rlc2NyaXB0aW9uGB0gASgLMisubm9tb3Mua2VybmVsLnYxLk9wZW5BcGlEZXNjcmlwdGlvblJlc3BvbnNlSAASVwoaaW5zdGFsbGVkX2xhd19kZWNsYXJhdGlvbnMYHiABKAsyMS5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljc0IICgZyZXN1bHQiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSI+ChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIooBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJIv8BChRXYXJtUHJvZ3Jlc3NSZXNwb25zZRIbChNtYWludGVuYW5jZV9wZW5kaW5nGAEgASgIEiQKF3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluGAIgASgJSACIAQESJQoYcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlGAMgASgJSAGIAQESJgoZcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvchgEIAEoCUgCiAEBQhoKGF9wcmVwYXJlZF9jb21tYW5kX2RvbWFpbkIbChlfcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlQhwKGl9wcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yIlEKEFJlYWRJbmRleFBlbmRpbmcSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIaChJyZXF1ZXN0ZWRfZnJvbnRpZXIYAyABKAkijQIKF01haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5Eh0KEHJlcXVlc3RlZF9kb21haW4YASABKAlIAIgBARIeChFyZXF1ZXN0ZWRfcGFja2FnZRgCIAEoCUgBiAEBEiAKE3JlcXVlc3RlZF9kaXJlY3RpdmUYAyABKAlIAogBARIXCg9sb2NhbF9yZWFkX29ubHkYBCABKAgSHAoUbWFpbnRhaW5fZ2l0X2N1c3RvZHkYBSABKAgSFwoPcmVhZF9pbmRleF9vbmx5GAYgASgIQhMKEV9yZXF1ZXN0ZWRfZG9tYWluQhQKEl9yZXF1ZXN0ZWRfcGFja2FnZUIWChRfcmVxdWVzdGVkX2RpcmVjdGl2ZSKCBAoaTWFpbnRlbmFuY2VRdWFudHVtUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYAiABKAgSMAoFcGhhc2UYAyABKA4yIS5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VQaGFzZRIZCgxnaXRfZnJvbnRpZXIYBCABKAlIAIgBARIaCg1yZWFkX2Zyb250aWVyGAUgASgJSAGIAQESHAoPc3FsaXRlX2Zyb250aWVyGAYgASgJSAKIAQESEgoKd29ya191bml0cxgHIAEoBBIWCg5lbGFwc2VkX21pY3JvcxgIIAEoBBIkChdwcmVwYXJlZF9jb21tYW5kX2RvbWFpbhgJIAEoCUgDiAEBEiUKGHByZXBhcmVkX2NvbW1hbmRfcGFja2FnZRgKIAEoCUgEiAEBEiYKGXByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IYCyABKAlIBYgBAUIPCg1fZ2l0X2Zyb250aWVyQhAKDl9yZWFkX2Zyb250aWVyQhIKEF9zcWxpdGVfZnJvbnRpZXJCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IiSAoNT3NnaUF0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJEhEKBHR5cGUYAyABKAlIAIgBAUIHCgVfdHlwZSIsCg1Pc2dpRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiiwEKDk9zZ2lDYXBhYmlsaXR5EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIowBCg9Pc2dpUmVxdWlyZW1lbnQSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUimgEKFE9zZ2lSZXNvdXJjZVJlc3BvbnNlEhMKC3NvdXJjZV91c2RhGAEgASgMEjUKDGNhcGFiaWxpdGllcxgCIAMoCzIfLm5vbW9zLmtlcm5lbC52MS5Pc2dpQ2FwYWJpbGl0eRI2CgxyZXF1aXJlbWVudHMYAyADKAsyIC5ub21vcy5rZXJuZWwudjEuT3NnaVJlcXVpcmVtZW50IucBChNWZXJpZnlDaGFpblN0ZXBTcGFuEg0KBWluZGV4GAEgASgEEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRIQCgh0b3RhbF91cxgFIAEoBBI2CgZwaGFzZXMYBiABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEkAKDmVuZ2luZV90aW1pbmdzGAcgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nIpgCChVWZXJpZnlDaGFpblN0ZXBQaGFzZXMSHgoWcnVudGltZV9sYXdfcmVmcmVzaF91cxgBIAEoBBITCgttYW5pZmVzdF91cxgCIAEoBBIZChFsYXdfcmVzb2x1dGlvbl91cxgDIAEoBBIdChVtYW5hZ2VkX3RyYW5zaXRpb25fdXMYBCABKAQSFAoMcHJpbmNpcGFsX3VzGAUgASgEEhQKDGV2b2x1dGlvbl91cxgGIAEoBBIaChJjb2xvY2F0ZWRfcmVhZHNfdXMYByABKAQSIQoZdHlwZWRfaW5zdGFsbF92ZXJpZmllcl91cxgIIAEoBBIUCgxhZG1pc3Npb25fdXMYCSABKAQSDwoHZm9sZF91cxgKIAEoBCLaBQoWVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIuCgR3YWxrGAEgASgOMiAubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluV2FsaxIQCgh0b3RhbF91cxgCIAEoBBIbChNyZWZlcmVuY2VfbG9va3VwX3VzGAMgASgEEhoKEnJlcG9zaXRvcnlfb3Blbl91cxgEIAEoBBIVCg1jaGFpbl9yZWFkX3VzGAUgASgEEhYKDmVuZ2luZV9pbml0X3VzGAYgASgEEhgKEHRpbWVsaW5lX3JlYWRfdXMYByABKAQSGAoQbGF3X2h5ZHJhdGlvbl91cxgIIAEoBBIbChNyZWNvdmVyeV9wcmVzY2FuX3VzGAkgASgEEhgKEGZvbGRfZnJvbnRpZXJfdXMYCiABKAQSMwoFc3RlcHMYCyADKAsyJC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwU3BhbhJACg5lbmdpbmVfdGltaW5ncxgMIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZxJNChVsYXdfaHlkcmF0aW9uX3RpbWluZ3MYDSADKAsyLi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSGQoRbGF3X2Nsb3N1cmVfY291bnQYDiABKAQSHgoWbGF3X2Nsb3N1cmVfY2FjaGVfaGl0cxgPIAEoBBIgChhsYXdfY2xvc3VyZV9jYWNoZV9taXNzZXMYECABKAQSEgoKc3RlcF9jb3VudBgRIAEoBBIVCg1zdGVwX3RvdGFsX3VzGBIgASgEEkEKEXN0ZXBfcGhhc2VfdG90YWxzGBMgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxIaChJvbWl0dGVkX3N0ZXBfY291bnQYFCABKAQiOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiQAodVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiqwEKFEh0dHBzRXhlY3V0aW9uUG9saWN5EjwKCXBsYWNlbWVudBgBIAEoDjIpLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25QbGFjZW1lbnQSQAoLY2FyZGluYWxpdHkYAiABKA4yKy5ub21vcy5rZXJuZWwudjEuRWZmZWN0RXhlY3V0aW9uQ2FyZGluYWxpdHkSEwoLbGF3X2Nsb3N1cmUYAyABKAkiWwoSSHR0cHNPdXRib3VuZFJvdXRlEgsKA3VybBgBIAEoCRI4CglleGVjdXRpb24YAiABKAsyJS5ub21vcy5rZXJuZWwudjEuSHR0cHNFeGVjdXRpb25Qb2xpY3kiKwoWV29ya3NwYWNlT3V0Ym91bmRSb3V0ZRIRCgl3b3Jrc3BhY2UYASABKAkihQIKFUNhcnJpZWRXb3Jrc3BhY2VPZmZlchIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhUKDXNvdXJjZV9jb21taXQYAiABKAkSGQoRc291cmNlX29mZmVyX3BhdGgYAyABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYBSABKAwSIwobYWRtaXNzaW9uX2NoZWNrcG9pbnRfc2VjcmV0GAYgASgMEhUKDWVmZmVjdF9kaWdlc3QYByABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAggASgJSgQIBBAFUgZ0YXJnZXQizAQKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSFwoLZGVzdGluYXRpb24YAiABKAlCAhgBEhQKDHNlYWxlZF9vZmZlchgDIAEoDBIUCgxjb250ZW50X3R5cGUYBCABKAkSGAoQc291cmNlX3dvcmtzcGFjZRgFIAEoCRIUCgxjdXN0b2R5X2hlYWQYBiABKAkSFwoPY2F1c2VkX2J5X29mZmVyGAcgASgJEhsKE3NjaGVkdWxlZF9hdF9taWxsaXMYCCABKAQSGgoSZGVhZGxpbmVfYXRfbWlsbGlzGAkgASgEEhQKDGN1c3RvZHlfcGF0aBgKIAEoCRITCgtjdXN0b2R5X29pZBgLIAEoCRIUCgxkZWxpdmVyeV9yZWYYDCABKAkSFQoNb2JsaWdhdGlvbl9pZBgNIAEoCRI6CgtodHRwc19yb3V0ZRgOIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYDyABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAEhUKDXNvdXJjZV9jb21taXQYECABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYESABKAwSGQoRc291cmNlX29mZmVyX3BhdGgYEiABKAkSFQoNZWZmZWN0X2RpZ2VzdBgTIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYFCABKAlCBwoFcm91dGUi7gEKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBEi0KB2VudHJpZXMYAyADKAsyHC5ub21vcy5rZXJuZWwudjEuT3V0Ym94RW50cnkSFAoMd29ya19wZW5kaW5nGAQgASgIEhUKDWVudHJpZXNfdG90YWwYBSABKA0SGAoQZW50cmllc19wcmVwYXJlZBgGIAEoDUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIr0BCgtPdXRib3hFbnRyeRIKCgJpZBgBIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgCIAEoCRI6CgtodHRwc19yb3V0ZRgDIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYBCABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAQgcKBXJvdXRlIpQBChRQcmVwYXJlT3V0Ym91bmRPZmZlchIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEhoKDXNvdXJjZV9jb21taXQYAiABKAlIAIgBARIeChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCUgBiAEBQhAKDl9zb3VyY2VfY29tbWl0QhQKEl9zb3VyY2Vfb2ZmZXJfcGF0aCLxBAoMU3luY1Jlc3BvbnNlEhAKCGFkbWl0dGVkGAIgASgIEgwKBGhlYWQYAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkSHAoUYWRtaXR0ZWRfcmVtb3RlX2hlYWQYBSABKAkSHAoUcmVwbGF5ZWRfcmVtb3RlX2hlYWQYBiABKAkSPAoPYWRtaXR0ZWRfcmVtb3RlGAcgAygLMiMubm9tb3Mua2VybmVsLnYxLlN5bmNBZG1pdHRlZEludGVudBI8ChVyZW1vdGVfYmlydGhfb3V0Y29tZXMYCCADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEjkKDnJlbW90ZV9yZWZ1c2FsGAkgASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2FsSACIAQESOwoOcmVwbGF5ZWRfbG9jYWwYCiADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY1JlcGxheWVkSW50ZW50EiAKGHNraXBwZWRfbG9jYWxfaW50ZW50X2lkcxgLIAMoCRI5Cg1yZWZ1c2VkX2xvY2FsGAwgAygLMiIubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2VkSW50ZW50EkcKFGN1c3RvZHlfZGlzYWdyZWVtZW50GA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlEaXNhZ3JlZW1lbnRIAYgBARIZChFwYXJrZWRfbG9jYWxfcmVmcxgOIAMoCUIRCg9fcmVtb3RlX3JlZnVzYWxCFwoVX2N1c3RvZHlfZGlzYWdyZWVtZW50SgQIARACUgZyZXN1bHQiUQoTQ3VzdG9keURpc2FncmVlbWVudBISCgpsb2NhbF9oZWFkGAEgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAIgASgJEg4KBnJlYXNvbhgDIAEoCSJPChJTeW5jQWRtaXR0ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEhgKEGNhbmRpZGF0ZV9jb21taXQYAiABKAkSDAoEaGVhZBgDIAEoCSJsChJTeW5jUmVwbGF5ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEgwKBGhlYWQYAiABKAkSNQoOYmlydGhfb3V0Y29tZXMYAyADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lIqEBCgtTeW5jUmVmdXNhbBIWCglpbnRlbnRfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSEQoEY29kZRgDIAEoCUgBiAEBEjQKB3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgCiAEBQgwKCl9pbnRlbnRfaWRCBwoFX2NvZGVCCgoIX3JlZnVzYWwijQEKEVN5bmNSZWZ1c2VkSW50ZW50EhEKCWludGVudF9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkSEwoLY2hhbmdlX3VzZGEYAyABKAwSNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSACIAQFCCgoIX3JlZnVzYWwiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIIg4KDEdlbmVzaXNPZmZlciKjAQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEicKCW9wZXJhdGlvbhgFIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSFgoOYXJndW1lbnRzX2pzb24YBiABKAlKBAgDEARKBAgEEAVSCWNhbGxfdXNkYVIHcGF5bG9hZFIObGVnYWN5X3BheWxvYWQi1gIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSFAoMcHJlcGFyZV9vbmx5GAwgASgIQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSJsChtTaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3QSNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIVCg1zaWduZXJfc2VjcmV0GAIgASgMIlYKHFNpZ25CaXJ0aENlcnRpZmljYXRlUmVzcG9uc2USNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZSLsAgoUTW9kZWxMaWZlY3ljbGVJbnRlbnQSOwoJb3BlcmF0aW9uGAEgASgOMigubm9tb3Mua2VybmVsLnYxLk1vZGVsTGlmZWN5Y2xlT3BlcmF0aW9uEhQKDGluc3RhbGxlZF9ieRgCIAEoCRIXCgpzdXBlcnNlZGVzGAMgASgJSACIAQESRAoKdHJhbnNpdGlvbhgEIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25SZXNwb25zZUgBiAEBEhUKCHJlcGxhY2VzGAUgASgJSAKIAQESHgoRYWNjZXB0YW5jZV9yZWFzb24YBiABKAlIA4gBARIZCgxsYXdfaWRlbnRpdHkYByABKAlIBIgBAUINCgtfc3VwZXJzZWRlc0INCgtfdHJhbnNpdGlvbkILCglfcmVwbGFjZXNCFAoSX2FjY2VwdGFuY2VfcmVhc29uQg8KDV9sYXdfaWRlbnRpdHkiOwofSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbhIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJIucHCgxPZmZlclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCgRjYWxsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUNhbGxIABIcChJzZWFsZWRfY2hhbmdlX3VzZGEYByABKAxIABJACg9tb2RlbF9saWZlY3ljbGUYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVJbnRlbnRIABJeCiJpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzX2Fkb3B0aW9uGA0gASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQWRvcHRpb25IABIwCgdnZW5lc2lzGA4gASgLMh0ubm9tb3Mua2VybmVsLnYxLkdlbmVzaXNPZmZlckgAEkkKF2NhcnJpZWRfd29ya3NwYWNlX29mZmVyGA8gASgLMiYubm9tb3Mua2VybmVsLnYxLkNhcnJpZWRXb3Jrc3BhY2VPZmZlckgAEjQKCXBsYWNlbWVudBgQIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5QbGFjZW1lbnRPZmZlckgAEkcKFmRldGFjaGVkX3NpZ25lZF9jaGFuZ2UYEiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2VIABI0CglhdXRob3JpbmcYAyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaW5nT3B0aW9ucxIQCghsYXdfdXNkehgEIAEoDBIzCgxhdHRlc3RhdGlvbnMYBSADKAsyHS5ub21vcy5rZXJuZWwudjEuQXR0ZXN0ZWRSZWFkEj0KEmNvbmZsaWN0X3NuYXBzaG90cxgGIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5Db25mbGljdFNuYXBzaG90EhoKEmV4ZWN1dGlvbl9sYXdfdXNkehgIIAEoDBIgChNjb250cm9sbGVyX2xhd19oYXNoGAkgASgJSAGIAQESHQoQY2FuZGlkYXRlX2NvbW1pdBgKIAEoCUgCiAEBEjwKEWJpcnRoX2NlcnRpZmljYXRlGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUSKwoJbGF3X3VuaXRzGBEgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXRCCAoGaW50ZW50QhYKFF9jb250cm9sbGVyX2xhd19oYXNoQhMKEV9jYW5kaWRhdGVfY29tbWl0IjYKB0xhd1VuaXQSKwoFZmlsZXMYASADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEZpbGUiLAoLTGF3VW5pdEZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIsUBCgxBdHRlc3RlZFJlYWQSEAoIcXVlcnlfaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EisKBnJlc3VsdBgDIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlEjIKCGV2aWRlbmNlGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRBdHRlc3RhdGlvbkoECAQQBVILYXR0ZXN0YXRpb24i1QEKD1JlYWRBdHRlc3RhdGlvbhIPCgd2ZXJzaW9uGAEgASgDEhgKEHNvdXJjZV93b3Jrc3BhY2UYAiABKAkSFgoOc291cmNlX2dlbmVzaXMYAyABKAkSEwoLc291cmNlX2hlYWQYBCABKAkSEQoJZm9sZF9yb290GAUgASgJEhQKDHNvdXJjZV9lcG9jaBgGIAEoAxIaChJhdHRlc3RlZF9hdF9taWxsaXMYByABKAMSEgoKcHVibGljX2tleRgIIAEoDBIRCglzaWduYXR1cmUYCSABKAwidQoQQ29uZmxpY3RTbmFwc2hvdBIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSDQoFZmllbGQYAyABKAkSFQoNdGFyZ2V0X3NjaGVtYRgEIAEoCRINCgV0b2tlbhgFIAEoCSKQDwoMUXVlcnlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSMgoJYXV0aG9yaXR5GAIgASgLMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5QXV0aG9yaXR5Eg0KBXNwYW5zGAMgASgIEjkKDXJlc3VsdF9mb3JtYXQYBCABKA4yIi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXN1bHRGb3JtYXQSKgoEcm93cxgKIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Sb3dzUXVlcnlIABIqCgRwYWdlGAsgASgLMhoubm9tb3Mua2VybmVsLnYxLlBhZ2VRdWVyeUgAEisKBWJ5X2lkGAwgASgLMhoubm9tb3Mua2VybmVsLnYxLkJ5SWRRdWVyeUgAEjkKDHJlc29sdmVfcmVmcxgNIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmc1F1ZXJ5SAASRQoScmVmZXJlbmNlX3ZlcnNpb25zGA4gASgLMicubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25zUXVlcnlIABIsCgVjb3VudBgPIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASKgoDc3VtGBAgASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIwCgdzcGF0aWFsGBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlNwYXRpYWxRdWVyeUgAEiwKBW5hbWVkGBIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5hbWVkUXVlcnlIABJJChNhdXRob3JpemF0aW9uX2NoZWNrGBMgASgLMioubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1JlcXVlc3RIABJLChRhdXRob3JpemF0aW9uX2V4cGFuZBgUIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdEgAEkkKE2Zyb250aWVyX3RyYW5zaXRpb24YFSABKAsyKi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdEgAEi8KB2J5X3R5cGUYFiABKAsyHC5ub21vcy5rZXJuZWwudjEuQnlUeXBlUXVlcnlIABJIChRvd25lZF9kZXZpY2VfcmVxdWVzdBgXIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Pd25lZERldmljZVJlcXVlc3RRdWVyeUgAEkwKFm93bmVkX3ByZXBhcmVfYXBwcm92YWwYGCABKAsyKi5ub21vcy5rZXJuZWwudjEuT3duZWRQcmVwYXJlQXBwcm92YWxRdWVyeUgAEkMKEXBlbmRpbmdfY29uZmxpY3RzGBkgASgLMiYubm9tb3Mua2VybmVsLnYxLlBlbmRpbmdDb25mbGljdHNRdWVyeUgAElAKGHBlbmRpbmdfY29uZmxpY3Rfc3VtbWFyeRgaIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5QZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnlIABJNChZhdXRoZW50aWNhdGlvbl9wb3N0dXJlGBsgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5SAASQAoQY2hpbGRfd29ya3NwYWNlcxgcIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5SAASVgoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgdIAEoCzI0Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNRdWVyeUgAElIKGWlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3MYHiABKAsyLS5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NRdWVyeUgAEk8KF2ludGVyZmFjZV9jb21wYXRpYmlsaXR5GB8gASgLMiwubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZUNvbXBhdGliaWxpdHlRdWVyeUgAEkcKE21haW50ZW5hbmNlX3F1YW50dW0YICABKAsyKC5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VRdWFudHVtUXVlcnlIABJEChJmdWxsX2hpc3RvcnlfYXVkaXQYISABKAsyJi5ub21vcy5rZXJuZWwudjEuRnVsbEhpc3RvcnlBdWRpdFF1ZXJ5SAASUAoYd29ya3NwYWNlX2VmZmVjdF9yZWNlaXB0GCIgASgLMiwubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZUVmZmVjdFJlY2VpcHRRdWVyeUgAElQKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGCMgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5SABCBwoFcXVlcnkiVgobV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5EiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgBIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAIgASgJIuQBCh5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2USGAoQdGFyZ2V0X3dvcmtzcGFjZRgBIAEoCRIgChh0YXJnZXRfd29ya3NwYWNlX2dlbmVzaXMYAiABKAkSFQoNb2JzZXJ2ZWRfaGVhZBgDIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYBCABKAkSFQoNZWZmZWN0X2RpZ2VzdBgFIAEoCRIfChJhZG1pdHRlZF9pbnRlbnRfaWQYBiABKAlIAIgBAUIVChNfYWRtaXR0ZWRfaW50ZW50X2lkIhcKFUZ1bGxIaXN0b3J5QXVkaXRRdWVyeSKwAwoYRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEi4KBHdhbGsYAiABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhEKBGhlYWQYAyABKAlIAIgBARIUCgdpbnRlbnRzGAQgASgESAGIAQESGAoLcGxhbnNfcmVydW4YBSABKARIAogBARIcCg9jb250cm9sbGVyX2hhc2gYBiABKAlIA4gBARIZChFpbnN0YWxsZWRfZG9tYWlucxgHIAMoCRISCgVjaGVjaxgIIAEoCUgEiAEBEhUKCGF0X2luZGV4GAkgASgESAWIAQESEgoFZXJyb3IYCiABKAlIBogBARI0CgdyZWZ1c2FsGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIHCgVfaGVhZEIKCghfaW50ZW50c0IOCgxfcGxhbnNfcmVydW5CEgoQX2NvbnRyb2xsZXJfaGFzaEIICgZfY2hlY2tCCwoJX2F0X2luZGV4QggKBl9lcnJvckIKCghfcmVmdXNhbCIeChxJZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5IosCChpJZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRIPCgdvcmRpbmFsGAEgASgEEgsKA2t0eRgCIAEoCRIQCgNraWQYAyABKAlIAIgBARIQCgNhbGcYBCABKAlIAYgBARIQCgN1c2UYBSABKAlIAogBARIQCgNjcnYYBiABKAlIA4gBARIOCgF4GAcgASgJSASIAQESDgoBeRgIIAEoCUgFiAEBEg4KAW4YCSABKAlIBogBARIOCgFlGAogASgJSAeIAQESDwoHa2V5X29wcxgLIAMoCUIGCgRfa2lkQgYKBF9hbGdCBgoEX3VzZUIGCgRfY3J2QgQKAl94QgQKAl95QgQKAl9uQgQKAl9lImMKIklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSEwoLa2V5X29yZGluYWwYASABKAQSGwoTY2VydGlmaWNhdGVfb3JkaW5hbBgCIAEoBBILCgNkZXIYAyABKAwixQQKH0lkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2USGAoQc291cmNlX3dvcmtzcGFjZRgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRITCgtzb3VyY2VfaGVhZBgDIAEoCRINCgVlcG9jaBgEIAEoBBIfChJwcmVkZWNlc3Nvcl9zaGEyNTYYBSABKAxIAIgBARIOCgZpc3N1ZXIYBiABKAkSFQoIYXVkaWVuY2UYByABKAlIAYgBARIXCg9wcmluY2lwYWxfY2xhaW0YCCABKAkSIQoUZGV2aWNlX2JpbmRpbmdfY2xhaW0YCSABKAlIAogBARIeChZyZXF1aXJlX2RldmljZV9iaW5kaW5nGAogASgIEjkKBGtleXMYCyADKAsyKy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NLZXkSSQoMY2VydGlmaWNhdGVzGAwgAygLMjMubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSFwoPbWF0ZXJpYWxfc2hhMjU2GA0gASgMEjMKDGF0dGVzdGF0aW9ucxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWRCFQoTX3ByZWRlY2Vzc29yX3NoYTI1NkILCglfYXVkaWVuY2VCFwoVX2RldmljZV9iaW5kaW5nX2NsYWltSgQIDhAPUhFzb3VyY2VfcHJvb2ZfdXNkYSIVChNDaGlsZFdvcmtzcGFjZVF1ZXJ5IpABChlDaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkEhEKCXdvcmtzcGFjZRgBIAEoCRI+CgZzdGF0dXMYAiABKA4yLi5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSFAoHYm9ybl9hdBgDIAEoCUgAiAEBQgoKCF9ib3JuX2F0IlsKG0NoaWxkV29ya3NwYWNlUXVlcnlSZXNwb25zZRI8CghjaGlsZHJlbhgBIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkIh8KHUluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5IjcKEEluc3RhbGxlZExhd1VuaXQSEAoIdW5pdF9rZXkYASABKAkSEQoJdW5pdF9oYXNoGAIgASgJIowBChNJbnN0YWxsZWRMYXdVbml0U2V0EhQKDHNldF9pZGVudGl0eRgBIAEoCRIYChBjb21wb3Nlcl92ZXJzaW9uGAIgASgJEhMKC29wZW51c2RfcmV2GAMgASgJEjAKBXVuaXRzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd1VuaXQigQIKHkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlchIOCgZkb21haW4YASABKAkSDgoGbWVtYmVyGAIgASgJEjsKC21lbWJlcl9raW5kGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkTGF3TWVtYmVyS2luZBJBCgRraW5kGAQgASgOMjMubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSDQoFc2NvcGUYBSABKAkSHAoPaWRlbnRpdHlfc2hhMjU2GAYgASgJSACIAQFCEgoQX2lkZW50aXR5X3NoYTI1NiLpAQofSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucxIYChBjbG9zdXJlX2lkZW50aXR5GAEgASgJEg8KB2RvbWFpbnMYAiADKAkSOwoIdW5pdF9zZXQYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdFNldEgAiAEBElEKGGF1dGhlbnRpY2F0aW9uX3Byb3ZpZGVycxgEIAMoCzIvLm5vbW9zLmtlcm5lbC52MS5EZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJCCwoJX3VuaXRfc2V0InQKIEluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSQgoIY2xvc3VyZXMYAiADKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucyLKAQojRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnkSEQoJZGlyZWN0aXZlGAEgASgJEhYKCXByaW5jaXBhbBgCIAEoCUgAiAEBEhcKCnB1YmxpY19rZXkYAyABKAxIAYgBARIVCghrZXlfaGFzaBgEIAEoCUgCiAEBEhMKBmRvbWFpbhgFIAEoCUgDiAEBQgwKCl9wcmluY2lwYWxCDQoLX3B1YmxpY19rZXlCCwoJX2tleV9oYXNoQgkKB19kb21haW4ijAIKJkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlEg0KBWZvdW5kGAEgASgIEhMKBmRvbWFpbhgCIAEoCUgAiAEBEhUKCHJlbGF0aW9uGAMgASgJSAGIAQESEwoGb2JqZWN0GAQgASgJSAKIAQESEgoFYWN0b3IYBSABKAlIA4gBARIVCghrZXlfaGFzaBgGIAEoCUgEiAEBEhcKD3NpZ25lcl9lbnJvbGxlZBgHIAEoCBIUCgxyb2xlX2FsbG93ZWQYCCABKAhCCQoHX2RvbWFpbkILCglfcmVsYXRpb25CCQoHX29iamVjdEIICgZfYWN0b3JCCwoJX2tleV9oYXNoInIKGkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5Eh4KFmluY2x1ZGVfYmlydGhfZXZpZGVuY2UYASABKAgSHgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxIAIgBAUIUChJfZGV2aWNlX3B1YmxpY19rZXki7AIKHUF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlEkgKDnByb3ZpZGVyX3Rva2VuGAEgASgOMjAubm9tb3Mua2VybmVsLnYxLlByb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSFwoPZW5yb2xsZWRfZGV2aWNlGAIgASgIEhoKEnJlc29sdmVkX3ByaW5jaXBhbBgDIAEoCRJECg5iaXJ0aF9ldmlkZW5jZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5CaXJ0aEV2aWRlbmNlUmVhZGluZXNzSACIAQESQQoUZGV2aWNlX3NpZ25lcl9zdGF0dXMYBSABKA4yIy5ub21vcy5rZXJuZWwudjEuRGV2aWNlU2lnbmVyU3RhdHVzEhoKEmRldmljZV9rZXlfc3ViamVjdBgGIAEoCRIUCgxzaWduZXJfZXBvY2gYByABKANCEQoPX2JpcnRoX2V2aWRlbmNlIl4KFkJpcnRoRXZpZGVuY2VSZWFkaW5lc3MSNAoGc3RhdHVzGAEgASgOMiQubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VTdGF0dXMSDgoGZGV0YWlsGAIgASgJIigKF093bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5Eg0KBXNjb3BlGAEgASgJIjIKGk93bmVkRGV2aWNlUmVxdWVzdFJlc3BvbnNlEhQKDHJlcXVlc3RfdXNkYRgBIAEoDCJAChlPd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5Eg0KBXNjb3BlGAEgASgJEhQKDHJlcXVlc3RfdXNkYRgCIAEoDCK/AQocT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZRIXCg9uZXdfa2V5X3N1YmplY3QYASABKAkSGgoSb3duZWRfY3VzdG9keV91c2RhGAIgASgMEhQKDHZlcmlmaWVkX3ZpYRgDIAEoCRIYChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgEEh8KF2FwcHJvdmVkX2F0X3VuaXhfbWlsbGlzGAUgASgEEhkKEW93bmVkX2tleV9zdWJqZWN0GAYgASgJIpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMIqgBCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgEIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYBSABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IsYBCglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgGIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIjgKC0J5VHlwZVF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJImIKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEhYKCWdyb3VwX2tleRgEIAEoCUgAiAEBQgwKCl9ncm91cF9rZXlKBAgCEANSCWFyZ3VtZW50cyJ6CgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg0KBW1pbl94GAQgASgBEg0KBW1pbl95GAUgASgBEg0KBW1heF94GAYgASgBEg0KBW1heF95GAcgASgBSgQIAhADUglhcmd1bWVudHMiWgoVUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5EhsKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJSACIAQESEQoJcHJpbmNpcGFsGAIgASgJQhEKD19hZ2dyZWdhdGVfdHlwZSIwChtQZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnkSEQoJcHJpbmNpcGFsGAEgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKxAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBAUIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24iqAEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEjYKB3ByZXBhcmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUHJlcGFyZU91dGJvdW5kT2ZmZXIimQEKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkSGgoScGFya19yZWZ1c2VkX2xvY2FsGAQgASgIEhgKEHBhcmtlZF9hdF9taWxsaXMYBSABKAQifwoaS2VybmVsQ29uZmlndXJhdGlvblJlcXVlc3QSHQoVdHJ1c3Rfcm9vdF9wdWJsaWNfa2V5GAEgASgMEiUKGHRydXN0c19jdXN0b2RpYW5faGlzdG9yeRgCIAEoCEgAiAEBQhsKGV90cnVzdHNfY3VzdG9kaWFuX2hpc3RvcnkiTAobS2VybmVsQ29uZmlndXJhdGlvblJlc3BvbnNlEi0KBnJlc3VsdBgBIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWQi8xEKDkN1c3RvZHlSZXF1ZXN0EjcKCnBhY2tfZGVsdGEYCiABKAsyIS5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVxdWVzdEgAEjcKCmFwcGx5X3BhY2sYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVxdWVzdEgAEjcKCnJlcG9fc3RhdHMYDCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVxdWVzdEgAEj0KDWludGVudHNfYWJvdmUYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVxdWVzdEgAEj8KDmluc3BlY3RfY2hhbmdlGA4gASgLMiUubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXF1ZXN0SAASTgoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABJQChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzItLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASNQoJcmVhZF9ibG9iGBEgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVxdWVzdEgAEjkKC3Jlc29sdmVfcmVmGBIgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXF1ZXN0SAASNQoJbGlzdF9yZWZzGBMgASgLMiAubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVxdWVzdEgAEjUKCXdyaXRlX3JlZhgUIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xcml0ZVJlZlJlcXVlc3RIABI3CgpkZWxldGVfcmVmGBUgASgLMiEubm9tb3Mua2VybmVsLnYxLkRlbGV0ZVJlZlJlcXVlc3RIABJEChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXF1ZXN0SAASQgoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzImLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1JlcXVlc3RIABJFChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0SAASQwoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzInLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXF1ZXN0SAASOwoMcmVzdG9yZV9tYWluGBsgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVxdWVzdEgAEk4KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0SAASRwoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMikubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVxdWVzdEgAEkEKD2hpc3Rvcnlfc3VtbWFyeRgeIAEoCzImLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5U3VtbWFyeVJlcXVlc3RIABJaChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjIubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVxdWVzdEgAEj4KDm9wZW5fZ2l0X3N0YXRlGCAgASgLMiQubm9tb3Mua2VybmVsLnYxLk9wZW5HaXRTdGF0ZVJlcXVlc3RIABJOChZyZWFkX2N1c3RvZHlfcGxhY2VtZW50GCEgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlYWRDdXN0b2R5UGxhY2VtZW50UmVxdWVzdEgAElQKGWluc3BlY3RfY3VzdG9keV9wbGFjZW1lbnQYIyABKAsyLy5ub21vcy5rZXJuZWwudjEuSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0SAASUAoXcmVsZWFzZV93b3Jrc3BhY2Vfc3RhdGUYJCABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdEgAEl8KH3JlY29yZF93b3Jrc3BhY2VfZWZmZWN0X291dGNvbWUYJSABKAsyNC5ub21vcy5rZXJuZWwudjEuUmVjb3JkV29ya3NwYWNlRWZmZWN0T3V0Y29tZVJlcXVlc3RIABJMChVhdHRhY2hfbG9jYWxfZnJvbnRpZXIYJiABKAsyKy5ub21vcy5rZXJuZWwudjEuQXR0YWNoTG9jYWxGcm9udGllclJlcXVlc3RIABJDChBhZ2dyZWdhdGVfY2Vuc3VzGCcgASgLMicubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZUNlbnN1c1JlcXVlc3RIABI9Cg1hdWRpdF9jdXN0b2R5GCggASgLMiQubm9tb3Mua2VybmVsLnYxLkF1ZGl0Q3VzdG9keVJlcXVlc3RIABJIChNleHBvcnRfbGF3X3Byb2R1Y3RzGCkgASgLMikubm9tb3Mua2VybmVsLnYxLkV4cG9ydExhd1Byb2R1Y3RzUmVxdWVzdEgAEkgKE2ltcG9ydF9sYXdfcHJvZHVjdHMYKiABKAsyKS5ub21vcy5rZXJuZWwudjEuSW1wb3J0TGF3UHJvZHVjdHNSZXF1ZXN0SABCCwoJb3BlcmF0aW9uSgQIIhAjUhdhZG9wdF9jdXN0b2R5X3BsYWNlbWVudCJeChZBZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoKdHlwZV9saW1pdBgCIAEoDSIxChJBZ2dyZWdhdGVUeXBlQ291bnQSDAoEdHlwZRgBIAEoCRINCgVjb3VudBgCIAEoBCL7AQoXQWdncmVnYXRlQ2Vuc3VzUmVzcG9uc2USEQoEaGVhZBgBIAEoCUgAiAEBEhwKD2FnZ3JlZ2F0ZV9jb3VudBgCIAEoBEgBiAEBEhcKCnN0YXRlX3Jvb3QYAyABKAlIAogBARI2Cgl0b3BfdHlwZXMYBCADKAsyIy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlVHlwZUNvdW50Eh0KEHR5cGVzX3N0YXRlX3Jvb3QYBSABKAlIA4gBAUIHCgVfaGVhZEISChBfYWdncmVnYXRlX2NvdW50Qg0KC19zdGF0ZV9yb290QhMKEV90eXBlc19zdGF0ZV9yb290IigKGFJlc2lkZW50Rm9vdHByaW50UmVxdWVzdBIMCgRkZWVwGAEgASgIIvQDChFSZXNpZGVudEZvb3RwcmludBIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhgKEHJlYWRfbW9kZWxfYnl0ZXMYAyABKAQSHQoVcmVhZF9tb2RlbF9ydXN0X2J5dGVzGAQgASgEEhgKEGZvbGRfc3RhdGVfYnl0ZXMYBSABKAQSEwoLZm9sZF9pbWFnZXMYBiABKA0SHwoXc2hhcmVkX2F0dHJpYnV0ZWRfYnl0ZXMYByABKAQSEgoKYWdncmVnYXRlcxgIIAEoBBI2Cgpjb21wb25lbnRzGAkgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50EhIKCmNvbXB1dGVfdXMYCiABKAQSRQoRcmVhZF9zdG9yYWdlX2tpbmQYCyABKA4yKi5ub21vcy5rZXJuZWwudjEuUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIfChdzcWxpdGVfY2FjaGVfdXNlZF9ieXRlcxgMIAEoBBIYChBmbGF0X3NjYWxhcl9yb3dzGA0gASgEEh0KFWZsYXRfc2NhbGFyX3Jvd3NfcmVhZBgOIAEoBBIdChBmdWxsX3JlcGxheV9oZWFkGA8gASgJSACIAQFCEwoRX2Z1bGxfcmVwbGF5X2hlYWQiaQoRUmVzaWRlbnRDb21wb25lbnQSNAoEa2luZBgBIAEoDjImLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudEtpbmQSDQoFYnl0ZXMYAiABKAQSDwoHY2VpbGluZxgDIAEoCCLKAQoZUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZRI1CglyZXNpZGVudHMYASADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnQSHAoUYWxsb2NhdG9yX2xpdmVfYnl0ZXMYAiABKAQSGAoQYXR0cmlidXRlZF9ieXRlcxgDIAEoBBIZChF1bmFjY291bnRlZF9ieXRlcxgEIAEoBBIVCg1hY2NvdW50aW5nX3VzGAUgASgEEgwKBGRlZXAYBiABKAginAEKEFBhY2tEZWx0YVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRIdChBzdGFnZWRfcGFja19maWxlGAUgASgJSAKIAQFCBwoFX2hlYWRCBwoFX2Jhc2VCEwoRX3N0YWdlZF9wYWNrX2ZpbGUilgEKEEFwcGx5UGFja1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgRwYWNrGAIgASgMSAASGgoQc3RhZ2VkX3BhY2tfZmlsZRgEIAEoCUgAEhEKBGhlYWQYAyABKAlIAYgBARIPCgdzaGFsbG93GAUgAygJEhEKCXVuc2hhbGxvdxgGIAMoCUIICgZzb3VyY2VCBwoFX2hlYWQiIAoQUmVwb1N0YXRzUmVxdWVzdBIMCgRyZXBvGAEgASgJIqwBChNJbnRlbnRzQWJvdmVSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSDQoFbGltaXQYBSABKAQSGAoQY29tcGxldGVfbG9naWNhbBgGIAEoCBIWCg5jb21wYWN0X3N0b3JlZBgHIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiNAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiNgoPUGh5c2ljYWxSZWZGaWxlEhEKCXJlZmVyZW5jZRgBIAEoCRIQCghjb250ZW50cxgCIAEoDCKnAgoPTGlzdFJlZnNSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoGcHJlZml4GAIgASgJEhgKEGxvb3NlX3JlZmVyZW5jZXMYAyADKAkSIAoYbG9vc2VfaW52ZW50b3J5X2NvbXBsZXRlGAQgASgIEiAKE3BhY2tlZF9yZWZzX3ByZXNlbnQYBSABKAhIAIgBARI9ChNwaHlzaWNhbF9sb29zZV9yZWZzGAYgAygLMiAubm9tb3Mua2VybmVsLnYxLlBoeXNpY2FsUmVmRmlsZRIcChRwaHlzaWNhbF9wYWNrZWRfcmVmcxgHIAEoDBIjChtwaHlzaWNhbF9pbnZlbnRvcnlfY29tcGxldGUYCCABKAhCFgoUX3BhY2tlZF9yZWZzX3ByZXNlbnQiQgoPV3JpdGVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEg4KBnRhcmdldBgDIAEoCSIzChBEZWxldGVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIikKCE1ldGFGaWxlEgwKBHBhdGgYASABKAkSDwoHY29udGVudBgCIAEoDCKuAQoWV3JpdGVNZXRhQ29tbWl0UmVxdWVzdBIMCgRyZXBvGAEgASgJEg8KB3BhcmVudHMYAiADKAkSKAoFZmlsZXMYAyADKAsyGS5ub21vcy5rZXJuZWwudjEuTWV0YUZpbGUSDwoHbWVzc2FnZRgEIAEoCRIUCgx0aW1lX3NlY29uZHMYBSABKBISFgoJcmVmZXJlbmNlGAYgASgJSACIAQFCDAoKX3JlZmVyZW5jZSJnChVMYXdDbG9zdXJlSW5mb1JlcXVlc3QSFAoMY2xvc3VyZV9maWxlGAEgASgJEjgKCmNhcGFiaWxpdHkYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuS2VybmVsTGF3Q2FwYWJpbGl0eSKHAQoXQ2hlY2twb2ludEV4cG9ydFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIhChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgCIAEoCUgAiAEBQhcKFV9zdGFnZWRfZnJvbnRpZXJfZmlsZSJBCgtGcm9udGllckhsYxIQCghwaHlzaWNhbBgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQi7QQKF1ZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEgsKA29pZBgCIAEoCRIPCgdpbnRlbnRzGAMgASgEEhMKC3BsYW5zX3JlcnVuGAQgASgEEhwKD2NvbnRyb2xsZXJfaGFzaBgFIAEoCUgAiAEBEhkKEWluc3RhbGxlZF9kb21haW5zGAYgAygJEg4KBmxpbmVhchgHIAEoCBIzCghsYXN0X2hsYxgIIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCSABKAlIAogBARIRCglzdGF0ZV9vaWQYCiABKAkSFAoMc3RhdGVfc2hhMjU2GAsgASgJEjkKDnN0YXRlX2xhc3RfaGxjGAwgASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAOIAQESGgoNc3RhdGVfbGFzdF9pZBgNIAEoCUgEiAEBEhcKD21hbmlmZXN0X3NoYTI1NhgOIAEoCRIeChZsYXdfY2xvc3VyZV9pZGVudGl0aWVzGA8gAygJEhoKEnJlc29sdmFibGVfZG9tYWlucxgQIAMoCRIiChVwcm9qZWN0aW9uX3N0YXRlX3Jvb3QYESABKAlIBYgBARIOCgZ3YWxrZWQYEiABKAhCEgoQX2NvbnRyb2xsZXJfaGFzaEILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCEQoPX3N0YXRlX2xhc3RfaGxjQhAKDl9zdGF0ZV9sYXN0X2lkQhgKFl9wcm9qZWN0aW9uX3N0YXRlX3Jvb3QiRQoVRm9sZEZyb250aWVyQWdncmVnYXRlEhQKDGFnZ3JlZ2F0ZV9pZBgBIAEoCRIWCg5hZ2dyZWdhdGVfdXNkYRgCIAEoDCJBChdGb2xkRnJvbnRpZXJGaW5nZXJwcmludBIRCglpbnRlbnRfaWQYASABKAkSEwoLZmluZ2VycHJpbnQYAiABKAki1gMKFEZvbGRGcm9udGllclNuYXBzaG90EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEgsKA3RpcBgCIAEoCRIPCgdnZW5lc2lzGAMgASgJEhUKDWhpc3RvcnlfZGVwdGgYBCABKAQSOgoKYWdncmVnYXRlcxgFIAMoCzImLm5vbW9zLmtlcm5lbC52MS5Gb2xkRnJvbnRpZXJBZ2dyZWdhdGUSOAoNaGxjX3dhdGVybWFyaxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gAiAEBEjMKCGxhc3RfaGxjGAcgASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgIIAEoCUgCiAEBEhYKDnN0cmlrZV90YXJnZXRzGAkgAygJEkUKE2ludGVudF9maW5nZXJwcmludHMYCiADKAsyKC5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyRmluZ2VycHJpbnQSFwoKc3RhdGVfcm9vdBgLIAEoCUgDiAEBQhAKDl9obGNfd2F0ZXJtYXJrQgsKCV9sYXN0X2hsY0IKCghfbGFzdF9pZEINCgtfc3RhdGVfcm9vdCKbAwoYU3RvcmVkQ2hlY2twb2ludE1hbmlmZXN0EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEhMKBmN1cnNvchgCIAEoCUgAiAEBEhgKEGNoZWNrcG9pbnRfYnl0ZXMYAyABKAQSEAoIbGF3X2hhc2gYBCABKAkSOwoLY29tcHJlc3Npb24YBSABKA4yJi5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludENvbXByZXNzaW9uEhEKCXJhd19ieXRlcxgGIAEoBBIUCgxzdG9yZWRfYnl0ZXMYByABKAQSHQoVZnJvbnRpZXJfc3RvcmVkX2J5dGVzGAggASgEEhcKCnN0YXRlX3Jvb3QYCSABKAlIAYgBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAogASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SAKIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCLBAwoXQ2hlY2twb2ludEltcG9ydFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBISCghmcm9udGllchgCIAEoDEgAEh4KFHN0YWdlZF9mcm9udGllcl9maWxlGAYgASgJSAASEwoGY3Vyc29yGAMgASgJSAGIAQESFwoKc3RhdGVfcm9vdBgEIAEoCUgCiAEBEg0KBXNwYW5zGAUgASgIEhEKBGhlYWQYByABKAlIA4gBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAggASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SASIAQESSgoTdmVyaWZpY2F0aW9uX3BvbGljeRgJIAEoDjItLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5QhEKD2Zyb250aWVyX3NvdXJjZUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QgcKBV9oZWFkQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IjEKFkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3QSFwoPYWdncmVnYXRlX2NvdW50GAEgASgEIpkCChJSZXN0b3JlTWFpblJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEhMKC2RpYWdub3N0aWNzGAMgASgIEhgKEG9wZXJhdG9yX2N1c3RvZHkYBCABKAgSIAoTZXhwZWN0ZWRfbG9jYWxfaGVhZBgFIAEoCUgAiAEBEkAKE2N1c3RvZHlfY2VydGlmaWNhdGUYBiABKAsyIy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keUNlcnRpZmljYXRlEhgKEHByb3ZpZGVyX2N1c3RvZHkYByABKAhCFgoUX2V4cGVjdGVkX2xvY2FsX2hlYWQibQoTQXVkaXRDdXN0b2R5UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhUKDWJ1ZGdldF9taWNyb3MYAiABKA0SDQoFc3RhcnQYAyABKAgilAEKFEF1ZGl0Q3VzdG9keVJlc3BvbnNlEg8KB3BlbmRpbmcYASABKAgSDAoEaGVhZBgCIAEoCRIOCgZ3YWxrZWQYAyABKAQSDQoFdG90YWwYBCABKAQSDwoHb3V0Y29tZRgFIAEoCRItCgd2ZXJkaWN0GAYgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0In4KC0xhd1Byb2R1Y3RzEhQKDGxhd19pZGVudGl0eRgBIAEoCRIWCg5mb3JtYXRfdmVyc2lvbhgCIAEoDRISCgpyZWFkX2xheWVyGAMgASgMEhUKDWNvbW1hbmRfbGF5ZXIYBCABKAwSFgoOc2VtYW50aWNfbGF5ZXIYBSABKAwiTAoYRXhwb3J0TGF3UHJvZHVjdHNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQiWQoZRXhwb3J0TGF3UHJvZHVjdHNSZXNwb25zZRIMCgRoZWFkGAEgASgJEi4KCHByb2R1Y3RzGAIgAygLMhwubm9tb3Mua2VybmVsLnYxLkxhd1Byb2R1Y3RzInwKGEltcG9ydExhd1Byb2R1Y3RzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KCHByb2R1Y3RzGAIgAygLMhwubm9tb3Mua2VybmVsLnYxLkxhd1Byb2R1Y3RzIi0KGUltcG9ydExhd1Byb2R1Y3RzUmVzcG9uc2USEAoIaW1wb3J0ZWQYASADKAkibwoSQ3VzdG9keUNlcnRpZmljYXRlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJEhEKCWtleV9lcG9jaBgDIAEoAxISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDCJkChNPcGVuR2l0U3RhdGVSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRINCgVzcGFucxgDIAEoCCJrChpBdHRhY2hMb2NhbEZyb250aWVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSDQoFc3BhbnMYAyABKAgiUwoNQ3VzdG9keVJlbW90ZRIMCgRuYW1lGAEgASgJEgsKA3VybBgCIAEoCRIVCg1wZWVyX2lkZW50aXR5GAMgASgJEhAKCHByaW9yaXR5GAQgASgNIsYBChRDdXN0b2R5UGxhY2VtZW50UnVsZRISCgpwZWVyX2NsYXNzGAEgASgJEkAKEGtlcm5lbF9yZXNpZGVuY3kYAiABKA4yJi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVzaWRlbmN5SW50ZW50EkIKEWN1c3RvZHlfcmV0ZW50aW9uGAMgASgOMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlSZXRlbnRpb25JbnRlbnQSFAoMcmVtb3RlX25hbWVzGAQgAygJIq4CChZDdXN0b2R5UGxhY2VtZW50UG9saWN5EhMKC2RlY2xhcmF0aW9uGAEgASgJEhYKDnBhY2thZ2Vfc2hhMjU2GAIgASgJEjQKBXJ1bGVzGAMgAygLMiUubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRSdWxlEhIKCmFkb3B0ZWRfYnkYBCABKAkSDgoGcmVhc29uGAUgASgJEh4KFmVmZmVjdGl2ZV90aW1lX3NlY29uZHMYBiABKBISLwoHcmVtb3RlcxgHIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVtb3RlEiIKFXJlY2lwaWVudF9tYWlsYm94X3VybBgIIAEoCUgAiAEBQhgKFl9yZWNpcGllbnRfbWFpbGJveF91cmwiWQobQ3VzdG9keVBsYWNlbWVudEV4cGVjdGF0aW9uEhAKBmFic2VudBgBIAEoCEgAEg0KA29pZBgCIAEoCUgAEg0KA2FueRgDIAEoCEgAQgoKCGZyb250aWVyIisKG1JlYWRDdXN0b2R5UGxhY2VtZW50UmVxdWVzdBIMCgRyZXBvGAEgASgJIjUKHkluc3BlY3RDdXN0b2R5UGxhY2VtZW50UmVxdWVzdBITCgtwb2xpY3lfdXNkYRgBIAEoDCKJAQoOUGxhY2VtZW50T2ZmZXISPgoIZXhwZWN0ZWQYASABKAsyLC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudEV4cGVjdGF0aW9uEjcKBnBvbGljeRgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UG9saWN5ImkKG1Jlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCW1haW5faGVhZBgCIAEoCRIVCg1oaW50ZWRfY29tbWl0GAMgASgJEhIKCnN0YXRlX3Jvb3QYBCABKAkihRIKD0N1c3RvZHlSZXNwb25zZRI4CgpwYWNrX2RlbHRhGAogASgLMiIubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlc3BvbnNlSAASOAoKYXBwbHlfcGFjaxgLIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXNwb25zZUgAEjgKCnJlcG9fc3RhdHMYDCABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVzcG9uc2VIABI+Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiUubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlc3BvbnNlSAASQAoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlc3BvbnNlSAASTwoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzItLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASUQoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABI2CglyZWFkX2Jsb2IYESABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXNwb25zZUgAEjoKC3Jlc29sdmVfcmVmGBIgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXNwb25zZUgAEjYKCWxpc3RfcmVmcxgTIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1Jlc3BvbnNlSAASMgoJd3JpdGVfcmVmGBQgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEjMKCmRlbGV0ZV9yZWYYFSABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASRQoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyKC5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2VIABJDChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMicubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2VIABJGChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVzcG9uc2VIABJGChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVzcG9uc2VIABJEChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMigubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlc3BvbnNlSAASPAoMcmVzdG9yZV9tYWluGBsgASgLMiQubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVzcG9uc2VIABJPChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2VIABJIChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZUgAEkIKD2hpc3Rvcnlfc3VtbWFyeRgeIAEoCzInLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5U3VtbWFyeVJlc3BvbnNlSAASWwoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIzLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlSAASPwoOb3Blbl9naXRfc3RhdGUYICABKAsyJS5ub21vcy5rZXJuZWwudjEuT3BlbkdpdFN0YXRlUmVzcG9uc2VIABJPChZyZWFkX2N1c3RvZHlfcGxhY2VtZW50GCEgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2VIABJVChlpbnNwZWN0X2N1c3RvZHlfcGxhY2VtZW50GCMgASgLMjAubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2VIABJRChdyZWxlYXNlX3dvcmtzcGFjZV9zdGF0ZRgkIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5SZWxlYXNlV29ya3NwYWNlU3RhdGVSZXNwb25zZUgAEloKH3JlY29yZF93b3Jrc3BhY2VfZWZmZWN0X291dGNvbWUYJSABKAsyLy5ub21vcy5rZXJuZWwudjEuUmVjb3JkZWRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lSAASTQoVYXR0YWNoX2xvY2FsX2Zyb250aWVyGCYgASgLMiwubm9tb3Mua2VybmVsLnYxLkF0dGFjaExvY2FsRnJvbnRpZXJSZXNwb25zZUgAEkQKEGFnZ3JlZ2F0ZV9jZW5zdXMYJyABKAsyKC5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlQ2Vuc3VzUmVzcG9uc2VIABI+Cg1hdWRpdF9jdXN0b2R5GCggASgLMiUubm9tb3Mua2VybmVsLnYxLkF1ZGl0Q3VzdG9keVJlc3BvbnNlSAASSQoTZXhwb3J0X2xhd19wcm9kdWN0cxgpIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5FeHBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlSAASSQoTaW1wb3J0X2xhd19wcm9kdWN0cxgqIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5JbXBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlSABCCwoJb3BlcmF0aW9uSgQIIhAjUhdhZG9wdF9jdXN0b2R5X3BsYWNlbWVudCIwChFQYWNrRGVsdGFSZXNwb25zZRIMCgRwYWNrGAEgASgMEg0KBWJ5dGVzGAIgASgEIoUBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBAUIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSrqAQoSQmlydGhPdXRjb21lU3RhdHVzEiQKIEJJUlRIX09VVENPTUVfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHQoZQklSVEhfT1VUQ09NRV9TVEFUVVNfQk9SThABEiEKHUJJUlRIX09VVENPTUVfU1RBVFVTX0RFRkVSUkVEEAISHwobQklSVEhfT1VUQ09NRV9TVEFUVVNfRkFJTEVEEAMSIAocQklSVEhfT1VUQ09NRV9TVEFUVVNfUkVGVVNFRBAEEikKJUJJUlRIX09VVENPTUVfU1RBVFVTX1VOV0FSUkFOVEVEX0NFUlQQBSrMFAoRS2VybmVsUmVmdXNhbENvZGUSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9VTlNQRUNJRklFRBAAEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfQkFEX1NJR05BVFVSRRABEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfVU5BVVRIT1JJWkVEEAISJwojS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0xJQ1lfRElTQUJMRUQQAxIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX1VOQ0VSVElGSUVEX1BPTElDWRAEEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfUkVGRVJFTlRJQUwQBRIvCitLRVJORUxfUkVGVVNBTF9DT0RFX1BPSU5UX1NUQVRFX1VOQVZBSUxBQkxFEAYSJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfRVhDRUVERUQQBxItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9DT1VOVF9VTkFWQUlMQUJMRRAIEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfRVZJREVOQ0VfVU5CQUNLRUQQCRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09SUEhBTl9SRUNFSVBUEAoSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUNFSVBUX09OX1RFUk1JTkFMX09CTElHQVRJT04QCxIiCh5LRVJORUxfUkVGVVNBTF9DT0RFX05PVF9NSU5URUQQDBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0RPTUFJTl9MSUZFQ1lDTEUQDRIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1RZUEVfVEFHX01JU01BVENIEA4SLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVRJUkVEX1JFQURfU1VSRkFDRRAPEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ1JPU1NfV09SS1NQQUNFX0RFQ0xJTkVEEBASKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BR0dSRUdBVEVfSU5WQVJJQU5UEBESKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9XT1JLU1BBQ0VfSU5WQVJJQU5UEBISLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX0NPTkZMSUNUEBMSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9SRVFVSVJFRBAUEjQKMEtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfVU5ERUNMQVJFRBAVEjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfSU5WQUxJRBAWEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfU1RBTEUQFxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfVU5ERUNMQVJFRBAYEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9QUklWQVRFEBkSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOREVDTEFSRUQQGhIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX0tFWRAbEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfU09VUkNFEBwSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0ZPUkdFRBAdEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9TVEFMRRAeEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9PVkVSU0laRRAfEjcKM0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9ESVNIT05PUkVEX1NPVVJDRRAgEjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfRVFVSVZPQ0FUSU9OX0VWSURFTkNFX0lOVkFMSUQQIRIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX1JFQ0VJUFRfSU5WQUxJRBAiEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX1JPU1RFUl9NSVNNQVRDSBAjEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX0VQT0NIX05PVF9NT05PVE9OSUMQJBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1dSSVRFX0VQT0NIX1NUQUxFECUSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9FTlZFTE9QRV9TSURfTUlTTUFUQ0gQJhIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1JFVk9LRURfTUVNQkVSX1JFU1VSUkVDVEVEECcSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9GT1JHRURfUFJJTkNJUEFMECgSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9LRVlfQU5DSE9SECkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9SRUNPVkVSWRAqEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfU1VSRkFDRURfQkFTSVNfQUhFQUQQKxIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1NJR05FUl9FUE9DSF9PVVRfT0ZfV0lORE9XECwSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9FVk9MVkVfUkVGVVNFRBAtEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fSU5WQUxJRBAuEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfUEFSRU5UX0RJRF9OT1RfQVRURVNUEC8SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9DRVJUX0NIQUlOX0JST0tFThAwEioKJktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX1JPT1RFRF9BVF9ST09UEDESKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9ERUxFR0FUSU9OX0lOVkFMSUQQMhIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX1BMQU5fUkVKRUNURUQQMxImCiJLRVJORUxfUkVGVVNBTF9DT0RFX0RPTUFJTl9SRUZVU0VEEDQSMQotS0VSTkVMX1JFRlVTQUxfQ09ERV9JTlZBUklBTlRfRVhFQ1VUSU9OX0ZBVUxUEDUSNQoxS0VSTkVMX1JFRlVTQUxfQ09ERV9DSEVDS1BPSU5UX1NJR05FUl9VTkFWQUlMQUJMRRA2EigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT0ZGRVJfQkFTRV9TVEFMRRA3EiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfQklSVEhfUkVGVVNFRBA4KskBChNJbnRlcmZhY2VNZW1iZXJLaW5kEiUKIUlOVEVSRkFDRV9NRU1CRVJfS0lORF9VTlNQRUNJRklFRBAAEiAKHElOVEVSRkFDRV9NRU1CRVJfS0lORF9ET01BSU4QARIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRElSRUNUSVZFEAISIwofSU5URVJGQUNFX01FTUJFUl9LSU5EX0FHR1JFR0FURRADEh8KG0lOVEVSRkFDRV9NRU1CRVJfS0lORF9GSUVMRBAEKogCChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5U3RhdHVzEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEigKJElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19FWEFDVBABEi0KKUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19DT01QQVRJQkxFEAISLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOQVZBSUxBQkxFEAMSLworSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0lOQ09NUEFUSUJMRRAEKsMDChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVhc29uEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9VTlNQRUNJRklFRBAAEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9ET01BSU5fTUlTU0lORxABEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NRU1CRVJfTUlTU0lORxACEjAKLElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9GSUVMRF9NSVNTSU5HEAMSNQoxSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1ZBTFVFX0tJTkRfQ0hBTkdFRBAEEjcKM0lOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9SRVFVSVJFRF9JTlBVVF9BRERFRBAFEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NQVRSSVhfSU5WQUxJRBAGEjgKNElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9XSVJFX0NPTlRSQUNUX0NIQU5HRUQQByq3AgoQTWFpbnRlbmFuY2VQaGFzZRIhCh1NQUlOVEVOQU5DRV9QSEFTRV9VTlNQRUNJRklFRBAAEiQKIE1BSU5URU5BTkNFX1BIQVNFX1JFQURfRE9DVU1FTlRTEAESIgoeTUFJTlRFTkFOQ0VfUEhBU0VfU1FMSVRFX0lOREVYEAISJgoiTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9GUk9OVElFUhADEiMKH01BSU5URU5BTkNFX1BIQVNFX0NPTU1BTkRfUk9VVEUQBBIhCh1NQUlOVEVOQU5DRV9QSEFTRV9HSVRfQ1VTVE9EWRAFEiYKIk1BSU5URU5BTkNFX1BIQVNFX1JFQURfSU5ERVhfQ0FDSEUQBhIeChpNQUlOVEVOQU5DRV9QSEFTRV9DT01QTEVURRAHKooBCg9WZXJpZnlDaGFpbldhbGsSIQodVkVSSUZZX0NIQUlOX1dBTEtfVU5TUEVDSUZJRUQQABIaChZWRVJJRllfQ0hBSU5fV0FMS19GVUxMEAESHAoYVkVSSUZZX0NIQUlOX1dBTEtfU1VGRklYEAISGgoWVkVSSUZZX0NIQUlOX1dBTEtfTUVNTxADKnAKGEVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBIqCiZFRkZFQ1RfRVhFQ1VUSU9OX1BMQUNFTUVOVF9VTlNQRUNJRklFRBAAEigKJEVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX0NVU1RPRElBThABKnYKGkVmZmVjdEV4ZWN1dGlvbkNhcmRpbmFsaXR5EiwKKEVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIqCiZFRkZFQ1RfRVhFQ1VUSU9OX0NBUkRJTkFMSVRZX1NJTkdMRVRPThABKrcBChdNb2RlbExpZmVjeWNsZU9wZXJhdGlvbhIpCiVNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9JTlNUQUxMEAESIwofTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9TVEFHRRACEiUKIU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fUFJPTU9URRADKtwBCh1DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIwCixDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX0FDVElWRRABEiwKKENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFVElSRUQQAhIuCipDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19SRUNMQUlNRUQQAyr4AQoiRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBI1CjFERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1VOU1BFQ0lGSUVEEAASMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9TRUxFQ1RFRBABEjIKLkRFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfRU5ST0xMRUQQAhIzCi9ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NPVkVSRUlHThADKooBChVEZWNsYXJlZExhd01lbWJlcktpbmQSKAokREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASJAogREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX0NPTU1BTkQQARIhCh1ERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfUkVBRBACKosGCh9Qcm92aWRlclRva2VuVmVyaWZpY2F0aW9uU3RhdHVzEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIsCihQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1ZBTElEEAESNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT19NQVRDSElOR19LRVkQAhIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0VYUElSRUQQAxI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PVF9ZRVRfVkFMSUQQBBI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0lTU1VFUl9NSVNNQVRDSBAFEjgKNFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQVVESUVOQ0VfTUlTTUFUQ0gQBhI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9TSUdOQVRVUkUQBxIwCixQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01BTEZPUk1FRBAIEjwKOFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TVVBQT1JURURfQUxHT1JJVEhNEAkSLgoqUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19CQURfS0VZEAoSNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1NVQkpFQ1QQCxIyCi5QUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX1ZFUklGSUVSEAwSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1RPS0VOEA0qyAEKEkRldmljZVNpZ25lclN0YXR1cxIkCiBERVZJQ0VfU0lHTkVSX1NUQVRVU19VTlNQRUNJRklFRBAAEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FDVElWRRABEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FCU0VOVBACEiAKHERFVklDRV9TSUdORVJfU1RBVFVTX1JFVk9LRUQQAxIoCiRERVZJQ0VfU0lHTkVSX1NUQVRVU19LRVlfVU5BVkFJTEFCTEUQBCrXAQoTQmlydGhFdmlkZW5jZVN0YXR1cxIlCiFCSVJUSF9FVklERU5DRV9TVEFUVVNfVU5TUEVDSUZJRUQQABImCiJCSVJUSF9FVklERU5DRV9TVEFUVVNfTk9UX1JFUVVJUkVEEAESHwobQklSVEhfRVZJREVOQ0VfU1RBVFVTX1JFQURZEAISLQopQklSVEhfRVZJREVOQ0VfU1RBVFVTX0RFTEVHQVRJT05fUkVRVUlSRUQQAxIhCh1CSVJUSF9FVklERU5DRV9TVEFUVVNfSU5WQUxJRBAEKrIBChFRdWVyeVJlc3VsdEZvcm1hdBIjCh9RVUVSWV9SRVNVTFRfRk9STUFUX1VOU1BFQ0lGSUVEEAASJAogUVVFUllfUkVTVUxUX0ZPUk1BVF9MRUdBQ1lfVkFMVUUQARIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX05PTUlOQUxfVVNEQRACEiwKKFFVRVJZX1JFU1VMVF9GT1JNQVRfQVBQTElDQVRJT05fUFJPVE9CVUYQAyqVDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESIAocUVVFUllfT1BFUkFUSU9OX1JFQURfUE9TVFVSRRAEEh8KG1FVRVJZX09QRVJBVElPTl9DVVJSRU5UX0xBVxAFEiMKH1FVRVJZX09QRVJBVElPTl9JTlRFUkZBQ0VfT0ZGRVIQBhInCiNRVUVSWV9PUEVSQVRJT05fUkVMQVRJT05fR0FURV9PRkZFUhAHEh0KGVFVRVJZX09QRVJBVElPTl9TQ0VORV9MQVcQCBIhCh1RVUVSWV9PUEVSQVRJT05fSU5TVEFMTEVEX0xBVxAJEhwKGFFVRVJZX09QRVJBVElPTl9ERVNDUklCRRAKEiMKH1FVRVJZX09QRVJBVElPTl9LRVJORUxfUkVTT1VSQ0UQCxIjCh9RVUVSWV9PUEVSQVRJT05fREVWRUxPUEVSX1NQQU5TEAwSKQolUVVFUllfT1BFUkFUSU9OX0RFQ0xBUkVEX0NBUEFCSUxJVElFUxANEh0KGVFVRVJZX09QRVJBVElPTl9SRUFESU5FU1MQDhIkCiBRVUVSWV9PUEVSQVRJT05fUFJPSkVDVElPTl9TVEFUUxAPEiUKIVFVRVJZX09QRVJBVElPTl9NRU1PUllfRFJPUF9QUk9CRRAQEhgKFFFVRVJZX09QRVJBVElPTl9XQVJNEBESGwoXUVVFUllfT1BFUkFUSU9OX1JFRlJFU0gQEhIgChxRVUVSWV9PUEVSQVRJT05fVkVSSUZZX0NIQUlOEBMSIgoeUVVFUllfT1BFUkFUSU9OX0NPVU5URVJGQUNUVUFMEBQSGQoVUVVFUllfT1BFUkFUSU9OX1JPVVRFEBUSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiAKHFFVRVJZX09QRVJBVElPTl9SRUNFSVBUX1BBVEgQIhIdChlRVUVSWV9PUEVSQVRJT05fQ0VSVF9TSUdOECMSJQohUVVFUllfT1BFUkFUSU9OX0JJUlRIX1RSVVNUX1NUQVRFECQSIQodUVVFUllfT1BFUkFUSU9OX0VSQV9DRVJUX1NJR04QJRIoCiRRVUVSWV9PUEVSQVRJT05fREVMRUdBVElPTl9DRVJUX1NJR04QJhIpCiVRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX0ZST05USUVSECcSKwonUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9QUk9KRUNUSU9OECgiBAgCEAIiBAgDEAMiBAgWEBYiBAgXEBciBAgeEB4iBAgfEB8iBAggECAiBAghECEqIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUyooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWSoUUVVFUllfT1BFUkFUSU9OX01JTlQqHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOKh9RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1dSQVBfS0VZKiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkqHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOKiBRVUVSWV9PUEVSQVRJT05fQVRURVNUQVRJT05fU0lHTiqpAQoZUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIsCihSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1VOU1BFQ0lGSUVEEAASKQolUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9SRVNJREVOVBABEjMKL1JFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfRklMRV9CQUNLRURfU0NBTEFSEAIq0gIKFVJlc2lkZW50Q29tcG9uZW50S2luZBInCiNSRVNJREVOVF9DT01QT05FTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0ZPTERfU1RBVEUQARItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX1NRTElURRACEi4KKlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfSU5ERVhFUxADEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1NIQVJFRF9BVFRSSUJVVEVEEAQSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfV09SS1NQQUNFX0NBQ0hFUxAFEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0dJVF9PQkpFQ1RfQ0FDSEUQBipsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKlkKFUNoZWNrcG9pbnRDb21wcmVzc2lvbhIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX05PTkUQABIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX0daSVAQASqRAQocQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeRIzCi9DSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVkVSSUZZX0NBTk9OSUNBTBAAEjwKOENIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9UUlVTVF9QUkVWSU9VU0xZX1ZFUklGSUVEEAEqgAEKE0NoZWNrcG9pbnRBc3N1cmFuY2USJAogQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVU5TUEVDSUZJRUQQABIgChxDSEVDS1BPSU5UX0FTU1VSQU5DRV9UUlVTVEVEEAESIQodQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVkVSSUZJRUQQAiqJAQoVS2VybmVsUmVzaWRlbmN5SW50ZW50EicKI0tFUk5FTF9SRVNJREVOQ1lfSU5URU5UX1VOU1BFQ0lGSUVEEAASIAocS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfV0FSTRABEiUKIUtFUk5FTF9SRVNJREVOQ1lfSU5URU5UX09OX0RFTUFORBACKq4BChZDdXN0b2R5UmV0ZW50aW9uSW50ZW50EigKJENVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9VTlNQRUNJRklFRBAAEiMKH0NVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9SRVRBSU4QARIiCh5DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfQ0FDSEUQAhIhCh1DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfTk9ORRADKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_any]);
|
|
7603
7603
|
var CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);
|
|
7604
7604
|
var CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);
|
|
7605
7605
|
var OfferResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 5);
|
|
@@ -7749,7 +7749,7 @@
|
|
|
7749
7749
|
var ReadMaintenanceCause = /* @__PURE__ */ tsEnum(ReadMaintenanceCauseSchema);
|
|
7750
7750
|
|
|
7751
7751
|
// ../../adapter/proto/nomos/runtime/v2/correspondence_desk_pb.js
|
|
7752
|
-
var file_nomos_runtime_v2_correspondence_desk = /* @__PURE__ */ fileDesc("Cipub21vcy9ydW50aW1lL3YyL2NvcnJlc3BvbmRlbmNlX2Rlc2sucHJvdG8SEG5vbW9zLnJ1bnRpbWUudjIi0AIKFVNoYXJlV29ya3NwYWNlUmVxdWVzdBIPCgdzdWJqZWN0GAEgASgJEhAKCHJlbGF0aW9uGAIgASgJEhoKEmFzc2VydGVyX3ByaW5jaXBhbBgDIAEoCRIOCgZvYmplY3QYBCABKAkSHAoPaG9tZV9sYXdfc2hhMjU2GAUgASgJSACIAQESGgoNYXV0aG9yX3NlY3JldBgGIAEoDEgBiAEBEh8KEmFzc2VydGVyX3dvcmtzcGFjZRgHIAEoCUgCiAEBEhgKC2F0dGVzdGVkX2F0GAggASgJSAOIAQESFwoKYXV0aF90b2tlbhgJIAEoDEgEiAEBQhIKEF9ob21lX2xhd19zaGEyNTZCEAoOX2F1dGhvcl9zZWNyZXRCFQoTX2Fzc2VydGVyX3dvcmtzcGFjZUIOCgxfYXR0ZXN0ZWRfYXRCDQoLX2F1dGhfdG9rZW4ikgEKFFNoYXJlV29ya3NwYWNlUmVzdWx0EjgKB291dGNvbWUYASABKA4yJy5ub21vcy5ydW50aW1lLnYyLlNoYXJlV29ya3NwYWNlT3V0Y29tZRITCgZzdGF0dXMYAiABKA1IAIgBARIUCgdtZXNzYWdlGAMgASgJSAGIAQFCCQoHX3N0YXR1c0IKCghfbWVzc2FnZSLKAQodUGFyZW50U2lnbmVyRW5yb2xsbWVudFJlcXVlc3QSDgoGcGFyZW50GAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCRIXCgprZXlfc2hhMjU2GAMgASgJSACIAQESFwoKcHVibGljX2tleRgEIAEoDEgBiAEBEhcKCmF1dGhfdG9rZW4YBSABKAxIAogBARIOCgZyZW1vdGUYBiABKAhCDQoLX2tleV9zaGEyNTZCDQoLX3B1YmxpY19rZXlCDQoLX2F1dGhfdG9rZW4i1AEKFlBhcmVudFNpZ25lckVucm9sbG1lbnQSDgoGcGFyZW50GAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCRISCgprZXlfc2hhMjU2GAMgASgJEg4KBm9iamVjdBgEIAEoCRIQCghyZWxhdGlvbhgFIAEoCRIQCghlbnJvbGxlZBgGIAEoCBIPCgdyZXZva2VkGAcgASgIEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhIKCmNoZWNrZWRfYXQYCSABKAlCDwoNX3ZlcmlmaWVkX3ZpYSLcAgojRW5zdXJlUGFyZW50U2lnbmVyRW5yb2xsbWVudFJlcXVlc3QSDgoGcGFyZW50GAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCRIXCgpwdWJsaWNfa2V5GAMgASgMSACIAQESGgoNYXV0aG9yX3NlY3JldBgEIAEoDEgBiAEBEhMKBmRvbWFpbhgFIAEoCUgCiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgDiAEBEhcKCmF1dGhfdG9rZW4YByABKAxIBIgBARIVCghpZF90b2tlbhgIIAEoDEgFiAEBEhkKDHZlcmlmaWVkX3ZpYRgJIAEoCUgGiAEBQg0KC19wdWJsaWNfa2V5QhAKDl9hdXRob3Jfc2VjcmV0QgkKB19kb21haW5CDAoKX2RpcmVjdGl2ZUINCgtfYXV0aF90b2tlbkILCglfaWRfdG9rZW5CDwoNX3ZlcmlmaWVkX3ZpYSLZAQoiRW5zdXJlUGFyZW50U2lnbmVyRW5yb2xsbWVudFJlc3VsdBIOCgZwYXJlbnQYASABKAkSEQoJcHJpbmNpcGFsGAIgASgJEhIKCmtleV9zaGEyNTYYAyABKAkSEAoIZW5yb2xsZWQYBCABKAgSEAoIcmVwYWlyZWQYBSABKAgSEwoGZG9tYWluGAYgASgJSACIAQESFgoJZGlyZWN0aXZlGAcgASgJSAGIAQESEgoKY2hlY2tlZF9hdBgIIAEoCUIJCgdfZG9tYWluQgwKCl9kaXJlY3RpdmUiHQobVmVyaWZ5V29ya3NwYWNlQ2hhaW5SZXF1ZXN0IrsBChpWZXJpZnlXb3Jrc3BhY2VDaGFpblJlc3VsdBINCgV2YWxpZBgBIAEoCBISCgVlcnJvchgCIAEoCUgAiAEBEhgKC3BsYW5zX3JlcnVuGAMgASgESAGIAQESOgoHaGlzdG9yeRgEIAEoCzIkLm5vbW9zLnJ1bnRpbWUudjIuVmVyaWZ5Q2hhaW5IaXN0b3J5SAKIAQFCCAoGX2Vycm9yQg4KDF9wbGFuc19yZXJ1bkIKCghfaGlzdG9yeSKHAQoSVmVyaWZ5Q2hhaW5IaXN0b3J5Eg0KBXN0YXRlGAEgASgJEg4KBmFuY2hvchgCIAEoCRIQCghib3VuZGFyeRgDIAMoCRIMCgR3YWxrGAQgASgJEh0KEHZlcmlmaWVkX2NvbW1pdHMYBSABKARIAIgBAUITChFfdmVyaWZpZWRfY29tbWl0cyJ/ChRTeW5jV29ya3NwYWNlUmVxdWVzdBINCgVhZG1pdBgCIAEoCBIRCgl3b3Jrc3BhY2UYAyABKAkSHwoScmVwbGFjZV9sb2NhbF9oZWFkGAQgASgJSACIAQFCFQoTX3JlcGxhY2VfbG9jYWxfaGVhZEoECAEQAlIHc2Vzc2lvbiKqCQoVU3luY1dvcmtzcGFjZVJlc3BvbnNlEhEKCXdvcmtzcGFjZRgBIAEoCRIaCg1wcmV2aW91c19oZWFkGAIgASgJSACIAQESGQoMY3VycmVudF9oZWFkGAMgASgJSAGIAQESEAoIYWRtaXR0ZWQYBCABKAQSDwoHcmVmdXNlZBgFIAEoBBIQCghkZWZlcnJlZBgGIAEoBBISCgpsb2NhbF9vbmx5GAcgASgIEg4KBnB1bGxlZBgIIAEoCBIQCghkaXZlcmdlZBgJIAEoCBIaChJyZWNvbm5lY3RfcmVxdWlyZWQYCiABKAgSEwoLc3RpbGxfYWhlYWQYCyABKAgSDwoHb2ZmbGluZRgMIAEoCBITCgtwdXNoX2ZhaWxlZBgNIAEoCBIdChVkaXJlY3Rfb2ZmZXJfZGVmZXJyZWQYDiABKAgSNQoOYmlydGhfb3V0Y29tZXMYDyADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEhsKE2FkbWl0dGVkX2ludGVudF9pZHMYECADKAkSHAoUY29udmVyZ2VkX2ludGVudF9pZHMYESADKAkSQgoKcHVzaF9lcnJvchgSIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVRyYW5zcG9ydEZhaWx1cmVIAogBARJHCg9kaXNjb3ZlcnlfZXJyb3IYEyABKAsyKS5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVUcmFuc3BvcnRGYWlsdXJlSAOIAQESMwoHdGltaW5ncxgUIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuU3luY1BoYXNlVGltaW5ncxJBCg1vZmZlcl9yZWNlaXB0GBUgASgLMiUubm9tb3MucnVudGltZS52Mi5DdXN0b2R5T2ZmZXJSZWNlaXB0SASIAQESOQoOcmVtb3RlX3JlZnVzYWwYFiABKAsyHC5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzYWxIBYgBARJHChRjdXN0b2R5X2Rpc2FncmVlbWVudBgXIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5RGlzYWdyZWVtZW50SAaIAQESGAoQY3VzdG9keV9yZXBsYWNlZBgYIAEoCBIVCg1tYWluX2FkdmFuY2VkGBkgASgIEkAKD3JlYm9ybl9yZW1vdGVseRgaIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlUmViaXJ0aEgHiAEBEkcKFHByZXNlcnZlZF9sb2NhbF9jb3B5GBsgASgLMiQubm9tb3MucnVudGltZS52Mi5QcmVzZXJ2ZWRMb2NhbENvcHlICIgBAUIQCg5fcHJldmlvdXNfaGVhZEIPCg1fY3VycmVudF9oZWFkQg0KC19wdXNoX2Vycm9yQhIKEF9kaXNjb3ZlcnlfZXJyb3JCEAoOX29mZmVyX3JlY2VpcHRCEQoPX3JlbW90ZV9yZWZ1c2FsQhcKFV9jdXN0b2R5X2Rpc2FncmVlbWVudEISChBfcmVib3JuX3JlbW90ZWx5QhcKFV9wcmVzZXJ2ZWRfbG9jYWxfY29weSLoAQoTQ3VzdG9keU9mZmVyUmVjZWlwdBISCgpyZXF1ZXN0X2lkGAEgASgJEkMKCWFkbWlzc2lvbhgKIAEoCzIuLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keU9mZmVyQWRtaXNzaW9uUmVjZWlwdEgAEjgKB2ZhaWx1cmUYCyABKAsyJS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlPZmZlckZhaWx1cmVIABIzCgdibG9ja2VkGAwgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lQmxvY2tlZEgAQgkKB291dGNvbWUihgIKHEN1c3RvZHlPZmZlckFkbWlzc2lvblJlY2VpcHQSDAoEbWFpbhgBIAEoCRIYCgtzZWFsZWRfbWFpbhgCIAEoCUgAiAEBEjsKCHNlc3Npb25zGAMgAygLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5U2Vzc2lvbkFkbWlzc2lvbhI1Cg5iaXJ0aF9vdXRjb21lcxgEIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSOgoHdGltaW5ncxgFIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUFkbWlzc2lvblRpbWluZ3NCDgoMX3NlYWxlZF9tYWluIrMBChNDdXN0b2R5T2ZmZXJGYWlsdXJlEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIRCgljb21wb25lbnQYAyABKAkSFgoJd29ya3NwYWNlGAQgASgJSACIAQESEwoGZG9tYWluGAUgASgJSAGIAQESFgoJZGlyZWN0aXZlGAYgASgJSAKIAQFCDAoKX3dvcmtzcGFjZUIJCgdfZG9tYWluQgwKCl9kaXJlY3RpdmUiXQoXUnVudGltZVRyYW5zcG9ydEZhaWx1cmUSEAoIZW5kcG9pbnQYASABKAkSDgoGc3RhdHVzGAIgASgREg8KB3JlZnVzZWQYAyABKAgSDwoHbWVzc2FnZRgEIAEoCSLFAQoQU3luY1BoYXNlVGltaW5ncxITCgtwdXNoX21pbGxpcxgBIAEoARIUCgxhZG1pdF9taWxsaXMYAiABKAESFwoPcHJlZmV0Y2hfbWlsbGlzGAMgASgBEhcKD2NvbnZlcmdlX21pbGxpcxgEIAEoARISCgpwdXNoX2J5dGVzGAUgASgEEhUKDXNlcnZlcl9taWxsaXMYBiABKAESFQoNb2ZmZXJfaW5fcHVzaBgHIAEoCBISCgpwdWxsX2J5dGVzGAggASgEIjQKH1JlZnJlc2hSZXBsaWNhQ3JlZGVudGlhbFJlcXVlc3QSEQoJd29ya3NwYWNlGAEgASgJIosBCgxHaXRSZWFkTGVhc2USFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SEQoJd29ya3NwYWNlGAIgASgJEg4KBnJlbW90ZRgDIAEoCRINCgV0b2tlbhgEIAEoCRITCgt0dGxfc2Vjb25kcxgFIAEoDRIcChRleHBpcmVzX3VuaXhfc2Vjb25kcxgGIAEoBCJuCg9HaXRGZXRjaFJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRItCgVsZWFzZRgCIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuR2l0UmVhZExlYXNlEgwKBHdhbnQYAyABKAkSDQoFaGF2ZXMYBCADKAkiagoOR2l0RmV0Y2hSZXN1bHQSHQoQc3RhZ2VkX3BhY2tfZmlsZRgBIAEoCUgAiAEBEgwKBGhlYWQYAiABKAkSFgoOcmVjZWl2ZWRfYnl0ZXMYAyABKARCEwoRX3N0YWdlZF9wYWNrX2ZpbGUitgEKHkRlbGl2ZXJXb3Jrc3BhY2VFZmZlY3RzUmVxdWVzdBIWCg5zb3VyY2Vfc2Vzc2lvbhgBIAEoCRIYChB0YXJnZXRfd29ya3NwYWNlGAIgASgJEhoKDXNvdXJjZV9jb21taXQYAyABKAlIAIgBARIeChFzb3VyY2Vfb2ZmZXJfcGF0aBgEIAEoCUgBiAEBQhAKDl9zb3VyY2VfY29tbWl0QhQKEl9zb3VyY2Vfb2ZmZXJfcGF0aCJRChxEZWxpdmVySHR0cE9ibGlnYXRpb25SZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJEhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJIrsBChdIdHRwT2JsaWdhdGlvbkRlbGl2ZXJlZBIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEhEKCWF0dGVtcHRlZBgCIAEoCBIRCglkZWxpdmVyZWQYAyABKAgSEQoJcmV0cnlhYmxlGAQgASgIEhsKE3ByZXBhcmF0aW9uX3BlbmRpbmcYBSABKAgSHAoPcmV0cnlfYXRfbWlsbGlzGAYgASgESACIAQFCEgoQX3JldHJ5X2F0X21pbGxpcyI2ChxSZWNvdmVyQ29ycmVzcG9uZGVuY2VSZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJIqwBChdDb3JyZXNwb25kZW5jZVJlY292ZXJlZBIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEg8KB3BlbmRpbmcYAiABKAgSIAoTbmV4dF93YWtlX2F0X21pbGxpcxgDIAEoBEgAiAEBEhoKDXJldGFpbmVkX2hlYWQYBCABKAlIAYgBAUIWChRfbmV4dF93YWtlX2F0X21pbGxpc0IQCg5fcmV0YWluZWRfaGVhZCL2AgoZV29ya3NwYWNlRWZmZWN0c0RlbGl2ZXJlZBIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAiABKAkSEQoJYXR0ZW1wdGVkGAMgASgEEhEKCWRlbGl2ZXJlZBgEIAEoBBIPCgdyZWZ1c2VkGAUgASgEEhEKCXJldHJ5YWJsZRgGIAEoBBIcCg9yZXRyeV9hdF9taWxsaXMYByABKARIAIgBARIbChNwcmVwYXJhdGlvbl9wZW5kaW5nGAggASgIEhgKC3RhcmdldF9oZWFkGAkgASgJSAGIAQESHwoXc291cmNlX291dGNvbWVfcmVjb3JkZWQYCiABKAgSQQoMcmV0cnlfcmVhc29uGAsgASgLMisubm9tb3MucnVudGltZS52Mi5Db3JyZXNwb25kZW5jZVJldHJ5UmVhc29uQhIKEF9yZXRyeV9hdF9taWxsaXNCDgoMX3RhcmdldF9oZWFkIjsKGUNvcnJlc3BvbmRlbmNlUmV0cnlSZWFzb24SDgoGcmVhc29uGAEgASgJEg4KBmRldGFpbBgCIAEoCSKsAwobUmVtb3RlR2VuZXJhdGVkT2ZmZXJSZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAiABKAkSDQoFYWN0b3IYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDBISCgphdXRoX3Rva2VuGAUgASgMEi4KBGNhbGwYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEkAKD21vZGVsX2xpZmVjeWNsZRgJIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Nb2RlbExpZmVjeWNsZUludGVudEgAEkEKEWJpcnRoX2NlcnRpZmljYXRlGAcgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGVIAYgBARIhChRyZXF1aXJlZF90YXJnZXRfaGVhZBgIIAEoCUgCiAEBEhAKCGxhd191c2R6GAogASgMQggKBmludGVudEIUChJfYmlydGhfY2VydGlmaWNhdGVCFwoVX3JlcXVpcmVkX3RhcmdldF9oZWFkIj8KHFJlbW90ZUdlbmVyYXRlZE9mZmVyQWNjZXB0ZWQSEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkiygIKDlBlZXJIdHRwRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIwCgZtZXRob2QYAiABKA4yIC5ub21vcy5ydW50aW1lLnYyLlBlZXJIdHRwTWV0aG9kEgsKA3VybBgDIAEoCRIZCgxjb250ZW50X3R5cGUYBCABKAlIAIgBARIMCgRib2R5GAUgASgMEhkKDGJlYXJlcl90b2tlbhgGIAEoDEgBiAEBEhMKBmFjY2VwdBgHIAEoCUgCiAEBEhsKDnRpbWVvdXRfbWlsbGlzGAggASgNSAOIAQESHAoPaWRlbXBvdGVuY3lfa2V5GAkgASgJSASIAQFCDwoNX2NvbnRlbnRfdHlwZUIPCg1fYmVhcmVyX3Rva2VuQgkKB19hY2NlcHRCEQoPX3RpbWVvdXRfbWlsbGlzQhIKEF9pZGVtcG90ZW5jeV9rZXkiXAoQUGVlckh0dHBSZXNwb25zZRIOCgZzdGF0dXMYASABKA0SGQoMY29udGVudF90eXBlGAIgASgJSACIAQESDAoEYm9keRgDIAEoDEIPCg1fY29udGVudF90eXBlIl8KEVBlZXJFZmZlY3RGYWlsdXJlEjkKBnJlYXNvbhgBIAEoDjIpLm5vbW9zLnJ1bnRpbWUudjIuUGVlckVmZmVjdEZhaWx1cmVSZWFzb24SDwoHbWVzc2FnZRgCIAEoCSKZCAoRUGVlckVmZmVjdFJlY2VpcHQSEQoJZWZmZWN0X2lkGAEgASgJEjYKCHJlc3BvbnNlGAogASgLMiIubm9tb3MucnVudGltZS52Mi5QZWVySHR0cFJlc3BvbnNlSAASNgoHZmFpbHVyZRgLIAEoCzIjLm5vbW9zLnJ1bnRpbWUudjIuUGVlckVmZmVjdEZhaWx1cmVIABI7CglnaXRfZmV0Y2gYDCABKAsyJi5ub21vcy5ydW50aW1lLnYyLlBlZXJHaXRGZXRjaFJlc3BvbnNlSAASOQoIZ2l0X3B1c2gYDSABKAsyJS5ub21vcy5ydW50aW1lLnYyLlBlZXJHaXRQdXNoUmVzcG9uc2VIABJNChZib3JuX2N1c3RvZHlfcGVyc2lzdGVkGA4gASgLMisubm9tb3MucnVudGltZS52Mi5QZXJzaXN0Qm9ybkN1c3RvZHlSZWNlaXB0SAASUAoUd29ya3NwYWNlX2Rpc2NvdmVyZWQYDyABKAsyMC5ub21vcy5kaXNjb3ZlcnkudjEuRGlzY292ZXJlZFdvcmtzcGFjZVBsYWNlbWVudEgAEkIKDWxvY2FsX2N1c3RvZHkYECABKAsyKS5ub21vcy5ydW50aW1lLnYyLlBlZXJMb2NhbEN1c3RvZHlSZWNlaXB0SAASPwoRZnJvbnRpZXJfcmV0YWluZWQYESABKAsyIi5ub21vcy5ydW50aW1lLnYyLkZyb250aWVyUmV0YWluZWRIABIsCgV3b2tlbhgSIAEoCzIbLm5vbW9zLnJ1bnRpbWUudjIuUGVlcldva2VuSAASSQoUY3JlZGVudGlhbF9yZWZyZXNoZWQYEyABKAsyKS5ub21vcy5ydW50aW1lLnYyLlBlZXJDcmVkZW50aWFsUmVmcmVzaGVkSAASPwoPZGV2aWNlX2lkZW50aXR5GBQgASgLMiQubm9tb3MucnVudGltZS52Mi5QZWVyRGV2aWNlSWRlbnRpdHlIABI3CgtsYXdfcGFja2FnZRgVIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUGVlckxhd1BhY2thZ2VIABJOChNoaXN0b3J5X2FjcXVpc2l0aW9uGBYgASgLMi8ubm9tb3MucnVudGltZS52Mi5QZWVySGlzdG9yeUFjcXVpc2l0aW9uUmVjZWlwdEgAEkEKEGNvbnNvbGVfZW5yb2xsZWQYFyABKAsyJS5ub21vcy5ydW50aW1lLnYyLlBlZXJDb25zb2xlRW5yb2xsZWRIABJSChljb25zb2xlX2Vucm9sbWVudF9yZWZ1c2VkGBggASgLMi0ubm9tb3MucnVudGltZS52Mi5QZWVyQ29uc29sZUVucm9sbWVudFJlZnVzZWRIAEIJCgdvdXRjb21lIucBChJQZWVyR2l0RmV0Y2hFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEi0KBWxlYXNlGAIgASgLMh4ubm9tb3MucnVudGltZS52Mi5HaXRSZWFkTGVhc2USEQoEd2FudBgDIAEoCUgAiAEBEg0KBWhhdmVzGAQgAygJEhEKCXJlZmVyZW5jZRgFIAEoCRISCgVkZXB0aBgGIAEoDUgBiAEBEjMKCWFsb25nc2lkZRgHIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUGVlckh0dHBFZmZlY3RCBwoFX3dhbnRCCAoGX2RlcHRoIpIBChRQZWVyR2l0RmV0Y2hSZXNwb25zZRIMCgRwYWNrGAEgASgMEgwKBGhlYWQYAiABKAkSFgoOcmVjZWl2ZWRfYnl0ZXMYAyABKAQSDwoHc2hhbGxvdxgEIAMoCRI1CglhbG9uZ3NpZGUYBSABKAsyIi5ub21vcy5ydW50aW1lLnYyLlBlZXJIdHRwUmVzcG9uc2UimAEKEVBlZXJHaXRQdXNoRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIOCgZyZW1vdGUYAiABKAkSGQoMYmVhcmVyX3Rva2VuGAMgASgMSACIAQESGAoQc2Vzc2lvbl9pZGVudGl0eRgEIAEoCRIMCgRoZWFkGAUgASgJEgwKBHBhY2sYBiABKAxCDwoNX2JlYXJlcl90b2tlbiJYChNQZWVyR2l0UHVzaFJlc3BvbnNlEhEKCXJlZmVyZW5jZRgBIAEoCRIMCgRoZWFkGAIgASgJEhIKCnNlbnRfYnl0ZXMYAyABKAQSDAoEbm9vcBgEIAEoCCItCgtSZXRhaW5lZFJlZhIRCglyZWZlcmVuY2UYASABKAkSCwoDb2lkGAIgASgJIocBChRSZXRhaW5Gcm9udGllckVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCRIMCgRoZWFkGAQgASgJEisKBHJlZnMYBSADKAsyHS5ub21vcy5ydW50aW1lLnYyLlJldGFpbmVkUmVmIqIBChBGcm9udGllclJldGFpbmVkEhEKCXdvcmtzcGFjZRgBIAEoCRIOCgZicmFuY2gYAiABKAkSDAoEaGVhZBgDIAEoCRIQCghyZXRhaW5lZBgEIAEoCBITCgZkZXRhaWwYBSABKAlIAIgBARIrCgRyZWZzGAYgAygLMh0ubm9tb3MucnVudGltZS52Mi5SZXRhaW5lZFJlZkIJCgdfZGV0YWlsIl4KGFBlcnNpc3RCb3JuQ3VzdG9keUVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSLwoIY2hpbGRyZW4YAiADKAsyHS5ub21vcy5ydW50aW1lLnYyLkJvcm5DdXN0b2R5IpcBChRQZXJzaXN0ZWRCb3JuQ3VzdG9keRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglwZXJzaXN0ZWQYAyABKAgSEwoGZGV0YWlsGAQgASgJSACIAQESKwoEcmVmcxgFIAMoCzIdLm5vbW9zLnJ1bnRpbWUudjIuUmV0YWluZWRSZWZCCQoHX2RldGFpbCJVChlQZXJzaXN0Qm9ybkN1c3RvZHlSZWNlaXB0EjgKCGNoaWxkcmVuGAEgAygLMiYubm9tb3MucnVudGltZS52Mi5QZXJzaXN0ZWRCb3JuQ3VzdG9keSKYBwoVQ29ycmVzcG9uZGVuY2VQZW5kaW5nEg8KB3dvcmtfaWQYASABKAkSMAoEaHR0cBgCIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUGVlckh0dHBFZmZlY3RIABI5CglnaXRfZmV0Y2gYAyABKAsyJC5ub21vcy5ydW50aW1lLnYyLlBlZXJHaXRGZXRjaEVmZmVjdEgAEjcKCGdpdF9wdXNoGAQgASgLMiMubm9tb3MucnVudGltZS52Mi5QZWVyR2l0UHVzaEVmZmVjdEgAEkoKFHBlcnNpc3RfYm9ybl9jdXN0b2R5GAUgASgLMioubm9tb3MucnVudGltZS52Mi5QZXJzaXN0Qm9ybkN1c3RvZHlFZmZlY3RIABJNChN3b3Jrc3BhY2VfZGlzY292ZXJ5GAYgASgLMi4ubm9tb3MucnVudGltZS52Mi5QZWVyV29ya3NwYWNlRGlzY292ZXJ5RWZmZWN0SAASQQoNbG9jYWxfY3VzdG9keRgHIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuUGVlckxvY2FsQ3VzdG9keUVmZmVjdEgAEkEKD3JldGFpbl9mcm9udGllchgIIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuUmV0YWluRnJvbnRpZXJFZmZlY3RIABIwCgR3YWtlGAkgASgLMiAubm9tb3MucnVudGltZS52Mi5QZWVyV2FrZUVmZmVjdEgAEksKEnJlZnJlc2hfY3JlZGVudGlhbBgKIAEoCzItLm5vbW9zLnJ1bnRpbWUudjIuUGVlckNyZWRlbnRpYWxSZWZyZXNoRWZmZWN0SAASRQoPZGV2aWNlX2lkZW50aXR5GAsgASgLMioubm9tb3MucnVudGltZS52Mi5QZWVyRGV2aWNlSWRlbnRpdHlFZmZlY3RIABI9CgtsYXdfcGFja2FnZRgMIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuUGVlckxhd1BhY2thZ2VFZmZlY3RIABJNChNoaXN0b3J5X2FjcXVpc2l0aW9uGA0gASgLMi4ubm9tb3MucnVudGltZS52Mi5QZWVySGlzdG9yeUFjcXVpc2l0aW9uRWZmZWN0SAASSQoRY29uc29sZV9lbnJvbG1lbnQYDiABKAsyLC5ub21vcy5ydW50aW1lLnYyLlBlZXJDb25zb2xlRW5yb2xtZW50RWZmZWN0SABCCAoGZWZmZWN0IqABChpQZWVyQ29uc29sZUVucm9sbWVudEVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSFwoPZGV2aWNlX2lkZW50aXR5GAIgASgJEhIKCmNhcGFiaWxpdHkYAyABKAkSDwoHY29uc29sZRgEIAEoCRIOCgZ0ZW5hbnQYBSABKAkSDQoFc2NvcGUYBiABKAkSEgoKd29ya3NwYWNlcxgHIAMoCSKpAQoTUGVlckNvbnNvbGVFbnJvbGxlZBIRCglwcmluY2lwYWwYASABKAkSEAoIa2V5X2hhc2gYAiABKAkSPwoFaGVhZHMYAyADKAsyMC5ub21vcy5ydW50aW1lLnYyLlBlZXJDb25zb2xlRW5yb2xsZWQuSGVhZHNFbnRyeRosCgpIZWFkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicgobUGVlckNvbnNvbGVFbnJvbG1lbnRSZWZ1c2VkEg4KBnN0YXR1cxgBIAEoDRIPCgdtZXNzYWdlGAIgASgJEgwKBGNvZGUYAyABKAkSFgoJcmV0cnlhYmxlGAQgASgISACIAQFCDAoKX3JldHJ5YWJsZSJjChxQZWVySGlzdG9yeUFjcXVpc2l0aW9uRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSHQoVY3JlZGVudGlhbF9jYXBhYmlsaXR5GAMgASgJIlUKHVBlZXJIaXN0b3J5QWNxdWlzaXRpb25SZWNlaXB0EhEKCXdvcmtzcGFjZRgBIAEoCRIPCgdjaGFuZ2VkGAIgASgIEhAKCGNvbXBsZXRlGAMgASgIIjkKDlBlZXJXYWtlRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIUCgxkZWxheV9taWxsaXMYAiABKA0iCwoJUGVlcldva2VuItYBChtQZWVyQ3JlZGVudGlhbFJlZnJlc2hFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhIKCmNhcGFiaWxpdHkYAiABKAkSHQoQZGV2aWNlX2NoYWxsZW5nZRgDIAEoCUgAiAEBEhQKDGFsbG93X2NhY2hlZBgEIAEoCBInChpyZWplY3RlZF9hdXRoX3Rva2VuX3NoYTI1NhgFIAEoDEgBiAEBQhMKEV9kZXZpY2VfY2hhbGxlbmdlQh0KG19yZWplY3RlZF9hdXRoX3Rva2VuX3NoYTI1NiJvChdQZWVyQ3JlZGVudGlhbFJlZnJlc2hlZBIXCgphdXRoX3Rva2VuGAEgASgMSACIAQESGgoNYXV0aG9yX3NlY3JldBgCIAEoDEgBiAEBQg0KC19hdXRoX3Rva2VuQhAKDl9hdXRob3Jfc2VjcmV0IsYCChhQZWVyRGV2aWNlSWRlbnRpdHlFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhAKCGlkZW50aXR5GAIgASgJEjgKBGxvYWQYAyABKAsyKC5ub21vcy5ydW50aW1lLnYyLlBlZXJEZXZpY2VJZGVudGl0eUxvYWRIABI4CgRzYXZlGAQgASgLMigubm9tb3MucnVudGltZS52Mi5QZWVyRGV2aWNlSWRlbnRpdHlTYXZlSAASQQoNbG9hZF9yZWNvdmVyeRgFIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuUGVlckRldmljZVJlY292ZXJ5TG9hZEgAEkEKDXNhdmVfcmVjb3ZlcnkYBiABKAsyKC5ub21vcy5ydW50aW1lLnYyLlBlZXJEZXZpY2VSZWNvdmVyeVNhdmVIAEILCglvcGVyYXRpb24iGAoWUGVlckRldmljZUlkZW50aXR5TG9hZCIoChZQZWVyRGV2aWNlSWRlbnRpdHlTYXZlEg4KBnNlY3JldBgBIAEoDCIYChZQZWVyRGV2aWNlUmVjb3ZlcnlMb2FkIlAKFlBlZXJEZXZpY2VSZWNvdmVyeVNhdmUSNgoGcmVjb3JkGAEgASgLMiYubm9tb3MucnVudGltZS52Mi5EZXZpY2VSZWNvdmVyeVJlY29yZCKLAgoURGV2aWNlUmVjb3ZlcnlSZWNvcmQSDwoHdmVyc2lvbhgBIAEoDRITCgthcHBsaWNhdGlvbhgCIAEoCRIRCglwcmluY2lwYWwYAyABKAkSFwoPcHJldmlvdXNfc2VjcmV0GAQgASgMEhgKEGNhbmRpZGF0ZV9zZWNyZXQYBSABKAwSFwoPZW5yb2xsbWVudF9oZWFkGAYgASgJEhUKDXJlY292ZXJ5X2hlYWQYByABKAkSRAoRcGVuZGluZ19hZG1pc3Npb24YCCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkRldmljZVJlY292ZXJ5QWRtaXNzaW9uEhEKCWNvbXBsZXRlZBgJIAEoCCKxAQoXRGV2aWNlUmVjb3ZlcnlBZG1pc3Npb24SPQoFc3RhZ2UYASABKA4yLi5ub21vcy5ydW50aW1lLnYyLkRldmljZVJlY292ZXJ5QWRtaXNzaW9uU3RhZ2USEgoKcmVxdWVzdF9pZBgCIAEoBBIRCgl3b3Jrc3BhY2UYAyABKAkSMAoGZWZmZWN0GAQgASgLMiAubm9tb3MucnVudGltZS52Mi5QZWVySHR0cEVmZmVjdCJuChJQZWVyRGV2aWNlSWRlbnRpdHkSEwoGc2VjcmV0GAEgASgMSACIAQESOAoIcmVjb3ZlcnkYAiABKAsyJi5ub21vcy5ydW50aW1lLnYyLkRldmljZVJlY292ZXJ5UmVjb3JkQgkKB19zZWNyZXQiPQoUUGVlckxhd1BhY2thZ2VFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhIKCmxhd19zaGEyNTYYAiABKAkiIgoOUGVlckxhd1BhY2thZ2USEAoIbGF3X3VzZHoYASABKAwiRAocUGVlcldvcmtzcGFjZURpc2NvdmVyeUVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSEQoJd29ya3NwYWNlGAIgASgJIj4KFlBlZXJMb2NhbEN1c3RvZHlFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhEKCXdvcmtzcGFjZRgCIAEoCSKDAQoXUGVlckxvY2FsQ3VzdG9keVJlY2VpcHQSEQoJd29ya3NwYWNlGAEgASgJEhEKCWF2YWlsYWJsZRgCIAEoCBI2CgdvcGVuaW5nGAMgASgLMiAubm9tb3MucnVudGltZS52Mi5DdXN0b2R5T3BlbmluZ0gAiAEBQgoKCF9vcGVuaW5nIi8KGkhpc3RvcnlBY3F1aXNpdGlvblJlY292ZXJ5EhEKCXdvcmtzcGFjZRgBIAEoCSLeAQodQ29udGludWVDb3JyZXNwb25kZW5jZVJlcXVlc3QSDwoHd29ya19pZBgBIAEoCRI0CgdyZWNlaXB0GAIgASgLMiMubm9tb3MucnVudGltZS52Mi5QZWVyRWZmZWN0UmVjZWlwdBJWChtyZWNvdmVyX2hpc3RvcnlfYWNxdWlzaXRpb24YAyABKAsyLC5ub21vcy5ydW50aW1lLnYyLkhpc3RvcnlBY3F1aXNpdGlvblJlY292ZXJ5SACIAQFCHgocX3JlY292ZXJfaGlzdG9yeV9hY3F1aXNpdGlvbiKGAgoUUmVtb3RlT2ZmZXJBZG1pc3Npb24SEQoJd29ya3NwYWNlGAEgASgJEgwKBG1haW4YAiABKAkSGAoLc2VhbGVkX21haW4YAyABKAlIAIgBARIvCgd2ZXJkaWN0GAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2USMwoMYm9ybl9jdXN0b2R5GAUgAygLMh0ubm9tb3MucnVudGltZS52Mi5Cb3JuQ3VzdG9keRITCgtyZXN1bHRfcGFjaxgGIAEoDBIYCgtyZXN1bHRfYmFzZRgHIAEoCUgBiAEBQg4KDF9zZWFsZWRfbWFpbkIOCgxfcmVzdWx0X2Jhc2UiSgoOQm9ybkN1c3RvZHlSZWYSKgoDcmVmGAEgASgLMh0ubm9tb3MucnVudGltZS52Mi5SZXRhaW5lZFJlZhIMCgRwYWNrGAIgASgMIoEBCgtCb3JuQ3VzdG9keRItCgVjaGlsZBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5Cb3JuV29ya3NwYWNlEgwKBHBhY2sYAiABKAwSNQoLcHVibGljYXRpb24YAyADKAsyIC5ub21vcy5ydW50aW1lLnYyLkJvcm5DdXN0b2R5UmVmItkCChhDdXN0b2R5T2ZmZXJCYXRjaFJlcXVlc3QSGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEjcKBmlubGluZRgDIAEoCzIlLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUlubGluZU9mZmVyc0gAEkYKEXNlc3Npb25fY2FuZGlkYXRlGAQgASgLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5U2Vzc2lvbkNhbmRpZGF0ZUgAEhYKCWJhc2VfaGVhZBgFIAEoCUgBiAEBEhUKDWV2aWRlbmNlX3BhY2sYBiABKAwSGgoNb2JzZXJ2ZWRfaGVhZBgHIAEoCUgCiAEBEhkKEWZhc3RfZm9yd2FyZF9vbmx5GAggASgIQggKBnNvdXJjZUIMCgpfYmFzZV9oZWFkQhAKDl9vYnNlcnZlZF9oZWFkIo0BCg5MaXZlT2ZmZXJGcmFtZRIyCghmcm9udGllchgBIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuTGl2ZUZyb250aWVySAASPAoGb2ZmZXJzGAIgASgLMioubm9tb3MucnVudGltZS52Mi5DdXN0b2R5T2ZmZXJCYXRjaFJlcXVlc3RIAEIJCgdtZXNzYWdlIi4KDExpdmVGcm9udGllchIMCgRoZWFkGAEgASgJEhAKCHJlc3BvbnNlGAIgASgIImsKEFBlZXJTb2NrZXRFZmZlY3QSFQoNY29ubmVjdGlvbl9pZBgBIAEoCRISCghvcGVuX3VybBgCIAEoCUgAEg4KBHNlbmQYAyABKAxIABIPCgVjbG9zZRgEIAEoCEgAQgsKCW9wZXJhdGlvbiJxChFQZWVyU29ja2V0UmVjZWlwdBIVCg1jb25uZWN0aW9uX2lkGAEgASgJEhAKBm9wZW5lZBgCIAEoCEgAEhIKCHJlY2VpdmVkGAMgASgMSAASEAoGY2xvc2VkGAQgASgISABCDQoLb2JzZXJ2YXRpb24iFAoSUGVlclNvY2tldE9ic2VydmVkIj0KF0V4cG9ydExpdmVPZmZlcnNSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSEQoJYmFzZV9oZWFkGAIgASgJIk4KEkN1c3RvZHlJbnRlbnRPZmZlchIPCgdzZXNzaW9uGAEgASgJEhIKCmNvbW1pdF9vaWQYAiABKAkSEwoLY2hhbmdlX3VzZGEYAyABKAwiSwoTQ3VzdG9keUlubGluZU9mZmVycxI0CgZvZmZlcnMYASADKAsyJC5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRPZmZlciIsChdDdXN0b2R5U2Vzc2lvbkNhbmRpZGF0ZRIRCglyZWZlcmVuY2UYASABKAkiggQKEEN1c3RvZHlBZG1pc3Npb24SDAoEbWFpbhgBIAEoCRIYCgtzZWFsZWRfbWFpbhgCIAEoCUgAiAEBEjsKCHNlc3Npb25zGAMgAygLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5U2Vzc2lvbkFkbWlzc2lvbhI1Cg5iaXJ0aF9vdXRjb21lcxgEIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSMwoMYm9ybl9jdXN0b2R5GAUgAygLMh0ubm9tb3MucnVudGltZS52Mi5Cb3JuQ3VzdG9keRITCgtyZXN1bHRfcGFjaxgGIAEoDBIYCgtyZXN1bHRfYmFzZRgHIAEoCUgBiAEBEjoKB3RpbWluZ3MYCCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlBZG1pc3Npb25UaW1pbmdzEh4KEXJlY292ZXJ5X3JlcXVpcmVkGAkgASgISAKIAQESRgoRbG9jYWxfbWFpbnRlbmFuY2UYCiABKAsyJi5ub21vcy5ydW50aW1lLnYyLk1haW50ZW5hbmNlU2NoZWR1bGVkSAOIAQFCDgoMX3NlYWxlZF9tYWluQg4KDF9yZXN1bHRfYmFzZUIUChJfcmVjb3ZlcnlfcmVxdWlyZWRCFAoSX2xvY2FsX21haW50ZW5hbmNlImUKF0N1c3RvZHlTZXNzaW9uQWRtaXNzaW9uEg8KB3Nlc3Npb24YASABKAkSOQoHaW50ZW50cxgCIAMoCzIoLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudEFkbWlzc2lvbiLUAwoWQ3VzdG9keUludGVudEFkbWlzc2lvbhISCgpjb21taXRfb2lkGAEgASgJEhYKCWludGVudF9pZBgCIAEoCUgBiAEBEjsKCGFkbWl0dGVkGAogASgLMicubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50QWRtaXR0ZWRIABI5Cgdza2lwcGVkGAsgASgLMiYubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50U2tpcHBlZEgAEjkKB3JlZnVzZWQYDCABKAsyJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRSZWZ1c2VkSAASRAoNZGVhZF9sZXR0ZXJlZBgNIAEoCzIrLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudERlYWRMZXR0ZXJlZEgAEjkKB2Jsb2NrZWQYDiABKAsyJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRCbG9ja2VkSAASQQoLcXVhcmFudGluZWQYDyABKAsyKi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRRdWFyYW50aW5lZEgAQgkKB291dGNvbWVCDAoKX2ludGVudF9pZCKQAQoVQ3VzdG9keUludGVudEFkbWl0dGVkEgwKBGhlYWQYASABKAkSMwoHY3JlYXRlZBgCIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckFnZ3JlZ2F0ZVJlZhI0CghhZmZlY3RlZBgDIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckFnZ3JlZ2F0ZVJlZiIvChRDdXN0b2R5SW50ZW50U2tpcHBlZBIXCg9hbHJlYWR5X29uX21haW4YASABKAgimgEKFEN1c3RvZHlJbnRlbnRSZWZ1c2VkEg8KB21lc3NhZ2UYASABKAkSEQoEaGludBgDIAEoCUgAiAEBEjQKB3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgBiAEBQgcKBV9oaW50QgoKCF9yZWZ1c2FsSgQIAhADUg1kZWFkX2xldHRlcmVkIn4KGUN1c3RvZHlJbnRlbnREZWFkTGV0dGVyZWQSDwoHbWVzc2FnZRgBIAEoCRIRCgRoaW50GAIgASgJSACIAQESHgoRY3VzdG9keV9yZWZlcmVuY2UYAyABKAlIAYgBAUIHCgVfaGludEIUChJfY3VzdG9keV9yZWZlcmVuY2UiJgoUQ3VzdG9keUludGVudEJsb2NrZWQSDgoGZGV0YWlsGAEgASgJIpUBChhDdXN0b2R5SW50ZW50UXVhcmFudGluZWQSDgoGcmVhc29uGAEgASgJEhkKEWF1dGhvcmVkX2xhd19oYXNoGAIgASgJEhgKEGN1cnJlbnRfbGF3X2hhc2gYAyABKAkSHgoRY3VzdG9keV9yZWZlcmVuY2UYBCABKAlIAIgBAUIUChJfY3VzdG9keV9yZWZlcmVuY2Ui7QEKF0N1c3RvZHlBZG1pc3Npb25UaW1pbmdzEhQKDHRvdGFsX21pbGxpcxgBIAEoARITCgtzY2FuX21pbGxpcxgCIAEoARIUCgxmZXRjaF9taWxsaXMYAyABKAESEwoLc2VhbF9taWxsaXMYBCABKAESGAoQZ2F0ZV9mb2xkX21pbGxpcxgFIAEoARIUCgxpbnRlbnRfY291bnQYBiABKA0SFQoNc2Vzc2lvbl9jb3VudBgHIAEoDRI1CgVzcGFucxgIIAMoCzImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUFkbWlzc2lvblNwYW4ilwEKFEN1c3RvZHlBZG1pc3Npb25TcGFuEgoKAmlkGAEgASgJEg0KBXRyYWNrGAIgASgJEgwKBG5hbWUYAyABKAkSDAoEa2luZBgEIAEoCRINCgVkZXB0aBgFIAEoDRIbChNzdGFydGVkX3VuaXhfbWlsbGlzGAYgASgBEhwKFGZpbmlzaGVkX3VuaXhfbWlsbGlzGAcgASgBIl0KF1dvcmtzcGFjZUVmZmVjdERlZmVycmVkEhgKEHRhcmdldF93b3Jrc3BhY2UYASABKAkSGgoScmV0cnlfYWZ0ZXJfbWlsbGlzGAIgASgEEgwKBGhlbGQYAyABKAQi+gEKDU91dGJveFN1bW1hcnkSEQoJd29ya3NwYWNlGAEgASgJEg8KB2VudHJpZXMYAiABKAQSNAoHdGFyZ2V0cxgDIAMoCzIjLm5vbW9zLnJ1bnRpbWUudjIuT3V0Ym94VGFyZ2V0Q291bnQSHwoSbmV4dF9kdWVfYXRfbWlsbGlzGAQgASgESACIAQESFAoMd29ya19wZW5kaW5nGAUgASgIEhAKCHJlc2lkZW50GAYgASgIEhUKDWVudHJpZXNfdG90YWwYByABKA0SGAoQZW50cmllc19wcmVwYXJlZBgIIAEoDUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIj4KEU91dGJveFRhcmdldENvdW50EhgKEHRhcmdldF93b3Jrc3BhY2UYASABKAkSDwoHZW50cmllcxgCIAEoBCq8AQoVU2hhcmVXb3Jrc3BhY2VPdXRjb21lEicKI1NIQVJFX1dPUktTUEFDRV9PVVRDT01FX1VOU1BFQ0lGSUVEEAASJQohU0hBUkVfV09SS1NQQUNFX09VVENPTUVfREVMSVZFUkVEEAESLgoqU0hBUkVfV09SS1NQQUNFX09VVENPTUVfQVdBSVRJTkdfUkVDSVBJRU5UEAISIwofU0hBUkVfV09SS1NQQUNFX09VVENPTUVfUkVGVVNFRBADKmcKDlBlZXJIdHRwTWV0aG9kEiAKHFBFRVJfSFRUUF9NRVRIT0RfVU5TUEVDSUZJRUQQABIYChRQRUVSX0hUVFBfTUVUSE9EX0dFVBABEhkKFVBFRVJfSFRUUF9NRVRIT0RfUE9TVBACKr8BChdQZWVyRWZmZWN0RmFpbHVyZVJlYXNvbhIqCiZQRUVSX0VGRkVDVF9GQUlMVVJFX1JFQVNPTl9VTlNQRUNJRklFRBAAEiYKIlBFRVJfRUZGRUNUX0ZBSUxVUkVfUkVBU09OX09GRkxJTkUQARImCiJQRUVSX0VGRkVDVF9GQUlMVVJFX1JFQVNPTl9USU1FT1VUEAISKAokUEVFUl9FRkZFQ1RfRkFJTFVSRV9SRUFTT05fVFJBTlNQT1JUEAMqrQEKHERldmljZVJlY292ZXJ5QWRtaXNzaW9uU3RhZ2USLworREVWSUNFX1JFQ09WRVJZX0FETUlTU0lPTl9TVEFHRV9VTlNQRUNJRklFRBAAEi4KKkRFVklDRV9SRUNPVkVSWV9BRE1JU1NJT05fU1RBR0VfRU5ST0xMTUVOVBABEiwKKERFVklDRV9SRUNPVkVSWV9BRE1JU1NJT05fU1RBR0VfUkVDT1ZFUlkQAmIGcHJvdG8z", [file_nomos_kernel_v1_kernel, file_nomos_runtime_v2_placement_desk, file_nomos_discovery_v1_workspace_placement, file_nomos_runtime_v2_custody_desk, file_nomos_runtime_v2_maintenance_desk]);
|
|
7752
|
+
var file_nomos_runtime_v2_correspondence_desk = /* @__PURE__ */ fileDesc("Cipub21vcy9ydW50aW1lL3YyL2NvcnJlc3BvbmRlbmNlX2Rlc2sucHJvdG8SEG5vbW9zLnJ1bnRpbWUudjIi0AIKFVNoYXJlV29ya3NwYWNlUmVxdWVzdBIPCgdzdWJqZWN0GAEgASgJEhAKCHJlbGF0aW9uGAIgASgJEhoKEmFzc2VydGVyX3ByaW5jaXBhbBgDIAEoCRIOCgZvYmplY3QYBCABKAkSHAoPaG9tZV9sYXdfc2hhMjU2GAUgASgJSACIAQESGgoNYXV0aG9yX3NlY3JldBgGIAEoDEgBiAEBEh8KEmFzc2VydGVyX3dvcmtzcGFjZRgHIAEoCUgCiAEBEhgKC2F0dGVzdGVkX2F0GAggASgJSAOIAQESFwoKYXV0aF90b2tlbhgJIAEoDEgEiAEBQhIKEF9ob21lX2xhd19zaGEyNTZCEAoOX2F1dGhvcl9zZWNyZXRCFQoTX2Fzc2VydGVyX3dvcmtzcGFjZUIOCgxfYXR0ZXN0ZWRfYXRCDQoLX2F1dGhfdG9rZW4ikgEKFFNoYXJlV29ya3NwYWNlUmVzdWx0EjgKB291dGNvbWUYASABKA4yJy5ub21vcy5ydW50aW1lLnYyLlNoYXJlV29ya3NwYWNlT3V0Y29tZRITCgZzdGF0dXMYAiABKA1IAIgBARIUCgdtZXNzYWdlGAMgASgJSAGIAQFCCQoHX3N0YXR1c0IKCghfbWVzc2FnZSLKAQodUGFyZW50U2lnbmVyRW5yb2xsbWVudFJlcXVlc3QSDgoGcGFyZW50GAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCRIXCgprZXlfc2hhMjU2GAMgASgJSACIAQESFwoKcHVibGljX2tleRgEIAEoDEgBiAEBEhcKCmF1dGhfdG9rZW4YBSABKAxIAogBARIOCgZyZW1vdGUYBiABKAhCDQoLX2tleV9zaGEyNTZCDQoLX3B1YmxpY19rZXlCDQoLX2F1dGhfdG9rZW4i1AEKFlBhcmVudFNpZ25lckVucm9sbG1lbnQSDgoGcGFyZW50GAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCRISCgprZXlfc2hhMjU2GAMgASgJEg4KBm9iamVjdBgEIAEoCRIQCghyZWxhdGlvbhgFIAEoCRIQCghlbnJvbGxlZBgGIAEoCBIPCgdyZXZva2VkGAcgASgIEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhIKCmNoZWNrZWRfYXQYCSABKAlCDwoNX3ZlcmlmaWVkX3ZpYSLcAgojRW5zdXJlUGFyZW50U2lnbmVyRW5yb2xsbWVudFJlcXVlc3QSDgoGcGFyZW50GAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCRIXCgpwdWJsaWNfa2V5GAMgASgMSACIAQESGgoNYXV0aG9yX3NlY3JldBgEIAEoDEgBiAEBEhMKBmRvbWFpbhgFIAEoCUgCiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgDiAEBEhcKCmF1dGhfdG9rZW4YByABKAxIBIgBARIVCghpZF90b2tlbhgIIAEoDEgFiAEBEhkKDHZlcmlmaWVkX3ZpYRgJIAEoCUgGiAEBQg0KC19wdWJsaWNfa2V5QhAKDl9hdXRob3Jfc2VjcmV0QgkKB19kb21haW5CDAoKX2RpcmVjdGl2ZUINCgtfYXV0aF90b2tlbkILCglfaWRfdG9rZW5CDwoNX3ZlcmlmaWVkX3ZpYSLZAQoiRW5zdXJlUGFyZW50U2lnbmVyRW5yb2xsbWVudFJlc3VsdBIOCgZwYXJlbnQYASABKAkSEQoJcHJpbmNpcGFsGAIgASgJEhIKCmtleV9zaGEyNTYYAyABKAkSEAoIZW5yb2xsZWQYBCABKAgSEAoIcmVwYWlyZWQYBSABKAgSEwoGZG9tYWluGAYgASgJSACIAQESFgoJZGlyZWN0aXZlGAcgASgJSAGIAQESEgoKY2hlY2tlZF9hdBgIIAEoCUIJCgdfZG9tYWluQgwKCl9kaXJlY3RpdmUiHQobVmVyaWZ5V29ya3NwYWNlQ2hhaW5SZXF1ZXN0IrsBChpWZXJpZnlXb3Jrc3BhY2VDaGFpblJlc3VsdBINCgV2YWxpZBgBIAEoCBISCgVlcnJvchgCIAEoCUgAiAEBEhgKC3BsYW5zX3JlcnVuGAMgASgESAGIAQESOgoHaGlzdG9yeRgEIAEoCzIkLm5vbW9zLnJ1bnRpbWUudjIuVmVyaWZ5Q2hhaW5IaXN0b3J5SAKIAQFCCAoGX2Vycm9yQg4KDF9wbGFuc19yZXJ1bkIKCghfaGlzdG9yeSKHAQoSVmVyaWZ5Q2hhaW5IaXN0b3J5Eg0KBXN0YXRlGAEgASgJEg4KBmFuY2hvchgCIAEoCRIQCghib3VuZGFyeRgDIAMoCRIMCgR3YWxrGAQgASgJEh0KEHZlcmlmaWVkX2NvbW1pdHMYBSABKARIAIgBAUITChFfdmVyaWZpZWRfY29tbWl0cyJ/ChRTeW5jV29ya3NwYWNlUmVxdWVzdBINCgVhZG1pdBgCIAEoCBIRCgl3b3Jrc3BhY2UYAyABKAkSHwoScmVwbGFjZV9sb2NhbF9oZWFkGAQgASgJSACIAQFCFQoTX3JlcGxhY2VfbG9jYWxfaGVhZEoECAEQAlIHc2Vzc2lvbiKqCQoVU3luY1dvcmtzcGFjZVJlc3BvbnNlEhEKCXdvcmtzcGFjZRgBIAEoCRIaCg1wcmV2aW91c19oZWFkGAIgASgJSACIAQESGQoMY3VycmVudF9oZWFkGAMgASgJSAGIAQESEAoIYWRtaXR0ZWQYBCABKAQSDwoHcmVmdXNlZBgFIAEoBBIQCghkZWZlcnJlZBgGIAEoBBISCgpsb2NhbF9vbmx5GAcgASgIEg4KBnB1bGxlZBgIIAEoCBIQCghkaXZlcmdlZBgJIAEoCBIaChJyZWNvbm5lY3RfcmVxdWlyZWQYCiABKAgSEwoLc3RpbGxfYWhlYWQYCyABKAgSDwoHb2ZmbGluZRgMIAEoCBITCgtwdXNoX2ZhaWxlZBgNIAEoCBIdChVkaXJlY3Rfb2ZmZXJfZGVmZXJyZWQYDiABKAgSNQoOYmlydGhfb3V0Y29tZXMYDyADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEhsKE2FkbWl0dGVkX2ludGVudF9pZHMYECADKAkSHAoUY29udmVyZ2VkX2ludGVudF9pZHMYESADKAkSQgoKcHVzaF9lcnJvchgSIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVRyYW5zcG9ydEZhaWx1cmVIAogBARJHCg9kaXNjb3ZlcnlfZXJyb3IYEyABKAsyKS5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVUcmFuc3BvcnRGYWlsdXJlSAOIAQESMwoHdGltaW5ncxgUIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuU3luY1BoYXNlVGltaW5ncxJBCg1vZmZlcl9yZWNlaXB0GBUgASgLMiUubm9tb3MucnVudGltZS52Mi5DdXN0b2R5T2ZmZXJSZWNlaXB0SASIAQESOQoOcmVtb3RlX3JlZnVzYWwYFiABKAsyHC5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzYWxIBYgBARJHChRjdXN0b2R5X2Rpc2FncmVlbWVudBgXIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5RGlzYWdyZWVtZW50SAaIAQESGAoQY3VzdG9keV9yZXBsYWNlZBgYIAEoCBIVCg1tYWluX2FkdmFuY2VkGBkgASgIEkAKD3JlYm9ybl9yZW1vdGVseRgaIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlUmViaXJ0aEgHiAEBEkcKFHByZXNlcnZlZF9sb2NhbF9jb3B5GBsgASgLMiQubm9tb3MucnVudGltZS52Mi5QcmVzZXJ2ZWRMb2NhbENvcHlICIgBAUIQCg5fcHJldmlvdXNfaGVhZEIPCg1fY3VycmVudF9oZWFkQg0KC19wdXNoX2Vycm9yQhIKEF9kaXNjb3ZlcnlfZXJyb3JCEAoOX29mZmVyX3JlY2VpcHRCEQoPX3JlbW90ZV9yZWZ1c2FsQhcKFV9jdXN0b2R5X2Rpc2FncmVlbWVudEISChBfcmVib3JuX3JlbW90ZWx5QhcKFV9wcmVzZXJ2ZWRfbG9jYWxfY29weSLoAQoTQ3VzdG9keU9mZmVyUmVjZWlwdBISCgpyZXF1ZXN0X2lkGAEgASgJEkMKCWFkbWlzc2lvbhgKIAEoCzIuLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keU9mZmVyQWRtaXNzaW9uUmVjZWlwdEgAEjgKB2ZhaWx1cmUYCyABKAsyJS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlPZmZlckZhaWx1cmVIABIzCgdibG9ja2VkGAwgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lQmxvY2tlZEgAQgkKB291dGNvbWUihgIKHEN1c3RvZHlPZmZlckFkbWlzc2lvblJlY2VpcHQSDAoEbWFpbhgBIAEoCRIYCgtzZWFsZWRfbWFpbhgCIAEoCUgAiAEBEjsKCHNlc3Npb25zGAMgAygLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5U2Vzc2lvbkFkbWlzc2lvbhI1Cg5iaXJ0aF9vdXRjb21lcxgEIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSOgoHdGltaW5ncxgFIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUFkbWlzc2lvblRpbWluZ3NCDgoMX3NlYWxlZF9tYWluIrMBChNDdXN0b2R5T2ZmZXJGYWlsdXJlEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIRCgljb21wb25lbnQYAyABKAkSFgoJd29ya3NwYWNlGAQgASgJSACIAQESEwoGZG9tYWluGAUgASgJSAGIAQESFgoJZGlyZWN0aXZlGAYgASgJSAKIAQFCDAoKX3dvcmtzcGFjZUIJCgdfZG9tYWluQgwKCl9kaXJlY3RpdmUiXQoXUnVudGltZVRyYW5zcG9ydEZhaWx1cmUSEAoIZW5kcG9pbnQYASABKAkSDgoGc3RhdHVzGAIgASgREg8KB3JlZnVzZWQYAyABKAgSDwoHbWVzc2FnZRgEIAEoCSLFAQoQU3luY1BoYXNlVGltaW5ncxITCgtwdXNoX21pbGxpcxgBIAEoARIUCgxhZG1pdF9taWxsaXMYAiABKAESFwoPcHJlZmV0Y2hfbWlsbGlzGAMgASgBEhcKD2NvbnZlcmdlX21pbGxpcxgEIAEoARISCgpwdXNoX2J5dGVzGAUgASgEEhUKDXNlcnZlcl9taWxsaXMYBiABKAESFQoNb2ZmZXJfaW5fcHVzaBgHIAEoCBISCgpwdWxsX2J5dGVzGAggASgEIjQKH1JlZnJlc2hSZXBsaWNhQ3JlZGVudGlhbFJlcXVlc3QSEQoJd29ya3NwYWNlGAEgASgJIosBCgxHaXRSZWFkTGVhc2USFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SEQoJd29ya3NwYWNlGAIgASgJEg4KBnJlbW90ZRgDIAEoCRINCgV0b2tlbhgEIAEoCRITCgt0dGxfc2Vjb25kcxgFIAEoDRIcChRleHBpcmVzX3VuaXhfc2Vjb25kcxgGIAEoBCJuCg9HaXRGZXRjaFJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRItCgVsZWFzZRgCIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuR2l0UmVhZExlYXNlEgwKBHdhbnQYAyABKAkSDQoFaGF2ZXMYBCADKAkiagoOR2l0RmV0Y2hSZXN1bHQSHQoQc3RhZ2VkX3BhY2tfZmlsZRgBIAEoCUgAiAEBEgwKBGhlYWQYAiABKAkSFgoOcmVjZWl2ZWRfYnl0ZXMYAyABKARCEwoRX3N0YWdlZF9wYWNrX2ZpbGUitgEKHkRlbGl2ZXJXb3Jrc3BhY2VFZmZlY3RzUmVxdWVzdBIWCg5zb3VyY2Vfc2Vzc2lvbhgBIAEoCRIYChB0YXJnZXRfd29ya3NwYWNlGAIgASgJEhoKDXNvdXJjZV9jb21taXQYAyABKAlIAIgBARIeChFzb3VyY2Vfb2ZmZXJfcGF0aBgEIAEoCUgBiAEBQhAKDl9zb3VyY2VfY29tbWl0QhQKEl9zb3VyY2Vfb2ZmZXJfcGF0aCJRChxEZWxpdmVySHR0cE9ibGlnYXRpb25SZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJEhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJIrsBChdIdHRwT2JsaWdhdGlvbkRlbGl2ZXJlZBIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEhEKCWF0dGVtcHRlZBgCIAEoCBIRCglkZWxpdmVyZWQYAyABKAgSEQoJcmV0cnlhYmxlGAQgASgIEhsKE3ByZXBhcmF0aW9uX3BlbmRpbmcYBSABKAgSHAoPcmV0cnlfYXRfbWlsbGlzGAYgASgESACIAQFCEgoQX3JldHJ5X2F0X21pbGxpcyI2ChxSZWNvdmVyQ29ycmVzcG9uZGVuY2VSZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJIqwBChdDb3JyZXNwb25kZW5jZVJlY292ZXJlZBIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEg8KB3BlbmRpbmcYAiABKAgSIAoTbmV4dF93YWtlX2F0X21pbGxpcxgDIAEoBEgAiAEBEhoKDXJldGFpbmVkX2hlYWQYBCABKAlIAYgBAUIWChRfbmV4dF93YWtlX2F0X21pbGxpc0IQCg5fcmV0YWluZWRfaGVhZCL2AgoZV29ya3NwYWNlRWZmZWN0c0RlbGl2ZXJlZBIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAiABKAkSEQoJYXR0ZW1wdGVkGAMgASgEEhEKCWRlbGl2ZXJlZBgEIAEoBBIPCgdyZWZ1c2VkGAUgASgEEhEKCXJldHJ5YWJsZRgGIAEoBBIcCg9yZXRyeV9hdF9taWxsaXMYByABKARIAIgBARIbChNwcmVwYXJhdGlvbl9wZW5kaW5nGAggASgIEhgKC3RhcmdldF9oZWFkGAkgASgJSAGIAQESHwoXc291cmNlX291dGNvbWVfcmVjb3JkZWQYCiABKAgSQQoMcmV0cnlfcmVhc29uGAsgASgLMisubm9tb3MucnVudGltZS52Mi5Db3JyZXNwb25kZW5jZVJldHJ5UmVhc29uQhIKEF9yZXRyeV9hdF9taWxsaXNCDgoMX3RhcmdldF9oZWFkIjsKGUNvcnJlc3BvbmRlbmNlUmV0cnlSZWFzb24SDgoGcmVhc29uGAEgASgJEg4KBmRldGFpbBgCIAEoCSKsAwobUmVtb3RlR2VuZXJhdGVkT2ZmZXJSZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAiABKAkSDQoFYWN0b3IYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDBISCgphdXRoX3Rva2VuGAUgASgMEi4KBGNhbGwYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEkAKD21vZGVsX2xpZmVjeWNsZRgJIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Nb2RlbExpZmVjeWNsZUludGVudEgAEkEKEWJpcnRoX2NlcnRpZmljYXRlGAcgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGVIAYgBARIhChRyZXF1aXJlZF90YXJnZXRfaGVhZBgIIAEoCUgCiAEBEhAKCGxhd191c2R6GAogASgMQggKBmludGVudEIUChJfYmlydGhfY2VydGlmaWNhdGVCFwoVX3JlcXVpcmVkX3RhcmdldF9oZWFkIj8KHFJlbW90ZUdlbmVyYXRlZE9mZmVyQWNjZXB0ZWQSEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkiygIKDlBlZXJIdHRwRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIwCgZtZXRob2QYAiABKA4yIC5ub21vcy5ydW50aW1lLnYyLlBlZXJIdHRwTWV0aG9kEgsKA3VybBgDIAEoCRIZCgxjb250ZW50X3R5cGUYBCABKAlIAIgBARIMCgRib2R5GAUgASgMEhkKDGJlYXJlcl90b2tlbhgGIAEoDEgBiAEBEhMKBmFjY2VwdBgHIAEoCUgCiAEBEhsKDnRpbWVvdXRfbWlsbGlzGAggASgNSAOIAQESHAoPaWRlbXBvdGVuY3lfa2V5GAkgASgJSASIAQFCDwoNX2NvbnRlbnRfdHlwZUIPCg1fYmVhcmVyX3Rva2VuQgkKB19hY2NlcHRCEQoPX3RpbWVvdXRfbWlsbGlzQhIKEF9pZGVtcG90ZW5jeV9rZXkiXAoQUGVlckh0dHBSZXNwb25zZRIOCgZzdGF0dXMYASABKA0SGQoMY29udGVudF90eXBlGAIgASgJSACIAQESDAoEYm9keRgDIAEoDEIPCg1fY29udGVudF90eXBlIl8KEVBlZXJFZmZlY3RGYWlsdXJlEjkKBnJlYXNvbhgBIAEoDjIpLm5vbW9zLnJ1bnRpbWUudjIuUGVlckVmZmVjdEZhaWx1cmVSZWFzb24SDwoHbWVzc2FnZRgCIAEoCSKZCAoRUGVlckVmZmVjdFJlY2VpcHQSEQoJZWZmZWN0X2lkGAEgASgJEjYKCHJlc3BvbnNlGAogASgLMiIubm9tb3MucnVudGltZS52Mi5QZWVySHR0cFJlc3BvbnNlSAASNgoHZmFpbHVyZRgLIAEoCzIjLm5vbW9zLnJ1bnRpbWUudjIuUGVlckVmZmVjdEZhaWx1cmVIABI7CglnaXRfZmV0Y2gYDCABKAsyJi5ub21vcy5ydW50aW1lLnYyLlBlZXJHaXRGZXRjaFJlc3BvbnNlSAASOQoIZ2l0X3B1c2gYDSABKAsyJS5ub21vcy5ydW50aW1lLnYyLlBlZXJHaXRQdXNoUmVzcG9uc2VIABJNChZib3JuX2N1c3RvZHlfcGVyc2lzdGVkGA4gASgLMisubm9tb3MucnVudGltZS52Mi5QZXJzaXN0Qm9ybkN1c3RvZHlSZWNlaXB0SAASUAoUd29ya3NwYWNlX2Rpc2NvdmVyZWQYDyABKAsyMC5ub21vcy5kaXNjb3ZlcnkudjEuRGlzY292ZXJlZFdvcmtzcGFjZVBsYWNlbWVudEgAEkIKDWxvY2FsX2N1c3RvZHkYECABKAsyKS5ub21vcy5ydW50aW1lLnYyLlBlZXJMb2NhbEN1c3RvZHlSZWNlaXB0SAASPwoRZnJvbnRpZXJfcmV0YWluZWQYESABKAsyIi5ub21vcy5ydW50aW1lLnYyLkZyb250aWVyUmV0YWluZWRIABIsCgV3b2tlbhgSIAEoCzIbLm5vbW9zLnJ1bnRpbWUudjIuUGVlcldva2VuSAASSQoUY3JlZGVudGlhbF9yZWZyZXNoZWQYEyABKAsyKS5ub21vcy5ydW50aW1lLnYyLlBlZXJDcmVkZW50aWFsUmVmcmVzaGVkSAASPwoPZGV2aWNlX2lkZW50aXR5GBQgASgLMiQubm9tb3MucnVudGltZS52Mi5QZWVyRGV2aWNlSWRlbnRpdHlIABI3CgtsYXdfcGFja2FnZRgVIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUGVlckxhd1BhY2thZ2VIABJOChNoaXN0b3J5X2FjcXVpc2l0aW9uGBYgASgLMi8ubm9tb3MucnVudGltZS52Mi5QZWVySGlzdG9yeUFjcXVpc2l0aW9uUmVjZWlwdEgAEkEKEGNvbnNvbGVfZW5yb2xsZWQYFyABKAsyJS5ub21vcy5ydW50aW1lLnYyLlBlZXJDb25zb2xlRW5yb2xsZWRIABJSChljb25zb2xlX2Vucm9sbWVudF9yZWZ1c2VkGBggASgLMi0ubm9tb3MucnVudGltZS52Mi5QZWVyQ29uc29sZUVucm9sbWVudFJlZnVzZWRIAEIJCgdvdXRjb21lIucBChJQZWVyR2l0RmV0Y2hFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEi0KBWxlYXNlGAIgASgLMh4ubm9tb3MucnVudGltZS52Mi5HaXRSZWFkTGVhc2USEQoEd2FudBgDIAEoCUgAiAEBEg0KBWhhdmVzGAQgAygJEhEKCXJlZmVyZW5jZRgFIAEoCRISCgVkZXB0aBgGIAEoDUgBiAEBEjMKCWFsb25nc2lkZRgHIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUGVlckh0dHBFZmZlY3RCBwoFX3dhbnRCCAoGX2RlcHRoIpIBChRQZWVyR2l0RmV0Y2hSZXNwb25zZRIMCgRwYWNrGAEgASgMEgwKBGhlYWQYAiABKAkSFgoOcmVjZWl2ZWRfYnl0ZXMYAyABKAQSDwoHc2hhbGxvdxgEIAMoCRI1CglhbG9uZ3NpZGUYBSABKAsyIi5ub21vcy5ydW50aW1lLnYyLlBlZXJIdHRwUmVzcG9uc2UimAEKEVBlZXJHaXRQdXNoRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIOCgZyZW1vdGUYAiABKAkSGQoMYmVhcmVyX3Rva2VuGAMgASgMSACIAQESGAoQc2Vzc2lvbl9pZGVudGl0eRgEIAEoCRIMCgRoZWFkGAUgASgJEgwKBHBhY2sYBiABKAxCDwoNX2JlYXJlcl90b2tlbiJYChNQZWVyR2l0UHVzaFJlc3BvbnNlEhEKCXJlZmVyZW5jZRgBIAEoCRIMCgRoZWFkGAIgASgJEhIKCnNlbnRfYnl0ZXMYAyABKAQSDAoEbm9vcBgEIAEoCCItCgtSZXRhaW5lZFJlZhIRCglyZWZlcmVuY2UYASABKAkSCwoDb2lkGAIgASgJIocBChRSZXRhaW5Gcm9udGllckVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCRIMCgRoZWFkGAQgASgJEisKBHJlZnMYBSADKAsyHS5ub21vcy5ydW50aW1lLnYyLlJldGFpbmVkUmVmIqIBChBGcm9udGllclJldGFpbmVkEhEKCXdvcmtzcGFjZRgBIAEoCRIOCgZicmFuY2gYAiABKAkSDAoEaGVhZBgDIAEoCRIQCghyZXRhaW5lZBgEIAEoCBITCgZkZXRhaWwYBSABKAlIAIgBARIrCgRyZWZzGAYgAygLMh0ubm9tb3MucnVudGltZS52Mi5SZXRhaW5lZFJlZkIJCgdfZGV0YWlsIl4KGFBlcnNpc3RCb3JuQ3VzdG9keUVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSLwoIY2hpbGRyZW4YAiADKAsyHS5ub21vcy5ydW50aW1lLnYyLkJvcm5DdXN0b2R5IpcBChRQZXJzaXN0ZWRCb3JuQ3VzdG9keRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglwZXJzaXN0ZWQYAyABKAgSEwoGZGV0YWlsGAQgASgJSACIAQESKwoEcmVmcxgFIAMoCzIdLm5vbW9zLnJ1bnRpbWUudjIuUmV0YWluZWRSZWZCCQoHX2RldGFpbCJVChlQZXJzaXN0Qm9ybkN1c3RvZHlSZWNlaXB0EjgKCGNoaWxkcmVuGAEgAygLMiYubm9tb3MucnVudGltZS52Mi5QZXJzaXN0ZWRCb3JuQ3VzdG9keSKYBwoVQ29ycmVzcG9uZGVuY2VQZW5kaW5nEg8KB3dvcmtfaWQYASABKAkSMAoEaHR0cBgCIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUGVlckh0dHBFZmZlY3RIABI5CglnaXRfZmV0Y2gYAyABKAsyJC5ub21vcy5ydW50aW1lLnYyLlBlZXJHaXRGZXRjaEVmZmVjdEgAEjcKCGdpdF9wdXNoGAQgASgLMiMubm9tb3MucnVudGltZS52Mi5QZWVyR2l0UHVzaEVmZmVjdEgAEkoKFHBlcnNpc3RfYm9ybl9jdXN0b2R5GAUgASgLMioubm9tb3MucnVudGltZS52Mi5QZXJzaXN0Qm9ybkN1c3RvZHlFZmZlY3RIABJNChN3b3Jrc3BhY2VfZGlzY292ZXJ5GAYgASgLMi4ubm9tb3MucnVudGltZS52Mi5QZWVyV29ya3NwYWNlRGlzY292ZXJ5RWZmZWN0SAASQQoNbG9jYWxfY3VzdG9keRgHIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuUGVlckxvY2FsQ3VzdG9keUVmZmVjdEgAEkEKD3JldGFpbl9mcm9udGllchgIIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuUmV0YWluRnJvbnRpZXJFZmZlY3RIABIwCgR3YWtlGAkgASgLMiAubm9tb3MucnVudGltZS52Mi5QZWVyV2FrZUVmZmVjdEgAEksKEnJlZnJlc2hfY3JlZGVudGlhbBgKIAEoCzItLm5vbW9zLnJ1bnRpbWUudjIuUGVlckNyZWRlbnRpYWxSZWZyZXNoRWZmZWN0SAASRQoPZGV2aWNlX2lkZW50aXR5GAsgASgLMioubm9tb3MucnVudGltZS52Mi5QZWVyRGV2aWNlSWRlbnRpdHlFZmZlY3RIABI9CgtsYXdfcGFja2FnZRgMIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuUGVlckxhd1BhY2thZ2VFZmZlY3RIABJNChNoaXN0b3J5X2FjcXVpc2l0aW9uGA0gASgLMi4ubm9tb3MucnVudGltZS52Mi5QZWVySGlzdG9yeUFjcXVpc2l0aW9uRWZmZWN0SAASSQoRY29uc29sZV9lbnJvbG1lbnQYDiABKAsyLC5ub21vcy5ydW50aW1lLnYyLlBlZXJDb25zb2xlRW5yb2xtZW50RWZmZWN0SABCCAoGZWZmZWN0IqABChpQZWVyQ29uc29sZUVucm9sbWVudEVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSFwoPZGV2aWNlX2lkZW50aXR5GAIgASgJEhIKCmNhcGFiaWxpdHkYAyABKAkSDwoHY29uc29sZRgEIAEoCRIOCgZ0ZW5hbnQYBSABKAkSDQoFc2NvcGUYBiABKAkSEgoKd29ya3NwYWNlcxgHIAMoCSKpAQoTUGVlckNvbnNvbGVFbnJvbGxlZBIRCglwcmluY2lwYWwYASABKAkSEAoIa2V5X2hhc2gYAiABKAkSPwoFaGVhZHMYAyADKAsyMC5ub21vcy5ydW50aW1lLnYyLlBlZXJDb25zb2xlRW5yb2xsZWQuSGVhZHNFbnRyeRosCgpIZWFkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicgobUGVlckNvbnNvbGVFbnJvbG1lbnRSZWZ1c2VkEg4KBnN0YXR1cxgBIAEoDRIPCgdtZXNzYWdlGAIgASgJEgwKBGNvZGUYAyABKAkSFgoJcmV0cnlhYmxlGAQgASgISACIAQFCDAoKX3JldHJ5YWJsZSJjChxQZWVySGlzdG9yeUFjcXVpc2l0aW9uRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSHQoVY3JlZGVudGlhbF9jYXBhYmlsaXR5GAMgASgJIlUKHVBlZXJIaXN0b3J5QWNxdWlzaXRpb25SZWNlaXB0EhEKCXdvcmtzcGFjZRgBIAEoCRIPCgdjaGFuZ2VkGAIgASgIEhAKCGNvbXBsZXRlGAMgASgIIjkKDlBlZXJXYWtlRWZmZWN0EhEKCWVmZmVjdF9pZBgBIAEoCRIUCgxkZWxheV9taWxsaXMYAiABKA0iCwoJUGVlcldva2VuItYBChtQZWVyQ3JlZGVudGlhbFJlZnJlc2hFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhIKCmNhcGFiaWxpdHkYAiABKAkSHQoQZGV2aWNlX2NoYWxsZW5nZRgDIAEoCUgAiAEBEhQKDGFsbG93X2NhY2hlZBgEIAEoCBInChpyZWplY3RlZF9hdXRoX3Rva2VuX3NoYTI1NhgFIAEoDEgBiAEBQhMKEV9kZXZpY2VfY2hhbGxlbmdlQh0KG19yZWplY3RlZF9hdXRoX3Rva2VuX3NoYTI1NiJvChdQZWVyQ3JlZGVudGlhbFJlZnJlc2hlZBIXCgphdXRoX3Rva2VuGAEgASgMSACIAQESGgoNYXV0aG9yX3NlY3JldBgCIAEoDEgBiAEBQg0KC19hdXRoX3Rva2VuQhAKDl9hdXRob3Jfc2VjcmV0IsYCChhQZWVyRGV2aWNlSWRlbnRpdHlFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhAKCGlkZW50aXR5GAIgASgJEjgKBGxvYWQYAyABKAsyKC5ub21vcy5ydW50aW1lLnYyLlBlZXJEZXZpY2VJZGVudGl0eUxvYWRIABI4CgRzYXZlGAQgASgLMigubm9tb3MucnVudGltZS52Mi5QZWVyRGV2aWNlSWRlbnRpdHlTYXZlSAASQQoNbG9hZF9yZWNvdmVyeRgFIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuUGVlckRldmljZVJlY292ZXJ5TG9hZEgAEkEKDXNhdmVfcmVjb3ZlcnkYBiABKAsyKC5ub21vcy5ydW50aW1lLnYyLlBlZXJEZXZpY2VSZWNvdmVyeVNhdmVIAEILCglvcGVyYXRpb24iGAoWUGVlckRldmljZUlkZW50aXR5TG9hZCIoChZQZWVyRGV2aWNlSWRlbnRpdHlTYXZlEg4KBnNlY3JldBgBIAEoDCIYChZQZWVyRGV2aWNlUmVjb3ZlcnlMb2FkIlAKFlBlZXJEZXZpY2VSZWNvdmVyeVNhdmUSNgoGcmVjb3JkGAEgASgLMiYubm9tb3MucnVudGltZS52Mi5EZXZpY2VSZWNvdmVyeVJlY29yZCKLAgoURGV2aWNlUmVjb3ZlcnlSZWNvcmQSDwoHdmVyc2lvbhgBIAEoDRITCgthcHBsaWNhdGlvbhgCIAEoCRIRCglwcmluY2lwYWwYAyABKAkSFwoPcHJldmlvdXNfc2VjcmV0GAQgASgMEhgKEGNhbmRpZGF0ZV9zZWNyZXQYBSABKAwSFwoPZW5yb2xsbWVudF9oZWFkGAYgASgJEhUKDXJlY292ZXJ5X2hlYWQYByABKAkSRAoRcGVuZGluZ19hZG1pc3Npb24YCCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkRldmljZVJlY292ZXJ5QWRtaXNzaW9uEhEKCWNvbXBsZXRlZBgJIAEoCCKxAQoXRGV2aWNlUmVjb3ZlcnlBZG1pc3Npb24SPQoFc3RhZ2UYASABKA4yLi5ub21vcy5ydW50aW1lLnYyLkRldmljZVJlY292ZXJ5QWRtaXNzaW9uU3RhZ2USEgoKcmVxdWVzdF9pZBgCIAEoBBIRCgl3b3Jrc3BhY2UYAyABKAkSMAoGZWZmZWN0GAQgASgLMiAubm9tb3MucnVudGltZS52Mi5QZWVySHR0cEVmZmVjdCJuChJQZWVyRGV2aWNlSWRlbnRpdHkSEwoGc2VjcmV0GAEgASgMSACIAQESOAoIcmVjb3ZlcnkYAiABKAsyJi5ub21vcy5ydW50aW1lLnYyLkRldmljZVJlY292ZXJ5UmVjb3JkQgkKB19zZWNyZXQiPQoUUGVlckxhd1BhY2thZ2VFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhIKCmxhd19zaGEyNTYYAiABKAkiIgoOUGVlckxhd1BhY2thZ2USEAoIbGF3X3VzZHoYASABKAwiRAocUGVlcldvcmtzcGFjZURpc2NvdmVyeUVmZmVjdBIRCgllZmZlY3RfaWQYASABKAkSEQoJd29ya3NwYWNlGAIgASgJIj4KFlBlZXJMb2NhbEN1c3RvZHlFZmZlY3QSEQoJZWZmZWN0X2lkGAEgASgJEhEKCXdvcmtzcGFjZRgCIAEoCSKDAQoXUGVlckxvY2FsQ3VzdG9keVJlY2VpcHQSEQoJd29ya3NwYWNlGAEgASgJEhEKCWF2YWlsYWJsZRgCIAEoCBI2CgdvcGVuaW5nGAMgASgLMiAubm9tb3MucnVudGltZS52Mi5DdXN0b2R5T3BlbmluZ0gAiAEBQgoKCF9vcGVuaW5nIi8KGkhpc3RvcnlBY3F1aXNpdGlvblJlY292ZXJ5EhEKCXdvcmtzcGFjZRgBIAEoCSLeAQodQ29udGludWVDb3JyZXNwb25kZW5jZVJlcXVlc3QSDwoHd29ya19pZBgBIAEoCRI0CgdyZWNlaXB0GAIgASgLMiMubm9tb3MucnVudGltZS52Mi5QZWVyRWZmZWN0UmVjZWlwdBJWChtyZWNvdmVyX2hpc3RvcnlfYWNxdWlzaXRpb24YAyABKAsyLC5ub21vcy5ydW50aW1lLnYyLkhpc3RvcnlBY3F1aXNpdGlvblJlY292ZXJ5SACIAQFCHgocX3JlY292ZXJfaGlzdG9yeV9hY3F1aXNpdGlvbiKGAgoUUmVtb3RlT2ZmZXJBZG1pc3Npb24SEQoJd29ya3NwYWNlGAEgASgJEgwKBG1haW4YAiABKAkSGAoLc2VhbGVkX21haW4YAyABKAlIAIgBARIvCgd2ZXJkaWN0GAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2USMwoMYm9ybl9jdXN0b2R5GAUgAygLMh0ubm9tb3MucnVudGltZS52Mi5Cb3JuQ3VzdG9keRITCgtyZXN1bHRfcGFjaxgGIAEoDBIYCgtyZXN1bHRfYmFzZRgHIAEoCUgBiAEBQg4KDF9zZWFsZWRfbWFpbkIOCgxfcmVzdWx0X2Jhc2UiSgoOQm9ybkN1c3RvZHlSZWYSKgoDcmVmGAEgASgLMh0ubm9tb3MucnVudGltZS52Mi5SZXRhaW5lZFJlZhIMCgRwYWNrGAIgASgMIoEBCgtCb3JuQ3VzdG9keRItCgVjaGlsZBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5Cb3JuV29ya3NwYWNlEgwKBHBhY2sYAiABKAwSNQoLcHVibGljYXRpb24YAyADKAsyIC5ub21vcy5ydW50aW1lLnYyLkJvcm5DdXN0b2R5UmVmIosDChhDdXN0b2R5T2ZmZXJCYXRjaFJlcXVlc3QSGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEjcKBmlubGluZRgDIAEoCzIlLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUlubGluZU9mZmVyc0gAEkYKEXNlc3Npb25fY2FuZGlkYXRlGAQgASgLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5U2Vzc2lvbkNhbmRpZGF0ZUgAEhYKCWJhc2VfaGVhZBgFIAEoCUgBiAEBEhUKDWV2aWRlbmNlX3BhY2sYBiABKAwSGgoNb2JzZXJ2ZWRfaGVhZBgHIAEoCUgCiAEBEhkKEWZhc3RfZm9yd2FyZF9vbmx5GAggASgIEhwKD2NvbnRpbnVlc19hZnRlchgJIAEoCUgDiAEBQggKBnNvdXJjZUIMCgpfYmFzZV9oZWFkQhAKDl9vYnNlcnZlZF9oZWFkQhIKEF9jb250aW51ZXNfYWZ0ZXIiwwEKDkxpdmVPZmZlckZyYW1lEjIKCGZyb250aWVyGAEgASgLMh4ubm9tb3MucnVudGltZS52Mi5MaXZlRnJvbnRpZXJIABI8CgZvZmZlcnMYAiABKAsyKi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlPZmZlckJhdGNoUmVxdWVzdEgAEjQKCWFkbWlzc2lvbhgDIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuTGl2ZUFkbWlzc2lvbkgAQgkKB21lc3NhZ2UiWgoNTGl2ZUFkbWlzc2lvbhISCgpyZXF1ZXN0X2lkGAEgASgJEjUKCWFkbWlzc2lvbhgCIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUFkbWlzc2lvbiIuCgxMaXZlRnJvbnRpZXISDAoEaGVhZBgBIAEoCRIQCghyZXNwb25zZRgCIAEoCCJrChBQZWVyU29ja2V0RWZmZWN0EhUKDWNvbm5lY3Rpb25faWQYASABKAkSEgoIb3Blbl91cmwYAiABKAlIABIOCgRzZW5kGAMgASgMSAASDwoFY2xvc2UYBCABKAhIAEILCglvcGVyYXRpb24icQoRUGVlclNvY2tldFJlY2VpcHQSFQoNY29ubmVjdGlvbl9pZBgBIAEoCRIQCgZvcGVuZWQYAiABKAhIABISCghyZWNlaXZlZBgDIAEoDEgAEhAKBmNsb3NlZBgEIAEoCEgAQg0KC29ic2VydmF0aW9uIhQKElBlZXJTb2NrZXRPYnNlcnZlZCI9ChdFeHBvcnRMaXZlT2ZmZXJzUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEhEKCWJhc2VfaGVhZBgCIAEoCSJOChJDdXN0b2R5SW50ZW50T2ZmZXISDwoHc2Vzc2lvbhgBIAEoCRISCgpjb21taXRfb2lkGAIgASgJEhMKC2NoYW5nZV91c2RhGAMgASgMIksKE0N1c3RvZHlJbmxpbmVPZmZlcnMSNAoGb2ZmZXJzGAEgAygLMiQubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50T2ZmZXIiLAoXQ3VzdG9keVNlc3Npb25DYW5kaWRhdGUSEQoJcmVmZXJlbmNlGAEgASgJIoIEChBDdXN0b2R5QWRtaXNzaW9uEgwKBG1haW4YASABKAkSGAoLc2VhbGVkX21haW4YAiABKAlIAIgBARI7CghzZXNzaW9ucxgDIAMoCzIpLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keVNlc3Npb25BZG1pc3Npb24SNQoOYmlydGhfb3V0Y29tZXMYBCADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEjMKDGJvcm5fY3VzdG9keRgFIAMoCzIdLm5vbW9zLnJ1bnRpbWUudjIuQm9ybkN1c3RvZHkSEwoLcmVzdWx0X3BhY2sYBiABKAwSGAoLcmVzdWx0X2Jhc2UYByABKAlIAYgBARI6Cgd0aW1pbmdzGAggASgLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5QWRtaXNzaW9uVGltaW5ncxIeChFyZWNvdmVyeV9yZXF1aXJlZBgJIAEoCEgCiAEBEkYKEWxvY2FsX21haW50ZW5hbmNlGAogASgLMiYubm9tb3MucnVudGltZS52Mi5NYWludGVuYW5jZVNjaGVkdWxlZEgDiAEBQg4KDF9zZWFsZWRfbWFpbkIOCgxfcmVzdWx0X2Jhc2VCFAoSX3JlY292ZXJ5X3JlcXVpcmVkQhQKEl9sb2NhbF9tYWludGVuYW5jZSJlChdDdXN0b2R5U2Vzc2lvbkFkbWlzc2lvbhIPCgdzZXNzaW9uGAEgASgJEjkKB2ludGVudHMYAiADKAsyKC5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRBZG1pc3Npb24i1AMKFkN1c3RvZHlJbnRlbnRBZG1pc3Npb24SEgoKY29tbWl0X29pZBgBIAEoCRIWCglpbnRlbnRfaWQYAiABKAlIAYgBARI7CghhZG1pdHRlZBgKIAEoCzInLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudEFkbWl0dGVkSAASOQoHc2tpcHBlZBgLIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudFNraXBwZWRIABI5CgdyZWZ1c2VkGAwgASgLMiYubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50UmVmdXNlZEgAEkQKDWRlYWRfbGV0dGVyZWQYDSABKAsyKy5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnREZWFkTGV0dGVyZWRIABI5CgdibG9ja2VkGA4gASgLMiYubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50QmxvY2tlZEgAEkEKC3F1YXJhbnRpbmVkGA8gASgLMioubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50UXVhcmFudGluZWRIAEIJCgdvdXRjb21lQgwKCl9pbnRlbnRfaWQikAEKFUN1c3RvZHlJbnRlbnRBZG1pdHRlZBIMCgRoZWFkGAEgASgJEjMKB2NyZWF0ZWQYAiADKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZ2dyZWdhdGVSZWYSNAoIYWZmZWN0ZWQYAyADKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZ2dyZWdhdGVSZWYiLwoUQ3VzdG9keUludGVudFNraXBwZWQSFwoPYWxyZWFkeV9vbl9tYWluGAEgASgIIpoBChRDdXN0b2R5SW50ZW50UmVmdXNlZBIPCgdtZXNzYWdlGAEgASgJEhEKBGhpbnQYAyABKAlIAIgBARI0CgdyZWZ1c2FsGAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIAYgBAUIHCgVfaGludEIKCghfcmVmdXNhbEoECAIQA1INZGVhZF9sZXR0ZXJlZCJ+ChlDdXN0b2R5SW50ZW50RGVhZExldHRlcmVkEg8KB21lc3NhZ2UYASABKAkSEQoEaGludBgCIAEoCUgAiAEBEh4KEWN1c3RvZHlfcmVmZXJlbmNlGAMgASgJSAGIAQFCBwoFX2hpbnRCFAoSX2N1c3RvZHlfcmVmZXJlbmNlIiYKFEN1c3RvZHlJbnRlbnRCbG9ja2VkEg4KBmRldGFpbBgBIAEoCSKVAQoYQ3VzdG9keUludGVudFF1YXJhbnRpbmVkEg4KBnJlYXNvbhgBIAEoCRIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEh4KEWN1c3RvZHlfcmVmZXJlbmNlGAQgASgJSACIAQFCFAoSX2N1c3RvZHlfcmVmZXJlbmNlIu0BChdDdXN0b2R5QWRtaXNzaW9uVGltaW5ncxIUCgx0b3RhbF9taWxsaXMYASABKAESEwoLc2Nhbl9taWxsaXMYAiABKAESFAoMZmV0Y2hfbWlsbGlzGAMgASgBEhMKC3NlYWxfbWlsbGlzGAQgASgBEhgKEGdhdGVfZm9sZF9taWxsaXMYBSABKAESFAoMaW50ZW50X2NvdW50GAYgASgNEhUKDXNlc3Npb25fY291bnQYByABKA0SNQoFc3BhbnMYCCADKAsyJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlBZG1pc3Npb25TcGFuIpcBChRDdXN0b2R5QWRtaXNzaW9uU3BhbhIKCgJpZBgBIAEoCRINCgV0cmFjaxgCIAEoCRIMCgRuYW1lGAMgASgJEgwKBGtpbmQYBCABKAkSDQoFZGVwdGgYBSABKA0SGwoTc3RhcnRlZF91bml4X21pbGxpcxgGIAEoARIcChRmaW5pc2hlZF91bml4X21pbGxpcxgHIAEoASJdChdXb3Jrc3BhY2VFZmZlY3REZWZlcnJlZBIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEhoKEnJldHJ5X2FmdGVyX21pbGxpcxgCIAEoBBIMCgRoZWxkGAMgASgEIvoBCg1PdXRib3hTdW1tYXJ5EhEKCXdvcmtzcGFjZRgBIAEoCRIPCgdlbnRyaWVzGAIgASgEEjQKB3RhcmdldHMYAyADKAsyIy5ub21vcy5ydW50aW1lLnYyLk91dGJveFRhcmdldENvdW50Eh8KEm5leHRfZHVlX2F0X21pbGxpcxgEIAEoBEgAiAEBEhQKDHdvcmtfcGVuZGluZxgFIAEoCBIQCghyZXNpZGVudBgGIAEoCBIVCg1lbnRyaWVzX3RvdGFsGAcgASgNEhgKEGVudHJpZXNfcHJlcGFyZWQYCCABKA1CFQoTX25leHRfZHVlX2F0X21pbGxpcyI+ChFPdXRib3hUYXJnZXRDb3VudBIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEg8KB2VudHJpZXMYAiABKAQqvAEKFVNoYXJlV29ya3NwYWNlT3V0Y29tZRInCiNTSEFSRV9XT1JLU1BBQ0VfT1VUQ09NRV9VTlNQRUNJRklFRBAAEiUKIVNIQVJFX1dPUktTUEFDRV9PVVRDT01FX0RFTElWRVJFRBABEi4KKlNIQVJFX1dPUktTUEFDRV9PVVRDT01FX0FXQUlUSU5HX1JFQ0lQSUVOVBACEiMKH1NIQVJFX1dPUktTUEFDRV9PVVRDT01FX1JFRlVTRUQQAypnCg5QZWVySHR0cE1ldGhvZBIgChxQRUVSX0hUVFBfTUVUSE9EX1VOU1BFQ0lGSUVEEAASGAoUUEVFUl9IVFRQX01FVEhPRF9HRVQQARIZChVQRUVSX0hUVFBfTUVUSE9EX1BPU1QQAiq/AQoXUGVlckVmZmVjdEZhaWx1cmVSZWFzb24SKgomUEVFUl9FRkZFQ1RfRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABImCiJQRUVSX0VGRkVDVF9GQUlMVVJFX1JFQVNPTl9PRkZMSU5FEAESJgoiUEVFUl9FRkZFQ1RfRkFJTFVSRV9SRUFTT05fVElNRU9VVBACEigKJFBFRVJfRUZGRUNUX0ZBSUxVUkVfUkVBU09OX1RSQU5TUE9SVBADKq0BChxEZXZpY2VSZWNvdmVyeUFkbWlzc2lvblN0YWdlEi8KK0RFVklDRV9SRUNPVkVSWV9BRE1JU1NJT05fU1RBR0VfVU5TUEVDSUZJRUQQABIuCipERVZJQ0VfUkVDT1ZFUllfQURNSVNTSU9OX1NUQUdFX0VOUk9MTE1FTlQQARIsCihERVZJQ0VfUkVDT1ZFUllfQURNSVNTSU9OX1NUQUdFX1JFQ09WRVJZEAJiBnByb3RvMw", [file_nomos_kernel_v1_kernel, file_nomos_runtime_v2_placement_desk, file_nomos_discovery_v1_workspace_placement, file_nomos_runtime_v2_custody_desk, file_nomos_runtime_v2_maintenance_desk]);
|
|
7753
7753
|
var VerifyWorkspaceChainResultSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 7);
|
|
7754
7754
|
var VerifyChainHistorySchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 8);
|
|
7755
7755
|
var SyncWorkspaceRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 9);
|
|
@@ -7805,20 +7805,20 @@
|
|
|
7805
7805
|
var BornCustodySchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 70);
|
|
7806
7806
|
var CustodyOfferBatchRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 71);
|
|
7807
7807
|
var LiveOfferFrameSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 72);
|
|
7808
|
-
var PeerSocketEffectSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7809
|
-
var PeerSocketReceiptSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7810
|
-
var PeerSocketObservedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7811
|
-
var CustodyIntentOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7812
|
-
var CustodyInlineOffersSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7813
|
-
var CustodyAdmissionSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7814
|
-
var CustodySessionAdmissionSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7815
|
-
var CustodyIntentAdmissionSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7816
|
-
var CustodyIntentAdmittedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7817
|
-
var CustodyIntentRefusedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7818
|
-
var CustodyIntentDeadLetteredSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7819
|
-
var CustodyIntentBlockedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7820
|
-
var CustodyIntentQuarantinedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7821
|
-
var WorkspaceEffectDeferredSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk,
|
|
7808
|
+
var PeerSocketEffectSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 75);
|
|
7809
|
+
var PeerSocketReceiptSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 76);
|
|
7810
|
+
var PeerSocketObservedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 77);
|
|
7811
|
+
var CustodyIntentOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 79);
|
|
7812
|
+
var CustodyInlineOffersSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 80);
|
|
7813
|
+
var CustodyAdmissionSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 82);
|
|
7814
|
+
var CustodySessionAdmissionSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 83);
|
|
7815
|
+
var CustodyIntentAdmissionSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 84);
|
|
7816
|
+
var CustodyIntentAdmittedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 85);
|
|
7817
|
+
var CustodyIntentRefusedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 87);
|
|
7818
|
+
var CustodyIntentDeadLetteredSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 88);
|
|
7819
|
+
var CustodyIntentBlockedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 89);
|
|
7820
|
+
var CustodyIntentQuarantinedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 90);
|
|
7821
|
+
var WorkspaceEffectDeferredSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_correspondence_desk, 93);
|
|
7822
7822
|
var PeerHttpMethodSchema = /* @__PURE__ */ enumDesc(file_nomos_runtime_v2_correspondence_desk, 1);
|
|
7823
7823
|
var PeerHttpMethod = /* @__PURE__ */ tsEnum(PeerHttpMethodSchema);
|
|
7824
7824
|
var PeerEffectFailureReasonSchema = /* @__PURE__ */ enumDesc(file_nomos_runtime_v2_correspondence_desk, 2);
|
|
@@ -8060,7 +8060,7 @@
|
|
|
8060
8060
|
var CustodyBreakPolicy = /* @__PURE__ */ tsEnum(CustodyBreakPolicySchema);
|
|
8061
8061
|
|
|
8062
8062
|
// ../../adapter/proto/nomos/runtime/v2/observability_desk_pb.js
|
|
8063
|
-
var file_nomos_runtime_v2_observability_desk = /* @__PURE__ */ fileDesc("Cilub21vcy9ydW50aW1lL3YyL29ic2VydmFiaWxpdHlfZGVzay5wcm90bxIQbm9tb3MucnVudGltZS52MiJCCgxUcmFjZUNvbnRleHQSEAoIdHJhY2VfaWQYASABKAwSDwoHc3Bhbl9pZBgCIAEoDBIPCgdzYW1wbGVkGAMgASgIIp0CCg5SdW50aW1lRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEQoJY29tcG9uZW50GAMgASgJEhYKCXdvcmtzcGFjZRgEIAEoCUgAiAEBEhMKBmRvbWFpbhgFIAEoCUgBiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgCiAEBEjkKCmF0dHJpYnV0ZXMYByADKAsyJS5ub21vcy5ydW50aW1lLnYyLkRpYWdub3N0aWNBdHRyaWJ1dGUSMgoEa2luZBgIIAEoDjIkLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVLaW5kQgwKCl93b3Jrc3BhY2VCCQoHX2RvbWFpbkIMCgpfZGlyZWN0aXZlIr4BChJSdW50aW1lVW5hdmFpbGFibGUSOgoGcmVhc29uGAEgASgOMioubm9tb3MucnVudGltZS52Mi5SdW50aW1lVW5hdmFpbGFibGVSZWFzb24SEQoJd29ya3NwYWNlGAIgASgJEhEKCXJldHJ5YWJsZRgDIAEoCBIfChJyZXRyeV9hZnRlcl9taWxsaXMYBCABKA1IAIgBARIOCgZkZXRhaWwYBSABKAlCFQoTX3JldHJ5X2FmdGVyX21pbGxpcyJ+Cg5SdW50aW1lUmVmdXNhbBI2CgZyZWFzb24YASABKA4yJi5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVSZWZ1c2FsUmVhc29uEhEKCXdvcmtzcGFjZRgCIAEoCRIRCglyZXRyeWFibGUYAyABKAgSDgoGZGV0YWlsGAQgASgJIqUBChNEaWFnbm9zdGljQXR0cmlidXRlEgwKBG5hbWUYASABKAkSFgoMc3RyaW5nX3ZhbHVlGAIgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgDIAEoEkgAEhYKDGRvdWJsZV92YWx1ZRgEIAEoAUgAEhcKDWJvb2xlYW5fdmFsdWUYBSABKAhIABIVCgtieXRlc192YWx1ZRgGIAEoDEgAQgcKBXZhbHVlIqQLCgxSdW50aW1lRXZlbnQSEAoIc2VxdWVuY2UYASABKAQSFAoHc2Vzc2lvbhgCIAEoCUgBiAEBEi8KBXJlYWR5GAogASgLMh4ubm9tb3MucnVudGltZS52Mi5SdW50aW1lUmVhZHlIABI3Cg13YXRjaF9jaGFuZ2VkGAsgASgLMh4ubm9tb3MucnVudGltZS52Mi5XYXRjaENoYW5nZWRIABI5Cg5zeW5jX2NvbXBsZXRlZBgMIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU3luY0NvbXBsZXRlZEgAEjUKDGxpbmtfY2hhbmdlZBgNIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuTGlua0NoYW5nZWRIABI5Cg5zaWduYWxfY2hhbmdlZBgOIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU2lnbmFsQ2hhbmdlZEgAEjsKD2N1c3RvZHlfY2hhbmdlZBgPIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUNoYW5nZWRIABJCChNsb2NhbF93b3JrX3JlamVjdGVkGBAgASgLMiMubm9tb3MucnVudGltZS52Mi5Mb2NhbFdvcmtSZWplY3RlZEgAEjMKC2xhd19jaGFuZ2VkGBEgASgLMhwubm9tb3MucnVudGltZS52Mi5MYXdDaGFuZ2VkSAASQwoPa2VybmVsX3Byb2dyZXNzGBIgASgLMigubm9tb3MucnVudGltZS52Mi5LZXJuZWxQcm9ncmVzc09ic2VydmVkSAASLQoEc3BhbhgTIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVNwYW5IABI/
|
|
8063
|
+
var file_nomos_runtime_v2_observability_desk = /* @__PURE__ */ fileDesc("Cilub21vcy9ydW50aW1lL3YyL29ic2VydmFiaWxpdHlfZGVzay5wcm90bxIQbm9tb3MucnVudGltZS52MiJCCgxUcmFjZUNvbnRleHQSEAoIdHJhY2VfaWQYASABKAwSDwoHc3Bhbl9pZBgCIAEoDBIPCgdzYW1wbGVkGAMgASgIIp0CCg5SdW50aW1lRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEQoJY29tcG9uZW50GAMgASgJEhYKCXdvcmtzcGFjZRgEIAEoCUgAiAEBEhMKBmRvbWFpbhgFIAEoCUgBiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgCiAEBEjkKCmF0dHJpYnV0ZXMYByADKAsyJS5ub21vcy5ydW50aW1lLnYyLkRpYWdub3N0aWNBdHRyaWJ1dGUSMgoEa2luZBgIIAEoDjIkLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVLaW5kQgwKCl93b3Jrc3BhY2VCCQoHX2RvbWFpbkIMCgpfZGlyZWN0aXZlIr4BChJSdW50aW1lVW5hdmFpbGFibGUSOgoGcmVhc29uGAEgASgOMioubm9tb3MucnVudGltZS52Mi5SdW50aW1lVW5hdmFpbGFibGVSZWFzb24SEQoJd29ya3NwYWNlGAIgASgJEhEKCXJldHJ5YWJsZRgDIAEoCBIfChJyZXRyeV9hZnRlcl9taWxsaXMYBCABKA1IAIgBARIOCgZkZXRhaWwYBSABKAlCFQoTX3JldHJ5X2FmdGVyX21pbGxpcyJ+Cg5SdW50aW1lUmVmdXNhbBI2CgZyZWFzb24YASABKA4yJi5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVSZWZ1c2FsUmVhc29uEhEKCXdvcmtzcGFjZRgCIAEoCRIRCglyZXRyeWFibGUYAyABKAgSDgoGZGV0YWlsGAQgASgJIqUBChNEaWFnbm9zdGljQXR0cmlidXRlEgwKBG5hbWUYASABKAkSFgoMc3RyaW5nX3ZhbHVlGAIgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgDIAEoEkgAEhYKDGRvdWJsZV92YWx1ZRgEIAEoAUgAEhcKDWJvb2xlYW5fdmFsdWUYBSABKAhIABIVCgtieXRlc192YWx1ZRgGIAEoDEgAQgcKBXZhbHVlIqQLCgxSdW50aW1lRXZlbnQSEAoIc2VxdWVuY2UYASABKAQSFAoHc2Vzc2lvbhgCIAEoCUgBiAEBEi8KBXJlYWR5GAogASgLMh4ubm9tb3MucnVudGltZS52Mi5SdW50aW1lUmVhZHlIABI3Cg13YXRjaF9jaGFuZ2VkGAsgASgLMh4ubm9tb3MucnVudGltZS52Mi5XYXRjaENoYW5nZWRIABI5Cg5zeW5jX2NvbXBsZXRlZBgMIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU3luY0NvbXBsZXRlZEgAEjUKDGxpbmtfY2hhbmdlZBgNIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuTGlua0NoYW5nZWRIABI5Cg5zaWduYWxfY2hhbmdlZBgOIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU2lnbmFsQ2hhbmdlZEgAEjsKD2N1c3RvZHlfY2hhbmdlZBgPIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUNoYW5nZWRIABJCChNsb2NhbF93b3JrX3JlamVjdGVkGBAgASgLMiMubm9tb3MucnVudGltZS52Mi5Mb2NhbFdvcmtSZWplY3RlZEgAEjMKC2xhd19jaGFuZ2VkGBEgASgLMhwubm9tb3MucnVudGltZS52Mi5MYXdDaGFuZ2VkSAASQwoPa2VybmVsX3Byb2dyZXNzGBIgASgLMigubm9tb3MucnVudGltZS52Mi5LZXJuZWxQcm9ncmVzc09ic2VydmVkSAASLQoEc3BhbhgTIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVNwYW5IABI/ChF0cmFuc2Zlcl9wcm9ncmVzcxgUIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuVHJhbnNmZXJQcm9ncmVzc0gAEkkKFG1haW50ZW5hbmNlX3Byb2dyZXNzGBUgASgLMikubm9tb3MucnVudGltZS52Mi5SZWFkTWFpbnRlbmFuY2VQcm9ncmVzc0gAEjsKDXNvY2tldF9lZmZlY3QYFiABKAsyIi5ub21vcy5ydW50aW1lLnYyLlBlZXJTb2NrZXRFZmZlY3RIABJUChxjcmVkZW50aWFsX3JlZnJlc2hfcmVxdWVzdGVkGBcgASgLMiwubm9tb3MucnVudGltZS52Mi5DcmVkZW50aWFsUmVmcmVzaFJlcXVlc3RlZEgAElIKG3JlY2VpdmluZ19ncm91cF9jb252ZXJnZW5jZRgYIAEoCzIrLm5vbW9zLnJ1bnRpbWUudjIuUmVjZWl2aW5nR3JvdXBDb252ZXJnZW5jZUgAEkoKF21vZGVsX2Fkb3B0aW9uX3Byb2dyZXNzGBkgASgLMicubm9tb3MucnVudGltZS52Mi5Nb2RlbEFkb3B0aW9uUHJvZ3Jlc3NIABI7Cg9mb2xsb3dzX3N1bW1hcnkYGiABKAsyIC5ub21vcy5ydW50aW1lLnYyLkZvbGxvd3NTdW1tYXJ5SAASRAoUbG9jYWxfY29weV9wcmVzZXJ2ZWQYGyABKAsyJC5ub21vcy5ydW50aW1lLnYyLlByZXNlcnZlZExvY2FsQ29weUgAEk4KGWZvcmVpZ25fcGxhY2VtZW50X2lnbm9yZWQYHCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkZvcmVpZ25QbGFjZW1lbnRJZ25vcmVkSAASQwoTYmluZGluZ19xdWFyYW50aW5lZBgdIAEoCzIkLm5vbW9zLnJ1bnRpbWUudjIuUXVhcmFudGluZWRCaW5kaW5nSAASPwoRd3JpdGVfcHJlcGFyYXRpb24YHiABKAsyIi5ub21vcy5ydW50aW1lLnYyLldyaXRlUHJlcGFyYXRpb25IAEIHCgVldmVudEIKCghfc2Vzc2lvbiK8AQoORm9sbG93c1N1bW1hcnkSEAoIZm9sbG93ZWQYASABKA0SDwoHc2V0dGxlZBgCIAEoDRIMCgRsaXZlGAMgASgNEjcKCndvcmtzcGFjZXMYBCADKAsyIy5ub21vcy5ydW50aW1lLnYyLkZvbGxvd09ic2VydmF0aW9uEiQKF29ic2VydmVkX2F0X3VuaXhfbWlsbGlzGAUgASgESACIAQFCGgoYX29ic2VydmVkX2F0X3VuaXhfbWlsbGlzIqEDChFGb2xsb3dPYnNlcnZhdGlvbhIRCgl3b3Jrc3BhY2UYASABKAkSNwoFcGhhc2UYAiABKA4yKC5ub21vcy5ydW50aW1lLnYyLkZvbGxvd09ic2VydmF0aW9uUGhhc2USDAoEbGl2ZRgDIAEoCBITCgZkZXRhaWwYBCABKAlIAIgBARIhChRyZXRyeV9hdF91bml4X21pbGxpcxgFIAEoBEgBiAEBEh8KEmR1ZV9hdF91bml4X21pbGxpcxgGIAEoBEgCiAEBEhQKB2F0dGVtcHQYByABKA1IA4gBARIaCg1hY3RpdmVfZWZmZWN0GAggASgJSASIAQESEwoGdW5zZW50GAkgASgNSAWIAQESGwoOdW5hY2tub3dsZWRnZWQYCiABKA1IBogBAUIJCgdfZGV0YWlsQhcKFV9yZXRyeV9hdF91bml4X21pbGxpc0IVChNfZHVlX2F0X3VuaXhfbWlsbGlzQgoKCF9hdHRlbXB0QhAKDl9hY3RpdmVfZWZmZWN0QgkKB191bnNlbnRCEQoPX3VuYWNrbm93bGVkZ2VkIlYKGkNyZWRlbnRpYWxSZWZyZXNoUmVxdWVzdGVkEjgKB3BlbmRpbmcYASABKAsyJy5ub21vcy5ydW50aW1lLnYyLkNvcnJlc3BvbmRlbmNlUGVuZGluZyI+CgxSdW50aW1lUmVhZHkSFwoPcnVudGltZV92ZXJzaW9uGAEgASgJEhUKDWtlcm5lbF9zaGEyNTYYAiABKAwi/AEKDFdhdGNoQ2hhbmdlZBIXCg9zdWJzY3JpcHRpb25faWQYASABKAkSEwoLcmVzdWx0X3VzZGEYAiABKAwSNgoHZmFpbHVyZRgDIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVIAIgBARI1ChJhcHBsaWNhdGlvbl9yZXN1bHQYBCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAGIAQESGgoNaW50ZWdlcl92YWx1ZRgFIAEoA0gCiAEBQgoKCF9mYWlsdXJlQhUKE19hcHBsaWNhdGlvbl9yZXN1bHRCEAoOX2ludGVnZXJfdmFsdWUinAEKDVN5bmNDb21wbGV0ZWQSDgoGcmVhc29uGAEgASgJEjcKBnJlc3VsdBgCIAEoCzInLm5vbW9zLnJ1bnRpbWUudjIuU3luY1dvcmtzcGFjZVJlc3BvbnNlEjYKB2ZhaWx1cmUYAyABKAsyIC5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVGYWlsdXJlSACIAQFCCgoIX2ZhaWx1cmUiOwoLTGlua0NoYW5nZWQSLAoGc3RhdHVzGAEgASgOMhwubm9tb3MucnVudGltZS52Mi5MaW5rU3RhdHVzIjgKDVNpZ25hbENoYW5nZWQSDgoGZG9tYWluGAEgASgJEhcKD3Byb2plY3Rpb25fdXNkYRgCIAEoDCJQCgpMYXdDaGFuZ2VkEg4KBmRvbWFpbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRIaChJjb21wYXRpYmlsaXR5X3VzZGEYAyABKAwi3QEKC1J1bnRpbWVTcGFuEhAKCHRyYWNlX2lkGAEgASgMEg8KB3NwYW5faWQYAiABKAwSGwoOcGFyZW50X3NwYW5faWQYAyABKAxIAIgBARIMCgRuYW1lGAQgASgJEhoKEnN0YXJ0ZWRfdW5peF9uYW5vcxgFIAEoBBIWCg5kdXJhdGlvbl9uYW5vcxgGIAEoBBI5CgphdHRyaWJ1dGVzGAcgAygLMiUubm9tb3MucnVudGltZS52Mi5EaWFnbm9zdGljQXR0cmlidXRlQhEKD19wYXJlbnRfc3Bhbl9pZCLqAQoWS2VybmVsUHJvZ3Jlc3NPYnNlcnZlZBI5CghzbmFwc2hvdBgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxQcm9ncmVzc1NuYXBzaG90EiQKHGhvc3Rfb2JzZXJ2ZWRfZWxhcHNlZF9taWNyb3MYAiABKAQSKgoiaG9zdF9vYnNlcnZlZF9waGFzZV9lbGFwc2VkX21pY3JvcxgDIAEoBBIeChZwcm9jZXNzX3Jlc2lkZW50X2J5dGVzGAQgASgEEiMKG3Byb2Nlc3NfcGVha19yZXNpZGVudF9ieXRlcxgFIAEoBCKCAQoQVHJhbnNmZXJQcm9ncmVzcxIWCg5yZWNlaXZlZF9ieXRlcxgBIAEoBBIYCgt0b3RhbF9ieXRlcxgCIAEoBEgAiAEBEiwKBGtpbmQYAyABKA4yHi5ub21vcy5ydW50aW1lLnYyLlRyYW5zZmVyS2luZEIOCgxfdG90YWxfYnl0ZXMiOQoQV3JpdGVQcmVwYXJhdGlvbhISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXdvcmtzcGFjZRgCIAEoCSrKAQoSUnVudGltZUZhaWx1cmVLaW5kEiQKIFJVTlRJTUVfRkFJTFVSRV9LSU5EX1VOU1BFQ0lGSUVEEAASIQodUlVOVElNRV9GQUlMVVJFX0tJTkRfSU5URVJOQUwQARIhCh1SVU5USU1FX0ZBSUxVUkVfS0lORF9QUk9UT0NPTBACEiIKHlJVTlRJTUVfRkFJTFVSRV9LSU5EX0lOVEVHUklUWRADEiQKIFJVTlRJTUVfRkFJTFVSRV9LSU5EX1VOU1VQUE9SVEVEEAQqpwMKGFJ1bnRpbWVVbmF2YWlsYWJsZVJlYXNvbhIqCiZSVU5USU1FX1VOQVZBSUxBQkxFX1JFQVNPTl9VTlNQRUNJRklFRBAAEjIKLlJVTlRJTUVfVU5BVkFJTEFCTEVfUkVBU09OX1JFTU9URV9PTkxZX09GRkxJTkUQARIxCi1SVU5USU1FX1VOQVZBSUxBQkxFX1JFQVNPTl9SRU1PVEVfVU5SRUFDSEFCTEUQAhItCilSVU5USU1FX1VOQVZBSUxBQkxFX1JFQVNPTl9SRU1PVEVfVElNRU9VVBADEjYKMlJVTlRJTUVfVU5BVkFJTEFCTEVfUkVBU09OX0xPQ0FMX1JFUExJQ0FfTk9UX1JFQURZEAQSNQoxUlVOVElNRV9VTkFWQUlMQUJMRV9SRUFTT05fQ1JFREVOVElBTF9VTkFWQUlMQUJMRRAFEjAKLFJVTlRJTUVfVU5BVkFJTEFCTEVfUkVBU09OX1dPUktTUEFDRV9PUEVOSU5HEAYSKAokUlVOVElNRV9VTkFWQUlMQUJMRV9SRUFTT05fUEVFUl9CVVNZEAcq8AEKFFJ1bnRpbWVSZWZ1c2FsUmVhc29uEiYKIlJVTlRJTUVfUkVGVVNBTF9SRUFTT05fVU5TUEVDSUZJRUQQABItCilSVU5USU1FX1JFRlVTQUxfUkVBU09OX0lOVkFMSURfQ1JFREVOVElBTBABEigKJFJVTlRJTUVfUkVGVVNBTF9SRUFTT05fQUNDRVNTX0RFTklFRBACEisKJ1JVTlRJTUVfUkVGVVNBTF9SRUFTT05fUExBQ0VNRU5UX1BPTElDWRADEioKJlJVTlRJTUVfUkVGVVNBTF9SRUFTT05fU0VTU0lPTl9VTkJPVU5EEAQqlQQKFkZvbGxvd09ic2VydmF0aW9uUGhhc2USKAokRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX1VOU1BFQ0lGSUVEEAASJAogRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX0RFU0lSRUQQARIgChxGT0xMT1dfT0JTRVJWQVRJT05fUEhBU0VfRFVFEAISJAogRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX1JVTk5JTkcQAxIkCiBGT0xMT1dfT0JTRVJWQVRJT05fUEhBU0VfU0VUVExFRBAEEjAKLEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9BV0FJVElOR19ERVBFTkRFTkNZEAUSJAogRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX09GRkxJTkUQBhIvCitGT0xMT1dfT0JTRVJWQVRJT05fUEhBU0VfSU5WQUxJRF9DUkVERU5USUFMEAcSJAogRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX0JBQ0tPRkYQCBIsCihGT0xMT1dfT0JTRVJWQVRJT05fUEhBU0VfUkVCT1JOX1JFTU9URUxZEAkSLAooRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX1JFUExBQ0lOR19MT0NBTBAKEjIKLkZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9MT0NBTF9DT1BZX1VOUkVBREFCTEUQCypXCgpMaW5rU3RhdHVzEhsKF0xJTktfU1RBVFVTX1VOU1BFQ0lGSUVEEAASFAoQTElOS19TVEFUVVNfT1BFThABEhYKEkxJTktfU1RBVFVTX0NMT1NFRBACKnYKDFRyYW5zZmVyS2luZBIdChlUUkFOU0ZFUl9LSU5EX1VOU1BFQ0lGSUVEEAASFwoTVFJBTlNGRVJfS0lORF9ERUxUQRABEhYKElRSQU5TRkVSX0tJTkRfRlVMTBACEhYKElRSQU5TRkVSX0tJTkRfUFVTSBADYgZwcm90bzM", [file_google_protobuf_any, file_nomos_kernel_v1_progress, file_nomos_runtime_v2_correspondence_desk, file_nomos_runtime_v2_custody_desk, file_nomos_runtime_v2_placement_desk, file_nomos_runtime_v2_maintenance_desk, file_nomos_runtime_v2_model_adoption_desk, file_nomos_runtime_v2_receiving_group_desk, file_nomos_runtime_v2_recovery_desk]);
|
|
8064
8064
|
var RuntimeFailureSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 1);
|
|
8065
8065
|
var RuntimeUnavailableSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 2);
|
|
8066
8066
|
var RuntimeRefusalSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 3);
|
|
@@ -12064,8 +12064,9 @@
|
|
|
12064
12064
|
init_define_NOMOS_KERNEL_RELEASE();
|
|
12065
12065
|
init_shims();
|
|
12066
12066
|
var copyRecord = (record) => ({ ...record, value: record.value.slice() });
|
|
12067
|
-
var currentCacheFile = (path) =>
|
|
12068
|
-
var
|
|
12067
|
+
var currentCacheFile = (path) => /\/nomos\.git\/nomos-cache\/raw-frontier-v2\/current(?:\.quantum)?\.sqlite(?:-(?:journal|wal|shm))?$/.test(path) || /\/nomos\.git\/nomos-read-projection\/v\d+-[0-9a-f]{64}\.sqlite(?:-(?:journal|wal|shm))?$/.test(path);
|
|
12068
|
+
var bootInputFile = (path) => path === "/work/bootstrap.law.usdz" || path === "/work/nomos.law.usdz";
|
|
12069
|
+
var durableFile = (path) => !bootInputFile(path) && !path.includes("/nomos.git/nomos-cache/raw-frontier-v2/addressed/") && !path.endsWith("/nomos.git/nomos-cache/raw-frontier-v2/addressed") && !currentCacheFile(path);
|
|
12069
12070
|
var keyOf = (namespace2, key) => JSON.stringify([namespace2, key]);
|
|
12070
12071
|
var _backend, _records, _knownNodes, _mutatedNodes, _changedRecords, _cachePaths, _cacheDirty, _cacheDisabled, _cacheTimer, _cachePending, _revision, _committed, _queued, _checkpoints, _failure, _closed;
|
|
12071
12072
|
var _BrowserCustodyStore = class _BrowserCustodyStore {
|
|
@@ -12110,13 +12111,19 @@
|
|
|
12110
12111
|
if (snapshot && snapshot.format !== 2) throw new Error("Unsupported browser custody format; keep this site's data and update the application.");
|
|
12111
12112
|
this.replica = snapshot?.replica ?? globalThis.crypto.getRandomValues(new BigUint64Array(1))[0] & (1n << 63n) - 1n;
|
|
12112
12113
|
this.identity = snapshot?.identity ?? `browser-${globalThis.crypto.randomUUID()}`;
|
|
12114
|
+
const storedBootInputs = [];
|
|
12113
12115
|
for (const entry of snapshot?.files ?? []) {
|
|
12116
|
+
if (bootInputFile(entry.path)) {
|
|
12117
|
+
storedBootInputs.push(entry.path);
|
|
12118
|
+
continue;
|
|
12119
|
+
}
|
|
12114
12120
|
if (entry.bytes === void 0) this.filesystem.files.mkdir(entry.path);
|
|
12115
12121
|
else this.filesystem.files.writeFile(entry.path, entry.bytes);
|
|
12116
12122
|
if (currentCacheFile(entry.path)) __privateGet(this, _cachePaths).add(entry.path);
|
|
12117
12123
|
}
|
|
12118
12124
|
for (const record of snapshot?.records ?? []) __privateGet(this, _records).set(keyOf(record.namespace, record.key), copyRecord(record));
|
|
12119
12125
|
__privateSet(this, _knownNodes, new Map(this.filesystem.delta(/* @__PURE__ */ new Map(), /* @__PURE__ */ new Set(), durableFile, false).nodes));
|
|
12126
|
+
for (const path of storedBootInputs) __privateGet(this, _knownNodes).set(path, {});
|
|
12120
12127
|
for (const name of ["mkdir", "writeFile", "unlink"]) {
|
|
12121
12128
|
const original = this.filesystem.files[name].bind(this.filesystem.files);
|
|
12122
12129
|
this.filesystem.files[name] = (...args) => {
|
|
@@ -12204,7 +12211,8 @@
|
|
|
12204
12211
|
files: delta.changed.length,
|
|
12205
12212
|
bytes: delta.changed.reduce((total, file) => total + (file.bytes?.byteLength ?? 0), 0),
|
|
12206
12213
|
records: records.length,
|
|
12207
|
-
removedFiles: delta.removed.length
|
|
12214
|
+
removedFiles: delta.removed.length,
|
|
12215
|
+
largest: [...delta.changed].sort((a, b) => (b.bytes?.byteLength ?? 0) - (a.bytes?.byteLength ?? 0)).slice(0, 3).map((file) => `${file.path}:${file.bytes?.byteLength ?? 0}`)
|
|
12208
12216
|
});
|
|
12209
12217
|
} catch {
|
|
12210
12218
|
}
|
|
@@ -12231,6 +12239,15 @@
|
|
|
12231
12239
|
}
|
|
12232
12240
|
return __privateGet(this, _queued);
|
|
12233
12241
|
}
|
|
12242
|
+
/** Observability only: what durability work is outstanding right now. */
|
|
12243
|
+
durabilityState() {
|
|
12244
|
+
return {
|
|
12245
|
+
pendingCheckpoints: __privateGet(this, _checkpoints).size,
|
|
12246
|
+
flushing: __privateGet(this, _queued) !== void 0,
|
|
12247
|
+
uncommittedRevisions: __privateGet(this, _revision) - __privateGet(this, _committed),
|
|
12248
|
+
failed: __privateGet(this, _failure) !== void 0
|
|
12249
|
+
};
|
|
12250
|
+
}
|
|
12234
12251
|
isCheckpointCurrent() {
|
|
12235
12252
|
return !__privateGet(this, _failure) && !__privateGet(this, _closed) && __privateGet(this, _committed) === __privateGet(this, _revision);
|
|
12236
12253
|
}
|
|
@@ -12276,6 +12293,8 @@
|
|
|
12276
12293
|
_failure = new WeakMap();
|
|
12277
12294
|
_closed = new WeakMap();
|
|
12278
12295
|
var BrowserCustodyStore = _BrowserCustodyStore;
|
|
12296
|
+
var CUSTODY_LOCK_WAIT_MILLIS = 8e3;
|
|
12297
|
+
var anotherTab = () => new Error("This application's workspace is open in another tab. Close that tab and retry; your saved data is preserved.");
|
|
12279
12298
|
async function openBrowserCustody(base) {
|
|
12280
12299
|
if (!globalThis.indexedDB || !globalThis.navigator?.locks) throw new Error("Durable browser custody needs IndexedDB and Web Locks. Use a supported browser on HTTPS and allow site storage.");
|
|
12281
12300
|
const name = `nomos-custody-v1:${base.replace(/\/+$/, "")}`;
|
|
@@ -12289,26 +12308,36 @@
|
|
|
12289
12308
|
const held = new Promise((resolve) => {
|
|
12290
12309
|
release = resolve;
|
|
12291
12310
|
});
|
|
12311
|
+
const holding = async (lock) => {
|
|
12312
|
+
if (!lock) return;
|
|
12313
|
+
acquired();
|
|
12314
|
+
await held;
|
|
12315
|
+
};
|
|
12292
12316
|
void navigator.locks.request(name, { ifAvailable: true }, async (lock) => {
|
|
12293
|
-
if (
|
|
12294
|
-
|
|
12317
|
+
if (lock) return holding(lock);
|
|
12318
|
+
let signal;
|
|
12319
|
+
try {
|
|
12320
|
+
signal = AbortSignal.timeout(CUSTODY_LOCK_WAIT_MILLIS);
|
|
12321
|
+
} catch {
|
|
12322
|
+
}
|
|
12323
|
+
if (!signal) {
|
|
12324
|
+
refuse(anotherTab());
|
|
12295
12325
|
return;
|
|
12296
12326
|
}
|
|
12297
|
-
|
|
12298
|
-
await held;
|
|
12327
|
+
void navigator.locks.request(name, { signal }, holding).catch((error) => refuse(error?.name === "TimeoutError" || error?.name === "AbortError" ? anotherTab() : error));
|
|
12299
12328
|
}).catch(refuse);
|
|
12300
12329
|
await ready;
|
|
12301
12330
|
let db;
|
|
12302
12331
|
try {
|
|
12303
12332
|
db = await new Promise((resolve, reject) => {
|
|
12304
|
-
const request = indexedDB.open(name,
|
|
12333
|
+
const request = indexedDB.open(name, 4);
|
|
12305
12334
|
request.onupgradeneeded = (event) => {
|
|
12306
12335
|
const database = request.result;
|
|
12307
12336
|
if (!database.objectStoreNames.contains("custody")) database.createObjectStore("custody");
|
|
12308
12337
|
if (!database.objectStoreNames.contains("files")) database.createObjectStore("files");
|
|
12309
12338
|
if (!database.objectStoreNames.contains("records")) database.createObjectStore("records");
|
|
12310
12339
|
if (!database.objectStoreNames.contains("cache")) database.createObjectStore("cache");
|
|
12311
|
-
if (event.oldVersion === 2) {
|
|
12340
|
+
if (event.oldVersion === 2 || event.oldVersion === 3) {
|
|
12312
12341
|
const files = request.transaction.objectStore("files");
|
|
12313
12342
|
const cache = request.transaction.objectStore("cache");
|
|
12314
12343
|
const cursor = files.openCursor();
|
|
@@ -12454,7 +12483,7 @@
|
|
|
12454
12483
|
return BrowserCustodyStore.open({
|
|
12455
12484
|
load: readState,
|
|
12456
12485
|
commit: (change) => new Promise((resolve, reject) => {
|
|
12457
|
-
const tx = db.transaction(["custody", "files", "records"], "readwrite", { durability: "
|
|
12486
|
+
const tx = db.transaction(["custody", "files", "records"], "readwrite", { durability: "relaxed" });
|
|
12458
12487
|
const files = tx.objectStore("files");
|
|
12459
12488
|
const records = tx.objectStore("records");
|
|
12460
12489
|
for (const path of change.removedFiles) replace(files, path);
|
|
@@ -12781,6 +12810,17 @@
|
|
|
12781
12810
|
rethrowTypedKernelFailure(error);
|
|
12782
12811
|
}
|
|
12783
12812
|
}
|
|
12813
|
+
/** Tell the kernel this peer's verification posture, once, before any custody opens. */
|
|
12814
|
+
configurePeer(trustsCustodianHistory) {
|
|
12815
|
+
const response = __privateMethod(this, _KernelPort_instances, call_fn).call(this, "configure:peer", create(CallRequestSchema, {
|
|
12816
|
+
protocolVersion: 1,
|
|
12817
|
+
requestId: "peer-office:configure",
|
|
12818
|
+
operation: { case: "configure", value: create(KernelConfigurationRequestSchema, { trustsCustodianHistory }) }
|
|
12819
|
+
}));
|
|
12820
|
+
if (response.outcome.case !== "configure") {
|
|
12821
|
+
throw new Error(`kernel refused this peer's custodian-history posture (${response.outcome.case || "empty"})`);
|
|
12822
|
+
}
|
|
12823
|
+
}
|
|
12784
12824
|
/** Execute an explicitly peer-scoped kernel operation without Git custody. */
|
|
12785
12825
|
callForPeer(request) {
|
|
12786
12826
|
if (request.operation.case !== "signingIdentity" && request.operation.case !== "signBirthCertificate") {
|
|
@@ -18386,13 +18426,18 @@
|
|
|
18386
18426
|
this.reference = reference;
|
|
18387
18427
|
}
|
|
18388
18428
|
};
|
|
18389
|
-
var _kernel6, _custody, _receipts2, _CustodyAdmissionDesk_instances, candidateOffers_fn, offer_fn, record_fn2;
|
|
18429
|
+
var _kernel6, _custody, _receipts2, _streams, _CustodyAdmissionDesk_instances, candidateOffers_fn, offer_fn, record_fn2;
|
|
18390
18430
|
var CustodyAdmissionDesk = class {
|
|
18391
18431
|
constructor(kernel, custody, receipts = new CustodyReceipts()) {
|
|
18392
18432
|
__privateAdd(this, _CustodyAdmissionDesk_instances);
|
|
18393
18433
|
__privateAdd(this, _kernel6);
|
|
18394
18434
|
__privateAdd(this, _custody);
|
|
18395
18435
|
__privateAdd(this, _receipts2);
|
|
18436
|
+
/** Per workspace and sender session: the last offer this custodian admitted from that session's
|
|
18437
|
+
* stream and the main its admission produced. A batch that continues exactly there, on that main,
|
|
18438
|
+
* needs no round trip to learn the base it is fenced on. Disposable: losing it only declines the
|
|
18439
|
+
* next continuation, and the sender rewinds to its last answered batch. */
|
|
18440
|
+
__privateAdd(this, _streams, /* @__PURE__ */ new Map());
|
|
18396
18441
|
__privateSet(this, _kernel6, kernel);
|
|
18397
18442
|
__privateSet(this, _custody, custody);
|
|
18398
18443
|
__privateSet(this, _receipts2, receipts);
|
|
@@ -18410,7 +18455,11 @@
|
|
|
18410
18455
|
const sessions = /* @__PURE__ */ new Map();
|
|
18411
18456
|
const births = [];
|
|
18412
18457
|
const admittedBase = __privateGet(this, _kernel6).head(mount, request.requestId) ?? "";
|
|
18413
|
-
|
|
18458
|
+
const streamSession = offers[0]?.session ?? "";
|
|
18459
|
+
const streamKey = `${mount.workspace}\0${streamSession}`;
|
|
18460
|
+
const stream = __privateGet(this, _streams).get(streamKey);
|
|
18461
|
+
const continuesStream = command.continuesAfter !== void 0 && offers.length > 0 && offers.every((offer) => offer.session === streamSession) && stream?.lastCommit === command.continuesAfter && stream.main === admittedBase;
|
|
18462
|
+
if (command.fastForwardOnly && offers.length > 0 && !continuesStream && (command.baseHead ?? "") !== admittedBase) {
|
|
18414
18463
|
for (const offer of offers) {
|
|
18415
18464
|
const receipt = __privateGet(this, _receipts2).receipt(mount.workspace, admittedBase, offer.changeUsda);
|
|
18416
18465
|
if (!receipt) continue;
|
|
@@ -18477,6 +18526,12 @@
|
|
|
18477
18526
|
if (receipts.some((entry) => entry.receipt.outcome.case === "admitted")) {
|
|
18478
18527
|
__privateGet(this, _receipts2).record(mount.workspace, admittedBase, main, receipts);
|
|
18479
18528
|
}
|
|
18529
|
+
const last = offers.at(-1);
|
|
18530
|
+
if (last && streamSession && receipts.every((entry) => entry.receipt.outcome.case === "admitted" || entry.receipt.outcome.case === "skipped")) {
|
|
18531
|
+
__privateGet(this, _streams).set(streamKey, { lastCommit: last.commitOid, main });
|
|
18532
|
+
} else {
|
|
18533
|
+
__privateGet(this, _streams).delete(streamKey);
|
|
18534
|
+
}
|
|
18480
18535
|
return create(CustodyAdmissionSchema, {
|
|
18481
18536
|
main,
|
|
18482
18537
|
sessions: [...sessions].map(
|
|
@@ -18490,6 +18545,7 @@
|
|
|
18490
18545
|
_kernel6 = new WeakMap();
|
|
18491
18546
|
_custody = new WeakMap();
|
|
18492
18547
|
_receipts2 = new WeakMap();
|
|
18548
|
+
_streams = new WeakMap();
|
|
18493
18549
|
_CustodyAdmissionDesk_instances = new WeakSet();
|
|
18494
18550
|
candidateOffers_fn = function(request, mount, reference, requestedBase) {
|
|
18495
18551
|
if (!/^refs\/heads\/session\/[A-Za-z0-9._/-]+$/.test(reference)) {
|
|
@@ -19595,6 +19651,10 @@
|
|
|
19595
19651
|
// ../src/runtime/read_maintenance_desk.ts
|
|
19596
19652
|
init_define_NOMOS_KERNEL_RELEASE();
|
|
19597
19653
|
init_shims();
|
|
19654
|
+
var slowQuantumObserver;
|
|
19655
|
+
function observeSlowMaintenanceQuanta(observer) {
|
|
19656
|
+
slowQuantumObserver = observer;
|
|
19657
|
+
}
|
|
19598
19658
|
var _queries3, _sessions5, _trace6, _observer, _clock6, _pending, _sequence8, _revision2, _ReadMaintenanceDesk_instances, schedule_fn, nextDelay_fn;
|
|
19599
19659
|
var ReadMaintenanceDesk = class {
|
|
19600
19660
|
constructor(queries, sessions, trace, clock, observer = {}) {
|
|
@@ -19664,10 +19724,15 @@
|
|
|
19664
19724
|
* Advance one bounded quantum. `sessionlessNotBeforeNanoseconds` holds every demand neither an
|
|
19665
19725
|
* interaction nor a request is waiting on (custody residency of other workspaces) until then, so an
|
|
19666
19726
|
* application's open is never queued behind it; interaction demands run as usual.
|
|
19727
|
+
* `backgroundNotBeforeNanoseconds` likewise holds background-only work (no read waits on it)
|
|
19728
|
+
* while the foreground is busy.
|
|
19667
19729
|
*/
|
|
19668
|
-
tick(request, sessionlessNotBeforeNanoseconds = 0n) {
|
|
19730
|
+
tick(request, sessionlessNotBeforeNanoseconds = 0n, backgroundNotBeforeNanoseconds = 0n) {
|
|
19669
19731
|
const now = __privateGet(this, _clock6).monotonicNanoseconds();
|
|
19670
|
-
const due2 = (demand2) =>
|
|
19732
|
+
const due2 = (demand2) => {
|
|
19733
|
+
const held = demand2.session || demand2.awaited || demand2.retryNotBeforeNanoseconds > sessionlessNotBeforeNanoseconds ? demand2.retryNotBeforeNanoseconds : sessionlessNotBeforeNanoseconds;
|
|
19734
|
+
return demand2.read || demand2.awaited || held > backgroundNotBeforeNanoseconds ? held : backgroundNotBeforeNanoseconds;
|
|
19735
|
+
};
|
|
19671
19736
|
const entry = [...__privateGet(this, _pending).entries()].find(([, demand2]) => due2(demand2) <= now);
|
|
19672
19737
|
if (!entry) return create(MaintenanceTickedSchema, {
|
|
19673
19738
|
pending: this.hasPending(),
|
|
@@ -19708,6 +19773,20 @@
|
|
|
19708
19773
|
readIndexOnly: read !== void 0
|
|
19709
19774
|
})
|
|
19710
19775
|
);
|
|
19776
|
+
const elapsedNanoseconds = __privateGet(this, _clock6).monotonicNanoseconds() - now;
|
|
19777
|
+
if (slowQuantumObserver && elapsedNanoseconds >= 300000000n) {
|
|
19778
|
+
slowQuantumObserver(`[nomos-kernel-perf] ${JSON.stringify({
|
|
19779
|
+
op: "peer_maintenance_quantum",
|
|
19780
|
+
totalMs: Number(elapsedNanoseconds / 1000000n),
|
|
19781
|
+
cause: ReadMaintenanceCause[activeCause],
|
|
19782
|
+
read: read !== void 0,
|
|
19783
|
+
awaited: demand.awaited === true,
|
|
19784
|
+
session: demand.session !== void 0,
|
|
19785
|
+
backgroundHoldMs: Number((backgroundNotBeforeNanoseconds - now) / 1000000n),
|
|
19786
|
+
sessionlessHoldMs: Number((sessionlessNotBeforeNanoseconds - now) / 1000000n),
|
|
19787
|
+
caller: (new Error().stack ?? "").split("\n").slice(2, 6).map((frame) => frame.trim()).join(" < ")
|
|
19788
|
+
})}`);
|
|
19789
|
+
}
|
|
19711
19790
|
const observed = create(ReadMaintenanceProgressSchema, {
|
|
19712
19791
|
workspace,
|
|
19713
19792
|
cause: activeCause,
|
|
@@ -19776,6 +19855,16 @@
|
|
|
19776
19855
|
const failures = demand.failures + 1;
|
|
19777
19856
|
__privateGet(this, _pending).delete(workspace);
|
|
19778
19857
|
const retryMillis = Math.min(30 * 60 * 1e3, 1e3 * 2 ** Math.min(failures - 1, 10));
|
|
19858
|
+
slowQuantumObserver?.(`[nomos-kernel-perf] ${JSON.stringify({
|
|
19859
|
+
op: "peer_maintenance_failure",
|
|
19860
|
+
failed: true,
|
|
19861
|
+
workspace,
|
|
19862
|
+
cause: ReadMaintenanceCause[activeCause],
|
|
19863
|
+
failures,
|
|
19864
|
+
retryAfterMillis: retryMillis,
|
|
19865
|
+
totalMs: Number((__privateGet(this, _clock6).monotonicNanoseconds() - now) / 1000000n),
|
|
19866
|
+
error: (error instanceof Error ? error.message : String(error)).slice(0, 600)
|
|
19867
|
+
})}`);
|
|
19779
19868
|
__privateGet(this, _pending).set(workspace, {
|
|
19780
19869
|
...demand,
|
|
19781
19870
|
failures,
|
|
@@ -19829,7 +19918,7 @@
|
|
|
19829
19918
|
const existing = __privateGet(this, _pending).get(workspace);
|
|
19830
19919
|
const isReadDemand = cause === ReadMaintenanceCause.OPEN || cause === ReadMaintenanceCause.READ_DEBT || cause === ReadMaintenanceCause.RESIDENCY;
|
|
19831
19920
|
const maintainsGitCustody = cause === ReadMaintenanceCause.ADMITTED_OFFER || cause === ReadMaintenanceCause.SYNC;
|
|
19832
|
-
const background = isReadDemand ? existing?.background : {
|
|
19921
|
+
const background = isReadDemand ? existing?.background ?? (cause === ReadMaintenanceCause.OPEN ? { cause: ReadMaintenanceCause.DOMAIN_PREPARATION, maintainGitCustody: false } : void 0) : {
|
|
19833
19922
|
cause,
|
|
19834
19923
|
...command ? { command } : existing?.background?.command ? { command: existing.background.command } : {},
|
|
19835
19924
|
maintainGitCustody: maintainsGitCustody || existing?.background?.maintainGitCustody === true
|
|
@@ -20296,9 +20385,9 @@
|
|
|
20296
20385
|
}
|
|
20297
20386
|
return true;
|
|
20298
20387
|
};
|
|
20299
|
-
var _queries4, _sessions6, _events2, _requestReadMaintenance, _clock9, _subscriptions2, _sequence11, _SubscriptionManager_instances, now_fn4, refreshMatching_fn, read_fn, refresh_fn, failed_fn;
|
|
20388
|
+
var _queries4, _sessions6, _events2, _requestReadMaintenance, _clock9, _subscriptions2, _owed, _nextTurn, _draining, _sequence11, _SubscriptionManager_instances, now_fn4, refreshMatching_fn, drain_fn, groups_fn, refreshGroups_fn, read_fn, refresh_fn, failed_fn;
|
|
20300
20389
|
var SubscriptionManager = class {
|
|
20301
|
-
constructor(queries, sessions, events, requestReadMaintenance, clock) {
|
|
20390
|
+
constructor(queries, sessions, events, requestReadMaintenance, clock, nextTurn) {
|
|
20302
20391
|
__privateAdd(this, _SubscriptionManager_instances);
|
|
20303
20392
|
__privateAdd(this, _queries4);
|
|
20304
20393
|
__privateAdd(this, _sessions6);
|
|
@@ -20306,12 +20395,17 @@
|
|
|
20306
20395
|
__privateAdd(this, _requestReadMaintenance);
|
|
20307
20396
|
__privateAdd(this, _clock9);
|
|
20308
20397
|
__privateAdd(this, _subscriptions2, /* @__PURE__ */ new Map());
|
|
20398
|
+
/** Watches owed a re-read, drained one query group per turn when a turn scheduler is given. */
|
|
20399
|
+
__privateAdd(this, _owed, /* @__PURE__ */ new Set());
|
|
20400
|
+
__privateAdd(this, _nextTurn);
|
|
20401
|
+
__privateAdd(this, _draining, false);
|
|
20309
20402
|
__privateAdd(this, _sequence11, 0n);
|
|
20310
20403
|
__privateSet(this, _queries4, queries);
|
|
20311
20404
|
__privateSet(this, _sessions6, sessions);
|
|
20312
20405
|
__privateSet(this, _events2, events);
|
|
20313
20406
|
__privateSet(this, _requestReadMaintenance, requestReadMaintenance);
|
|
20314
20407
|
__privateSet(this, _clock9, clock);
|
|
20408
|
+
__privateSet(this, _nextTurn, nextTurn);
|
|
20315
20409
|
}
|
|
20316
20410
|
start(request, command) {
|
|
20317
20411
|
if (!command.subscriptionId) throw new Error("watch requires a subscription identity");
|
|
@@ -20327,6 +20421,7 @@
|
|
|
20327
20421
|
}
|
|
20328
20422
|
stop(subscriptionId) {
|
|
20329
20423
|
__privateGet(this, _subscriptions2).delete(subscriptionId);
|
|
20424
|
+
__privateGet(this, _owed).delete(subscriptionId);
|
|
20330
20425
|
return create(WatchStoppedSchema, { subscriptionId });
|
|
20331
20426
|
}
|
|
20332
20427
|
/** Watches are foreground consumers; cached session credentials are not. */
|
|
@@ -20348,6 +20443,7 @@
|
|
|
20348
20443
|
}
|
|
20349
20444
|
clear() {
|
|
20350
20445
|
__privateGet(this, _subscriptions2).clear();
|
|
20446
|
+
__privateGet(this, _owed).clear();
|
|
20351
20447
|
}
|
|
20352
20448
|
/** Re-use ordinary application-call recovery. A watch never owns provider
|
|
20353
20449
|
* fetching, adoption, or a second credential lifecycle. Reserve at dispatch
|
|
@@ -20414,6 +20510,9 @@
|
|
|
20414
20510
|
_requestReadMaintenance = new WeakMap();
|
|
20415
20511
|
_clock9 = new WeakMap();
|
|
20416
20512
|
_subscriptions2 = new WeakMap();
|
|
20513
|
+
_owed = new WeakMap();
|
|
20514
|
+
_nextTurn = new WeakMap();
|
|
20515
|
+
_draining = new WeakMap();
|
|
20417
20516
|
_sequence11 = new WeakMap();
|
|
20418
20517
|
_SubscriptionManager_instances = new WeakSet();
|
|
20419
20518
|
now_fn4 = function() {
|
|
@@ -20424,6 +20523,36 @@
|
|
|
20424
20523
|
* or replace current authorization. Each watch still owns its delivery state.
|
|
20425
20524
|
*/
|
|
20426
20525
|
refreshMatching_fn = function(matches, cause) {
|
|
20526
|
+
if (__privateGet(this, _nextTurn) && !cause) {
|
|
20527
|
+
for (const [id, subscription] of __privateGet(this, _subscriptions2)) {
|
|
20528
|
+
if (subscription.request.query && matches(subscription)) __privateGet(this, _owed).add(id);
|
|
20529
|
+
}
|
|
20530
|
+
__privateMethod(this, _SubscriptionManager_instances, drain_fn).call(this);
|
|
20531
|
+
return;
|
|
20532
|
+
}
|
|
20533
|
+
__privateMethod(this, _SubscriptionManager_instances, refreshGroups_fn).call(this, __privateMethod(this, _SubscriptionManager_instances, groups_fn).call(this, matches), cause);
|
|
20534
|
+
};
|
|
20535
|
+
drain_fn = function() {
|
|
20536
|
+
if (__privateGet(this, _draining) || __privateGet(this, _owed).size === 0) return;
|
|
20537
|
+
__privateSet(this, _draining, true);
|
|
20538
|
+
__privateGet(this, _nextTurn).call(this, () => {
|
|
20539
|
+
__privateSet(this, _draining, false);
|
|
20540
|
+
if (__privateGet(this, _owed).size === 0) return;
|
|
20541
|
+
const first = __privateGet(this, _owed).values().next().value;
|
|
20542
|
+
const lead = __privateGet(this, _subscriptions2).get(first);
|
|
20543
|
+
if (!lead?.request.query) {
|
|
20544
|
+
__privateGet(this, _owed).delete(first);
|
|
20545
|
+
} else {
|
|
20546
|
+
const declaration = toBinary(QueryRequestSchema, lead.request.query);
|
|
20547
|
+
const session = lead.request.session;
|
|
20548
|
+
const group = __privateMethod(this, _SubscriptionManager_instances, groups_fn).call(this, (subscription) => subscription.request.session === session && __privateGet(this, _owed).has(subscription.request.subscriptionId) && sameBytes(toBinary(QueryRequestSchema, subscription.request.query), declaration));
|
|
20549
|
+
for (const each of group) for (const watch of each.watches) __privateGet(this, _owed).delete(watch.request.subscriptionId);
|
|
20550
|
+
__privateMethod(this, _SubscriptionManager_instances, refreshGroups_fn).call(this, group);
|
|
20551
|
+
}
|
|
20552
|
+
__privateMethod(this, _SubscriptionManager_instances, drain_fn).call(this);
|
|
20553
|
+
});
|
|
20554
|
+
};
|
|
20555
|
+
groups_fn = function(matches) {
|
|
20427
20556
|
const groups = [];
|
|
20428
20557
|
for (const subscription of __privateGet(this, _subscriptions2).values()) {
|
|
20429
20558
|
if (!matches(subscription) || !subscription.request.query) continue;
|
|
@@ -20433,6 +20562,9 @@
|
|
|
20433
20562
|
if (group) group.watches.push(subscription);
|
|
20434
20563
|
else groups.push({ session, declaration, watches: [subscription] });
|
|
20435
20564
|
}
|
|
20565
|
+
return groups;
|
|
20566
|
+
};
|
|
20567
|
+
refreshGroups_fn = function(groups, cause) {
|
|
20436
20568
|
for (const group of groups) {
|
|
20437
20569
|
const request = cause ?? createSyntheticRequest(++__privateWrapper(this, _sequence11)._);
|
|
20438
20570
|
let answer;
|
|
@@ -22130,6 +22262,14 @@
|
|
|
22130
22262
|
init_define_NOMOS_KERNEL_RELEASE();
|
|
22131
22263
|
init_shims();
|
|
22132
22264
|
var MAX_LIVE_FRAME_BYTES = 25 * 1024 * 1024;
|
|
22265
|
+
var liveDesks = /* @__PURE__ */ new Set();
|
|
22266
|
+
function liveStreamStates() {
|
|
22267
|
+
return [...liveDesks].flatMap((desk) => desk.streamStates());
|
|
22268
|
+
}
|
|
22269
|
+
var LIVE_CARRIED_COMMITS_BYTES = 4 * 1024 * 1024;
|
|
22270
|
+
var LIVE_ANSWER_WINDOW = 15000000000n;
|
|
22271
|
+
var LIVE_STREAM_WINDOW = 16;
|
|
22272
|
+
var LIVE_CONVERGE_QUIET = 2000000000n;
|
|
22133
22273
|
var PLACEMENT_REF2 = "refs/nomos/placement";
|
|
22134
22274
|
var PRESENCE_PEER_TOKEN_HEX = 32;
|
|
22135
22275
|
function presencePeerToken(replicaId) {
|
|
@@ -22140,7 +22280,8 @@
|
|
|
22140
22280
|
if (!link.publisher && link.binding.replicaId) parts.push(`peer=${encodeURIComponent(presencePeerToken(link.binding.replicaId))}`);
|
|
22141
22281
|
return parts.join("&");
|
|
22142
22282
|
}
|
|
22143
|
-
var
|
|
22283
|
+
var TRACKED_MAIN2 = "refs/remotes/nomos/main";
|
|
22284
|
+
var _links, _pending3, _sequence12, _requestId2, _LiveCorrespondenceDesk_instances, count_fn, effect_fn, open_fn2, send_fn, admitted_fn, declined_fn, announced_fn, placementAnnounced_fn, hello_fn;
|
|
22144
22285
|
var LiveCorrespondenceDesk = class {
|
|
22145
22286
|
constructor(kernel, events, clock, relayOrigin) {
|
|
22146
22287
|
__privateAdd(this, _LiveCorrespondenceDesk_instances);
|
|
@@ -22154,18 +22295,53 @@
|
|
|
22154
22295
|
__publicField(this, "linkOpened");
|
|
22155
22296
|
/** The upstream announced a frontier this replica does not hold. */
|
|
22156
22297
|
__publicField(this, "remoteAdvanced");
|
|
22298
|
+
/** This replica's own live batch was judged without a base it can track; converge at once. */
|
|
22299
|
+
__publicField(this, "declined");
|
|
22157
22300
|
/** The upstream announced a placement frontier this replica does not hold. */
|
|
22158
22301
|
__publicField(this, "placementAdvanced");
|
|
22302
|
+
/** The custodian's admission moved this replica's tracked base over the live link. */
|
|
22303
|
+
__publicField(this, "acknowledged");
|
|
22304
|
+
/** The custodian admitted these of this replica's own intents. Their receipts are settled now,
|
|
22305
|
+
* whatever this replica does next to track the custodian's main (an HTTP round that follows
|
|
22306
|
+
* finds them already admitted and reports no intents of its own for them). */
|
|
22307
|
+
__publicField(this, "intentsAdmitted");
|
|
22159
22308
|
/** An open link dropped: from here the replica only knows what it last confirmed. */
|
|
22160
22309
|
__publicField(this, "linkClosed");
|
|
22161
22310
|
/** The host's origin fence: a link is never opened to an origin it does not permit. */
|
|
22162
22311
|
__publicField(this, "originAllowed");
|
|
22312
|
+
/** A batch went out or an admission came back: the stream's progress may have changed. */
|
|
22313
|
+
__publicField(this, "progressChanged");
|
|
22163
22314
|
__privateAdd(this, _sequence12, 0);
|
|
22164
22315
|
__privateAdd(this, _requestId2, 40000000000n);
|
|
22165
22316
|
this.kernel = kernel;
|
|
22166
22317
|
this.events = events;
|
|
22167
22318
|
this.clock = clock;
|
|
22168
22319
|
this.relayOrigin = relayOrigin;
|
|
22320
|
+
liveDesks.add(this);
|
|
22321
|
+
}
|
|
22322
|
+
/** Observability only: each follower link's stream position, for a host that reports stalls. */
|
|
22323
|
+
streamStates() {
|
|
22324
|
+
const now = this.clock.monotonicNanoseconds();
|
|
22325
|
+
return [...__privateGet(this, _links).values()].filter((link) => !link.publisher).map((link) => {
|
|
22326
|
+
const state = {
|
|
22327
|
+
workspace: link.binding.workspace,
|
|
22328
|
+
link: link.state,
|
|
22329
|
+
dirty: link.dirty,
|
|
22330
|
+
sent: link.stream?.sent,
|
|
22331
|
+
unansweredAgesMs: (link.stream?.unanswered ?? []).map((entry) => Number((now - (entry.due - LIVE_ANSWER_WINDOW)) / 1000000n)),
|
|
22332
|
+
custodianLocal: link.custodian?.local,
|
|
22333
|
+
convergeDue: link.convergeDue !== void 0
|
|
22334
|
+
};
|
|
22335
|
+
try {
|
|
22336
|
+
if (this.kernel.isResident(link.binding.workspace) !== false) {
|
|
22337
|
+
const mount = workspaceMount(link.binding.workspace);
|
|
22338
|
+
state.head = this.kernel.head(mount, ++__privateWrapper(this, _requestId2)._);
|
|
22339
|
+
state.tracked = this.kernel.resolveRef(mount, ++__privateWrapper(this, _requestId2)._, TRACKED_MAIN2);
|
|
22340
|
+
}
|
|
22341
|
+
} catch {
|
|
22342
|
+
}
|
|
22343
|
+
return state;
|
|
22344
|
+
});
|
|
22169
22345
|
}
|
|
22170
22346
|
connect(binding, head) {
|
|
22171
22347
|
const upstream = binding.cloudBound ? binding.cloud : this.relayOrigin;
|
|
@@ -22179,6 +22355,7 @@
|
|
|
22179
22355
|
due: 0n,
|
|
22180
22356
|
dirty: true,
|
|
22181
22357
|
failures: 0,
|
|
22358
|
+
ownMains: [],
|
|
22182
22359
|
origin,
|
|
22183
22360
|
publisher: !binding.cloudBound,
|
|
22184
22361
|
published: !binding.cloudBound ? head : void 0,
|
|
@@ -22191,14 +22368,27 @@
|
|
|
22191
22368
|
const link = __privateGet(this, _links).get(workspace);
|
|
22192
22369
|
if (link) link.dirty = true;
|
|
22193
22370
|
}
|
|
22194
|
-
|
|
22371
|
+
/** Local commits the custodian has not yet admitted: those not yet offered, and those offered
|
|
22372
|
+
* whose admission has not come back. Undefined when the link carries no follower stream or
|
|
22373
|
+
* local history cannot be counted from the custodian's base. */
|
|
22374
|
+
progress(workspace) {
|
|
22375
|
+
const link = __privateGet(this, _links).get(workspace);
|
|
22376
|
+
if (!link || link.publisher || link.state !== "open" || !link.stream && !link.dirty) return void 0;
|
|
22377
|
+
if (this.kernel.isResident(workspace) === false) return void 0;
|
|
22378
|
+
try {
|
|
22379
|
+
return __privateMethod(this, _LiveCorrespondenceDesk_instances, count_fn).call(this, link, workspaceMount(workspace));
|
|
22380
|
+
} catch {
|
|
22381
|
+
return void 0;
|
|
22382
|
+
}
|
|
22383
|
+
}
|
|
22384
|
+
export(binding, base, requestId, options = {}) {
|
|
22195
22385
|
if (this.kernel.isResident(binding.workspace) === false) {
|
|
22196
22386
|
return create(CustodyOfferBatchRequestSchema, { protocolVersion: 2 });
|
|
22197
22387
|
}
|
|
22198
22388
|
const mount = workspaceMount(binding.workspace);
|
|
22199
22389
|
const head = this.kernel.head(mount, requestId);
|
|
22200
22390
|
if (!base || !head || base === head) return create(CustodyOfferBatchRequestSchema, { protocolVersion: 2 });
|
|
22201
|
-
if (!this.kernel.historySummary(mount, requestId, base).reachedBase) {
|
|
22391
|
+
if (!options.baseInHistory && !this.kernel.historySummary(mount, requestId, base).reachedBase) {
|
|
22202
22392
|
return create(CustodyOfferBatchRequestSchema, { protocolVersion: 2 });
|
|
22203
22393
|
}
|
|
22204
22394
|
const intents = this.kernel.transportIntentsAbove(mount, requestId, 0n, base, head).intents;
|
|
@@ -22215,7 +22405,10 @@
|
|
|
22215
22405
|
})) } },
|
|
22216
22406
|
// Do not request a returned archive for a live proposal. Every receiving
|
|
22217
22407
|
// kernel produces its own admission and projection update.
|
|
22218
|
-
|
|
22408
|
+
// A follower carries its own commits so its custodian can adopt them: then both share one
|
|
22409
|
+
// history and an acknowledgement needs no convergence. Commit trees some intents require
|
|
22410
|
+
// travel the same way.
|
|
22411
|
+
evidencePack: options.carryCommits || intents.some((intent) => intent.transportRequirement === IntentTransportRequirement.COMMIT_TREE) ? this.kernel.packDelta(mount, requestId, head, base) : new Uint8Array()
|
|
22219
22412
|
});
|
|
22220
22413
|
}
|
|
22221
22414
|
receive(request, receipt) {
|
|
@@ -22224,6 +22417,7 @@
|
|
|
22224
22417
|
if (receipt.observation.case === "closed") {
|
|
22225
22418
|
if (link.state === "open") this.linkClosed?.(link.binding.workspace);
|
|
22226
22419
|
link.state = "closed";
|
|
22420
|
+
link.stream = void 0;
|
|
22227
22421
|
link.due = this.clock.monotonicNanoseconds() + BigInt(Math.min(3e4, 250 * 2 ** Math.min(link.failures++, 7))) * 1000000n;
|
|
22228
22422
|
return;
|
|
22229
22423
|
}
|
|
@@ -22269,6 +22463,11 @@
|
|
|
22269
22463
|
}
|
|
22270
22464
|
return;
|
|
22271
22465
|
}
|
|
22466
|
+
if (frame.message.case === "admission") {
|
|
22467
|
+
__privateMethod(this, _LiveCorrespondenceDesk_instances, admitted_fn).call(this, link, frame.message.value);
|
|
22468
|
+
this.progressChanged?.(link.binding.workspace);
|
|
22469
|
+
return;
|
|
22470
|
+
}
|
|
22272
22471
|
if (frame.message.case !== "offers") return;
|
|
22273
22472
|
const batch = frame.message.value;
|
|
22274
22473
|
if (batch.protocolVersion !== 2 || !batch.requestId || batch.source.case !== "inline" || !batch.source.value.offers.length) return;
|
|
@@ -22329,16 +22528,63 @@
|
|
|
22329
22528
|
}
|
|
22330
22529
|
if (link.state === "closed" && now >= link.due) __privateMethod(this, _LiveCorrespondenceDesk_instances, open_fn2).call(this, link);
|
|
22331
22530
|
if (link.state === "open") {
|
|
22531
|
+
const oldest = link.stream?.unanswered[0];
|
|
22532
|
+
if (oldest && (now >= oldest.due || !resident)) link.stream = void 0;
|
|
22332
22533
|
if (link.dirty && resident) {
|
|
22534
|
+
if (link.convergeDue !== void 0) link.convergeDue = now + LIVE_CONVERGE_QUIET;
|
|
22333
22535
|
link.dirty = false;
|
|
22334
22536
|
try {
|
|
22335
|
-
|
|
22336
|
-
const
|
|
22337
|
-
if (
|
|
22537
|
+
const mount = workspaceMount(link.binding.workspace);
|
|
22538
|
+
const head = this.kernel.head(mount, ++__privateWrapper(this, _requestId2)._);
|
|
22539
|
+
if (link.custodian && !(head && this.kernel.historySummary(mount, ++__privateWrapper(this, _requestId2)._, link.custodian.local, head).reachedBase)) {
|
|
22540
|
+
link.custodian = void 0;
|
|
22541
|
+
}
|
|
22542
|
+
const answered2 = link.publisher ? link.published ?? (link.published = head ?? "") : link.custodian?.local ?? this.kernel.resolveRef(mount, ++__privateWrapper(this, _requestId2)._, TRACKED_MAIN2) ?? "";
|
|
22543
|
+
const fence = link.custodian?.main ?? answered2;
|
|
22544
|
+
if (link.stream && !(head && this.kernel.historySummary(mount, ++__privateWrapper(this, _requestId2)._, link.stream.sent, head).reachedBase)) {
|
|
22545
|
+
link.stream = void 0;
|
|
22546
|
+
}
|
|
22547
|
+
const continuesAfter = link.publisher ? void 0 : link.stream?.sent;
|
|
22548
|
+
if (!link.publisher && (link.stream?.unanswered.length ?? 0) >= LIVE_STREAM_WINDOW) {
|
|
22549
|
+
link.dirty = true;
|
|
22550
|
+
} else {
|
|
22551
|
+
let batch = this.export(
|
|
22552
|
+
link.binding,
|
|
22553
|
+
continuesAfter ?? answered2,
|
|
22554
|
+
++__privateWrapper(this, _requestId2)._,
|
|
22555
|
+
{ baseInHistory: continuesAfter !== void 0, carryCommits: !link.publisher }
|
|
22556
|
+
);
|
|
22557
|
+
if (batch.evidencePack.byteLength > LIVE_CARRIED_COMMITS_BYTES && !link.publisher) {
|
|
22558
|
+
batch = create(CustodyOfferBatchRequestSchema, { ...batch, evidencePack: new Uint8Array() });
|
|
22559
|
+
}
|
|
22560
|
+
if (batch.source.case === "inline" && batch.source.value.offers.length) {
|
|
22561
|
+
__privateMethod(this, _LiveCorrespondenceDesk_instances, send_fn).call(this, link, { case: "offers", value: link.publisher ? batch : create(CustodyOfferBatchRequestSchema, {
|
|
22562
|
+
...batch,
|
|
22563
|
+
baseHead: fence,
|
|
22564
|
+
fastForwardOnly: true,
|
|
22565
|
+
...continuesAfter ? { continuesAfter } : {}
|
|
22566
|
+
}) });
|
|
22567
|
+
if (!link.publisher && head) {
|
|
22568
|
+
link.stream ?? (link.stream = { sent: head, unanswered: [] });
|
|
22569
|
+
link.stream.sent = head;
|
|
22570
|
+
link.stream.unanswered.push({ requestId: batch.requestId, due: now + LIVE_ANSWER_WINDOW });
|
|
22571
|
+
this.progressChanged?.(link.binding.workspace);
|
|
22572
|
+
}
|
|
22573
|
+
}
|
|
22574
|
+
}
|
|
22338
22575
|
link.published = this.kernel.head(workspaceMount(link.binding.workspace), __privateGet(this, _requestId2));
|
|
22339
22576
|
} catch {
|
|
22340
22577
|
}
|
|
22341
22578
|
}
|
|
22579
|
+
if (link.convergeDue !== void 0 && !link.stream?.unanswered.length) {
|
|
22580
|
+
if (now >= link.convergeDue) {
|
|
22581
|
+
link.convergeDue = void 0;
|
|
22582
|
+
__privateMethod(this, _LiveCorrespondenceDesk_instances, declined_fn).call(this, link.binding.workspace);
|
|
22583
|
+
} else {
|
|
22584
|
+
const remaining2 = (link.convergeDue - now + 999999n) / 1000000n;
|
|
22585
|
+
wake = wake === void 0 || remaining2 < wake ? remaining2 : wake;
|
|
22586
|
+
}
|
|
22587
|
+
}
|
|
22342
22588
|
continue;
|
|
22343
22589
|
}
|
|
22344
22590
|
const remaining = link.due > now ? link.due - now : 0n;
|
|
@@ -22357,6 +22603,20 @@
|
|
|
22357
22603
|
_sequence12 = new WeakMap();
|
|
22358
22604
|
_requestId2 = new WeakMap();
|
|
22359
22605
|
_LiveCorrespondenceDesk_instances = new WeakSet();
|
|
22606
|
+
count_fn = function(link, mount) {
|
|
22607
|
+
const head = this.kernel.head(mount, ++__privateWrapper(this, _requestId2)._);
|
|
22608
|
+
const acknowledged = link.custodian?.local ?? this.kernel.resolveRef(mount, ++__privateWrapper(this, _requestId2)._, TRACKED_MAIN2);
|
|
22609
|
+
if (!head || !acknowledged) return void 0;
|
|
22610
|
+
const count = (base, tip) => {
|
|
22611
|
+
if (base === tip) return 0;
|
|
22612
|
+
const summary = this.kernel.historySummary(mount, ++__privateWrapper(this, _requestId2)._, base, tip);
|
|
22613
|
+
return summary.reachedBase ? Number(summary.commitCount) : void 0;
|
|
22614
|
+
};
|
|
22615
|
+
const sent = link.stream?.sent;
|
|
22616
|
+
const unacknowledged = sent ? count(acknowledged, sent) : 0;
|
|
22617
|
+
const unsent = count(sent ?? acknowledged, head);
|
|
22618
|
+
return unacknowledged === void 0 || unsent === void 0 ? void 0 : { unsent, unacknowledged };
|
|
22619
|
+
};
|
|
22360
22620
|
effect_fn = function(link, operation) {
|
|
22361
22621
|
this.events.emit(link.binding.replicaId, { case: "socketEffect", value: create(PeerSocketEffectSchema, {
|
|
22362
22622
|
connectionId: link.id,
|
|
@@ -22377,6 +22637,79 @@
|
|
|
22377
22637
|
if (bytes.byteLength > MAX_LIVE_FRAME_BYTES) return;
|
|
22378
22638
|
__privateMethod(this, _LiveCorrespondenceDesk_instances, effect_fn).call(this, link, { case: "send", value: bytes });
|
|
22379
22639
|
};
|
|
22640
|
+
/**
|
|
22641
|
+
* The custodian judged a live batch. Its admitted main becomes this replica's tracked base only when
|
|
22642
|
+
* that commit is already in local verified history and descends from the current tracked base:
|
|
22643
|
+
* the same evidence the HTTP lane accepts, carried on the socket. Anything else is left to the
|
|
22644
|
+
* ordinary follow. A refusal of this replica's own batch asks for that follow at once, so the
|
|
22645
|
+
* refusal reaches the application through the HTTP result exactly as before.
|
|
22646
|
+
*/
|
|
22647
|
+
admitted_fn = function(link, live) {
|
|
22648
|
+
const admission = live.admission;
|
|
22649
|
+
const workspace = link.binding.workspace;
|
|
22650
|
+
if (!admission?.main || this.kernel.isResident(workspace) === false) return;
|
|
22651
|
+
const ours = live.requestId.startsWith(`${link.binding.replicaId}:`);
|
|
22652
|
+
let stale = false;
|
|
22653
|
+
if (ours && link.stream) {
|
|
22654
|
+
const at = link.stream.unanswered.findIndex((entry) => entry.requestId === live.requestId);
|
|
22655
|
+
if (at < 0) stale = true;
|
|
22656
|
+
else link.stream.unanswered.splice(0, at + 1);
|
|
22657
|
+
}
|
|
22658
|
+
const judged = admission.sessions.flatMap((session) => session.intents);
|
|
22659
|
+
if (ours && !stale && judged.some((intent) => intent.outcome.case !== "admitted" && intent.outcome.case !== "skipped")) {
|
|
22660
|
+
__privateMethod(this, _LiveCorrespondenceDesk_instances, declined_fn).call(this, workspace);
|
|
22661
|
+
return;
|
|
22662
|
+
}
|
|
22663
|
+
const admitted = admission.main;
|
|
22664
|
+
const mount = workspaceMount(workspace);
|
|
22665
|
+
const local = this.kernel.head(mount, ++__privateWrapper(this, _requestId2)._);
|
|
22666
|
+
if (!local) return;
|
|
22667
|
+
const admittedIntentIds = ours ? judged.filter((intent) => intent.outcome.case === "admitted" || intent.outcome.case === "skipped").map((intent) => intent.intentId ?? "").filter((id) => id !== "") : [];
|
|
22668
|
+
if (admittedIntentIds.length > 0) this.intentsAdmitted?.(workspace, admittedIntentIds, local);
|
|
22669
|
+
if (stale) return;
|
|
22670
|
+
const batchHead = live.requestId.slice(`${link.binding.replicaId}:`.length);
|
|
22671
|
+
const coveredToBatchHead = ours && judged.some((intent) => intent.commitOid === batchHead && (intent.outcome.case === "admitted" || intent.outcome.case === "skipped"));
|
|
22672
|
+
if (ours && !coveredToBatchHead) link.stream = void 0;
|
|
22673
|
+
if (coveredToBatchHead && admitted !== local && !this.kernel.historySummary(mount, ++__privateWrapper(this, _requestId2)._, admitted, local).reachedBase) {
|
|
22674
|
+
link.custodian = { main: admitted, local: batchHead };
|
|
22675
|
+
link.ownMains.push(admitted);
|
|
22676
|
+
if (link.ownMains.length > 32) link.ownMains.splice(0, link.ownMains.length - 32);
|
|
22677
|
+
if (batchHead === local && !link.stream?.unanswered.length) {
|
|
22678
|
+
link.convergeDue = this.clock.monotonicNanoseconds() + LIVE_CONVERGE_QUIET;
|
|
22679
|
+
} else {
|
|
22680
|
+
link.dirty = true;
|
|
22681
|
+
}
|
|
22682
|
+
return;
|
|
22683
|
+
}
|
|
22684
|
+
const previous = this.kernel.resolveRef(mount, ++__privateWrapper(this, _requestId2)._, TRACKED_MAIN2);
|
|
22685
|
+
if (ours && admitted === previous && local !== admitted) {
|
|
22686
|
+
__privateMethod(this, _LiveCorrespondenceDesk_instances, declined_fn).call(this, workspace);
|
|
22687
|
+
return;
|
|
22688
|
+
}
|
|
22689
|
+
if (previous !== admitted) {
|
|
22690
|
+
if (admitted !== local && !this.kernel.historySummary(mount, ++__privateWrapper(this, _requestId2)._, admitted, local).reachedBase) {
|
|
22691
|
+
if (ours) __privateMethod(this, _LiveCorrespondenceDesk_instances, declined_fn).call(this, workspace);
|
|
22692
|
+
return;
|
|
22693
|
+
}
|
|
22694
|
+
if (previous && !this.kernel.historySummary(mount, ++__privateWrapper(this, _requestId2)._, previous, admitted).reachedBase) return;
|
|
22695
|
+
this.kernel.writeRef(mount, ++__privateWrapper(this, _requestId2)._, TRACKED_MAIN2, admitted);
|
|
22696
|
+
}
|
|
22697
|
+
this.acknowledged?.(workspace, { previous, admitted, local });
|
|
22698
|
+
if (local !== admitted) link.dirty = true;
|
|
22699
|
+
};
|
|
22700
|
+
/** This replica's own batch was judged but its admitted main cannot become the tracked base: the
|
|
22701
|
+
* custodian refused an intent or re-committed the offers on its own tip. The write's live grace
|
|
22702
|
+
* is over, so the ordinary round runs now. A reconnect hint would not do: the grace already
|
|
22703
|
+
* left the follow due, and a due follow ignores reconnects. */
|
|
22704
|
+
declined_fn = function(workspace) {
|
|
22705
|
+
const link = __privateGet(this, _links).get(workspace);
|
|
22706
|
+
if (link) {
|
|
22707
|
+
link.stream = void 0;
|
|
22708
|
+
link.convergeDue = void 0;
|
|
22709
|
+
}
|
|
22710
|
+
if (this.declined) this.declined(workspace);
|
|
22711
|
+
else this.remoteAdvanced?.(workspace);
|
|
22712
|
+
};
|
|
22380
22713
|
/** Upstream news is a frontier this replica has NEVER seen: neither its own head nor the
|
|
22381
22714
|
* upstream head it already recorded. Re-announcing a known frontier - which is all an
|
|
22382
22715
|
* upstream can do while this replica is ahead or held on a dependency - is not an event. */
|
|
@@ -22389,6 +22722,7 @@
|
|
|
22389
22722
|
}
|
|
22390
22723
|
const mount = workspaceMount(link.binding.workspace);
|
|
22391
22724
|
if (head === this.kernel.head(mount, ++__privateWrapper(this, _requestId2)._) || head === this.kernel.resolveRef(mount, ++__privateWrapper(this, _requestId2)._, "refs/remotes/nomos/main")) return;
|
|
22725
|
+
if (link.ownMains.includes(head) || link.stream?.unanswered.length) return;
|
|
22392
22726
|
this.remoteAdvanced?.(link.binding.workspace);
|
|
22393
22727
|
};
|
|
22394
22728
|
/** A placement frontier is news when this replica does not retain it. The ring is only a hint:
|
|
@@ -25635,7 +25969,8 @@
|
|
|
25635
25969
|
// ../src/runtime/correspondence_desk.ts
|
|
25636
25970
|
var REFETCH_AWAITS_PROVIDER = "nomos.runtime.refetch_awaits_provider";
|
|
25637
25971
|
var LOCAL_COPY_REFETCHING = "nomos.runtime.local_copy_refetching";
|
|
25638
|
-
var
|
|
25972
|
+
var LIVE_ADMISSION_GRACE_MILLIS = 1e4;
|
|
25973
|
+
var _kernel20, _retention3, _custodyStorage, _custody3, _sessions11, _credentials5, _placement3, _clock18, _outboxClock, _follows2, _followLane, _readability2, _origins3, _preserved, _dropReasons, _lawProductsImported2, _replacing, _providerServesSameCopy, _events4, _onSyncFrontier, _onSyncCompleted, _onPlacementFetched, _onShallowMount, _onOutboxHistoryRequired, _remoteOffers, _recoveries, _deliveries, _httpDeliveries, _syncs, _syncWorkspaces, _retries, _remoteDeliveryKeys, _outboxDueAt, _settledFollowReported, _openLinks, _liveAdmissionDue, _linkReported, _followsReported, _recoveredOutboxes, _outboxObservations, _outboxCursor, _httpDeliveryPaths, _executesCustodianObligations, _CorrespondenceDesk_instances, eligibleOutboxEntry_fn, settleDelivery_fn, nowMillis_fn2, liveAdmissionOverdue_fn, activeSyncEffect_fn, dropReason_fn, roundInFlight_fn, observeSyncResult_fn, syncFailed_fn, scheduleFromResult_fn, syncCompleted_fn, recordPreserved_fn, scheduleOutbox_fn;
|
|
25639
25974
|
var CorrespondenceDesk = class {
|
|
25640
25975
|
constructor(args) {
|
|
25641
25976
|
__privateAdd(this, _CorrespondenceDesk_instances);
|
|
@@ -25680,6 +26015,8 @@
|
|
|
25680
26015
|
__privateAdd(this, _settledFollowReported, /* @__PURE__ */ new Map());
|
|
25681
26016
|
/** Workspaces whose live link to their upstream is open right now. */
|
|
25682
26017
|
__privateAdd(this, _openLinks, /* @__PURE__ */ new Set());
|
|
26018
|
+
/** Local writes on an open link awaiting the custodian's live admission, by fallback deadline. */
|
|
26019
|
+
__privateAdd(this, _liveAdmissionDue, /* @__PURE__ */ new Map());
|
|
25683
26020
|
/** Last link status each session was told, so a replay never repeats itself. */
|
|
25684
26021
|
__privateAdd(this, _linkReported, /* @__PURE__ */ new Map());
|
|
25685
26022
|
/** The last follow summary published, so an unchanged summary is not re-sent. */
|
|
@@ -25691,6 +26028,8 @@
|
|
|
25691
26028
|
__privateAdd(this, _outboxCursor, /* @__PURE__ */ new Map());
|
|
25692
26029
|
__privateAdd(this, _httpDeliveryPaths, /* @__PURE__ */ new Map());
|
|
25693
26030
|
__privateAdd(this, _executesCustodianObligations);
|
|
26031
|
+
/** The live stream's count of local commits not yet offered and not yet admitted, per workspace. */
|
|
26032
|
+
__publicField(this, "streamProgress");
|
|
25694
26033
|
__privateSet(this, _kernel20, args.kernel);
|
|
25695
26034
|
__privateSet(this, _retention3, args.retention);
|
|
25696
26035
|
__privateSet(this, _custodyStorage, args.custodyStorage);
|
|
@@ -25838,10 +26177,68 @@
|
|
|
25838
26177
|
*/
|
|
25839
26178
|
workspaceFrontierChanged(workspace) {
|
|
25840
26179
|
this.wakeOutbox(workspace);
|
|
25841
|
-
__privateGet(this,
|
|
26180
|
+
if (__privateGet(this, _openLinks).has(workspace)) {
|
|
26181
|
+
if (!__privateGet(this, _liveAdmissionDue).has(workspace)) {
|
|
26182
|
+
__privateGet(this, _liveAdmissionDue).set(workspace, __privateMethod(this, _CorrespondenceDesk_instances, nowMillis_fn2).call(this) + LIVE_ADMISSION_GRACE_MILLIS);
|
|
26183
|
+
__privateGet(this, _followLane).schedule(workspace, LIVE_ADMISSION_GRACE_MILLIS);
|
|
26184
|
+
}
|
|
26185
|
+
} else {
|
|
26186
|
+
__privateGet(this, _followLane).observed(workspace);
|
|
26187
|
+
}
|
|
25842
26188
|
__privateGet(this, _followLane).dependencyAdvanced(workspace);
|
|
25843
26189
|
this.reportFollows();
|
|
25844
26190
|
}
|
|
26191
|
+
/**
|
|
26192
|
+
* The custodian's admission arrived over the live link and moved the tracked base. When it
|
|
26193
|
+
* covers every local write, no HTTP round is owed. Sessions observe the same completed-sync result
|
|
26194
|
+
* a round would report, so "awaiting sync" clears from the admission itself.
|
|
26195
|
+
*/
|
|
26196
|
+
/**
|
|
26197
|
+
* The custodian admitted these intents of this replica's live batch. Sessions observe them exactly
|
|
26198
|
+
* as an HTTP round reports intents it admitted, so each write's receipt converges on admission.
|
|
26199
|
+
*/
|
|
26200
|
+
liveIntentsAdmitted(workspace, intentIds, local) {
|
|
26201
|
+
const event = create(SyncCompletedSchema, {
|
|
26202
|
+
reason: "live-admission",
|
|
26203
|
+
result: {
|
|
26204
|
+
workspace,
|
|
26205
|
+
currentHead: local,
|
|
26206
|
+
stillAhead: true,
|
|
26207
|
+
admitted: BigInt(intentIds.length),
|
|
26208
|
+
admittedIntentIds: [...intentIds],
|
|
26209
|
+
convergedIntentIds: [...intentIds]
|
|
26210
|
+
}
|
|
26211
|
+
});
|
|
26212
|
+
for (const binding of __privateGet(this, _sessions11).sessions()) {
|
|
26213
|
+
if (binding.workspace === workspace) __privateGet(this, _events4).emit(binding.session, { case: "syncCompleted", value: event });
|
|
26214
|
+
}
|
|
26215
|
+
}
|
|
26216
|
+
liveAdmissionAcknowledged(workspace, ack) {
|
|
26217
|
+
var _a, _b;
|
|
26218
|
+
const stillAhead = ack.local !== ack.admitted;
|
|
26219
|
+
if (!stillAhead) __privateGet(this, _liveAdmissionDue).delete(workspace);
|
|
26220
|
+
(_a = __privateGet(this, _onSyncFrontier)) == null ? void 0 : _a.call(this, workspace, ack.local, false);
|
|
26221
|
+
const event = create(SyncCompletedSchema, {
|
|
26222
|
+
reason: "live-admission",
|
|
26223
|
+
result: { workspace, previousHead: ack.previous, currentHead: ack.local, stillAhead }
|
|
26224
|
+
});
|
|
26225
|
+
for (const binding of __privateGet(this, _sessions11).sessions()) {
|
|
26226
|
+
if (binding.workspace !== workspace) continue;
|
|
26227
|
+
__privateGet(this, _events4).emit(binding.session, { case: "syncCompleted", value: event });
|
|
26228
|
+
(_b = __privateGet(this, _onSyncCompleted)) == null ? void 0 : _b.call(this, binding.session, event);
|
|
26229
|
+
}
|
|
26230
|
+
this.reportFollows();
|
|
26231
|
+
}
|
|
26232
|
+
/**
|
|
26233
|
+
* The custodian judged this workspace's own live batch but its admitted main is not local history
|
|
26234
|
+
* (a refusal, or offers re-committed on a moved tip). Nothing more will arrive on the link for
|
|
26235
|
+
* that write, so the grace ends and one ordinary round converges now.
|
|
26236
|
+
*/
|
|
26237
|
+
liveAdmissionDeclined(workspace) {
|
|
26238
|
+
__privateGet(this, _liveAdmissionDue).delete(workspace);
|
|
26239
|
+
__privateGet(this, _followLane).observed(workspace);
|
|
26240
|
+
this.reportFollows();
|
|
26241
|
+
}
|
|
25845
26242
|
/** Received custody can release correspondence and foreign-read dependencies,
|
|
25846
26243
|
* but is not newly authored work to send back to its upstream. Recovery is
|
|
25847
26244
|
* driven separately by missing history, reconnects and provider announcements.
|
|
@@ -25896,6 +26293,7 @@
|
|
|
25896
26293
|
replicaLinkChanged(workspace, open) {
|
|
25897
26294
|
if (open) __privateGet(this, _openLinks).add(workspace);
|
|
25898
26295
|
else __privateGet(this, _openLinks).delete(workspace);
|
|
26296
|
+
if (!open && __privateGet(this, _liveAdmissionDue).delete(workspace)) __privateGet(this, _followLane).observed(workspace);
|
|
25899
26297
|
this.reportLinkStatus(workspace);
|
|
25900
26298
|
this.reportFollows();
|
|
25901
26299
|
}
|
|
@@ -25934,6 +26332,7 @@
|
|
|
25934
26332
|
const dueAt2 = state.case === ReplicaFollowPhase.Due || state.case === ReplicaFollowPhase.ReplacingLocal ? state.dueAtUnixMillis : void 0;
|
|
25935
26333
|
const attempt = state.case === ReplicaFollowPhase.Running || state.case === ReplicaFollowPhase.Offline || state.case === ReplicaFollowPhase.InvalidCredential || state.case === ReplicaFollowPhase.Backoff || state.case === ReplicaFollowPhase.ReplacingLocal ? state.attempt : void 0;
|
|
25936
26334
|
const activeEffect = state.case === ReplicaFollowPhase.Running ? __privateMethod(this, _CorrespondenceDesk_instances, activeSyncEffect_fn).call(this, workspace) : void 0;
|
|
26335
|
+
const stream = this.streamProgress?.(workspace);
|
|
25937
26336
|
return [create(FollowObservationSchema, {
|
|
25938
26337
|
workspace,
|
|
25939
26338
|
phase,
|
|
@@ -25942,7 +26341,8 @@
|
|
|
25942
26341
|
...retryAt === void 0 ? {} : { retryAtUnixMillis: BigInt(retryAt) },
|
|
25943
26342
|
...dueAt2 === void 0 ? {} : { dueAtUnixMillis: BigInt(dueAt2) },
|
|
25944
26343
|
...attempt === void 0 ? {} : { attempt },
|
|
25945
|
-
...activeEffect === void 0 ? {} : { activeEffect }
|
|
26344
|
+
...activeEffect === void 0 ? {} : { activeEffect },
|
|
26345
|
+
...stream === void 0 ? {} : { unsent: stream.unsent, unacknowledged: stream.unacknowledged }
|
|
25946
26346
|
})];
|
|
25947
26347
|
});
|
|
25948
26348
|
const key = JSON.stringify({
|
|
@@ -25957,7 +26357,9 @@
|
|
|
25957
26357
|
item.retryAtUnixMillis?.toString(),
|
|
25958
26358
|
item.dueAtUnixMillis?.toString(),
|
|
25959
26359
|
item.attempt,
|
|
25960
|
-
item.activeEffect
|
|
26360
|
+
item.activeEffect,
|
|
26361
|
+
item.unsent,
|
|
26362
|
+
item.unacknowledged
|
|
25961
26363
|
])
|
|
25962
26364
|
});
|
|
25963
26365
|
if (!force && key === __privateGet(this, _followsReported)) return;
|
|
@@ -26038,6 +26440,7 @@
|
|
|
26038
26440
|
if (next.at > now) return { nextAfterMillis: next.at - now };
|
|
26039
26441
|
const { workspace } = next;
|
|
26040
26442
|
if (next.kind === "sync") {
|
|
26443
|
+
__privateMethod(this, _CorrespondenceDesk_instances, liveAdmissionOverdue_fn).call(this, workspace, now);
|
|
26041
26444
|
const paper = __privateGet(this, _followLane).reserve(requestId, workspace);
|
|
26042
26445
|
__privateGet(this, _events4).instant("peer.follow.paper-reserved", {
|
|
26043
26446
|
request: create(RuntimeRequestSchema, { protocolVersion: 2, requestId }),
|
|
@@ -26575,6 +26978,7 @@
|
|
|
26575
26978
|
_outboxDueAt = new WeakMap();
|
|
26576
26979
|
_settledFollowReported = new WeakMap();
|
|
26577
26980
|
_openLinks = new WeakMap();
|
|
26981
|
+
_liveAdmissionDue = new WeakMap();
|
|
26578
26982
|
_linkReported = new WeakMap();
|
|
26579
26983
|
_followsReported = new WeakMap();
|
|
26580
26984
|
_recoveredOutboxes = new WeakMap();
|
|
@@ -26617,6 +27021,16 @@
|
|
|
26617
27021
|
retryAtMillis: result.retryAtMillis
|
|
26618
27022
|
});
|
|
26619
27023
|
};
|
|
27024
|
+
nowMillis_fn2 = function() {
|
|
27025
|
+
return Number(__privateGet(this, _clock18).unixNanoseconds() / 1000000n);
|
|
27026
|
+
};
|
|
27027
|
+
/** A live write whose admission did not arrive in time is owed an ordinary round now. */
|
|
27028
|
+
liveAdmissionOverdue_fn = function(workspace, now) {
|
|
27029
|
+
const due2 = __privateGet(this, _liveAdmissionDue).get(workspace);
|
|
27030
|
+
if (due2 === void 0 || due2 > now) return;
|
|
27031
|
+
__privateGet(this, _liveAdmissionDue).delete(workspace);
|
|
27032
|
+
__privateGet(this, _followLane).observed(workspace);
|
|
27033
|
+
};
|
|
26620
27034
|
activeSyncEffect_fn = function(workspace) {
|
|
26621
27035
|
for (const [workId2, round] of __privateGet(this, _syncWorkspaces)) {
|
|
26622
27036
|
if (round.workspace !== workspace) continue;
|
|
@@ -27166,9 +27580,9 @@
|
|
|
27166
27580
|
})
|
|
27167
27581
|
};
|
|
27168
27582
|
}
|
|
27169
|
-
const
|
|
27170
|
-
if (
|
|
27171
|
-
return __privateGet(this, _reads).current(
|
|
27583
|
+
const inFlight2 = __privateGet(this, _pendingByRoot).get(command.rootWorkspace);
|
|
27584
|
+
if (inFlight2) {
|
|
27585
|
+
return __privateGet(this, _reads).current(inFlight2);
|
|
27172
27586
|
}
|
|
27173
27587
|
const local = __privateMethod(this, _IdentityDesk_instances, readLocalSource_fn).call(this, request, command);
|
|
27174
27588
|
if (local) return { case: "ready", value: local };
|
|
@@ -27542,9 +27956,11 @@
|
|
|
27542
27956
|
// ../src/runtime/peer_maintenance_scheduler.ts
|
|
27543
27957
|
init_define_NOMOS_KERNEL_RELEASE();
|
|
27544
27958
|
init_shims();
|
|
27545
|
-
var
|
|
27959
|
+
var FOREGROUND_QUIET_NANOSECONDS = 400000000n;
|
|
27960
|
+
var FOREGROUND_HOLD_NANOSECONDS = 3000000000n;
|
|
27961
|
+
var _readRevision, _readNotBeforeNanoseconds, _clock19, _reads2, _residency, _live, _protectedResidents, _foregroundBusy, _sessionlessNotBeforeNanoseconds, _backgroundNotBeforeNanoseconds, _backgroundHeldSinceNanoseconds;
|
|
27546
27962
|
var PeerMaintenanceScheduler = class {
|
|
27547
|
-
constructor(clock, reads, residency, live, protectedResidents, interactionFirstMillis) {
|
|
27963
|
+
constructor(clock, reads, residency, live, protectedResidents, interactionFirstMillis, foregroundBusy = () => false) {
|
|
27548
27964
|
__privateAdd(this, _readRevision, 0);
|
|
27549
27965
|
__privateAdd(this, _readNotBeforeNanoseconds, 0n);
|
|
27550
27966
|
__privateAdd(this, _clock19);
|
|
@@ -27552,8 +27968,13 @@
|
|
|
27552
27968
|
__privateAdd(this, _residency);
|
|
27553
27969
|
__privateAdd(this, _live);
|
|
27554
27970
|
__privateAdd(this, _protectedResidents);
|
|
27971
|
+
__privateAdd(this, _foregroundBusy);
|
|
27555
27972
|
/** Until this instant, maintenance no interaction waits on is held (see interactionOpened). */
|
|
27556
27973
|
__privateAdd(this, _sessionlessNotBeforeNanoseconds, 0n);
|
|
27974
|
+
/** Until this instant, background-only warming (no read waits on it) yields to the foreground. */
|
|
27975
|
+
__privateAdd(this, _backgroundNotBeforeNanoseconds, 0n);
|
|
27976
|
+
__privateAdd(this, _backgroundHeldSinceNanoseconds, 0n);
|
|
27977
|
+
__privateSet(this, _foregroundBusy, foregroundBusy);
|
|
27557
27978
|
__privateSet(this, _clock19, clock);
|
|
27558
27979
|
__privateSet(this, _reads2, reads);
|
|
27559
27980
|
__privateSet(this, _residency, residency);
|
|
@@ -27569,8 +27990,20 @@
|
|
|
27569
27990
|
__privateSet(this, _sessionlessNotBeforeNanoseconds, 0n);
|
|
27570
27991
|
__privateSet(this, _readNotBeforeNanoseconds, 0n);
|
|
27571
27992
|
}
|
|
27993
|
+
/** A foreground request arrived: background-only warming waits for a quiet moment after it, so
|
|
27994
|
+
* an open's own requests never queue behind a command or closure warm on the one kernel thread. */
|
|
27995
|
+
foregroundActivity() {
|
|
27996
|
+
const now = __privateGet(this, _clock19).monotonicNanoseconds();
|
|
27997
|
+
if (now >= __privateGet(this, _backgroundNotBeforeNanoseconds) + FOREGROUND_QUIET_NANOSECONDS) {
|
|
27998
|
+
__privateSet(this, _backgroundHeldSinceNanoseconds, now);
|
|
27999
|
+
}
|
|
28000
|
+
const quiet2 = now + FOREGROUND_QUIET_NANOSECONDS;
|
|
28001
|
+
const cap = __privateGet(this, _backgroundHeldSinceNanoseconds) + FOREGROUND_HOLD_NANOSECONDS;
|
|
28002
|
+
__privateSet(this, _backgroundNotBeforeNanoseconds, quiet2 < cap ? quiet2 : cap);
|
|
28003
|
+
}
|
|
27572
28004
|
/** Advance at most one due unit of each independent local maintenance lane. */
|
|
27573
28005
|
drive() {
|
|
28006
|
+
if (__privateGet(this, _foregroundBusy).call(this)) this.foregroundActivity();
|
|
27574
28007
|
const now = __privateGet(this, _clock19).monotonicNanoseconds();
|
|
27575
28008
|
let readWake;
|
|
27576
28009
|
if (__privateGet(this, _reads2).hasPending()) {
|
|
@@ -27581,7 +28014,11 @@
|
|
|
27581
28014
|
if (now < __privateGet(this, _readNotBeforeNanoseconds)) {
|
|
27582
28015
|
readWake = (__privateGet(this, _readNotBeforeNanoseconds) - now + 999999n) / 1000000n;
|
|
27583
28016
|
} else {
|
|
27584
|
-
const result = __privateGet(this, _reads2).tick(
|
|
28017
|
+
const result = __privateGet(this, _reads2).tick(
|
|
28018
|
+
void 0,
|
|
28019
|
+
__privateGet(this, _sessionlessNotBeforeNanoseconds),
|
|
28020
|
+
__privateGet(this, _backgroundNotBeforeNanoseconds)
|
|
28021
|
+
);
|
|
27585
28022
|
__privateSet(this, _readRevision, __privateGet(this, _reads2).revision);
|
|
27586
28023
|
if (!result.pending) {
|
|
27587
28024
|
__privateSet(this, _readNotBeforeNanoseconds, 0n);
|
|
@@ -27603,7 +28040,10 @@
|
|
|
27603
28040
|
_residency = new WeakMap();
|
|
27604
28041
|
_live = new WeakMap();
|
|
27605
28042
|
_protectedResidents = new WeakMap();
|
|
28043
|
+
_foregroundBusy = new WeakMap();
|
|
27606
28044
|
_sessionlessNotBeforeNanoseconds = new WeakMap();
|
|
28045
|
+
_backgroundNotBeforeNanoseconds = new WeakMap();
|
|
28046
|
+
_backgroundHeldSinceNanoseconds = new WeakMap();
|
|
27607
28047
|
|
|
27608
28048
|
// ../src/runtime/peer_background_scheduler.ts
|
|
27609
28049
|
init_define_NOMOS_KERNEL_RELEASE();
|
|
@@ -28438,7 +28878,8 @@
|
|
|
28438
28878
|
}
|
|
28439
28879
|
var INTERACTIVE_PEER_CLASSES = /* @__PURE__ */ new Set(["personal-device", "browser"]);
|
|
28440
28880
|
var INTERACTION_FIRST_MILLIS = 15e3;
|
|
28441
|
-
var
|
|
28881
|
+
var READ_READINESS_ONLY = 1n << 62n;
|
|
28882
|
+
var _kernel25, _sessions14, _interactivePeer, _interaction, _trace13, _credentials7, _credentialRecovery, _deviceIdentity, _receivingGroup2, _modelAdoption, _deviceChallenges, _enrolledCapabilities, _custody4, _readability3, _origins5, _seat2, _custodyAdmission, _correspondence3, _birthCustody, _placement5, _access, _identity2, _custodianPlacement, _identityRecovery, _queries8, _application3, _compatibility2, _custodyVerification, _commandPreparation, _applicationReadiness, _authenticationReadiness, _lawPackages, _readMaintenance, _readResponses, _residency4, _residencyPins, _subscriptions5, _follows3, _replicaInventory, _placementDiscovery2, _live3, _records4, _historicQueries, _authoringPreflight, _foregroundWork, _recovery, _lifecycle, _maintenance2, _background2, _paperSlots, _retentionObserver, _admissionDurability, _historyAcquisition, _responses, _PeerOffice_instances, fenced_fn, handleRequest_fn, localCopyUnreadable_fn, probeLocalCopyFormat_fn, protectedResidents_fn, bindInteraction_fn, keepCustodianPlacement_fn, dispatchRequest_fn, historyCredentialCapability_fn, preferredCredentialCapability_fn, correspondenceResponse_fn, authenticationReadinessResponse_fn, completedKernelCall_fn, modelAdoptionResponse_fn, receivingGroupResponse_fn, deviceIdentityResponse_fn, deviceChallengeFor_fn, deviceChallengeForCapability_fn, credentialRecoveryResponse_fn, afterCredentialKernelCall_fn, acknowledgedWhenDurable_fn, admissionDurabilityResponse_fn, birthCustodyResponse_fn, identityResponse_fn, identityRecoveryResponse_fn, response_fn, failure_fn, custodyRequired_fn, kernelResidencyRequired_fn, candidateCustodyRequired_fn;
|
|
28442
28883
|
var PeerOffice = class {
|
|
28443
28884
|
constructor(kernel, credentials, profile, observations, custodyStorage, peerDeskStore) {
|
|
28444
28885
|
__privateAdd(this, _PeerOffice_instances);
|
|
@@ -28493,6 +28934,9 @@
|
|
|
28493
28934
|
__privateAdd(this, _records4);
|
|
28494
28935
|
__privateAdd(this, _historicQueries);
|
|
28495
28936
|
__privateAdd(this, _authoringPreflight);
|
|
28937
|
+
/** Application procedures waiting on an effect: background warming must not take the kernel
|
|
28938
|
+
* thread from under them (their effect's completion would queue behind it). */
|
|
28939
|
+
__privateAdd(this, _foregroundWork, /* @__PURE__ */ new Set());
|
|
28496
28940
|
__privateAdd(this, _recovery);
|
|
28497
28941
|
__privateAdd(this, _lifecycle);
|
|
28498
28942
|
__privateAdd(this, _maintenance2);
|
|
@@ -28520,6 +28964,9 @@
|
|
|
28520
28964
|
__privateGet(this, _residencyPins).touch(workspace);
|
|
28521
28965
|
__privateGet(this, _residency4).touch(workspace);
|
|
28522
28966
|
}));
|
|
28967
|
+
if (profile.trustsCustodianHistory !== void 0) {
|
|
28968
|
+
__privateGet(this, _kernel25).configurePeer(profile.trustsCustodianHistory);
|
|
28969
|
+
}
|
|
28523
28970
|
__privateSet(this, _lawPackages, new LawPackageDesk(__privateGet(this, _kernel25)));
|
|
28524
28971
|
__privateSet(this, _trace13, new RuntimeTrace(observations));
|
|
28525
28972
|
__privateSet(this, _live3, new LiveCorrespondenceDesk(__privateGet(this, _kernel25), __privateGet(this, _trace13), observations, profile.liveRelayOrigin));
|
|
@@ -28595,7 +29042,11 @@
|
|
|
28595
29042
|
__privateGet(this, _sessions14),
|
|
28596
29043
|
__privateGet(this, _trace13),
|
|
28597
29044
|
(session) => __privateGet(this, _readMaintenance).schedule(session, ReadMaintenanceCause.READ_DEBT),
|
|
28598
|
-
observations
|
|
29045
|
+
observations,
|
|
29046
|
+
// An interactive peer keeps its thread responsive while watches catch up.
|
|
29047
|
+
__privateGet(this, _interactivePeer) ? (run2) => {
|
|
29048
|
+
setTimeout(run2, 0);
|
|
29049
|
+
} : void 0
|
|
28599
29050
|
));
|
|
28600
29051
|
__privateSet(this, _application3, new ApplicationDesk({
|
|
28601
29052
|
onAdmitted: (session) => {
|
|
@@ -28610,7 +29061,9 @@
|
|
|
28610
29061
|
}));
|
|
28611
29062
|
__privateSet(this, _readResponses, new ReadResponseDesk(
|
|
28612
29063
|
observations,
|
|
28613
|
-
|
|
29064
|
+
// A waiting read advances read readiness only: it must never run a background command or
|
|
29065
|
+
// closure warm on the foreground's turn.
|
|
29066
|
+
() => __privateGet(this, _readMaintenance).tick(void 0, 0n, READ_READINESS_ONLY),
|
|
28614
29067
|
(request) => {
|
|
28615
29068
|
if (request.command.case !== "kernelCall") throw new Error("local read continuation lost its query");
|
|
28616
29069
|
return __privateGet(this, _application3).call(request, request.command.value);
|
|
@@ -28721,7 +29174,12 @@
|
|
|
28721
29174
|
return false;
|
|
28722
29175
|
};
|
|
28723
29176
|
__privateGet(this, _live3).remoteAdvanced = (workspace) => __privateGet(this, _correspondence3).replicaLinkOpened(workspace);
|
|
29177
|
+
__privateGet(this, _live3).declined = (workspace) => __privateGet(this, _correspondence3).liveAdmissionDeclined(workspace);
|
|
29178
|
+
__privateGet(this, _live3).acknowledged = (workspace, ack) => __privateGet(this, _correspondence3).liveAdmissionAcknowledged(workspace, ack);
|
|
29179
|
+
__privateGet(this, _live3).intentsAdmitted = (workspace, intentIds, local) => __privateGet(this, _correspondence3).liveIntentsAdmitted(workspace, intentIds, local);
|
|
28724
29180
|
__privateGet(this, _live3).placementAdvanced = (workspace) => __privateGet(this, _correspondence3).replicaPlacementAnnounced(workspace);
|
|
29181
|
+
__privateGet(this, _live3).progressChanged = () => __privateGet(this, _correspondence3).reportFollows();
|
|
29182
|
+
__privateGet(this, _correspondence3).streamProgress = (workspace) => __privateGet(this, _live3).progress(workspace);
|
|
28725
29183
|
__privateSet(this, _identity2, new IdentityDesk({
|
|
28726
29184
|
kernel: __privateGet(this, _kernel25),
|
|
28727
29185
|
queries: __privateGet(this, _queries8),
|
|
@@ -28955,7 +29413,8 @@
|
|
|
28955
29413
|
__privateGet(this, _live3),
|
|
28956
29414
|
() => __privateMethod(this, _PeerOffice_instances, protectedResidents_fn).call(this),
|
|
28957
29415
|
// An application peer: the user's open is never queued behind another workspace's upkeep.
|
|
28958
|
-
profile.classes.some((peerClass) => INTERACTIVE_PEER_CLASSES.has(peerClass)) ? INTERACTION_FIRST_MILLIS : void 0
|
|
29416
|
+
profile.classes.some((peerClass) => INTERACTIVE_PEER_CLASSES.has(peerClass)) ? INTERACTION_FIRST_MILLIS : void 0,
|
|
29417
|
+
() => __privateGet(this, _foregroundWork).size > 0
|
|
28959
29418
|
));
|
|
28960
29419
|
__privateSet(this, _background2, new PeerBackgroundScheduler(
|
|
28961
29420
|
__privateGet(this, _subscriptions5),
|
|
@@ -29020,15 +29479,15 @@
|
|
|
29020
29479
|
*/
|
|
29021
29480
|
nextBackgroundPaper(requestId, retentionOnly = false, excludedWorkspaces = /* @__PURE__ */ new Set()) {
|
|
29022
29481
|
if (retentionOnly) return __privateGet(this, _background2).next(requestId, true, excludedWorkspaces);
|
|
29023
|
-
const
|
|
29482
|
+
const inFlight2 = __privateGet(this, _paperSlots).inFlight();
|
|
29024
29483
|
let paper;
|
|
29025
|
-
if (
|
|
29484
|
+
if (inFlight2.size === 0) {
|
|
29026
29485
|
paper = __privateGet(this, _background2).next(requestId, false, excludedWorkspaces);
|
|
29027
29486
|
} else {
|
|
29028
29487
|
if (__privateGet(this, _paperSlots).full()) return {};
|
|
29029
29488
|
const converging = __privateGet(this, _correspondence3).convergingWorkspaces();
|
|
29030
29489
|
paper = __privateGet(this, _background2).nextBeside(requestId, {
|
|
29031
|
-
has: (workspace) => __privateGet(this, _paperSlots).urgent(workspace) && !
|
|
29490
|
+
has: (workspace) => __privateGet(this, _paperSlots).urgent(workspace) && !inFlight2.has(workspace) && !converging.has(workspace) && !excludedWorkspaces.has(workspace)
|
|
29032
29491
|
});
|
|
29033
29492
|
}
|
|
29034
29493
|
if (paper.frame !== void 0 && paper.workspace !== void 0) {
|
|
@@ -29043,8 +29502,14 @@
|
|
|
29043
29502
|
/** The wire boundary alone owns Runtime v2 encoding/decoding. */
|
|
29044
29503
|
invoke(requestProtobuf) {
|
|
29045
29504
|
const request = decodeRuntimeV2Request(requestProtobuf);
|
|
29505
|
+
const continued = request.command.case === "continueCorrespondence" ? request.command.value.workId : void 0;
|
|
29506
|
+
const foreground = continued === void 0 ? request.command.case !== "socketReceipt" : __privateGet(this, _foregroundWork).delete(continued);
|
|
29507
|
+
if (foreground) __privateGet(this, _maintenance2).foregroundActivity();
|
|
29046
29508
|
__privateGet(this, _origins5).observeReceipt(request);
|
|
29047
29509
|
const response = __privateMethod(this, _PeerOffice_instances, fenced_fn).call(this, __privateMethod(this, _PeerOffice_instances, handleRequest_fn).call(this, request));
|
|
29510
|
+
if (foreground && response.outcome.case === "correspondencePending") {
|
|
29511
|
+
__privateGet(this, _foregroundWork).add(response.outcome.value.workId);
|
|
29512
|
+
}
|
|
29048
29513
|
__privateGet(this, _paperSlots).answered(request, response, (session) => __privateGet(this, _sessions14).bindingIfPresent(session)?.workspace);
|
|
29049
29514
|
return { responseProtobuf: toBinary(RuntimeResponseSchema, response) };
|
|
29050
29515
|
}
|
|
@@ -29202,6 +29667,7 @@
|
|
|
29202
29667
|
_records4 = new WeakMap();
|
|
29203
29668
|
_historicQueries = new WeakMap();
|
|
29204
29669
|
_authoringPreflight = new WeakMap();
|
|
29670
|
+
_foregroundWork = new WeakMap();
|
|
29205
29671
|
_recovery = new WeakMap();
|
|
29206
29672
|
_lifecycle = new WeakMap();
|
|
29207
29673
|
_maintenance2 = new WeakMap();
|
|
@@ -30571,6 +31037,7 @@
|
|
|
30571
31037
|
if (pending.effect.case === "wake" && yieldWakeToCaller) return responseFrame;
|
|
30572
31038
|
const external = pending.effect.case === "refreshCredential" && credentialRefresh === externalPeerEffect || pending.effect.case === "deviceIdentity" && deviceIdentity === externalPeerEffect || pending.effect.case === "lawPackage" && lawPackage === externalPeerEffect || pending.effect.case === "consoleEnrolment";
|
|
30573
31039
|
if (external && !performExternalEffect2) return responseFrame;
|
|
31040
|
+
const effectStarted = Date.now();
|
|
30574
31041
|
const receipt = external ? await performExternalEffect2(pending) : pending.effect.case === "http" ? await executeHttpEffect(pending.effect.value, fetchImpl) : pending.effect.case === "gitFetch" ? await executeGitFetchWithAlongside(pending.effect.value, fetchImpl) : pending.effect.case === "gitPush" ? await executeGitPushEffect(pending.effect.value, fetchImpl) : pending.effect.case === "persistBornCustody" ? create(PeerEffectReceiptSchema, {
|
|
30575
31042
|
effectId: pending.effect.value.effectId,
|
|
30576
31043
|
outcome: {
|
|
@@ -30583,6 +31050,7 @@
|
|
|
30583
31050
|
}) : pending.effect.case === "retainFrontier" ? await executeRetainFrontierEffect(pending.effect.value, custody) : pending.effect.case === "wake" ? await executeWakeEffect(pending.effect.value) : pending.effect.case === "refreshCredential" ? await executeCredentialRefreshEffect(pending.effect.value, credentialRefresh) : pending.effect.case === "deviceIdentity" ? await executeDeviceIdentityEffect(pending.effect.value, deviceIdentity) : pending.effect.case === "lawPackage" ? await executeLawPackageEffect(pending.effect.value, lawPackage) : pending.effect.case === "historyAcquisition" ? await executeHistoryAcquisitionEffect(pending.effect.value, custody) : (() => {
|
|
30584
31051
|
throw new Error(`correspondence work '${pending.workId}' has no effect`);
|
|
30585
31052
|
})();
|
|
31053
|
+
reportSlowEffect(pending, receipt, Date.now() - effectStarted, external);
|
|
30586
31054
|
responseFrame = runner.handleFrame(toBinary(RuntimeRequestSchema, create(RuntimeRequestSchema, {
|
|
30587
31055
|
protocolVersion: response.protocolVersion,
|
|
30588
31056
|
requestId: response.requestId,
|
|
@@ -30596,6 +31064,36 @@
|
|
|
30596
31064
|
})));
|
|
30597
31065
|
}
|
|
30598
31066
|
}
|
|
31067
|
+
var slowEffectObserver;
|
|
31068
|
+
function observeSlowPeerEffects(observer) {
|
|
31069
|
+
slowEffectObserver = observer;
|
|
31070
|
+
}
|
|
31071
|
+
function reportSlowEffect(pending, receipt, elapsedMillis2, external) {
|
|
31072
|
+
if (!slowEffectObserver || elapsedMillis2 < 500) return;
|
|
31073
|
+
let target3 = "";
|
|
31074
|
+
if (pending.effect.case === "http") {
|
|
31075
|
+
try {
|
|
31076
|
+
const raw = pending.effect.value.url;
|
|
31077
|
+
new URL(raw);
|
|
31078
|
+
target3 = raw.replace(/^[a-z][a-z0-9+.-]*:\/\//i, "").replace(/[?#].*$/, "");
|
|
31079
|
+
} catch {
|
|
31080
|
+
}
|
|
31081
|
+
}
|
|
31082
|
+
const delay = pending.effect.case === "wake" ? pending.effect.value.delayMillis : void 0;
|
|
31083
|
+
try {
|
|
31084
|
+
slowEffectObserver(`[nomos-kernel-perf] ${JSON.stringify({
|
|
31085
|
+
op: "peer_effect",
|
|
31086
|
+
effect: pending.effect.case,
|
|
31087
|
+
work: pending.workId.split(":")[0],
|
|
31088
|
+
external,
|
|
31089
|
+
totalUs: elapsedMillis2 * 1e3,
|
|
31090
|
+
outcome: receipt.outcome.case,
|
|
31091
|
+
...target3 ? { target: target3 } : {},
|
|
31092
|
+
...delay !== void 0 ? { delayMillis: delay } : {}
|
|
31093
|
+
})}`);
|
|
31094
|
+
} catch {
|
|
31095
|
+
}
|
|
31096
|
+
}
|
|
30599
31097
|
async function executeHistoryAcquisitionEffect(effect, custody) {
|
|
30600
31098
|
try {
|
|
30601
31099
|
if (!custody.advanceHistory) throw new Error("platform shell has no history acquisition capability");
|
|
@@ -36157,6 +36655,8 @@
|
|
|
36157
36655
|
if (!repositoryResponse.ok) {
|
|
36158
36656
|
throw new Error(`custodian kernel repository ${repositoryUrl}: HTTP ${repositoryResponse.status}`);
|
|
36159
36657
|
}
|
|
36658
|
+
const controllerLawSha256 = repositoryResponse.headers.get("x-nomos-controller-law-sha256") ?? void 0;
|
|
36659
|
+
const controllerLawSize = Number(repositoryResponse.headers.get("x-nomos-controller-law-size") ?? NaN);
|
|
36160
36660
|
const resource = requireSingleOsgiResource(await repositoryResponse.text());
|
|
36161
36661
|
const missing = Object.entries(args.release.contracts).filter(
|
|
36162
36662
|
([name, version]) => !resource.contracts.some((contract) => contract.name === name && contract.versions.includes(version))
|
|
@@ -36191,31 +36691,61 @@
|
|
|
36191
36691
|
{ sha256: resource.stageZeroLaw.contentSha256, size: resource.stageZeroLaw.contentSize },
|
|
36192
36692
|
"bootstrap.law.usdz"
|
|
36193
36693
|
) : await verified(`${base}/v1/runtime/bootstrap.law.usdz`, void 0, "bootstrap.law.usdz");
|
|
36194
|
-
const controllerLaw =
|
|
36694
|
+
const controllerLaw = controllerLawSha256 && /^[0-9a-f]{64}$/.test(controllerLawSha256) && Number.isSafeInteger(controllerLawSize) ? await verified(
|
|
36695
|
+
`${base}/v1/runtime/laws/${controllerLawSha256}/nomos.law.usdz`,
|
|
36696
|
+
{ sha256: controllerLawSha256, size: controllerLawSize },
|
|
36697
|
+
"nomos.law.usdz"
|
|
36698
|
+
) : await verified(`${base}/v1/runtime/nomos.law.usdz`, void 0, "nomos.law.usdz");
|
|
36195
36699
|
return { wasm, bootstrapLaw, controllerLaw, resource };
|
|
36196
36700
|
}
|
|
36197
36701
|
|
|
36198
36702
|
// ../../platform-shells/browser/peer.ts
|
|
36703
|
+
var READ_ONLY_COMMANDS = /* @__PURE__ */ new Set([
|
|
36704
|
+
"watch",
|
|
36705
|
+
"unwatch",
|
|
36706
|
+
"listWorkspaces",
|
|
36707
|
+
"historicQuery",
|
|
36708
|
+
"workspaceStatus",
|
|
36709
|
+
"listWorkspaceMoments",
|
|
36710
|
+
"readWorkspaceGenesis",
|
|
36711
|
+
"listChildWorkspaces",
|
|
36712
|
+
"continueLocalRead",
|
|
36713
|
+
"estimateWorkspaceTransfer",
|
|
36714
|
+
"previewLocalCopyDrop"
|
|
36715
|
+
]);
|
|
36716
|
+
function readsOnly(request) {
|
|
36717
|
+
const command = request.command;
|
|
36718
|
+
if (command.case === "kernelCall") return command.value.request?.operation.case === "query";
|
|
36719
|
+
return command.case !== void 0 && READ_ONLY_COMMANDS.has(command.case);
|
|
36720
|
+
}
|
|
36199
36721
|
async function openBrowserPeer(options) {
|
|
36722
|
+
const bootStarted = performance.now();
|
|
36200
36723
|
const progress = (stage) => {
|
|
36724
|
+
const elapsed = Math.round(performance.now() - bootStarted);
|
|
36201
36725
|
try {
|
|
36202
|
-
options.onBootProgress?.(stage);
|
|
36726
|
+
options.onBootProgress?.(`${elapsed}ms ${stage}`);
|
|
36203
36727
|
} catch {
|
|
36204
36728
|
}
|
|
36205
36729
|
};
|
|
36206
|
-
|
|
36730
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
36731
|
+
progress("opening browser custody and selecting Kernel artifacts");
|
|
36732
|
+
const selecting = selectReleaseKernel({
|
|
36733
|
+
base: options.base,
|
|
36734
|
+
repositoryUrl: options.kernelRepositoryUrl,
|
|
36735
|
+
release: options.release,
|
|
36736
|
+
fetchImpl: browserRuntimeFetch(options.base, fetchImpl, globalThis.caches, options.kernelRepositoryUrl),
|
|
36737
|
+
cache: options.kernelCache
|
|
36738
|
+
}).then((selected) => {
|
|
36739
|
+
progress("selected Kernel artifacts");
|
|
36740
|
+
return selected;
|
|
36741
|
+
});
|
|
36742
|
+
selecting.catch(() => {
|
|
36743
|
+
});
|
|
36207
36744
|
const storage = options.custodyStore ?? await openBrowserCustody(options.base);
|
|
36745
|
+
progress("opened browser custody");
|
|
36208
36746
|
storage.onCheckpoint = options.onCustodyCheckpoint;
|
|
36209
36747
|
try {
|
|
36210
|
-
|
|
36211
|
-
const fetchImpl = options.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
36212
|
-
const selected = await selectReleaseKernel({
|
|
36213
|
-
base: options.base,
|
|
36214
|
-
repositoryUrl: options.kernelRepositoryUrl,
|
|
36215
|
-
release: options.release,
|
|
36216
|
-
fetchImpl: browserRuntimeFetch(options.base, fetchImpl, globalThis.caches, options.kernelRepositoryUrl),
|
|
36217
|
-
cache: options.kernelCache
|
|
36218
|
-
});
|
|
36748
|
+
const selected = await selecting;
|
|
36219
36749
|
progress(`compiling Kernel ${selected.resource.contentSha256}`);
|
|
36220
36750
|
const wasmModule = await WebAssembly.compile(selected.wasm);
|
|
36221
36751
|
progress("opening Kernel machine");
|
|
@@ -36224,7 +36754,8 @@
|
|
|
36224
36754
|
bootstrapLawUsdz: selected.bootstrapLaw,
|
|
36225
36755
|
nomosLawUsdz: selected.controllerLaw,
|
|
36226
36756
|
replica: options.replica ?? storage.replica,
|
|
36227
|
-
trustRootPublicKey: options.trustRootPublicKey
|
|
36757
|
+
trustRootPublicKey: options.trustRootPublicKey,
|
|
36758
|
+
...options.onKernelStderr ? { observeStderr: options.onKernelStderr } : {}
|
|
36228
36759
|
}, storage.filesystem, storage.changed);
|
|
36229
36760
|
progress("opening Peer Office");
|
|
36230
36761
|
const kernelWork = new KernelWorkAccounting(options.onKernelWorkChanged, false);
|
|
@@ -36256,18 +36787,26 @@
|
|
|
36256
36787
|
options.lawPackage,
|
|
36257
36788
|
options.performExternalEffect
|
|
36258
36789
|
);
|
|
36790
|
+
const timings = /* @__PURE__ */ new WeakMap();
|
|
36259
36791
|
progress("peer ready");
|
|
36260
36792
|
return {
|
|
36261
36793
|
invoke: async (frame) => {
|
|
36262
36794
|
storage.assertUsable();
|
|
36795
|
+
const request = fromBinary(RuntimeRequestSchema, frame);
|
|
36796
|
+
const started = performance.now();
|
|
36263
36797
|
const result = await office.invoke({
|
|
36264
|
-
workspace:
|
|
36798
|
+
workspace: request.target?.workspace,
|
|
36265
36799
|
requestBytes: frame
|
|
36266
36800
|
});
|
|
36267
|
-
|
|
36801
|
+
const answered2 = performance.now();
|
|
36802
|
+
if (!readsOnly(request)) void storage.checkpoint().catch(() => {
|
|
36803
|
+
});
|
|
36804
|
+
timings.set(frame, { officeMs: answered2 - started, durableMs: performance.now() - answered2 });
|
|
36268
36805
|
return result;
|
|
36269
36806
|
},
|
|
36807
|
+
invokeTiming: (frame) => timings.get(frame),
|
|
36270
36808
|
kernelWorkSnapshot: () => kernelWork.snapshot(),
|
|
36809
|
+
durabilityState: () => storage.durabilityState(),
|
|
36271
36810
|
close: async () => {
|
|
36272
36811
|
await office.settleRetention();
|
|
36273
36812
|
office.close();
|
|
@@ -36314,6 +36853,102 @@
|
|
|
36314
36853
|
}
|
|
36315
36854
|
};
|
|
36316
36855
|
};
|
|
36856
|
+
var inFlight = /* @__PURE__ */ new Map();
|
|
36857
|
+
var workSpans = [];
|
|
36858
|
+
var activeWork;
|
|
36859
|
+
var observeKernelWork = (active) => {
|
|
36860
|
+
const now = Date.now();
|
|
36861
|
+
if (activeWork) workSpans.push({ ...activeWork, end: now });
|
|
36862
|
+
if (workSpans.length > 400) workSpans.splice(0, workSpans.length - 400);
|
|
36863
|
+
activeWork = active ? { name: `${active.family}/${active.operation}`, start: now } : void 0;
|
|
36864
|
+
};
|
|
36865
|
+
var workDuring = (from, to) => {
|
|
36866
|
+
const totals = /* @__PURE__ */ new Map();
|
|
36867
|
+
const spans = activeWork ? [...workSpans, { ...activeWork, end: to }] : workSpans;
|
|
36868
|
+
for (const span of spans) {
|
|
36869
|
+
const overlap = Math.min(span.end, to) - Math.max(span.start, from);
|
|
36870
|
+
if (overlap > 0) totals.set(span.name, (totals.get(span.name) ?? 0) + overlap);
|
|
36871
|
+
}
|
|
36872
|
+
return Object.fromEntries([...totals].sort((a, b) => b[1] - a[1]).slice(0, 8));
|
|
36873
|
+
};
|
|
36874
|
+
var burst = [];
|
|
36875
|
+
var burstTimer;
|
|
36876
|
+
var percentile = (values, q) => {
|
|
36877
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
36878
|
+
return Math.round(sorted[Math.min(sorted.length - 1, Math.floor(q * sorted.length))] ?? 0);
|
|
36879
|
+
};
|
|
36880
|
+
var recordBurstWrite = (write) => {
|
|
36881
|
+
const previous = burst.at(-1);
|
|
36882
|
+
if (previous) write.gapMs = write.sentAt - previous.sentAt;
|
|
36883
|
+
burst.push(write);
|
|
36884
|
+
if (burstTimer) clearTimeout(burstTimer);
|
|
36885
|
+
burstTimer = setTimeout(() => {
|
|
36886
|
+
const writes = burst;
|
|
36887
|
+
burst = [];
|
|
36888
|
+
burstTimer = void 0;
|
|
36889
|
+
if (writes.length < 5) return;
|
|
36890
|
+
const stat = (pick) => {
|
|
36891
|
+
const values = writes.map(pick).filter((value) => value !== void 0);
|
|
36892
|
+
return { p50: percentile(values, 0.5), p90: percentile(values, 0.9), max: percentile(values, 1) };
|
|
36893
|
+
};
|
|
36894
|
+
const behind = /* @__PURE__ */ new Map();
|
|
36895
|
+
for (const write2 of writes) for (const [name, ms] of Object.entries(write2.behind)) behind.set(name, (behind.get(name) ?? 0) + ms);
|
|
36896
|
+
const spanMs = writes.at(-1).sentAt + writes.at(-1).totalMs - writes[0].sentAt;
|
|
36897
|
+
send({ kind: "kernel-perf", line: `[nomos-kernel-perf] ${JSON.stringify({
|
|
36898
|
+
op: "peer_write_burst",
|
|
36899
|
+
writes: writes.length,
|
|
36900
|
+
spanMs,
|
|
36901
|
+
totalUs: Math.max(spanMs, 1e3) * 1e3,
|
|
36902
|
+
// Time between one write's arrival and the next: the application's own pace.
|
|
36903
|
+
gapMs: stat((write2) => write2.gapMs),
|
|
36904
|
+
dispatchMs: stat((write2) => write2.dispatchMs),
|
|
36905
|
+
officeMs: stat((write2) => write2.officeMs),
|
|
36906
|
+
durableMs: stat((write2) => write2.durableMs),
|
|
36907
|
+
totalMs: stat((write2) => write2.totalMs),
|
|
36908
|
+
kernelWorkMs: Object.fromEntries([...behind].sort((a, b) => b[1] - a[1]).slice(0, 10).map(([name, ms]) => [name, Math.round(ms)]))
|
|
36909
|
+
})}`.slice(0, 2e3) });
|
|
36910
|
+
}, 2e3);
|
|
36911
|
+
};
|
|
36912
|
+
var outstandingSince = /* @__PURE__ */ new Map();
|
|
36913
|
+
var reportedStalls = /* @__PURE__ */ new Set();
|
|
36914
|
+
var reportStalledStreams = (now) => {
|
|
36915
|
+
let states;
|
|
36916
|
+
try {
|
|
36917
|
+
states = liveStreamStates();
|
|
36918
|
+
} catch {
|
|
36919
|
+
return;
|
|
36920
|
+
}
|
|
36921
|
+
for (const state of states) {
|
|
36922
|
+
const outstanding = state.dirty || state.unansweredAgesMs.length > 0 || state.head !== void 0 && state.head !== state.tracked;
|
|
36923
|
+
if (!outstanding) {
|
|
36924
|
+
outstandingSince.delete(state.workspace);
|
|
36925
|
+
continue;
|
|
36926
|
+
}
|
|
36927
|
+
const since = outstandingSince.get(state.workspace) ?? now;
|
|
36928
|
+
outstandingSince.set(state.workspace, since);
|
|
36929
|
+
if (now - since < 5e3) continue;
|
|
36930
|
+
const key = JSON.stringify([state.workspace, state.link, state.dirty, state.sent, state.unansweredAgesMs.length, state.head, state.tracked, state.custodianLocal]);
|
|
36931
|
+
if (reportedStalls.has(key)) continue;
|
|
36932
|
+
reportedStalls.add(key);
|
|
36933
|
+
send({ kind: "kernel-perf", line: `[nomos-kernel-perf] ${JSON.stringify({
|
|
36934
|
+
op: "live_stream_stalled",
|
|
36935
|
+
failed: true,
|
|
36936
|
+
outstandingMs: now - since,
|
|
36937
|
+
...state
|
|
36938
|
+
})}`.slice(0, 2e3) });
|
|
36939
|
+
}
|
|
36940
|
+
};
|
|
36941
|
+
var describeCommand = (request) => {
|
|
36942
|
+
const parts = [request.command.case ?? "none"];
|
|
36943
|
+
const value = request.command.value;
|
|
36944
|
+
const operation = value?.request?.operation;
|
|
36945
|
+
if (operation?.case) parts.push(operation.case);
|
|
36946
|
+
const query = operation?.value?.query;
|
|
36947
|
+
if (query?.case) parts.push(query.case);
|
|
36948
|
+
const id = query?.value?.["queryId"] ?? query?.value?.["aggregateType"];
|
|
36949
|
+
if (typeof id === "string") parts.push(id);
|
|
36950
|
+
return parts.join(".");
|
|
36951
|
+
};
|
|
36317
36952
|
var performExternalEffect = async (pending) => {
|
|
36318
36953
|
const id = ++nextEffectId;
|
|
36319
36954
|
const received = new Promise((resolve, reject) => pendingEffects.set(id, { resolve, reject }));
|
|
@@ -36326,6 +36961,27 @@
|
|
|
36326
36961
|
if (booting) return booting;
|
|
36327
36962
|
if (!/^https?:\/\//.test(base)) return Promise.reject(new Error("Nomos peer runtime requires an HTTP(S) custodian origin"));
|
|
36328
36963
|
booting = (async () => {
|
|
36964
|
+
observeSlowPeerEffects((line) => send({ kind: "kernel-perf", line: line.slice(0, 2e3) }));
|
|
36965
|
+
observeSlowMaintenanceQuanta((line) => send({ kind: "kernel-perf", line: line.slice(0, 2e3) }));
|
|
36966
|
+
setInterval(() => {
|
|
36967
|
+
const now = Date.now();
|
|
36968
|
+
const stuck = [...inFlight.values()].filter((entry) => now - entry.invokedAt >= 2e3).map((entry) => {
|
|
36969
|
+
try {
|
|
36970
|
+
const request = fromBinary(RuntimeRequestSchema, entry.frame);
|
|
36971
|
+
return { command: request.command.case, workspace: request.target?.workspace, ageMs: now - entry.invokedAt };
|
|
36972
|
+
} catch {
|
|
36973
|
+
return { command: "undecodable", ageMs: now - entry.invokedAt };
|
|
36974
|
+
}
|
|
36975
|
+
});
|
|
36976
|
+
reportStalledStreams(now);
|
|
36977
|
+
if (stuck.length === 0) return;
|
|
36978
|
+
let durability;
|
|
36979
|
+
try {
|
|
36980
|
+
durability = peer?.durabilityState();
|
|
36981
|
+
} catch {
|
|
36982
|
+
}
|
|
36983
|
+
send({ kind: "kernel-perf", line: `[nomos-kernel-perf] ${JSON.stringify({ op: "peer_in_flight", stuck, durability })}`.slice(0, 2e3) });
|
|
36984
|
+
}, 5e3);
|
|
36329
36985
|
peer = await openBrowserPeer({
|
|
36330
36986
|
performExternalEffect,
|
|
36331
36987
|
credentialRefresh: externalPeerEffect,
|
|
@@ -36337,16 +36993,24 @@
|
|
|
36337
36993
|
profile: {
|
|
36338
36994
|
identity: `browser-${globalThis.crypto.randomUUID()}`,
|
|
36339
36995
|
classes: ["browser"],
|
|
36340
|
-
warmResidencyMillis: 86400000n
|
|
36996
|
+
warmResidencyMillis: 86400000n,
|
|
36997
|
+
// A browser follows its authenticated custodian and adopts the history it serves; keeping
|
|
36998
|
+
// that history honest is the custodian's job, done on every untrusted offer it receives.
|
|
36999
|
+
trustsCustodianHistory: true
|
|
36341
37000
|
},
|
|
36342
37001
|
postEvent: (frame) => send({ kind: "event", frame: toBase64(frame) }),
|
|
36343
37002
|
onCustodyCheckpoint: (timing) => send({ kind: "custody-perf", timing }),
|
|
37003
|
+
// The Kernel prints one phase breakdown for any operation over 100 ms. The worker has no console
|
|
37004
|
+
// the page's diagnostics see, so relay exactly those lines.
|
|
37005
|
+
onKernelStderr: (line) => {
|
|
37006
|
+
if (line.includes("[nomos-kernel-perf]")) send({ kind: "kernel-perf", line: line.slice(0, 8e3) });
|
|
37007
|
+
},
|
|
36344
37008
|
onBootProgress: (stage) => send({ kind: "boot-progress", stage }),
|
|
36345
|
-
onKernelWorkChanged: (active) => send({
|
|
37009
|
+
onKernelWorkChanged: (active) => (observeKernelWork(active), send({
|
|
36346
37010
|
kind: "kernel-work",
|
|
36347
37011
|
active: active ? toJsonString(ActiveKernelWorkSchema, active) : "",
|
|
36348
37012
|
snapshot: peer ? toJsonString(KernelWorkSnapshotSchema, peer.kernelWorkSnapshot()) : ""
|
|
36349
|
-
}),
|
|
37013
|
+
})),
|
|
36350
37014
|
kernelCache: kernelCache()
|
|
36351
37015
|
});
|
|
36352
37016
|
if (disposing) return;
|
|
@@ -36373,9 +37037,54 @@
|
|
|
36373
37037
|
break;
|
|
36374
37038
|
}
|
|
36375
37039
|
const currentPeer = peer;
|
|
36376
|
-
|
|
36377
|
-
|
|
36378
|
-
|
|
37040
|
+
const invokedAt = Date.now();
|
|
37041
|
+
const requestFrame = fromBase64(message.frame);
|
|
37042
|
+
inFlight.set(message.id, { invokedAt, frame: requestFrame });
|
|
37043
|
+
const reportSlow = (frame, outcome) => {
|
|
37044
|
+
const elapsed = Date.now() - (message.sentAt ?? invokedAt);
|
|
37045
|
+
if (elapsed < 1e3) return;
|
|
37046
|
+
try {
|
|
37047
|
+
const request = fromBinary(RuntimeRequestSchema, frame);
|
|
37048
|
+
send({ kind: "kernel-perf", line: `[nomos-kernel-perf] ${JSON.stringify({
|
|
37049
|
+
op: "peer_request",
|
|
37050
|
+
command: describeCommand(request),
|
|
37051
|
+
workspace: request.target?.workspace,
|
|
37052
|
+
totalUs: elapsed * 1e3,
|
|
37053
|
+
outcome,
|
|
37054
|
+
waitedBehindMs: workDuring(message.sentAt ?? invokedAt, Date.now()),
|
|
37055
|
+
// Time the page's message sat queued while this thread was busy.
|
|
37056
|
+
dispatchDelayMs: message.sentAt === void 0 ? void 0 : invokedAt - message.sentAt
|
|
37057
|
+
})}` });
|
|
37058
|
+
} catch {
|
|
37059
|
+
}
|
|
37060
|
+
};
|
|
37061
|
+
void Promise.resolve().then(() => currentPeer.invoke(requestFrame)).then(
|
|
37062
|
+
(frame) => {
|
|
37063
|
+
inFlight.delete(message.id);
|
|
37064
|
+
reportSlow(requestFrame, "answered");
|
|
37065
|
+
try {
|
|
37066
|
+
const request = fromBinary(RuntimeRequestSchema, requestFrame);
|
|
37067
|
+
if (describeCommand(request).startsWith("kernelCall.offer")) {
|
|
37068
|
+
const sentAt = message.sentAt ?? invokedAt;
|
|
37069
|
+
const timing = currentPeer.invokeTiming(requestFrame);
|
|
37070
|
+
recordBurstWrite({
|
|
37071
|
+
sentAt,
|
|
37072
|
+
dispatchMs: invokedAt - sentAt,
|
|
37073
|
+
officeMs: timing?.officeMs ?? 0,
|
|
37074
|
+
durableMs: timing?.durableMs ?? 0,
|
|
37075
|
+
totalMs: Date.now() - sentAt,
|
|
37076
|
+
behind: workDuring(sentAt, Date.now())
|
|
37077
|
+
});
|
|
37078
|
+
}
|
|
37079
|
+
} catch {
|
|
37080
|
+
}
|
|
37081
|
+
send({ kind: "invoked", id: message.id, frame: toBase64(frame) });
|
|
37082
|
+
},
|
|
37083
|
+
(error) => {
|
|
37084
|
+
inFlight.delete(message.id);
|
|
37085
|
+
reportSlow(requestFrame, "failed");
|
|
37086
|
+
send({ kind: "invoked", id: message.id, error: errorText(error) });
|
|
37087
|
+
}
|
|
36379
37088
|
);
|
|
36380
37089
|
break;
|
|
36381
37090
|
case "effect-receipt": {
|