@alphauspkgs/blue-sdk-ts 1.0.51 → 1.0.52

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.
@@ -53,7 +53,7 @@ import type { Message } from "@bufbuild/protobuf";
53
53
  * Describes the file billing/v1/billing.proto.
54
54
  */
55
55
  export const file_billing_v1_billing: GenFile = /*@__PURE__*/
56
- fileDesc("ChhiaWxsaW5nL3YxL2JpbGxpbmcucHJvdG8SEmJsdWVhcGkuYmlsbGluZy52MSKgBAoMQmlsbGluZ0dyb3VwEhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYAyABKAkSEwoLY29tcGFueU5hbWUYByABKAkSDAoEdHlwZRgMIAEoCRIQCghoYXNDaGlsZBgNIAEoCBI+ChBiaWxsaW5nR3JvdXBJbmZvGAogASgLMiQuYmx1ZWFwaS5hcGkucmlwcGxlLkJpbGxpbmdHcm91cEluZm8SOgoOYWNjb3VudE9wdGlvbnMYCCABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnMSJgoIYWNjb3VudHMYBCADKAsyFC5ibHVlYXBpLmFwaS5BY2NvdW50EiIKBHRhZ3MYBiADKAsyFC5ibHVlYXBpLmFwaS5Db3N0VGFnEkgKD2ludm9pY2VTZXR0aW5ncxgFIAEoCzIvLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSSAoPYWRkaXRpb25hbEl0ZW1zGAsgASgLMi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cEFkZGl0aW9uYWxJdGVtcxIyCgphd3NPcHRpb25zGAkgASgLMh4uYmx1ZWFwaS5iaWxsaW5nLnYxLkF3c09wdGlvbnMioAEKG0JpbGxpbmdHcm91cEFkZGl0aW9uYWxJdGVtcxIpCgNhd3MYASADKAsyHC5ibHVlYXBpLmFwaS5BZGRpdGlvbmFsSXRlbXMSKwoFYXp1cmUYAiADKAsyHC5ibHVlYXBpLmFwaS5BZGRpdGlvbmFsSXRlbXMSKQoDZ2NwGAMgAygLMhwuYmx1ZWFwaS5hcGkuQWRkaXRpb25hbEl0ZW1zIu4BChtCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSQwoDYXdzGAEgASgLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cFZlbmRvcmVkSW52b2ljZVNldHRpbmcSRQoFYXp1cmUYAiABKAsyNi5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZxJDCgNnY3AYAyABKAsyNi5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZyLxAwoiQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZxIQCghjYWxjVHlwZRgBIAEoCRIUCgxkaXNjb3VudFJhdGUYAiABKAESFwoPc3Vic3RpdHV0aW9uRmVlGAMgASgJEhcKD3N1YnN0aXR1dGlvbkZpeBgEIAEoARIYChBzdWJzdGl0dXRpb25SYXRlGAUgASgBEhIKCnN1cHBvcnRGZWUYBiABKAkSEwoLc3VwcG9ydFJhdGUYByABKAESEgoKc3VwcG9ydEZpeBgIIAEoARIPCgd0YXhSYXRlGAkgASgBEhAKCGN1cnJlbmN5GAogASgJEhsKE2Rpc2NvdW50VGFyZ2V0VXNhZ2UYCyABKAkSIgoac3Vic3RpdHV0aW9uRmVlVGFyZ2V0VXNhZ2UYDCABKAkSGQoRZGlzY291bnRDYWxjTG9naWMYDSABKAkSIQoZc3Vic3RpdHV0aW9uRmVlQ2FsY1RhcmdldBgOIAEoCRIfChdzdWJzdGl0dXRpb25GZWVDYWxjVHlwZRgPIAEoCRIbChNzdXBwb3J0QW1vdW50VGFyZ2V0GBAgASgJEhwKFHN1cHBvcnRGZWVDYWxjVGFyZ2V0GBEgASgJEhwKFHN1cHBvcnRGZWVBZGp1c3RtZW50GBIgASgBIpIBChhMaXN0QmlsbGluZ0dyb3Vwc1JlcXVlc3QSLgoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sSDwoHdmVuZG9ycxgCIAEoCRIQCghjYWxjVHlwZRgDIAEoCRITCgtkaXNwbGF5Q29zdBgEIAEoCRIOCgZiZ1R5cGUYBSABKAkiswQKGUNyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3QSFgoOYmlsbGluZ0dyb3VwSWQYASABKAkSGAoQYmlsbGluZ0dyb3VwTmFtZRgCIAEoCRITCgtjb21wYW55TmFtZRgDIAEoCRIUCgxiaWxsaW5nVGl0bGUYBCABKAkSEwoLcGhvbmVOdW1iZXIYBSABKAkSEgoKcG9zdGFsQ29kZRgGIAEoCRIPCgdhZGRyZXNzGAcgASgJEhAKCHBlcnNvbmFsGAggASgJEg8KB3JlbWFya3MYCSABKAkSEQoJcHJvamVjdElkGAogASgJEhAKCGxhbmd1YWdlGAsgASgJEhMKC2Rpc3BsYXlDb3N0GAwgASgJEhgKEGV4Y2hhbmdlUmF0ZVR5cGUYDSABKAkSOgoOYWNjb3VudE9wdGlvbnMYDyABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnMSRgoIaW52b2ljZXMYDiABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2USMgoKYXdzT3B0aW9ucxgQIAEoCzIeLmJsdWVhcGkuYmlsbGluZy52MS5Bd3NPcHRpb25zEgwKBGNpdHkYESABKAkSEgoKcHJlZmVjdHVyZRgSIAEoCRIPCgdjb3VudHJ5GBMgASgJEh0KFWludm9pY2VMYXlvdXRDb25maWdJZBgUIAEoCSI1CgpBd3NPcHRpb25zEhYKDnVzZVByb0Zvcm1hQ3VyGAEgASgIEg8KB3BheWVySWQYAiABKAkiqwEKDkFjY291bnRPcHRpb25zEjEKA2F3cxgBIAEoCzIkLmJsdWVhcGkuYmlsbGluZy52MS5SZWdpc3RlckFjY291bnRzEjEKA2djcBgCIAEoCzIkLmJsdWVhcGkuYmlsbGluZy52MS5SZWdpc3RlckFjY291bnRzEjMKBWF6dXJlGAMgASgLMiQuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlZ2lzdGVyQWNjb3VudHMiTgoQUmVnaXN0ZXJBY2NvdW50cxIPCgdlbmFibGVkGAEgASgIEhEKCWFjY291bnRJZBgCIAEoCRIWCg51bkxpbmtPblJlbW92ZRgDIAEoCCJUCg5WZW5kb3JBY2NvdW50cxIOCgZ2ZW5kb3IYASABKAkSMgoIYWNjb3VudHMYAiADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudFRvQWRkImAKDEF6dXJlT3B0aW9ucxIVCg1yZXNvdXJjZUdyb3VwGAEgASgIEhsKE2FwcGx5UGNFYXJuZWRDcmVkaXQYAiABKAgSHAoUYXBwbHlDYW1wYWlnblByaWNpbmcYAyABKAgiqgcKH0NyZWF0ZUJpbGxpbmdHcm91cE1lcmdlZFJlcXVlc3QSFgoOYmlsbGluZ0dyb3VwSWQYASABKAkSGAoQYmlsbGluZ0dyb3VwTmFtZRgCIAEoCRITCgtjb21wYW55TmFtZRgDIAEoCRIUCgxiaWxsaW5nVGl0bGUYBCABKAkSEwoLcGhvbmVOdW1iZXIYBSABKAkSEgoKcG9zdGFsQ29kZRgGIAEoCRIPCgdhZGRyZXNzGAcgASgJEhAKCHBlcnNvbmFsGAggASgJEg8KB3JlbWFya3MYCSABKAkSEQoJcHJvamVjdElkGAogASgJEhAKCGxhbmd1YWdlGAsgASgJEhMKC2Rpc3BsYXlDb3N0GAwgASgJEhgKEGV4Y2hhbmdlUmF0ZVR5cGUYDSABKAkSOgoOYWNjb3VudE9wdGlvbnMYDyABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnMSRgoIaW52b2ljZXMYDiABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2USMgoKYXdzT3B0aW9ucxgQIAEoCzIeLmJsdWVhcGkuYmlsbGluZy52MS5Bd3NPcHRpb25zEgwKBGNpdHkYESABKAkSEgoKcHJlZmVjdHVyZRgSIAEoCRIPCgdjb3VudHJ5GBMgASgJEhkKEWludm9pY2VUZW1wbGF0ZUlkGBQgASgJEjMKC3RhZ1NldHRpbmdzGBUgAygLMh4uYmx1ZWFwaS5iaWxsaW5nLnYxLlRhZ1NldHRpbmcSOAoNbm9uVGFnU2V0dGluZxgWIAEoCzIhLmJsdWVhcGkuYmlsbGluZy52MS5Ob25UYWdTZXR0aW5nEjoKDnZlbmRvckFjY291bnRzGBcgAygLMiIuYmx1ZWFwaS5iaWxsaW5nLnYxLlZlbmRvckFjY291bnRzElsKDGN1c3RvbUZpZWxkcxgYIAMoCzJFLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBNZXJnZWRSZXF1ZXN0LkN1c3RvbUZpZWxkc0VudHJ5EjYKDGF6dXJlT3B0aW9ucxgZIAEoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5BenVyZU9wdGlvbnMaMwoRQ3VzdG9tRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASL/AQogQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2USRwoDYXdzGAEgASgLMjouYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3RJbnZvaWNlVmVuZG9yEkkKBWF6dXJlGAIgASgLMjouYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3RJbnZvaWNlVmVuZG9yEkcKA2djcBgDIAEoCzI6LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBSZXF1ZXN0SW52b2ljZVZlbmRvciL1AwomQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2VWZW5kb3ISEAoIY2FsY1R5cGUYASABKAkSFAoMZGlzY291bnRSYXRlGAIgASgBEhcKD3N1YnN0aXR1dGlvbkZlZRgDIAEoCRIXCg9zdWJzdGl0dXRpb25GaXgYBCABKAESGAoQc3Vic3RpdHV0aW9uUmF0ZRgFIAEoARISCgpzdXBwb3J0RmVlGAYgASgJEhMKC3N1cHBvcnRSYXRlGAcgASgBEhIKCnN1cHBvcnRGaXgYCCABKAESDwoHdGF4UmF0ZRgJIAEoARIQCghjdXJyZW5jeRgKIAEoCRIbChNkaXNjb3VudFRhcmdldFVzYWdlGAsgASgJEiIKGnN1YnN0aXR1dGlvbkZlZVRhcmdldFVzYWdlGAwgASgJEhkKEWRpc2NvdW50Q2FsY0xvZ2ljGA0gASgJEiEKGXN1YnN0aXR1dGlvbkZlZUNhbGNUYXJnZXQYDiABKAkSHwoXc3Vic3RpdHV0aW9uRmVlQ2FsY1R5cGUYDyABKAkSGwoTc3VwcG9ydEFtb3VudFRhcmdldBgQIAEoCRIcChRzdXBwb3J0RmVlQ2FsY1RhcmdldBgRIAEoCRIcChRzdXBwb3J0RmVlQWRqdXN0bWVudBgSIAEoASJjChZHZXRCaWxsaW5nR3JvdXBSZXF1ZXN0EhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEi4KCmZpZWxkX21hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIlEKF0dldEJpbGxpbmdHcm91cFJlc3BvbnNlEjYKDGJpbGxpbmdHcm91cBgBIAEoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXAilgEKC0FjY2Vzc0dyb3VwEhUKDWFjY2Vzc0dyb3VwSWQYASABKAkSFwoPYWNjZXNzR3JvdXBOYW1lGAIgASgJEh4KFmFjY2Vzc0dyb3VwRGVzY3JpcHRpb24YAyABKAkSNwoNYmlsbGluZ0dyb3VwcxgEIAMoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXAiXgoVR2V0QWNjZXNzR3JvdXBSZXF1ZXN0EhUKDWFjY2Vzc0dyb3VwSWQYASABKAkSLgoKZmllbGRfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2siTgoWR2V0QWNjZXNzR3JvdXBSZXNwb25zZRI0CgthY2Nlc3NHcm91cBgBIAEoCzIfLmJsdWVhcGkuYmlsbGluZy52MS5BY2Nlc3NHcm91cCKvAgoSQXdzRGFpbHlSdW5IaXN0b3J5EhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEg0KBW1vbnRoGAMgASgJEkAKCGFjY291bnRzGAQgAygLMi4uYmx1ZWFwaS5iaWxsaW5nLnYxLkF3c0RhaWx5UnVuSGlzdG9yeS5BY2NvdW50GpQBCgdBY2NvdW50EhEKCWFjY291bnRJZBgBIAEoCRJHCgdoaXN0b3J5GAIgAygLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkF3c0RhaWx5UnVuSGlzdG9yeS5BY2NvdW50Lkhpc3RvcnkaLQoHSGlzdG9yeRIRCgl0aW1lc3RhbXAYASABKAkSDwoHdHJpZ2dlchgCIAEoCSI/Ch1MaXN0QXdzRGFpbHlSdW5IaXN0b3J5UmVxdWVzdBINCgVtb250aBgBIAEoCRIPCgdncm91cElkGAIgASgJIlYKGkxpc3RVc2FnZUNvc3RzRHJpZnRSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRIZChFiaWxsaW5nSW50ZXJuYWxJZBgCIAEoCRINCgVtb250aBgDIAEoCSKGAQoPVXNhZ2VDb3N0c0RyaWZ0EhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEg8KB2FjY291bnQYAyABKAkSEAoIc25hcHNob3QYBCABKAESDwoHY3VycmVudBgFIAEoARIMCgRkaWZmGAYgASgBIjIKEUdldEludm9pY2VSZXF1ZXN0EgwKBGRhdGUYASABKAkSDwoHZ3JvdXBJZBgCIAEoCSI5ChhFeHBvcnRJbnZvaWNlRmlsZVJlcXVlc3QSDAoEZGF0ZRgBIAEoCRIPCgdncm91cElkGAIgASgJIigKGUV4cG9ydEludm9pY2VGaWxlUmVzcG9uc2USCwoDdXJsGAEgASgJIjUKI1JlYWRTZXJ2aWNlRGlzY291bnRzU2VydmljZXNSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCSIkCiJMaXN0SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Il4KIUdldEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIKCgJpZBgBIAEoCRItCglmaWVsZE1hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrImoKF0ludm9pY2VTZXJ2aWNlRGlzY291bnRzEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDwoHY3JlYXRlZBgEIAEoCRIPCgd1cGRhdGVkGAUgASgJIhwKGkxpc3RJbnZvaWNlVGVtcGxhdGVSZXF1ZXN0Il0KKFVwZGF0ZUJpbGxpbmdHcm91cEludm9pY2VUZW1wbGF0ZVJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISHwoRaW52b2ljZVRlbXBsYXRlSWQYAiABKAlCBOJBAQIingIKG0xpc3RJbnZvaWNlVGVtcGxhdGVSZXNwb25zZRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg8KB2NyZWF0ZWQYBCABKAkSDwoHdXBkYXRlZBgFIAEoCRIZChFudW1iZXJPZkNvbm5lY3RlZBgGIAEoBRJQChVjb25uZWN0ZWRCaWxsaW5nR3JvdXAYByADKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuSW52b2ljZUNvbm5lY3RlZEJpbGxpbmdHcm91cHMSQQoIaW52b2ljZXMYCCABKAsyLy5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzIiIKIEdldEludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXF1ZXN0IkgKIUdldEludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXNwb25zZRIjChtzaG93UklTUFVwZnJvbnRUaW1lSW50ZXJ2YWwYASABKAgirAEKI1VwZGF0ZUludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXF1ZXN0ElUKB3NldHRpbmcYASADKAsyRC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZURpc3BsYXlTZXR0aW5nc1JlcXVlc3QuU2V0dGluZ0VudHJ5Gi4KDFNldHRpbmdFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAg6AjgBImwKHUludm9pY2VDb25uZWN0ZWRCaWxsaW5nR3JvdXBzEhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYAyABKAkiPAopTGlzdEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCSKHAQoeQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEgoKAmlkGAEgASgJEg8KB2FjY291bnQYAiABKAkSSAoQc2VydmljZURpc2NvdW50cxgDIAEoCzIuLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50cyI4ChdBY2NvdW50U2VydmljZURpc2NvdW50cxIKCgJpZBgBIAEoCRIRCglhY2NvdW50SWQYAiABKAkifQorQ3JlYXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJEj0KCGFjY291bnRzGAQgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIm0KLENyZWF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlEj0KCGFjY291bnRzGAQgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIn0KK1VwZGF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRI9CghhY2NvdW50cxgEIAMoCzIrLmJsdWVhcGkuYmlsbGluZy52MS5BY2NvdW50U2VydmljZURpc2NvdW50cyJtCixVcGRhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZRI9CghhY2NvdW50cxgEIAMoCzIrLmJsdWVhcGkuYmlsbGluZy52MS5BY2NvdW50U2VydmljZURpc2NvdW50cyI+CitEZWxldGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkifQorUmVtb3ZlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJEj0KCGFjY291bnRzGAQgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIk8KMENyZWF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJEgoKAmlkGAIgASgJIj8KMUNyZWF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2USCgoCaWQYASABKAkiTwowVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSCgoCaWQYAiABKAkiPwoxVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZRIKCgJpZBgBIAEoCSJDCjBEZWxldGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCSJXChRDcmVhdGVJbnZvaWNlUmVxdWVzdBIMCgRkYXRlGAQgASgJEg4KBnZlbmRvchgBIAEoCRIRCglhbGxHcm91cHMYAiABKAgSDgoGZ3JvdXBzGAMgAygJIiUKF0dldEludm9pY2VTdGF0dXNSZXF1ZXN0EgoKAmlkGAEgASgJIigKGExpc3RJbnZvaWNlU3RhdHVzUmVxdWVzdBIMCgRkYXRlGAEgASgJImAKHFVwZGF0ZUludm9pY2VQcmV2aWV3c1JlcXVlc3QSDAoEZGF0ZRgBIAEoCRIRCglhbGxHcm91cHMYAiABKAgSDgoGZ3JvdXBzGAMgAygJEg8KB2VuYWJsZWQYBCABKAgizwEKFUNyZWF0ZVJlc2VsbGVyUmVxdWVzdBIPCgdncm91cElkGAEgASgJEg0KBWVtYWlsGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJEhQKDG5vdGlmaWNhdGlvbhgEIAEoCBI2Cgp3YXZlQ29uZmlnGAUgAygLMiIuYmx1ZWFwaS5hcGkucmlwcGxlLlJlc2VsbGVyQ29uZmlnEjYKCmFxdWFDb25maWcYBiADKAsyIi5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXJDb25maWciRgoUTGlzdFJlc2VsbGVyc1JlcXVlc3QSLgoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2siUAoSR2V0UmVzZWxsZXJSZXF1ZXN0EgoKAmlkGAEgASgJEi4KCmZpZWxkX21hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIqYCChVVcGRhdGVSZXNlbGxlclJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISEwoFZW1haWwYAiABKAlCBOJBAQESFwoIcGFzc3dvcmQYAyABKAlCBeJBAgQBEjwKCndhdmVDb25maWcYBCADKAsyIi5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXJDb25maWdCBOJBAQESPAoKYXF1YUNvbmZpZxgFIAMoCzIiLmJsdWVhcGkuYXBpLnJpcHBsZS5SZXNlbGxlckNvbmZpZ0IE4kEBARIbCgxub3RpZmljYXRpb24YBiABKAhCBeJBAgQBEjQKCnVwZGF0ZU1hc2sYByABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQgTiQQECIiMKFURlbGV0ZVJlc2VsbGVyUmVxdWVzdBIKCgJpZBgBIAEoCSJKChhHZXRCaWxsaW5nU2V0dGluZ1JlcXVlc3QSLgoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sixwIKGUdldEJpbGxpbmdTZXR0aW5nUmVzcG9uc2USMAoJeWVhck1vbnRoGAEgAygLMh0uYmx1ZWFwaS5hcGkucmlwcGxlLlllYXJNb250aBI0Cg5yb3VuZGluZ01ldGhvZBgCIAEoCzIcLmJsdWVhcGkuYXBpLnJpcHBsZS5Sb3VuZGluZxI6ChRleHBvcnRSb3VuZGluZ01ldGhvZBgDIAEoCzIcLmJsdWVhcGkuYXBpLnJpcHBsZS5Sb3VuZGluZxI4Cg1pbnZvaWNlTGF5b3V0GAQgASgLMiEuYmx1ZWFwaS5hcGkucmlwcGxlLkludm9pY2VMYXlvdXQSMwoOaW52b2ljZUR1ZURhdGUYBSABKAsyGy5ibHVlYXBpLmFwaS5yaXBwbGUuRHVlRGF0ZRIXCg9zdXBwb3J0Q3VycmVuY3kYBiADKAkiOQoYTGlzdEV4Y2hhbmdlUmF0ZXNSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRINCgVtb250aBgCIAEoCSJlChxTZXRHbG9iYWxFeGNoYW5nZVJhdGVSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRINCgVtb250aBgCIAEoCRIQCghjdXJyZW5jeRgDIAEoCRIUCgxleGNoYW5nZVJhdGUYBCABKAEidwobU2V0UGF5ZXJFeGNoYW5nZVJhdGVSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRIRCglhY2NvdW50SWQYAiABKAkSDQoFbW9udGgYAyABKAkSEAoIY3VycmVuY3kYBCABKAkSFAoMZXhjaGFuZ2VSYXRlGAUgASgBImwKIlNldEJpbGxpbmdHcm91cEV4Y2hhbmdlUmF0ZVJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRINCgVtb250aBgCIAEoCRIQCghjdXJyZW5jeRgDIAEoCRIUCgxleGNoYW5nZVJhdGUYBCABKAEi4gEKGUxpc3RFeGNoYW5nZVJhdGVzUmVzcG9uc2USDQoFbW9udGgYASABKAkSNgoGY29tbW9uGAIgASgLMiYuYmx1ZWFwaS5hcGkucmlwcGxlLkNvbW1vbkV4Y2hhbmdlUmF0ZRJCCgxiaWxsaW5nR3JvdXAYAyADKAsyLC5ibHVlYXBpLmFwaS5yaXBwbGUuQmlsbGluZ0dyb3VwRXhjaGFuZ2VSYXRlEjoKBXBheWVyGAQgASgLMisuYmx1ZWFwaS5hcGkucmlwcGxlLlZlbmRvclBheWVyRXhjaGFuZ2VSYXRlIkkKF0xpc3RBY2Nlc3NHcm91cHNSZXF1ZXN0Ei4KCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIlQKGENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdBIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhUKDWJpbGxpbmdHcm91cHMYAyADKAkiYAoYVXBkYXRlQWNjZXNzR3JvdXBSZXF1ZXN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFQoNYmlsbGluZ0dyb3VwcxgEIAMoCSImChhEZWxldGVBY2Nlc3NHcm91cFJlcXVlc3QSCgoCaWQYASABKAkifQoSTGlzdEludm9pY2VSZXF1ZXN0EgwKBGRhdGUYASABKAkSDgoGdmVuZG9yGAIgASgJEhkKEWJpbGxpbmdJbnRlcm5hbElkGAMgASgJEi4KCmZpZWxkX21hc2sYBCABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIp0JChNMaXN0SW52b2ljZVJlc3BvbnNlEhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYAyABKAkSEwoLY29tcGFueU5hbWUYBCABKAkSGgoSZmluYWxpemF0aW9uU3RhdHVzGAUgASgJEhEKCWlzQ3JlYXRlZBgGIAEoCBIZChFpc1NldHRpbmdNb2RpZmllZBgHIAEoCBITCgtjcmVhdGVkRGF0ZRgIIAEoCRITCgt1cGRhdGVkRGF0ZRgJIAEoCRIWCg5jcmVhdGVkVmVuZG9ycxgKIAMoCRITCgtpc1B1Ymxpc2hlZBgLIAEoCBJdChN2ZW5kb3JCaWxsaW5nQW1vdW50GAwgAygLMkAuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlUmVzcG9uc2UuVmVuZG9yQmlsbGluZ0Ftb3VudEVudHJ5EhoKEmJpbGxpbmdBbW91bnRUb3RhbBgNIAEoCRIQCghjdXJyZW5jeRgOIAEoCRINCgV1cmxJZBgPIAEoCRJtChtjcmVhdGVkVmVuZG9ySW52b2ljZVNldHRpbmcYECADKAsySC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VSZXNwb25zZS5DcmVhdGVkVmVuZG9ySW52b2ljZVNldHRpbmdFbnRyeRJpChlzYXZlZFZlbmRvckludm9pY2VTZXR0aW5nGBEgAygLMkYuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlUmVzcG9uc2UuU2F2ZWRWZW5kb3JJbnZvaWNlU2V0dGluZ0VudHJ5Em0KG2RlZmF1bHRWZW5kb3JJbnZvaWNlU2V0dGluZxgSIAMoCzJILmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVJlc3BvbnNlLkRlZmF1bHRWZW5kb3JJbnZvaWNlU2V0dGluZ0VudHJ5EhAKCGhhc0NoaWxkGBMgASgIEhcKD2F0dGFjaGVkVmVuZG9ycxgUIAMoCRo6ChhWZW5kb3JCaWxsaW5nQW1vdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpnCiBDcmVhdGVkVmVuZG9ySW52b2ljZVNldHRpbmdFbnRyeRILCgNrZXkYASABKAkSMgoFdmFsdWUYAiABKAsyIy5ibHVlYXBpLmJpbGxpbmcudjEuSW52b2ljZVNldHRpbmdzOgI4ARplCh5TYXZlZFZlbmRvckludm9pY2VTZXR0aW5nRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMuYmx1ZWFwaS5iaWxsaW5nLnYxLkludm9pY2VTZXR0aW5nczoCOAEaZwogRGVmYXVsdFZlbmRvckludm9pY2VTZXR0aW5nRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMuYmx1ZWFwaS5iaWxsaW5nLnYxLkludm9pY2VTZXR0aW5nczoCOAEiKQobTGlzdEFiY0JpbGxpbmdHcm91cHNSZXF1ZXN0EgoKAmlkGAEgASgJIk4KIkxpc3RBYmNCaWxsaW5nR3JvdXBBY2NvdW50c1JlcXVlc3QSDwoHcGF5ZXJJZBgBIAEoCRIXCg9iaWxsaW5nR3JvdXBBcm4YAiABKAkijwEKD0FiY0JpbGxpbmdHcm91cBILCgNhcm4YASABKAkSDAoEbmFtZRgCIAEoCRIUCgxjcmVhdGlvblRpbWUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSGAoQcHJpbWFyeUFjY291bnRJZBgFIAEoCRIMCgRzaXplGAYgASgJEg4KBnN0YXR1cxgHIAEoCSI0CgpBYmNBY2NvdW50EhEKCWFjY291bnRJZBgBIAEoCRITCgthY2NvdW50TmFtZRgCIAEoCSJiCh1SZWFkSW52b2ljZUFkanVzdG1lbnRzUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkSEQoJYWNjb3VudElkGAIgASgJEg0KBW1vbnRoGAMgASgJEg8KB2ZlZVR5cGUYBCABKAkimQEKHFJlYWRBZGp1c3RtZW50RW50cmllc1JlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhMKBW1vbnRoGAIgASgJQgTiQQEBGk4KIkFkanVzdG1lbnRFbnRyaWVzUmVxdWVzdEF3c09wdGlvbnMSEwoLc3BwRGlzY291bnQYASABKAgSEwoLZWRwRGlzY291bnQYAiABKAgiQwoZR2V0QWRqdXN0bWVudEVudHJ5UmVxdWVzdBIUCgZ2ZW5kb3IYASABKAlCBOJBAQISEAoCaWQYAiABKAlCBOJBAQIingMKG0FwcGx5QWRqdXN0bWVudEVudHJ5UmVxdWVzdBIUCgZ2ZW5kb3IYASABKAlCBOJBAQISUwoHc2V0dGluZxgCIAEoCzI8LmJsdWVhcGkuYmlsbGluZy52MS5BcHBseUFkanVzdG1lbnRFbnRyeVJlcXVlc3QuQXBwbHlTZXR0aW5nQgTiQQECEhUKB2VudHJpZXMYAyADKAlCBOJBAQIa/AEKDEFwcGx5U2V0dGluZxITCgVtb250aBgBIAEoCUIE4kEBARIVCgd0YXhGcmVlGAIgASgIQgTiQQEBEmoKDGV4Y2hhbmdlUmF0ZRgDIAMoCzJOLmJsdWVhcGkuYmlsbGluZy52MS5BcHBseUFkanVzdG1lbnRFbnRyeVJlcXVlc3QuQXBwbHlTZXR0aW5nLkV4Y2hhbmdlUmF0ZUVudHJ5QgTiQQEBEh8KEWJpbGxpbmdJbnRlcm5hbElkGAQgASgJQgTiQQEBGjMKEUV4Y2hhbmdlUmF0ZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAToCOAEiTAodUmVzdG9yZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhUKB2VudHJpZXMYAyADKAlCBOJBAQIiXwobU3BsaXRBZGp1c3RtZW50RW50cnlSZXF1ZXN0EhQKBnZlbmRvchgBIAEoCUIE4kEBAhIQCgJpZBgCIAEoCUIE4kEBAhIYCgpzdGFydE1vbnRoGAMgASgJQgTiQQECIvwBCh5BbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhAKAmlkGAIgASgJQgTiQQECElYKBmNvbmZpZxgDIAMoCzJALmJsdWVhcGkuYmlsbGluZy52MS5BbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QuQWNjb3VudENvbmZpZ0IE4kEBAhIhChNhY2NvdW50Rm9yUmVtYWluaW5nGAQgASgJQgTiQQECGjcKDUFjY291bnRDb25maWcSEAoCaWQYASABKAlCBOJBAQISFAoGYW1vdW50GAIgASgBQgTiQQECIkwKIlJlc3RvcmVTcGxpdEFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhAKAmlkGAIgASgJQgTiQQECIk8KJVJlc3RvcmVBbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhAKAmlkGAIgASgJQgTiQQECIn4KFkNyZWF0ZUN1c3RvbUZlZVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhMKBW1vbnRoGAIgASgJQgTiQQECEjkKB2VudHJpZXMYAyADKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQ3VzdG9tRmVlRW50cnlCBOJBAQIioQMKDkN1c3RvbUZlZUVudHJ5EhcKCWFjY291bnRJZBgBIAEoCUIE4kEBAhIcCg5wYXllckFjY291bnRJZBgCIAEoCUIE4kEBAhIVCgdmZWVUeXBlGAMgASgJQgTiQQECEhkKC21vYmluZ2lUeXBlGAQgASgJQgTiQQECEhQKBmFtb3VudBgFIAEoAUIE4kEBAhIaCgxjdXJyZW5jeUNvZGUYBiABKAlCBOJBAQISGQoLZGVzY3JpcHRpb24YByABKAlCBOJBAQISGQoLcHJvZHVjdENvZGUYCCABKAlCBOJBAQESGQoLcHJvZHVjdE5hbWUYCSABKAlCBOJBAQESGAoKdXNhZ2VTdGFydBgKIAEoCUIE4kEBARIaCgx0aW1lSW50ZXJ2YWwYCyABKAlCBOJBAQESQAoEbWV0YRgMIAMoCzIsLmJsdWVhcGkuYmlsbGluZy52MS5DdXN0b21GZWVFbnRyeS5NZXRhRW50cnlCBOJBAQEaKwoJTWV0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiKgoXQ3JlYXRlQ3VzdG9tRmVlUmVzcG9uc2USDwoHY3JlYXRlZBgBIAEoBSJ9Ch9MaXN0QWRqdXN0bWVudEVudHJ5SXRlbXNSZXF1ZXN0EhQKBnZlbmRvchgBIAEoCUIE4kEBAhITCgVtb250aBgCIAEoCUIE4kEBAhIZCgttb2JpbmdpVHlwZRgDIAEoCUIE4kEBARIUCgZzdGF0dXMYBCABKAlCBOJBAQEiugEKE0FkanVzdG1lbnRFbnRyeUl0ZW0SNQoFZW50cnkYASABKAsyJi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQWRqdXN0bWVudEVudHJ5Ej8KBG1ldGEYAiADKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuQWRqdXN0bWVudEVudHJ5SXRlbS5NZXRhRW50cnkaKwoJTWV0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiPAobTGlzdEFjY291bnRSZXNvdXJjZXNSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRINCgVtb250aBgCIAEoCSJKCg9SZXNvdXJjZUFjY291bnQSDwoHcGF5ZXJJZBgBIAEoCRISCgpjdXN0b21lcklkGAIgASgJEhIKCnJlZ2lzdGVyZWQYAyABKAgiSAoaR2V0QWRqdXN0bWVudENvbmZpZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEhoKEmluY2x1ZGVTUFBEaXNjb3VudBgCIAEoCCKNAQodQ3JlYXRlQWRqdXN0bWVudENvbmZpZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEioKBmNvbmZpZxgCIAMoCzIaLmJsdWVhcGkuYXBpLkNvbmZpZ0ZpbHRlcnMSMAoIYWNjb3VudHMYAyADKAsyHi5ibHVlYXBpLmFwaS5NYW5hZ2VtZW50QWNjb3VudCKNAQodVXBkYXRlQWRqdXN0bWVudENvbmZpZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEioKBmNvbmZpZxgCIAMoCzIaLmJsdWVhcGkuYXBpLkNvbmZpZ0ZpbHRlcnMSMAoIYWNjb3VudHMYAyADKAsyHi5ibHVlYXBpLmFwaS5NYW5hZ2VtZW50QWNjb3VudCIvCh1EZWxldGVBZGp1c3RtZW50Q29uZmlnUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkiZwoZUmVhZFVudGFnZ2VkR3JvdXBzUmVxdWVzdBIUCgZ2ZW5kb3IYASABKAlCBOJBAQISNAoKZmllbGRfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCBOJBAQEiXAokUmVhZEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZXNSZXF1ZXN0EjQKCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQgTiQQEBImYKIkdldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QSCgoCaWQYASABKAkSNAoKZmllbGRfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCBOJBAQEifAolQ3JlYXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjAKBmNvbmZpZxgDIAEoCzIgLmJsdWVhcGkuYXBpLnJpcHBsZS5NZXRob2RDb25maWcixQEKJVVwZGF0ZUN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISVAoYY3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlGAIgASgLMiwuYmx1ZWFwaS5hcGkucmlwcGxlLkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUIE4kEBAhI0Cgp1cGRhdGVNYXNrGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0IE4kEBAiIzCiVEZWxldGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0EgoKAmlkGAEgASgJIl0KLkdldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlcXVlc3QSFQoHZ3JvdXBJZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQIiyQEKL0dldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlc3BvbnNlEhAKAmlkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAhJACg5jaGFyZ2luZ1RhcmdldBgDIAEoDjIiLmJsdWVhcGkuYXBpLnJpcHBsZS5DaGFyZ2luZ1RhcmdldEIE4kEBAhIsCghhY2NvdW50cxgEIAMoCzIULmJsdWVhcGkuYXBpLkFjY291bnRCBOJBAQEi9wIKLlNldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlcXVlc3QSFQoHZ3JvdXBJZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQISgAEKB3NldHRpbmcYAyADKAsyaS5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdC5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nU2V0dGluZ0IE4kEBAhqUAQomQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmcSEAoCaWQYASABKAlCBOJBAQISQAoOY2hhcmdpbmdUYXJnZXQYAiABKA4yIi5ibHVlYXBpLmFwaS5yaXBwbGUuQ2hhcmdpbmdUYXJnZXRCBOJBAQISFgoIYWNjb3VudHMYAyADKAlCBOJBAQEiYAoxRGVsZXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdBIVCgdncm91cElkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAiKRAQokQ3JlYXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSRgoHc2V0dGluZxgDIAEoCzI1LmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50c1NldHRpbmcixQEKJFVwZGF0ZUludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIQCgJpZBgBIAEoCUIE4kEBAhJVChdpbnZvaWNlU2VydmljZURpc2NvdW50cxgCIAEoCzIuLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50c0IE4kEBAhI0Cgp1cGRhdGVNYXNrGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0IE4kEBAiIyCiREZWxldGVJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSCgoCaWQYASABKAkibgoHVGFnRGF0YRISCgpjdXN0b21lcklkGAEgASgJEhEKCWFjY291bnRJZBgCIAEoCRIUCgxjdXN0b21lck5hbWUYAyABKAkSJgoEdGFncxgEIAMoCzIYLmJsdWVhcGkuYmlsbGluZy52MS5UYWdzIiMKBFRhZ3MSCwoDa2V5GAEgASgJEg4KBnZhbHVlcxgCIAMoCSIuCg5HZXRUYWdzUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkSDAoEdHlwZRgCIAEoCSI7CgtDdXN0b21GaWVsZBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkiXgoXQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGQSDQoFdmFsdWUYASABKAkSNAoLY3VzdG9tRmllbGQYAiABKAsyHy5ibHVlYXBpLmJpbGxpbmcudjEuQ3VzdG9tRmllbGQiNQoiTGlzdEJpbGxpbmdHcm91cEN1c3RvbUZpZWxkUmVxdWVzdBIPCgdncm91cElkGAEgASgJIoUBCiNMaXN0QmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXNwb25zZRIPCgdncm91cElkGAEgASgJEk0KGGJpbGxpbmdHcm91cEN1c3RvbUZpZWxkcxgCIAMoCzIrLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXBDdXN0b21GaWVsZCI8ChhDcmVhdGVDdXN0b21GaWVsZFJlcXVlc3QSCwoDa2V5GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJIkgKGFVwZGF0ZUN1c3RvbUZpZWxkUmVxdWVzdBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkiJgoYRGVsZXRlQ3VzdG9tRmllbGRSZXF1ZXN0EgoKAmlkGAEgASgJIhgKFkxpc3RDdXN0b21GaWVsZFJlcXVlc3QiawoXQ3JlYXRlRnJlZUZvcm1hdFJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSLwoFaXRlbXMYAyADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuRnJlZUZvcm1JdGVtImEKDEZyZWVGb3JtSXRlbRINCgVsYWJlbBgBIAEoCRIQCgh1bml0Q29zdBgCIAEoAxINCgV0b3RhbBgFIAEoAxIQCghxdWFudGl0eRgDIAEoDRIPCgdlbmFibGVkGAQgASgIIjoKF0RlbGV0ZUZyZWVGb3JtYXRSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSDgoGdmVuZG9yGAIgASgJIj0KFEdldEZyZWVGb3JtYXRSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSFAoMaXNBc3NvY2lhdGVkGAIgASgIIm4KFUdldEZyZWVGb3JtYXRSZXNwb25zZRIPCgdncm91cElkGAMgASgJEg4KBnZlbmRvchgBIAEoCRI0CgpmcmVlRm9ybWF0GAIgAygLMiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkZyZWVGb3JtSXRlbSI6CiZHZXRNb250aGx5TWlzY0ZlZUltcG9ydFRlbXBsYXRlUmVxdWVzdBIQCghsYW5ndWFnZRgBIAEoCSL5AQocTW9udGhseU1pc2NGZWVJbXBvcnRUZW1wbGF0ZRIOCgZmb3JtYXQYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKAkSDwoHaGVhZGVycxgDIAMoCRISCgpzYW1wbGVfcm93GAQgAygJEhUKDWFsbG93ZWRfbW9kZXMYBSADKAkSGwoTbWF4X2ZpbGVfc2l6ZV9ieXRlcxgGIAEoAxIQCghtYXhfcm93cxgHIAEoBRJGCgtmaWVsZF9ydWxlcxgIIAMoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZUltcG9ydEZpZWxkUnVsZSJlCh1Nb250aGx5TWlzY0ZlZUltcG9ydEZpZWxkUnVsZRINCgVmaWVsZBgBIAEoCRIQCghyZXF1aXJlZBgCIAEoCBIOCgZmb3JtYXQYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkizgEKIEJ1bGtJbXBvcnRNb250aGx5TWlzY0ZlZXNSZXF1ZXN0EhsKDWJpbGxpbmdfbW9udGgYASABKAlCBOJBAQISGQoLY3N2X2NvbnRlbnQYAiABKAlCBOJBAQISFwoJZmlsZV9uYW1lGAMgASgJQgTiQQECEgwKBG1vZGUYBCABKAkSFAoGZm9ybWF0GAUgASgJQgTiQQECEhwKDmZvcm1hdF92ZXJzaW9uGAYgASgJQgTiQQECEhcKD2lkZW1wb3RlbmN5X2tleRgHIAEoCSKRAgoaTGlzdE1vbnRobHlNaXNjRmVlc1JlcXVlc3QSGwoNYmlsbGluZ19tb250aBgBIAEoCUIE4kEBAhIYChBiaWxsaW5nX2dyb3VwX2lkGAIgASgJEiAKGGJpbGxpbmdfZ3JvdXBfbmFtZV9xdWVyeRgDIAEoCRISCgppdGVtX3F1ZXJ5GAQgASgJEg4KBnNvdXJjZRgFIAEoCRISCgp1cGRhdGVkX2J5GAYgASgJEhUKDXVwZGF0ZWRfYWZ0ZXIYByABKAkSFgoOdXBkYXRlZF9iZWZvcmUYCCABKAkSEQoJcGFnZV9zaXplGAkgASgFEhIKCnBhZ2VfdG9rZW4YCiABKAkSDAoEc29ydBgLIAEoCSJ9ChtMaXN0TW9udGhseU1pc2NGZWVzUmVzcG9uc2USMAoEcm93cxgBIAMoCzIiLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAUiTQoYR2V0TW9udGhseU1pc2NGZWVSZXF1ZXN0EhQKBnJvd19pZBgBIAEoCUIE4kEBAhIbCg1iaWxsaW5nX21vbnRoGAIgASgJQgTiQQECIuwBChxFeHBvcnRNb250aGx5TWlzY0ZlZXNSZXF1ZXN0EhsKDWJpbGxpbmdfbW9udGgYASABKAlCBOJBAQISGAoQYmlsbGluZ19ncm91cF9pZBgCIAEoCRIgChhiaWxsaW5nX2dyb3VwX25hbWVfcXVlcnkYAyABKAkSEgoKaXRlbV9xdWVyeRgEIAEoCRIOCgZzb3VyY2UYBSABKAkSEgoKdXBkYXRlZF9ieRgGIAEoCRIVCg11cGRhdGVkX2FmdGVyGAcgASgJEhYKDnVwZGF0ZWRfYmVmb3JlGAggASgJEgwKBHNvcnQYCSABKAkiWwodRXhwb3J0TW9udGhseU1pc2NGZWVzUmVzcG9uc2USEwoLY3N2X2NvbnRlbnQYASABKAwSEgoKZXhwb3J0X3JlZhgCIAEoCRIRCglmaWxlX25hbWUYAyABKAkiPQoeR2V0TW9udGhseU1pc2NGZWVJbXBvcnRSZXF1ZXN0EhsKDWltcG9ydF9qb2JfaWQYASABKAlCBOJBAQIifQobVXBzZXJ0TW9udGhseU1pc2NGZWVSZXF1ZXN0Eg4KBnJvd19pZBgBIAEoCRI1CgNyb3cYAiABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuTW9udGhseU1pc2NGZWVCBOJBAQISFwoPaWRlbXBvdGVuY3lfa2V5GAMgASgJIlAKG0RlbGV0ZU1vbnRobHlNaXNjRmVlUmVxdWVzdBIUCgZyb3dfaWQYASABKAlCBOJBAQISGwoNYmlsbGluZ19tb250aBgCIAEoCUIE4kEBAiKsAgoOTW9udGhseU1pc2NGZWUSDgoGcm93X2lkGAEgASgJEhUKDWJpbGxpbmdfbW9udGgYAiABKAkSGAoQYmlsbGluZ19ncm91cF9pZBgDIAEoCRIaChJiaWxsaW5nX2dyb3VwX25hbWUYBCABKAkSEQoJaXRlbV9uYW1lGAUgASgJEhAKCHF1YW50aXR5GAYgASgJEhEKCXVuaXRfY29zdBgHIAEoCRIOCgZhbW91bnQYCCABKAkSDgoGc291cmNlGAkgASgJEhUKDWltcG9ydF9qb2JfaWQYCiABKAkSEgoKY3JlYXRlZF9ieRgLIAEoCRISCgpjcmVhdGVkX2F0GAwgASgJEhIKCnVwZGF0ZWRfYnkYDSABKAkSEgoKdXBkYXRlZF9hdBgOIAEoCSLjAwoaTW9udGhseU1pc2NGZWVJbXBvcnRSZXN1bHQSFQoNaW1wb3J0X2pvYl9pZBgBIAEoCRIOCgZzdGF0dXMYAiABKAkSDAoEbW9kZRgDIAEoCRIVCg1iaWxsaW5nX21vbnRoGAQgASgJEhEKCWZpbGVfbmFtZRgFIAEoCRIRCglmaWxlX2hhc2gYBiABKAkSEgoKdG90YWxfcm93cxgHIAEoBRISCgp2YWxpZF9yb3dzGAggASgFEhUKDWluc2VydGVkX3Jvd3MYCSABKAUSFAoMdXBkYXRlZF9yb3dzGAogASgFEhYKDnVuY2hhbmdlZF9yb3dzGAsgASgFEhQKDGRlbGV0ZWRfcm93cxgMIAEoBRITCgtmYWlsZWRfcm93cxgNIAEoBRIjChtyZXBsYWNlX21vbnRoX2V4aXN0aW5nX3Jvd3MYDiABKAUSEgoKZXhwb3J0X3JlZhgPIAEoCRJGCgtyb3dfcmVzdWx0cxgQIAMoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZUltcG9ydFJvd1Jlc3VsdBISCgpjcmVhdGVkX2J5GBEgASgJEhIKCmNyZWF0ZWRfYXQYEiABKAkSEgoKdXBkYXRlZF9hdBgTIAEoCSKXAwodTW9udGhseU1pc2NGZWVJbXBvcnRSb3dSZXN1bHQSFgoOY3N2X3Jvd19udW1iZXIYASABKAUSDgoGYWN0aW9uGAIgASgJEg4KBnJvd19pZBgDIAEoCRIVCg1iaWxsaW5nX21vbnRoGAQgASgJEhgKEGJpbGxpbmdfZ3JvdXBfaWQYBSABKAkSGgoSYmlsbGluZ19ncm91cF9uYW1lGAYgASgJEhEKCWl0ZW1fbmFtZRgHIAEoCRIQCghxdWFudGl0eRgIIAEoCRIRCgl1bml0X2Nvc3QYCSABKAkSDgoGYW1vdW50GAogASgJEk0KDnByZXZpb3VzX3ZhbHVlGAsgASgLMjUuYmx1ZWFwaS5iaWxsaW5nLnYxLk1vbnRobHlNaXNjRmVlSW1wb3J0UHJldmlvdXNWYWx1ZRJMChF2YWxpZGF0aW9uX2Vycm9ycxgMIAMoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZVZhbGlkYXRpb25FcnJvchIMCgRub3RlGA0gASgJIlgKIU1vbnRobHlNaXNjRmVlSW1wb3J0UHJldmlvdXNWYWx1ZRIQCghxdWFudGl0eRgBIAEoCRIRCgl1bml0X2Nvc3QYAiABKAkSDgoGYW1vdW50GAMgASgJIk0KHU1vbnRobHlNaXNjRmVlVmFsaWRhdGlvbkVycm9yEg0KBWZpZWxkGAEgASgJEgwKBGNvZGUYAiABKAkSDwoHbWVzc2FnZRgDIAEoCSJ3Ch5VcGRhdGVUYWdzQWRkaW5nU2V0dGluZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEg8KB2dyb3VwSWQYAiABKAkSNAoFaXRlbXMYAyADKAsyJS5ibHVlYXBpLmJpbGxpbmcudjEuVGFnc0FkZGluZ1NldHRpbmciPgobR2V0VGFnc0FkZGluZ1NldHRpbmdSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRIPCgdncm91cElkGAIgASgJIkkKEVRhZ3NBZGRpbmdTZXR0aW5nEg8KB2dyb3VwSWQYASABKAkSEgoKY3VzdG9tZXJJZBgCIAEoCRIPCgd0YWdLZXlzGAMgAygJIk0KHUV4cG9ydFNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EhQKBmZvcm1hdBgBIAEoCUIE4kEBAhIWCghsYW5ndWFnZRgCIAEoCUIE4kEBASJvCitFeHBvcnRBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EhQKBmZvcm1hdBgBIAEoCUIE4kEBAhIWCghsYW5ndWFnZRgCIAEoCUIE4kEBARISCgpkaXJlY3RMaW5rGAMgASgIInQKMEV4cG9ydEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIUCgZmb3JtYXQYASABKAlCBOJBAQISFgoIbGFuZ3VhZ2UYAiABKAlCBOJBAQESEgoKZGlyZWN0TGluaxgDIAEoCCI2ChxFeHBvcnRCaWxsaW5nR3JvdXBDc3ZSZXF1ZXN0EhYKCGxhbmd1YWdlGAIgASgJQgTiQQEBIjUKHUV4cG9ydEJpbGxpbmdHcm91cENzdlJlc3BvbnNlEhQKDGRvd25sb2FkTGluaxgBIAEoCSJcCh5FeHBvcnRJbnZvaWNlU2V0dGluZ0NzdlJlcXVlc3QSFgoIbGFuZ3VhZ2UYAiABKAlCBOJBAQESIgoUaW5jbHVkZU1pc2NlbGxhbmVvdXMYAyABKAhCBOJBAQEiNwofRXhwb3J0SW52b2ljZVNldHRpbmdDc3ZSZXNwb25zZRIUCgxkb3dubG9hZExpbmsYASABKAkiQAotR2V0QmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkiPAouR2V0QmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZRIKCgJpZBgBIAEoCSK5AQohQWRkQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSUwoHaWRUb0tleRgCIAMoCzJCLmJsdWVhcGkuYmlsbGluZy52MS5BZGRCaWxsaW5nR3JvdXBDdXN0b21GaWVsZFJlcXVlc3QuSWRUb0tleUVudHJ5Gi4KDElkVG9LZXlFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIk4KJERlbGV0ZUJpbGxpbmdHcm91cEN1c3RvbUZpZWxkUmVxdWVzdBIPCgdncm91cElkGAEgASgJEhUKDWN1c3RvbUZpZWxkSWQYAiABKAkidgofQWRkQWNjb3VudFRvQmlsbGluZ0dyb3VwUmVxdWVzdBIPCgdncm91cElkGAEgASgJEg4KBnZlbmRvchgCIAEoCRIyCghhY2NvdW50cxgDIAMoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5BY2NvdW50VG9BZGQiUQoMQWNjb3VudFRvQWRkEhIKCmN1c3RvbWVySWQYASABKAkSEQoJYWNjb3VudElkGAIgASgJEgwKBG5hbWUYAyABKAkSDAoEbm90ZRgEIAEoCSKrAQocQWRkVGFnc1RvQmlsbGluZ0dyb3VwUmVxdWVzdBIPCgdncm91cElkGAEgASgJEg4KBnZlbmRvchgCIAEoCRIwCghzZXR0aW5ncxgDIAMoCzIeLmJsdWVhcGkuYmlsbGluZy52MS5UYWdTZXR0aW5nEjgKDW5vblRhZ1NldHRpbmcYBCABKAsyIS5ibHVlYXBpLmJpbGxpbmcudjEuTm9uVGFnU2V0dGluZyJHCgpUYWdTZXR0aW5nEhIKCmN1c3RvbWVySWQYASABKAkSJQoEdGFncxgCIAMoCzIXLmJsdWVhcGkuYmlsbGluZy52MS5UYWciMQoDVGFnEgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCRIOCgZhc3NpZ24YAyABKAUiPgoNTm9uVGFnU2V0dGluZxIPCgdpbmNsdWRlGAEgASgIEgwKBHR5cGUYAiABKAkSDgoGYW1vdW50GAMgASgBIj4KHVNhdmVUYWdJbnZvaWNlU2V0dGluZ1Jlc3BvbnNlEg4KBnN0YXR1cxgBIAEoCRINCgVlcnJvchgCIAEoCSJ+CiZVcGRhdGVOb25UYWdHcm91cFRvQmlsbGluZ0dyb3VwUmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSOAoIc2V0dGluZ3MYAyADKAsyJi5ibHVlYXBpLmJpbGxpbmcudjEuTm9uVGFnR3JvdXBTZXR0aW5nIj4KEk5vblRhZ0dyb3VwU2V0dGluZxIKCgJpZBgBIAEoCRIMCgR0eXBlGAIgASgJEg4KBmFtb3VudBgDIAEoASKaAQoaU2F2ZUludm9pY2VTZXR0aW5nc1JlcXVlc3QSDAoEZGF0ZRgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSEQoJYWxsR3JvdXBzGAMgASgIEg4KBmdyb3VwcxgEIAMoCRI7Cg5pbnZvaWNlU2V0dGluZxgFIAEoCzIjLmJsdWVhcGkuYmlsbGluZy52MS5JbnZvaWNlU2V0dGluZ3MiswQKD0ludm9pY2VTZXR0aW5ncxIRCglpbnZvaWNlTm8YAiABKAkSFAoMZGlzY291bnRSYXRlGAQgASgBEhsKE2Rpc2NvdW50VGFyZ2V0VXNhZ2UYBSABKAkSGQoRZGlzY291bnRDYWxjTG9naWMYBiABKAkSDwoHdGF4UmF0ZRgHIAEoARISCgpzdXBwb3J0RmVlGAggASgJEhMKC3N1cHBvcnRSYXRlGAkgASgBEhwKFHN1cHBvcnRGZWVDYWxjVGFyZ2V0GAogASgJEhIKCnN1cHBvcnRGaXgYCyABKAESFwoPc3Vic3RpdHV0aW9uRmVlGAwgASgJEhgKEHN1YnN0aXR1dGlvblJhdGUYDSABKAESFwoPc3Vic3RpdHV0aW9uRml4GA4gASgBEiEKGXN1YnN0aXR1dGlvbkZlZUNhbGNUYXJnZXQYDyABKAkSIgoac3Vic3RpdHV0aW9uRmVlVGFyZ2V0VXNhZ2UYECABKAkSHwoXc3Vic3RpdHV0aW9uRmVlQ2FsY1R5cGUYESABKAkSEAoIY3VycmVuY3kYAyABKAkSFAoMZXhjaGFuZ2VSYXRlGBIgASgBEgwKBG1lbW8YEyABKAkSEAoIY2FsY1R5cGUYFCABKAkSOQoPYWRkaXRpb25hbEl0ZW1zGBUgAygLMiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkZyZWVGb3JtSXRlbRIcChRzdXBwb3J0RmVlQWRqdXN0bWVudBgWIAEoASKtAwoQQmFzaWNJbmZvcm1hdGlvbhIYChBiaWxsaW5nR3JvdXBOYW1lGAIgASgJEhYKDmJpbGxpbmdHcm91cElkGAMgASgJEhMKC2NvbXBhbnlOYW1lGAQgASgJEhYKCWFkZHJlc3NlZRgFIAEoCUgAiAEBEhQKB2NvdW50cnkYBiABKAlIAYgBARIXCgpwb3N0YWxDb2RlGAcgASgJSAKIAQESEQoEY2l0eRgIIAEoCUgDiAEBEhgKC3Bob25lTnVtYmVyGAkgASgJSASIAQESGQoMYWRkcmVzc0xpbmUxGAogASgJSAWIAQESGQoMYWRkcmVzc0xpbmUyGAsgASgJSAaIAQESEgoFc3RhdGUYDCABKAlIB4gBARIXCgpwcmVmZWN0dXJlGA0gASgJSAiIAQFCDAoKX2FkZHJlc3NlZUIKCghfY291bnRyeUINCgtfcG9zdGFsQ29kZUIHCgVfY2l0eUIOCgxfcGhvbmVOdW1iZXJCDwoNX2FkZHJlc3NMaW5lMUIPCg1fYWRkcmVzc0xpbmUyQggKBl9zdGF0ZUINCgtfcHJlZmVjdHVyZSJ3CilVcGRhdGVCaWxsaW5nR3JvdXBCYXNpY0luZm9ybWF0aW9uUmVxdWVzdBIKCgJpZBgBIAEoCRI+ChBiYXNpY0luZm9ybWF0aW9uGAIgASgLMiQuYmx1ZWFwaS5iaWxsaW5nLnYxLkJhc2ljSW5mb3JtYXRpb24ivAEKJVVwZGF0ZUJpbGxpbmdHcm91cEN1c3RvbUZpZWxkc1JlcXVlc3QSCgoCaWQYASABKAkSVwoHaWRUb0tleRgCIAMoCzJGLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZHNSZXF1ZXN0LklkVG9LZXlFbnRyeRouCgxJZFRvS2V5RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJyCiNVcGRhdGVCaWxsaW5nR3JvdXBGcmVlRm9ybWF0UmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSLwoFaXRlbXMYAyADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuRnJlZUZvcm1JdGVtIuoCCihVcGRhdGVCaWxsaW5nR3JvdXBMaW5rZWRSZXNvdXJjZXNSZXF1ZXN0EgoKAmlkGAEgASgJEg4KBnZlbmRvchgCIAEoCRIXCg9zZWxlY3Rpb25NZXRob2QYAyABKAkSMgoIYWNjb3VudHMYBCADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudFRvQWRkEjAKCHNldHRpbmdzGAUgAygLMh4uYmx1ZWFwaS5iaWxsaW5nLnYxLlRhZ1NldHRpbmcSPQoNbm9uVGFnU2V0dGluZxgGIAEoCzIhLmJsdWVhcGkuYmlsbGluZy52MS5Ob25UYWdTZXR0aW5nSACIAQESPwoOYWNjb3VudE9wdGlvbnMYByABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnNIAYgBAUIQCg5fbm9uVGFnU2V0dGluZ0IRCg9fYWNjb3VudE9wdGlvbnMi9gEKKFVwZGF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXR0aW5nc1JlcXVlc3QSCgoCaWQYASABKAkSGQoMYmlsbGluZ1RpdGxlGAIgASgJSACIAQESHAoPY2FsY3VsYXRpb25UeXBlGAMgASgJSAGIAQESFQoIbGFuZ3VhZ2UYBCABKAlIAogBARIiChVpbnZvaWNlTGF5b3V0Q29uZmlnSWQYBSABKAlIA4gBAUIPCg1fYmlsbGluZ1RpdGxlQhIKEF9jYWxjdWxhdGlvblR5cGVCCwoJX2xhbmd1YWdlQhgKFl9pbnZvaWNlTGF5b3V0Q29uZmlnSWQirwEKKFVwZGF0ZUJpbGxpbmdHcm91cFJlc2VsbGVyQ2hhcmdlc1JlcXVlc3QSCgoCaWQYASABKAkSHAoPaW52b2ljZVRlbXBsYXRlGAIgASgJSACIAQESRQoHaW52b2ljZRgDIAEoCzI0LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBSZXF1ZXN0SW52b2ljZUISChBfaW52b2ljZVRlbXBsYXRlIr8ECipVcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlc1JlcXVlc3QSCgoCaWQYASABKAkSeAoDYXdzGAIgAygLMmUuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUJpbGxpbmdHcm91cEFkZGl0aW9uYWxDaGFyZ2VzUmVxdWVzdC5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nU2V0dGluZ0IE4kEBAhJ6CgVhenVyZRgDIAMoCzJlLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlc1JlcXVlc3QuQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmdCBOJBAQISeAoDZ2NwGAQgAygLMmUuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUJpbGxpbmdHcm91cEFkZGl0aW9uYWxDaGFyZ2VzUmVxdWVzdC5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nU2V0dGluZ0IE4kEBAhqUAQomQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmcSEAoCaWQYASABKAlCBOJBAQISQAoOY2hhcmdpbmdUYXJnZXQYAiABKA4yIi5ibHVlYXBpLmFwaS5yaXBwbGUuQ2hhcmdpbmdUYXJnZXRCBOJBAQISFgoIYWNjb3VudHMYAyADKAlCBOJBAQEiJwoZRGVsZXRlQmlsbGluZ0dyb3VwUmVxdWVzdBIKCgJpZBgBIAEoCSJSCihHZXRCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5SZXF1ZXN0EhAKAmlkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAiKgAQopR2V0QmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuUmVzcG9uc2USCgoCaWQYASABKAkSDgoGdmVuZG9yGAIgASgJEg8KB2VuYWJsZWQYAyABKAgSRgoHc2V0dGluZxgEIAMoCzI1LmJsdWVhcGkuYXBpLnJpcHBsZS52MS5CaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW4i8AEKK1VwZGF0ZUJpbGxpbmdHcm91cEFjY291bnRTdXBwb3J0UGxhblJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISFAoGdmVuZG9yGAIgASgJQgTiQQECEhUKB2VuYWJsZWQYAyABKAhCBOJBAQESTAoHc2V0dGluZxgEIAMoCzI1LmJsdWVhcGkuYXBpLnJpcHBsZS52MS5CaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5CBOJBAQESNAoKdXBkYXRlTWFzaxgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCBOJBAQIiMQoXR2V0QW5ub3VuY2VtZW50c1JlcXVlc3QSFgoOYW5ub3VuY2VtZW50SWQYASABKAkipwEKGUNyZWF0ZUFubm91bmNlbWVudFJlcXVlc3QSDQoFbGFiZWwYASABKAkSDAoEdHlwZRgCIAEoCRIQCghjb250ZW50cxgDIAEoCRIVCg1iaWxsaW5nR3JvdXBzGAQgAygJEhgKEGFsbEJpbGxpbmdHcm91cHMYBSABKAgSDQoFc3RhcnQYBiABKAMSCwoDZW5kGAcgASgDEg4KBnN0YXR1cxgIIAEoCSJ4ChlVcGRhdGVBbm5vdW5jZW1lbnRSZXF1ZXN0EhYKDmFubm91bmNlbWVudElkGAEgASgJEkMKDGFubm91bmNlbWVudBgCIAEoCzItLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVBbm5vdW5jZW1lbnRSZXF1ZXN0IkoKIFVwZGF0ZUFubm91bmNlbWVudHNTdGF0dXNSZXF1ZXN0EhYKDmFubm91bmNlbWVudElkGAEgAygJEg4KBnN0YXR1cxgCIAEoCSJFCh1VcGRhdGVBbm5vdW5jZW1lbnREYXRlUmVxdWVzdBIWCg5hbm5vdW5jZW1lbnRJZBgBIAMoCRIMCgRkYXRlGAIgASgDIjMKGURlbGV0ZUFubm91bmNlbWVudFJlcXVlc3QSFgoOYW5ub3VuY2VtZW50SWQYASABKAki6QEKDEFubm91bmNlbWVudBIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRIMCgR0eXBlGAMgASgJEg8KB21lc3NhZ2UYBCABKAkSFQoNYmlsbGluZ0dyb3VwcxgFIAMoCRIYChBhbGxCaWxsaW5nR3JvdXBzGA0gASgIEg0KBXN0YXJ0GAYgASgJEgsKA2VuZBgHIAEoCRIMCgRkYXRlGAggASgJEg4KBnN0YXR1cxgJIAEoCRISCgp1c2VyU3RhdHVzGAogASgJEg8KB2NyZWF0ZWQYCyABKAkSDwoHdXBkYXRlZBgMIAEoCSI2CiNHZXRCaWxsaW5nR3JvdXBBbm5vdW5jZW1lbnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJIpYBCiRHZXRCaWxsaW5nR3JvdXBBbm5vdW5jZW1lbnRzUmVzcG9uc2USDwoHZ3JvdXBJZBgBIAEoCRIRCglncm91cE5hbWUYAiABKAkSEQoJY29tcGFueUlkGAMgASgJEjcKDWFubm91bmNlbWVudHMYBCADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuQW5ub3VuY2VtZW50IhMKEUdldENyZWRpdHNSZXF1ZXN0IsQBCgZDcmVkaXQSCgoCaWQYASABKAkSEgoKY3VzdG9tZXJJZBgCIAEoCRIUCgxjdXN0b21lck5hbWUYAyABKAkSFAoMY3JlZGl0QW1vdW50GAQgASgBEgwKBHRlcm0YBSABKAkSEwoLZGVzY3JpcHRpb24YBiABKAkSDwoHY3JlYXRlZBgHIAEoCRISCgppbml0aWFsRmVlGAggASgBEhUKDWNyZWRpdEJhbGFuY2UYCSABKAESDwoHYXBwbGllZBgKIAEoCCIXChVHZXRDc3ZTZXR0aW5nc1JlcXVlc3QipAEKCkNzdlNldHRpbmcSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIyCgNjb2wYAyADKAsyJS5ibHVlYXBpLmJpbGxpbmcudjEuQ3N2U2V0dGluZy5Db2x1bW4aSAoGQ29sdW1uEgwKBG5hbWUYASABKAkSCgoCaWQYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDwoHZW5hYmxlZBgEIAEoCCLmAQogVXBkYXRlSW52b2ljZUV4Y2hhbmdlUmF0ZVJlcXVlc3QSDQoFbW9udGgYASABKAkSDgoGdmVuZG9yGAIgASgJElwKDGV4Y2hhbmdlUmF0ZRgDIAMoCzJGLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVJbnZvaWNlRXhjaGFuZ2VSYXRlUmVxdWVzdC5FeGNoYW5nZVJhdGVFbnRyeRIQCghncm91cElkcxgEIAMoCRozChFFeGNoYW5nZVJhdGVFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAE6AjgBIlsKGkNvbnZlcnRJbnZvaWNlVG9QZGZSZXF1ZXN0EgwKBGRhdGUYASABKAkSFQoNYmlsbGluZ2dyb3VwcxgCIAMoCRIYChBhbGxCaWxsaW5nR3JvdXBzGAMgASgIIkQKG0NvbnZlcnRJbnZvaWNlVG9QZGZSZXNwb25zZRIQCghwcm9ncmVzcxgBIAEoCRITCgtkb3dubG9hZFVybBgCIAEoCSKIAgohTGlzdEJpbGxpbmdHcm91cHNQYWdpbmF0ZWRSZXF1ZXN0Ei4KCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrEg8KB3ZlbmRvcnMYAiABKAkSEAoIY2FsY1R5cGUYAyABKAkSEwoLZGlzcGxheUNvc3QYBCABKAkSDgoGYmdUeXBlGAUgASgJEhMKC2NvbXBhbnlOYW1lGAYgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYByABKAkSFgoOYmlsbGluZ0dyb3VwSWQYCCABKAkSEAoIcGFnZVNpemUYCSABKAUSEgoKcGFnZU51bWJlchgKIAEoBSKXAgoUQmlsbGluZ0dyb3VwTGlzdEl0ZW0SGAoQYmlsbGluZ0dyb3VwTmFtZRgBIAEoCRIWCg5iaWxsaW5nR3JvdXBJZBgCIAEoCRITCgtjb21wYW55TmFtZRgDIAEoCRIYChBiaWxsaW5nR3JvdXBUeXBlGAQgASgJEkwKB3ZlbmRvcnMYBSADKAsyOy5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwTGlzdEl0ZW0uQmlsbGluZ0dyb3VwVmVuZG9yEhkKEWJpbGxpbmdJbnRlcm5hbElkGAYgASgJGjUKEkJpbGxpbmdHcm91cFZlbmRvchIOCgZ2ZW5kb3IYASABKAkSDwoHZW5hYmxlZBgCIAEoCCK0AQoiTGlzdEJpbGxpbmdHcm91cHNQYWdpbmF0ZWRSZXNwb25zZRI/Cg1iaWxsaW5nR3JvdXBzGAEgAygLMiguYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cExpc3RJdGVtEhIKCnRvdGFsQ291bnQYAiABKAUSEwoLY3VycmVudFBhZ2UYAyABKAUSEAoIcGFnZVNpemUYBCABKAUSEgoKdG90YWxQYWdlcxgFIAEoBSKOAQohQ2hpbGRCaWxsaW5nR3JvdXBCYXNpY0luZm9ybWF0aW9uEgoKAmlkGAEgASgJEhIKCmludGVybmFsSWQYBiABKAkSEAoIcGFyZW50SWQYAiABKAkSFAoMcm9vdFBhcmVudElkGAUgASgJEgwKBG5hbWUYAyABKAkSEwoLY29tcGFueU5hbWUYBCABKAkivgEKJEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cBIQCgJpZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQISQAoOY2hhcmdpbmdUYXJnZXQYAyABKA4yIi5ibHVlYXBpLmFwaS5yaXBwbGUuQ2hhcmdpbmdUYXJnZXRCBOJBAQISLAoIYWNjb3VudHMYBCADKAsyFC5ibHVlYXBpLmFwaS5BY2NvdW50QgTiQQEBIoACChFDaGlsZEJpbGxpbmdHcm91cBJPChBiYXNpY0luZm9ybWF0aW9uGAEgASgLMjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkNoaWxkQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvbhJNCg9pbnZvaWNlU2V0dGluZ3MYAiABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSOQoLYmlsbGluZ0luZm8YAyABKAsyJC5ibHVlYXBpLmFwaS5yaXBwbGUuQmlsbGluZ0dyb3VwSW5mbxIQCghoYXNDaGlsZBgEIAEoCCKsAgogQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSQwoDYXdzGAEgASgLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cFZlbmRvcmVkSW52b2ljZVNldHRpbmcSIQoZYWNjb3VudFN1cHBvcnRQbGFuRW5hYmxlZBgCIAEoCBJZChphY2NvdW50U3VwcG9ydFBsYW5TZXR0aW5ncxgDIAMoCzI1LmJsdWVhcGkuYXBpLnJpcHBsZS52MS5CaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW4SRQoFYXp1cmUYBCABKAsyNi5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZyKaAgoeQ3JlYXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXF1ZXN0Ek8KEGJhc2ljSW5mb3JtYXRpb24YASABKAsyNS5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXBCYXNpY0luZm9ybWF0aW9uEjkKC2JpbGxpbmdJbmZvGAMgASgLMiQuYmx1ZWFwaS5hcGkucmlwcGxlLkJpbGxpbmdHcm91cEluZm8STQoPaW52b2ljZVNldHRpbmdzGAIgASgLMjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkNoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzEh0KFWludm9pY2VMYXlvdXRDb25maWdJZBgEIAEoCSIhCh9DcmVhdGVDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlIjEKG0dldENoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBISCgppbnRlcm5hbElkGAEgASgJIlYKHEdldENoaWxkQmlsbGluZ0dyb3VwUmVzcG9uc2USNgoHZGV0YWlscxgBIAEoCzIlLmJsdWVhcGkuYmlsbGluZy52MS5DaGlsZEJpbGxpbmdHcm91cCJBCh1SZWFkQ2hpbGRCaWxsaW5nR3JvdXBzUmVxdWVzdBIOCgZyb290SWQYASABKAkSEAoIcGFyZW50SWQYAiABKAkiwAEKHlVwZGF0ZUNoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBISCgppbnRlcm5hbElkGAEgASgJEk8KEGJhc2ljSW5mb3JtYXRpb24YAiABKAsyNS5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXBCYXNpY0luZm9ybWF0aW9uEjkKC2JpbGxpbmdJbmZvGAMgASgLMiQuYmx1ZWFwaS5hcGkucmlwcGxlLkJpbGxpbmdHcm91cEluZm8iIQofVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSI0Ch5EZWxldGVDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCSIhCh9EZWxldGVDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlItABCi1VcGRhdGVDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXR0aW5nc1JlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCRJNCg9pbnZvaWNlU2V0dGluZ3MYAiABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSIgoVaW52b2ljZUxheW91dENvbmZpZ0lkGAMgASgJSACIAQFCGAoWX2ludm9pY2VMYXlvdXRDb25maWdJZCIwCi5VcGRhdGVDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXR0aW5nc1Jlc3BvbnNlIpoDCjNTZXRDaGlsZEJpbGxpbmdHcm91cEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QSGAoKaW50ZXJuYWxJZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQISFAoGcm9vdElkGAMgASgJQgTiQQECEoUBCgdzZXR0aW5nGAQgAygLMm4uYmx1ZWFwaS5iaWxsaW5nLnYxLlNldENoaWxkQmlsbGluZ0dyb3VwQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdC5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nU2V0dGluZ0IE4kEBAhqUAQomQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmcSEAoCaWQYASABKAlCBOJBAQISQAoOY2hhcmdpbmdUYXJnZXQYAiABKA4yIi5ibHVlYXBpLmFwaS5yaXBwbGUuQ2hhcmdpbmdUYXJnZXRCBOJBAQISFgoIYWNjb3VudHMYAyADKAlCBOJBAQEiVAoyU2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCRIKCgJpZBgCIAEoCSKOAQo5U2V0Q2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EhIKCmludGVybmFsSWQYASABKAkSPQoIYWNjb3VudHMYAiADKAsyKy5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudFNlcnZpY2VEaXNjb3VudHMiWQozR2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0EhIKCmludGVybmFsSWQYASABKAkSDgoGdmVuZG9yGAIgASgJIs4BCjRHZXRDaGlsZEJpbGxpbmdHcm91cEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlc3BvbnNlEhAKAmlkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAhJACg5jaGFyZ2luZ1RhcmdldBgDIAEoDjIiLmJsdWVhcGkuYXBpLnJpcHBsZS5DaGFyZ2luZ1RhcmdldEIE4kEBAhIsCghhY2NvdW50cxgEIAMoCzIULmJsdWVhcGkuYXBpLkFjY291bnRCBOJBAQEiSAoyR2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCSJBCjNHZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2USCgoCaWQYASABKAkiUAo6UmVhZENoaWxkQmlsbGluZ0dyb3VwQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBISCgppbnRlcm5hbElkGAEgASgJInkKHUJ1bGtDcmVhdGVCaWxsaW5nR3JvdXBSZXF1ZXN0Eg4KBnZlbmRvchgFIAEoCRISCgpjc3ZDb250ZW50GAEgASgMEhEKCWRlbGltaXRlchgCIAEoCRIRCgloYXNIZWFkZXIYAyABKAgSDgoGZHJ5UnVuGAQgASgIIlUKG0J1bGtDcmVhdGVCaWxsaW5nR3JvdXBFcnJvchINCgVpbmRleBgBIAEoBRIWCg5iaWxsaW5nR3JvdXBJZBgCIAEoCRIPCgdtZXNzYWdlGAMgASgJIu0BCh5CdWxrQ3JlYXRlQmlsbGluZ0dyb3VwTWV0YWRhdGESDgoGc3RhdHVzGAEgASgJEhIKCnRvdGFsQ291bnQYAiABKAUSFgoOcHJvY2Vzc2VkQ291bnQYAyABKAUSFAoMc3VjY2Vzc0NvdW50GAQgASgFEhQKDGZhaWx1cmVDb3VudBgFIAEoBRI/CgZlcnJvcnMYBiADKAsyLy5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa0NyZWF0ZUJpbGxpbmdHcm91cEVycm9yEhEKCXN0YXJ0VGltZRgHIAEoCRIPCgdlbmRUaW1lGAggASgJIrkBChNFeGNsdWRlU2VydmljZUVudHJ5Eg4KBm1zcF9pZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSEAoIcGF5ZXJfaWQYAyABKAkSDwoHc2VydmljZRgEIAEoCRIPCgdwcm9kdWN0GAUgASgJEhcKD2V4Y2VwdF9wYXllcl9pZBgGIAMoCRIOCgZhY3Rpb24YByABKAkSDgoGc3RhdHVzGAggASgJEhUKDWVycm9yX21lc3NhZ2UYCSABKAkijwEKIENyZWF0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXF1ZXN0Eg4KBm1zcF9pZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSEAoIcGF5ZXJfaWQYAyABKAkSDwoHc2VydmljZRgEIAEoCRIPCgdwcm9kdWN0GAUgASgJEhcKD2V4Y2VwdF9wYXllcl9pZBgGIAMoCSJbCiFDcmVhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVzcG9uc2USNgoFZW50cnkYASABKAsyJy5ibHVlYXBpLmJpbGxpbmcudjEuRXhjbHVkZVNlcnZpY2VFbnRyeSKPAQogVXBkYXRlRXhjbHVkZVNlcnZpY2VFbnRyeVJlcXVlc3QSDgoGbXNwX2lkGAEgASgJEg4KBnZlbmRvchgCIAEoCRIQCghwYXllcl9pZBgDIAEoCRIPCgdzZXJ2aWNlGAQgASgJEg8KB3Byb2R1Y3QYBSABKAkSFwoPZXhjZXB0X3BheWVyX2lkGAYgAygJIlsKIVVwZGF0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXNwb25zZRI2CgVlbnRyeRgBIAEoCzInLmJsdWVhcGkuYmlsbGluZy52MS5FeGNsdWRlU2VydmljZUVudHJ5InYKIERlbGV0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXF1ZXN0Eg4KBm1zcF9pZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSEAoIcGF5ZXJfaWQYAyABKAkSDwoHc2VydmljZRgEIAEoCRIPCgdwcm9kdWN0GAUgASgJIlsKIURlbGV0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXNwb25zZRI2CgVlbnRyeRgBIAEoCzInLmJsdWVhcGkuYmlsbGluZy52MS5FeGNsdWRlU2VydmljZUVudHJ5IjwKGkxpc3RFeGNsdWRlU2VydmljZXNSZXF1ZXN0Eg4KBm1zcF9pZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkiVwobTGlzdEV4Y2x1ZGVTZXJ2aWNlc1Jlc3BvbnNlEjgKB2VudHJpZXMYASADKAsyJy5ibHVlYXBpLmJpbGxpbmcudjEuRXhjbHVkZVNlcnZpY2VFbnRyeSJECgtTZXJ2aWNlSXRlbRIKCgJpZBgBIAEoCRIMCgRjb2RlGAIgASgJEg0KBW5hbWVzGAMgAygJEgwKBHNrdXMYBCADKAkiMwoTTGlzdFNlcnZpY2VzUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkSDAoEY29kZRgCIAEoCSJFChRMaXN0U2VydmljZXNSZXNwb25zZRItCgRkYXRhGAEgAygLMh8uYmx1ZWFwaS5iaWxsaW5nLnYxLlNlcnZpY2VJdGVtInIKFkJ1bGtMaW5rQWNjb3VudFJlcXVlc3QSDgoGdmVuZG9yGAUgASgJEhIKCmNzdkNvbnRlbnQYASABKAwSEQoJZGVsaW1pdGVyGAIgASgJEhEKCWhhc0hlYWRlchgDIAEoCBIOCgZkcnlSdW4YBCABKAgiYQoUQnVsa0xpbmtBY2NvdW50RXJyb3ISDQoFaW5kZXgYASABKAUSFgoOYmlsbGluZ0dyb3VwSWQYAiABKAkSEQoJYWNjb3VudElkGAMgASgJEg8KB21lc3NhZ2UYBCABKAki3wEKF0J1bGtMaW5rQWNjb3VudE1ldGFkYXRhEg4KBnN0YXR1cxgBIAEoCRISCgp0b3RhbENvdW50GAIgASgFEhYKDnByb2Nlc3NlZENvdW50GAMgASgFEhQKDHN1Y2Nlc3NDb3VudBgEIAEoBRIUCgxmYWlsdXJlQ291bnQYBSABKAUSOAoGZXJyb3JzGAYgAygLMiguYmx1ZWFwaS5iaWxsaW5nLnYxLkJ1bGtMaW5rQWNjb3VudEVycm9yEhEKCXN0YXJ0VGltZRgHIAEoCRIPCgdlbmRUaW1lGAggASgJIj4KGkJ1bGtUYWdCaWxsaW5nR3JvdXBSZXF1ZXN0EhIKCmNzdkNvbnRlbnQYASABKAwSDAoEbW9kZRgCIAEoCSKCAQoYQnVsa1RhZ0JpbGxpbmdHcm91cEVycm9yEg0KBWluZGV4GAEgASgFEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhIKCmN1c3RvbWVySWQYAyABKAkSCwoDa2V5GAQgASgJEg0KBXZhbHVlGAUgASgJEg8KB21lc3NhZ2UYBiABKAki5wEKG0J1bGtUYWdCaWxsaW5nR3JvdXBNZXRhZGF0YRIOCgZzdGF0dXMYASABKAkSEgoKdG90YWxDb3VudBgCIAEoBRIWCg5wcm9jZXNzZWRDb3VudBgDIAEoBRIUCgxzdWNjZXNzQ291bnQYBCABKAUSFAoMZmFpbHVyZUNvdW50GAUgASgFEjwKBmVycm9ycxgGIAMoCzIsLmJsdWVhcGkuYmlsbGluZy52MS5CdWxrVGFnQmlsbGluZ0dyb3VwRXJyb3ISEQoJc3RhcnRUaW1lGAcgASgJEg8KB2VuZFRpbWUYCCABKAkiNwopR2V0QmlsbGluZ0dyb3VwSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QSCgoCaWQYASABKAkieQoqR2V0QmlsbGluZ0dyb3VwSW52b2ljZUxheW91dENvbmZpZ1Jlc3BvbnNlEjEKBmxheW91dBgBIAEoCzIhLmJsdWVhcGkuYXBpLnJpcHBsZS5JbnZvaWNlTGF5b3V0EgoKAmlkGAIgASgJEgwKBG5hbWUYAyABKAkiSgopU2V0QmlsbGluZ0dyb3VwSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QSCgoCaWQYASABKAkSEQoJbGF5b3V0X2lkGAIgASgJImMKIENyZWF0ZUludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0EgwKBG5hbWUYASABKAkSMQoGbGF5b3V0GAIgASgLMiEuYmx1ZWFwaS5hcGkucmlwcGxlLkludm9pY2VMYXlvdXQiNgohQ3JlYXRlSW52b2ljZUxheW91dENvbmZpZ1Jlc3BvbnNlEhEKCWxheW91dF9pZBgBIAEoCSJvCiBVcGRhdGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBIKCgJpZBgBIAEoCRIxCgZsYXlvdXQYAiABKAsyIS5ibHVlYXBpLmFwaS5yaXBwbGUuSW52b2ljZUxheW91dBIMCgRuYW1lGAMgASgJIiAKHlJlYWRJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdCJuCh9SZWFkSW52b2ljZUxheW91dENvbmZpZ1Jlc3BvbnNlEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSMQoGbGF5b3V0GAMgASgLMiEuYmx1ZWFwaS5hcGkucmlwcGxlLkludm9pY2VMYXlvdXQiOgosRGVsZXRlQmlsbGluZ0dyb3VwSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QSCgoCaWQYASABKAkiLgogRGVsZXRlSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QSCgoCaWQYASABKAkiOQorTGlzdEludm9pY2VMYXlvdXRDb25maWdCaWxsaW5nR3JvdXBzUmVxdWVzdBIKCgJpZBgBIAEoCSJICixMaXN0SW52b2ljZUxheW91dENvbmZpZ0JpbGxpbmdHcm91cHNSZXNwb25zZRIYChBiaWxsaW5nZ3JvdXBfaWRzGAEgAygJMrnKAQoHQmlsbGluZxKAAQoRTGlzdEJpbGxpbmdHcm91cHMSLC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEJpbGxpbmdHcm91cHNSZXF1ZXN0GiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cCIZgtPkkwITEhEvdjEvYmlsbGluZ2dyb3VwczABErABChpMaXN0QmlsbGluZ0dyb3Vwc1BhZ2luYXRlZBI1LmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QmlsbGluZ0dyb3Vwc1BhZ2luYXRlZFJlcXVlc3QaNi5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEJpbGxpbmdHcm91cHNQYWdpbmF0ZWRSZXNwb25zZSIjgtPkkwIdEhsvdjEvYmlsbGluZ2dyb3VwczpwYWdpbmF0ZWQSgwEKEkNyZWF0ZUJpbGxpbmdHcm91cBItLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBSZXF1ZXN0GiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cCIcgtPkkwIWOgEqIhEvdjEvYmlsbGluZ2dyb3VwcxKWAQoYQ3JlYXRlQmlsbGluZ0dyb3VwTWVyZ2VkEjMuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUJpbGxpbmdHcm91cE1lcmdlZFJlcXVlc3QaIC5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwIiOC0+STAh06ASoiGC92MS9iaWxsaW5nZ3JvdXBzL21lcmdlZBJ5ChFEZWxldGVCaWxsaW5Hcm91cBItLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVCaWxsaW5nR3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ih2C0+STAhcqFS92MS9iaWxsaW5nZ3JvdXAve2lkfRKMAQoYQWRkQWNjb3VudFRvQmlsbGluZ0dyb3VwEjMuYmx1ZWFwaS5iaWxsaW5nLnYxLkFkZEFjY291bnRUb0JpbGxpbmdHcm91cFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiI4LT5JMCHToBKiIYL3YxL2JpbGxpbmdncm91cC9hY2NvdW50EpkBCg9HZXRCaWxsaW5nR3JvdXASKi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QmlsbGluZ0dyb3VwUmVxdWVzdBorLmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBSZXNwb25zZSItgtPkkwInEiUvdjEvYmlsbGluZ2dyb3Vwcy97YmlsbGluZ0ludGVybmFsSWR9EpEBCg5HZXRBY2Nlc3NHcm91cBIpLmJsdWVhcGkuYmlsbGluZy52MS5HZXRBY2Nlc3NHcm91cFJlcXVlc3QaKi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QWNjZXNzR3JvdXBSZXNwb25zZSIogtPkkwIiEiAvdjEvYWNjZXNzZ3JvdXBzL3thY2Nlc3NHcm91cElkfRKeAQoWTGlzdEF3c0RhaWx5UnVuSGlzdG9yeRIxLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QXdzRGFpbHlSdW5IaXN0b3J5UmVxdWVzdBomLmJsdWVhcGkuYmlsbGluZy52MS5Bd3NEYWlseVJ1bkhpc3RvcnkiJ4LT5JMCIToBKiIcL3YxL2F3cy9kYWlseXJ1bmhpc3Rvcnk6cmVhZDABEpoBChNMaXN0VXNhZ2VDb3N0c0RyaWZ0Ei4uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RVc2FnZUNvc3RzRHJpZnRSZXF1ZXN0GiMuYmx1ZWFwaS5iaWxsaW5nLnYxLlVzYWdlQ29zdHNEcmlmdCIsgtPkkwImOgEqIiEvdjEve3ZlbmRvcn0vdXNhZ2Vjb3N0c2RyaWZ0OnJlYWQwARJ8Cg1DcmVhdGVJbnZvaWNlEiguYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUludm9pY2VSZXF1ZXN0GhsuYmx1ZWFwaS5hcGkuSW52b2ljZU1lc3NhZ2UiJILT5JMCHjoBKiIZL3YxL2ludm9pY2Uve2RhdGV9OmNyZWF0ZRKbAQoZQ3JlYXRlSW52b2ljZVdpdGhTZXR0aW5ncxIuLmJsdWVhcGkuYmlsbGluZy52MS5TYXZlSW52b2ljZVNldHRpbmdzUmVxdWVzdBobLmJsdWVhcGkuYXBpLkludm9pY2VNZXNzYWdlIjGC0+STAis6ASoiJi92MS9pbnZvaWNlL3tkYXRlfTpjcmVhdGUmc2F2ZXNldHRpbmdzEokBChNTYXZlSW52b2ljZVNldHRpbmdzEi4uYmx1ZWFwaS5iaWxsaW5nLnYxLlNhdmVJbnZvaWNlU2V0dGluZ3NSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiqC0+STAiQ6ASoiHy92MS9pbnZvaWNlL3tkYXRlfTpzYXZlc2V0dGluZ3MSogEKE0NvbnZlcnRJbnZvaWNlVG9QZGYSLi5ibHVlYXBpLmJpbGxpbmcudjEuQ29udmVydEludm9pY2VUb1BkZlJlcXVlc3QaLy5ibHVlYXBpLmJpbGxpbmcudjEuQ29udmVydEludm9pY2VUb1BkZlJlc3BvbnNlIiqC0+STAiQ6ASoiHy92MS9pbnZvaWNlL3tkYXRlfTpjb252ZXJ0dG9wZGYSfQoQR2V0SW52b2ljZVN0YXR1cxIrLmJsdWVhcGkuYmlsbGluZy52MS5HZXRJbnZvaWNlU3RhdHVzUmVxdWVzdBobLmJsdWVhcGkuYXBpLkludm9pY2VNZXNzYWdlIh+C0+STAhkSFy92MS9pbnZvaWNlL3N0YXR1cy97aWR9EosBChFMaXN0SW52b2ljZVN0YXR1cxIsLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVN0YXR1c1JlcXVlc3QaGy5ibHVlYXBpLmFwaS5JbnZvaWNlTWVzc2FnZSIpgtPkkwIjOgEqIh4vdjEvaW52b2ljZS9zdGF0dXMve2RhdGV9OnJlYWQwARJtCgpHZXRJbnZvaWNlEiUuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEludm9pY2VSZXF1ZXN0GhQuYmx1ZWFwaS5hcGkuSW52b2ljZSIigtPkkwIcOgEqIhcvdjEvaW52b2ljZS97ZGF0ZX06cmVhZBJ9CgtMaXN0SW52b2ljZRImLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVJlcXVlc3QaJy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VSZXNwb25zZSIbgtPkkwIVOgEqIhAvdjEvaW52b2ljZTpyZWFkMAESiAEKFVVwZGF0ZUludm9pY2VQcmV2aWV3cxIwLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVJbnZvaWNlUHJldmlld3NSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiWC0+STAh86ASoaGi92MS9pbnZvaWNlL3tkYXRlfTpwcmV2aWV3EpYBChFFeHBvcnRJbnZvaWNlRmlsZRIsLmJsdWVhcGkuYmlsbGluZy52MS5FeHBvcnRJbnZvaWNlRmlsZVJlcXVlc3QaLS5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0SW52b2ljZUZpbGVSZXNwb25zZSIkgtPkkwIeOgEqIhkvdjEvaW52b2ljZS97ZGF0ZX06ZXhwb3J0EpYBChNMaXN0SW52b2ljZVRlbXBsYXRlEi4uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlVGVtcGxhdGVSZXF1ZXN0Gi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlVGVtcGxhdGVSZXNwb25zZSIcgtPkkwIWEhQvdjEvaW52b2ljZS90ZW1wbGF0ZTABEq0BChlHZXRJbnZvaWNlRGlzcGxheVNldHRpbmdzEjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXF1ZXN0GjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXNwb25zZSIjgtPkkwIdEhsvdjEvaW52b2ljZS9kaXNwbGF5c2V0dGluZ3MSlwEKHFVwZGF0ZUludm9pY2VEaXNwbGF5U2V0dGluZ3MSNy5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZURpc3BsYXlTZXR0aW5nc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJoLT5JMCIDoBKiIbL3YxL2ludm9pY2UvZGlzcGxheXNldHRpbmdzEpYBChlVcGRhdGVJbnZvaWNlRXhjaGFuZ2VSYXRlEjQuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUludm9pY2VFeGNoYW5nZVJhdGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiuC0+STAiU6ASoaIC92MS9pbnZvaWNlL2V4Y2hhbmdlcmF0ZS97bW9udGh9EqwBCiFVcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlVGVtcGxhdGUSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVRlbXBsYXRlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIxgtPkkwIrOgEqIiYvdjEvYmlsbGluZ2dyb3Vwcy97aWR9L2ludm9pY2V0ZW1wbGF0ZRKxAQocUmVhZFNlcnZpY2VEaXNjb3VudHNTZXJ2aWNlcxI3LmJsdWVhcGkuYmlsbGluZy52MS5SZWFkU2VydmljZURpc2NvdW50c1NlcnZpY2VzUmVxdWVzdBoeLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5TZXJ2aWNlIjaC0+STAjA6ASoiKy92MS9zZXJ2aWNlZGlzY291bnRzL3t2ZW5kb3J9L3NlcnZpY2VzOnJlYWQwARKqAQodQ3JlYXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHMSOC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Gi4uYmx1ZWFwaS5hcGkucmlwcGxlLnYxLkludm9pY2VTZXJ2aWNlRGlzY291bnRzIh+C0+STAhk6ASoiFC92MS9zZXJ2aWNlZGlzY291bnRzEq8BCh1VcGRhdGVJbnZvaWNlU2VydmljZURpc2NvdW50cxI4LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaLi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuSW52b2ljZVNlcnZpY2VEaXNjb3VudHMiJILT5JMCHjoBKhoZL3YxL3NlcnZpY2VkaXNjb3VudHMve2lkfRKUAQodRGVsZXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHMSOC5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiGC0+STAhsqGS92MS9zZXJ2aWNlZGlzY291bnRzL3tpZH0SqgEKG0xpc3RJbnZvaWNlU2VydmljZURpc2NvdW50cxI2LmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GisuYmx1ZWFwaS5iaWxsaW5nLnYxLkludm9pY2VTZXJ2aWNlRGlzY291bnRzIiSC0+STAh46ASoiGS92MS9zZXJ2aWNlZGlzY291bnRzOnJlYWQwARKmAQoaR2V0SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSNS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Gi4uYmx1ZWFwaS5hcGkucmlwcGxlLnYxLkludm9pY2VTZXJ2aWNlRGlzY291bnRzIiGC0+STAhsSGS92MS9zZXJ2aWNlZGlzY291bnRzL3tpZH0SogEKFkV4cG9ydFNlcnZpY2VEaXNjb3VudHMSMS5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0U2VydmljZURpc2NvdW50c1JlcXVlc3QaLS5ibHVlYXBpLmFwaS5yaXBwbGUudjEuU2VydmljZURpc2NvdW50c0V4cG9ydCImgtPkkwIgOgEqIhsvdjEvc2VydmljZWRpc2NvdW50czpleHBvcnQS8AEKKUNyZWF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzEkQuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpFLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlIjaC0+STAjA6ASoiKy92MS9zZXJ2aWNlZGlzY291bnRzL3tncm91cElkfS9iaWxsaW5nZ3JvdXAS8AEKKVVwZGF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzEkQuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpFLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlIjaC0+STAjA6ASoaKy92MS9zZXJ2aWNlZGlzY291bnRzL3tncm91cElkfS9iaWxsaW5nZ3JvdXASvgEKKURlbGV0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzEkQuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIzgtPkkwItKisvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYmlsbGluZ2dyb3VwEtEBCiJMaXN0QWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEj0uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cyI2gtPkkwIwOgEqIisvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYWNjb3VudDpyZWFkMAES3AEKJENyZWF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cxI/LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GkAuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlIjGC0+STAis6ASoiJi92MS9zZXJ2aWNlZGlzY291bnRzL3tncm91cElkfS9hY2NvdW50EtwBCiRVcGRhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSPy5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpALmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZSIxgtPkkwIrOgEqGiYvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYWNjb3VudBK5AQokUmVtb3ZlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEj8uYmx1ZWFwaS5iaWxsaW5nLnYxLlJlbW92ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiOILT5JMCMjoBKhotL3YxL3NlcnZpY2VkaXNjb3VudHMve2dyb3VwSWR9L2FjY291bnQ6cmVtb3ZlEq8BCiREZWxldGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSPy5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIugtPkkwIoKiYvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYWNjb3VudBLNAQokRXhwb3J0QWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEj8uYmx1ZWFwaS5iaWxsaW5nLnYxLkV4cG9ydEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaNC5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQWNjb3VudFNlcnZpY2VEaXNjb3VudHNFeHBvcnQiLoLT5JMCKDoBKiIjL3YxL3NlcnZpY2VkaXNjb3VudHMvYWNjb3VudDpleHBvcnQS2gEKKUV4cG9ydEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzEkQuYmx1ZWFwaS5iaWxsaW5nLnYxLkV4cG9ydEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoyLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5Hcm91cFNlcnZpY2VEaXNjb3VudHNFeHBvcnQiM4LT5JMCLToBKiIoL3YxL3NlcnZpY2VkaXNjb3VudHMvYmlsbGluZ2dyb3VwOmV4cG9ydBLkAQomR2V0QmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHMSQS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GkIuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2UiM4LT5JMCLRIrL3YxL3NlcnZpY2VkaXNjb3VudHMve2dyb3VwSWR9L2JpbGxpbmdncm91cBJzCg5DcmVhdGVSZXNlbGxlchIpLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVSZXNlbGxlclJlcXVlc3QaHC5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXIiGILT5JMCEjoBKiINL3YxL3Jlc2VsbGVycxJwCg1MaXN0UmVzZWxsZXJzEiguYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RSZXNlbGxlcnNSZXF1ZXN0GhwuYmx1ZWFwaS5hcGkucmlwcGxlLlJlc2VsbGVyIhWC0+STAg8SDS92MS9yZXNlbGxlcnMwARJvCgtHZXRSZXNlbGxlchImLmJsdWVhcGkuYmlsbGluZy52MS5HZXRSZXNlbGxlclJlcXVlc3QaHC5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXIiGoLT5JMCFBISL3YxL3Jlc2VsbGVycy97aWR9EngKDlVwZGF0ZVJlc2VsbGVyEikuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZVJlc2VsbGVyUmVxdWVzdBocLmJsdWVhcGkuYXBpLnJpcHBsZS5SZXNlbGxlciIdgtPkkwIXOgEqGhIvdjEvcmVzZWxsZXJzL3tpZH0SbwoORGVsZXRlUmVzZWxsZXISKS5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlUmVzZWxsZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhqC0+STAhQqEi92MS9yZXNlbGxlcnMve2lkfRKGAQoRR2V0QmlsbGluZ1NldHRpbmcSLC5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QmlsbGluZ1NldHRpbmdSZXF1ZXN0Gi0uYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEJpbGxpbmdTZXR0aW5nUmVzcG9uc2UiFILT5JMCDhIML3YxL3NldHRpbmdzEpsBChFMaXN0RXhjaGFuZ2VSYXRlcxIsLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0RXhjaGFuZ2VSYXRlc1JlcXVlc3QaLS5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEV4Y2hhbmdlUmF0ZXNSZXNwb25zZSIpgtPkkwIjEiEvdjEve3ZlbmRvcn0vZXhjaGFuZ2VyYXRlL3ttb250aH0SlgEKFVNldEdsb2JhbEV4Y2hhbmdlUmF0ZRIwLmJsdWVhcGkuYmlsbGluZy52MS5TZXRHbG9iYWxFeGNoYW5nZVJhdGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjOC0+STAi06ASoiKC92MS9leGNoYW5nZXJhdGUvZ2xvYmFsL3t2ZW5kb3J9L3ttb250aH0SigEKFFNldFBheWVyRXhjaGFuZ2VSYXRlEi8uYmx1ZWFwaS5iaWxsaW5nLnYxLlNldFBheWVyRXhjaGFuZ2VSYXRlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIpgtPkkwIjOgEqIh4vdjEvZXhjaGFuZ2VyYXRlL3BheWVyL3ttb250aH0SnwEKG1NldEJpbGxpbmdHcm91cEV4Y2hhbmdlUmF0ZRI2LmJsdWVhcGkuYmlsbGluZy52MS5TZXRCaWxsaW5nR3JvdXBFeGNoYW5nZVJhdGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjCC0+STAio6ASoiJS92MS9leGNoYW5nZXJhdGUvYmlsbGluZ2dyb3VwL3ttb250aH0SfAoQTGlzdEFjY2Vzc0dyb3VwcxIrLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QWNjZXNzR3JvdXBzUmVxdWVzdBofLmJsdWVhcGkuYXBpLnJpcHBsZS5BY2Nlc3NHcm91cCIYgtPkkwISEhAvdjEvYWNjZXNzZ3JvdXBzMAESfwoRQ3JlYXRlQWNjZXNzR3JvdXASLC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQWNjZXNzR3JvdXBSZXF1ZXN0Gh8uYmx1ZWFwaS5hcGkucmlwcGxlLkFjY2Vzc0dyb3VwIhuC0+STAhU6ASoiEC92MS9hY2Nlc3Nncm91cHMShAEKEVVwZGF0ZUFjY2Vzc0dyb3VwEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFjY2Vzc0dyb3VwUmVxdWVzdBofLmJsdWVhcGkuYXBpLnJpcHBsZS5BY2Nlc3NHcm91cCIggtPkkwIaOgEqGhUvdjEvYWNjZXNzZ3JvdXBzL3tpZH0SeAoRRGVsZXRlQWNjZXNzR3JvdXASLC5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQWNjZXNzR3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ih2C0+STAhcqFS92MS9hY2Nlc3Nncm91cHMve2lkfRKfAQoUTGlzdEFiY0JpbGxpbmdHcm91cHMSLy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEFiY0JpbGxpbmdHcm91cHNSZXF1ZXN0GiMuYmx1ZWFwaS5iaWxsaW5nLnYxLkFiY0JpbGxpbmdHcm91cCIvgtPkkwIpEicvdjEvYmlsbGluZ2dyb3Vwcy9iaWxsaW5nY29uZHVjdG9yL3tpZH0wARK2AQobTGlzdEFiY0JpbGxpbmdHcm91cEFjY291bnRzEjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RBYmNCaWxsaW5nR3JvdXBBY2NvdW50c1JlcXVlc3QaHi5ibHVlYXBpLmJpbGxpbmcudjEuQWJjQWNjb3VudCI9gtPkkwI3EjUvdjEvYmlsbGluZ2dyb3Vwcy9iaWxsaW5nY29uZHVjdG9yL3twYXllcklkfS9hY2NvdW50czABEpwBChZSZWFkSW52b2ljZUFkanVzdG1lbnRzEjEuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlYWRJbnZvaWNlQWRqdXN0bWVudHNSZXF1ZXN0GhwuYmx1ZWFwaS5hcGkud2F2ZS5BZGp1c3RtZW50Ii+C0+STAik6ASoiJC92MS97dmVuZG9yfS9pbnZvaWNlYWRqdXN0bWVudHM6cmVhZDABEqMBChVSZWFkQWRqdXN0bWVudEVudHJpZXMSMC5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZEFkanVzdG1lbnRFbnRyaWVzUmVxdWVzdBomLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5BZGp1c3RtZW50RW50cnkiLoLT5JMCKDoBKiIjL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzOnJlYWQwARKYAQoSR2V0QWRqdXN0bWVudEVudHJ5Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEFkanVzdG1lbnRFbnRyeVJlcXVlc3QaJi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQWRqdXN0bWVudEVudHJ5IiuC0+STAiUSIy92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllcy97aWR9EpABChRBcHBseUFkanVzdG1lbnRFbnRyeRIvLmJsdWVhcGkuYmlsbGluZy52MS5BcHBseUFkanVzdG1lbnRFbnRyeVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiL4LT5JMCKToBKiIkL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzOmFwcGx5EpYBChZSZXN0b3JlQWRqdXN0bWVudEVudHJ5EjEuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlc3RvcmVBZGp1c3RtZW50RW50cnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjGC0+STAis6ASoiJi92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllczpyZXN0b3JlEpUBChRTcGxpdEFkanVzdG1lbnRFbnRyeRIvLmJsdWVhcGkuYmlsbGluZy52MS5TcGxpdEFkanVzdG1lbnRFbnRyeVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiNILT5JMCLjoBKiIpL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzL3tpZH0vc3BsaXQSngEKF0FsbG9jYXRlQWRqdXN0bWVudEVudHJ5EjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkFsbG9jYXRlQWRqdXN0bWVudEVudHJ5UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSI3gtPkkwIxOgEqIiwvdjEve3ZlbmRvcn0vYWRqdXN0bWVudGVudHJpZXMve2lkfS9hbGxvY2F0ZRKrAQobUmVzdG9yZVNwbGl0QWRqdXN0bWVudEVudHJ5EjYuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlc3RvcmVTcGxpdEFkanVzdG1lbnRFbnRyeVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiPILT5JMCNjoBKiIxL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzL3tpZH0vc3BsaXQ6cmVzdG9yZRK0AQoeUmVzdG9yZUFsbG9jYXRlQWRqdXN0bWVudEVudHJ5EjkuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlc3RvcmVBbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiP4LT5JMCOToBKiI0L3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzL3tpZH0vYWxsb2NhdGU6cmVzdG9yZRKgAQoPQ3JlYXRlQ3VzdG9tRmVlEiouYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUN1c3RvbUZlZVJlcXVlc3QaKy5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQ3VzdG9tRmVlUmVzcG9uc2UiNILT5JMCLjoBKiIpL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzL2N1c3RvbWZlZXMSrQEKGExpc3RBZGp1c3RtZW50RW50cnlJdGVtcxIzLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QWRqdXN0bWVudEVudHJ5SXRlbXNSZXF1ZXN0GicuYmx1ZWFwaS5iaWxsaW5nLnYxLkFkanVzdG1lbnRFbnRyeUl0ZW0iMYLT5JMCKzoBKiImL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyeWl0ZW1zOnJlYWQwARKXAQoUTGlzdEFjY291bnRSZXNvdXJjZXMSLy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEFjY291bnRSZXNvdXJjZXNSZXF1ZXN0GiMuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlc291cmNlQWNjb3VudCIngtPkkwIhEh8vdjEvcmVzb3VyY2VzL2FjY291bnRzL3t2ZW5kb3J9MAESiwEKE0dldEFkanVzdG1lbnRDb25maWcSLi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QWRqdXN0bWVudENvbmZpZ1JlcXVlc3QaHS5ibHVlYXBpLmFwaS5BZGp1c3RtZW50Q29uZmlnIiWC0+STAh8SHS92MS9hZGp1c3RtZW50Y29uZmlnL3t2ZW5kb3J9EpQBChZDcmVhdGVBZGp1c3RtZW50Q29uZmlnEjEuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUFkanVzdG1lbnRDb25maWdSZXF1ZXN0Gh0uYmx1ZWFwaS5hcGkuQWRqdXN0bWVudENvbmZpZyIogtPkkwIiOgEqIh0vdjEvYWRqdXN0bWVudGNvbmZpZy97dmVuZG9yfRKUAQoWVXBkYXRlQWRqdXN0bWVudENvbmZpZxIxLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVBZGp1c3RtZW50Q29uZmlnUmVxdWVzdBodLmJsdWVhcGkuYXBpLkFkanVzdG1lbnRDb25maWciKILT5JMCIjoBKhodL3YxL2FkanVzdG1lbnRjb25maWcve3ZlbmRvcn0SigEKFkRlbGV0ZUFkanVzdG1lbnRDb25maWcSMS5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQWRqdXN0bWVudENvbmZpZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJYLT5JMCHyodL3YxL2FkanVzdG1lbnRjb25maWcve3ZlbmRvcn0SlQEKElJlYWRVbnRhZ2dlZEdyb3VwcxItLmJsdWVhcGkuYmlsbGluZy52MS5SZWFkVW50YWdnZWRHcm91cHNSZXF1ZXN0GiEuYmx1ZWFwaS5hcGkucmlwcGxlLlVudGFnZ2VkR3JvdXAiK4LT5JMCJToBKiIgL3YxL3t2ZW5kb3J9L3VudGFnZ2VkZ3JvdXBzOnJlYWQwARK4AQodUmVhZEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZXMSOC5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZXNSZXF1ZXN0GiwuYmx1ZWFwaS5hcGkucmlwcGxlLkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZSItgtPkkwInOgEqIiIvdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlczpyZWFkMAESrwEKG0dldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZRI2LmJsdWVhcGkuYmlsbGluZy52MS5HZXRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0GiwuYmx1ZWFwaS5hcGkucmlwcGxlLkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZSIqgtPkkwIkEiIvdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlcy97aWR9ErMBCh5DcmVhdGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2USOS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBosLmJsdWVhcGkuYXBpLnJpcHBsZS5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2UiKILT5JMCIjoBKiIdL3YxL2N1c3RvbWl6ZWRiaWxsaW5nc2VydmljZXMSuAEKHlVwZGF0ZUN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZRI5LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0GiwuYmx1ZWFwaS5hcGkucmlwcGxlLkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZSItgtPkkwInOgEqGiIvdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlcy97aWR9Ep8BCh5EZWxldGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2USOS5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIqgtPkkwIkKiIvdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlcy97aWR9EvsBCidHZXRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXASQi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdBpDLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXBSZXNwb25zZSJFgtPkkwI/Ej0vdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlcy9iaWxsaW5nZ3JvdXAve2dyb3VwSWR9L3t2ZW5kb3J9MAESzwEKJ1NldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cBJCLmJsdWVhcGkuYmlsbGluZy52MS5TZXRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkiC0+STAkI6ASoiPS92MS9jdXN0b21pemVkYmlsbGluZ3NlcnZpY2VzL2JpbGxpbmdncm91cC97Z3JvdXBJZH0ve3ZlbmRvcn0S0gEKKkRlbGV0ZUN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cBJFLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkWC0+STAj8qPS92MS9jdXN0b21pemVkYmlsbGluZ3NlcnZpY2VzL2JpbGxpbmdncm91cC97Z3JvdXBJZH0ve3ZlbmRvcn0SXgoHR2V0VGFncxIiLmJsdWVhcGkuYmlsbGluZy52MS5HZXRUYWdzUmVxdWVzdBobLmJsdWVhcGkuYmlsbGluZy52MS5UYWdEYXRhIhCC0+STAgoSCC92MS90YWdzMAESfgoRQ3JlYXRlQ3VzdG9tRmllbGQSLC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQ3VzdG9tRmllbGRSZXF1ZXN0Gh8uYmx1ZWFwaS5iaWxsaW5nLnYxLkN1c3RvbUZpZWxkIhqC0+STAhQ6ASoiDy92MS9jdXN0b21maWVsZBKBAQoPTGlzdEN1c3RvbUZpZWxkEiouYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RDdXN0b21GaWVsZFJlcXVlc3QaHy5ibHVlYXBpLmJpbGxpbmcudjEuQ3VzdG9tRmllbGQiH4LT5JMCGToBKiIUL3YxL2N1c3RvbWZpZWxkOnJlYWQwARKUAQoaQWRkQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGQSNS5ibHVlYXBpLmJpbGxpbmcudjEuQWRkQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IieC0+STAiE6ASoiHC92MS9iaWxsaW5nZ3JvdXAvY3VzdG9tZmllbGQSvgEKG0xpc3RCaWxsaW5nR3JvdXBDdXN0b21GaWVsZBI2LmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXF1ZXN0GjcuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RCaWxsaW5nR3JvdXBDdXN0b21GaWVsZFJlc3BvbnNlIiyC0+STAiY6ASoiIS92MS9iaWxsaW5nZ3JvdXAvY3VzdG9tZmllbGQ6cmVhZDABEoMBChVBZGRUYWdzVG9CaWxsaW5nR3JvdXASMC5ibHVlYXBpLmJpbGxpbmcudjEuQWRkVGFnc1RvQmlsbGluZ0dyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIggtPkkwIaOgEqIhUvdjEvYmlsbGluZ2dyb3VwL3RhZ3MSrwEKH1VwZGF0ZU5vblRhZ0dyb3VwVG9CaWxsaW5nR3JvdXASOi5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlTm9uVGFnR3JvdXBUb0JpbGxpbmdHcm91cFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiOILT5JMCMjoBKiItL3YxL2JpbGxpbmdncm91cC97aWR9L3t2ZW5kb3J9L3VudGFnZ2VkZ3JvdXBzErEBCh1EZWxldGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZBI4LmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiPoLT5JMCOCo2L3YxL2JpbGxpbmdncm91cC9jdXN0b21maWVsZC97Z3JvdXBJZH0ve2N1c3RvbUZpZWxkSWR9EoMBChFVcGRhdGVDdXN0b21GaWVsZBIsLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVDdXN0b21GaWVsZFJlcXVlc3QaHy5ibHVlYXBpLmJpbGxpbmcudjEuQ3VzdG9tRmllbGQiH4LT5JMCGToBKhoUL3YxL2N1c3RvbWZpZWxkL3tpZH0SdwoRRGVsZXRlQ3VzdG9tRmllbGQSLC5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQ3VzdG9tRmllbGRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhyC0+STAhYqFC92MS9jdXN0b21maWVsZC97aWR9EnIKEENyZWF0ZUZyZWVGb3JtYXQSKy5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlRnJlZUZvcm1hdFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiGYLT5JMCEzoBKiIOL3YxL2ZyZWVmb3JtYXQSeQoQRGVsZXRlRnJlZUZvcm1hdBIrLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVGcmVlRm9ybWF0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIggtPkkwIaKhgvdjEvZnJlZWZvcm1hdC97Z3JvdXBJZH0SiAEKDUdldEZyZWVGb3JtYXQSKC5ibHVlYXBpLmJpbGxpbmcudjEuR2V0RnJlZUZvcm1hdFJlcXVlc3QaKS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0RnJlZUZvcm1hdFJlc3BvbnNlIiCC0+STAhoSGC92MS9mcmVlZm9ybWF0L3tncm91cElkfTABEr0BCh9HZXRNb250aGx5TWlzY0ZlZUltcG9ydFRlbXBsYXRlEjouYmx1ZWFwaS5iaWxsaW5nLnYxLkdldE1vbnRobHlNaXNjRmVlSW1wb3J0VGVtcGxhdGVSZXF1ZXN0GjAuYmx1ZWFwaS5iaWxsaW5nLnYxLk1vbnRobHlNaXNjRmVlSW1wb3J0VGVtcGxhdGUiLILT5JMCJhIkL3YxL21vbnRobHktbWlzYy1mZWVzOmltcG9ydFRlbXBsYXRlEpEBChlCdWxrSW1wb3J0TW9udGhseU1pc2NGZWVzEjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkJ1bGtJbXBvcnRNb250aGx5TWlzY0ZlZXNSZXF1ZXN0GhEucHJvdG9zLk9wZXJhdGlvbiIrgtPkkwIlOgEqIiAvdjEvbW9udGhseS1taXNjLWZlZXM6YnVsa0ltcG9ydBKVAQoTTGlzdE1vbnRobHlNaXNjRmVlcxIuLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0TW9udGhseU1pc2NGZWVzUmVxdWVzdBovLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0TW9udGhseU1pc2NGZWVzUmVzcG9uc2UiHYLT5JMCFxIVL3YxL21vbnRobHktbWlzYy1mZWVzEo0BChFHZXRNb250aGx5TWlzY0ZlZRIsLmJsdWVhcGkuYmlsbGluZy52MS5HZXRNb250aGx5TWlzY0ZlZVJlcXVlc3QaIi5ibHVlYXBpLmJpbGxpbmcudjEuTW9udGhseU1pc2NGZWUiJoLT5JMCIBIeL3YxL21vbnRobHktbWlzYy1mZWVzL3tyb3dfaWR9EqIBChVFeHBvcnRNb250aGx5TWlzY0ZlZXMSMC5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0TW9udGhseU1pc2NGZWVzUmVxdWVzdBoxLmJsdWVhcGkuYmlsbGluZy52MS5FeHBvcnRNb250aGx5TWlzY0ZlZXNSZXNwb25zZSIkgtPkkwIeEhwvdjEvbW9udGhseS1taXNjLWZlZXM6ZXhwb3J0ErMBChdHZXRNb250aGx5TWlzY0ZlZUltcG9ydBIyLmJsdWVhcGkuYmlsbGluZy52MS5HZXRNb250aGx5TWlzY0ZlZUltcG9ydFJlcXVlc3QaLi5ibHVlYXBpLmJpbGxpbmcudjEuTW9udGhseU1pc2NGZWVJbXBvcnRSZXN1bHQiNILT5JMCLhIsL3YxL21vbnRobHktbWlzYy1mZWUtaW1wb3J0cy97aW1wb3J0X2pvYl9pZH0SsgEKFFVwc2VydE1vbnRobHlNaXNjRmVlEi8uYmx1ZWFwaS5iaWxsaW5nLnYxLlVwc2VydE1vbnRobHlNaXNjRmVlUmVxdWVzdBoiLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZSJFgtPkkwI/OgEqWho6ASoaFS92MS9tb250aGx5LW1pc2MtZmVlcxoeL3YxL21vbnRobHktbWlzYy1mZWVzL3tyb3dfaWR9EocBChREZWxldGVNb250aGx5TWlzY0ZlZRIvLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVNb250aGx5TWlzY0ZlZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJoLT5JMCICoeL3YxL21vbnRobHktbWlzYy1mZWVzL3tyb3dfaWR9EqIBChRHZXRUYWdzQWRkaW5nU2V0dGluZxIvLmJsdWVhcGkuYmlsbGluZy52MS5HZXRUYWdzQWRkaW5nU2V0dGluZ1JlcXVlc3QaJS5ibHVlYXBpLmJpbGxpbmcudjEuVGFnc0FkZGluZ1NldHRpbmciMILT5JMCKhIoL3YxL3t2ZW5kb3J9L3RhZ3NhZGRpbmdzZXR0aW5nL3tncm91cElkfTABEpoBChdVcGRhdGVUYWdzQWRkaW5nU2V0dGluZxIyLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVUYWdzQWRkaW5nU2V0dGluZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiM4LT5JMCLToBKhooL3YxL3t2ZW5kb3J9L3RhZ3NhZGRpbmdzZXR0aW5nL3tncm91cElkfRKhAQoVRXhwb3J0QmlsbGluZ0dyb3VwQ3N2EjAuYmx1ZWFwaS5iaWxsaW5nLnYxLkV4cG9ydEJpbGxpbmdHcm91cENzdlJlcXVlc3QaMS5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0QmlsbGluZ0dyb3VwQ3N2UmVzcG9uc2UiI4LT5JMCHRIbL3YxL2V4cG9ydGNzdi9iaWxsaW5nLWdyb3VwEqkBChdFeHBvcnRJbnZvaWNlU2V0dGluZ0NzdhIyLmJsdWVhcGkuYmlsbGluZy52MS5FeHBvcnRJbnZvaWNlU2V0dGluZ0NzdlJlcXVlc3QaMy5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0SW52b2ljZVNldHRpbmdDc3ZSZXNwb25zZSIlgtPkkwIfEh0vdjEvZXhwb3J0Y3N2L2ludm9pY2Utc2V0dGluZxKnAQoiVXBkYXRlQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvbhI9LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBCYXNpY0luZm9ybWF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIqgtPkkwIkOgEqGh8vdjEvYmlsbGluZ2dyb3VwL3tpZH06YmFzaWNJbmZvEqIBCh5VcGRhdGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZHMSOS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSItgtPkkwInOgEqGiIvdjEvYmlsbGluZ2dyb3VwL3tpZH06Y3VzdG9tRmllbGRzEpwBChxVcGRhdGVCaWxsaW5nR3JvdXBGcmVlRm9ybWF0EjcuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUJpbGxpbmdHcm91cEZyZWVGb3JtYXRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiuC0+STAiU6ASoaIC92MS9iaWxsaW5nZ3JvdXAve2lkfTpmcmVlRm9ybWF0EqUBCiFVcGRhdGVCaWxsaW5nR3JvdXBMaW5rZWRSZXNvdXJjZXMSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwTGlua2VkUmVzb3VyY2VzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIqgtPkkwIkOgEqGh8vdjEvYmlsbGluZ2dyb3VwL3tpZH06cmVzb3VyY2VzEqsBCiFVcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIwgtPkkwIqOgEqGiUvdjEvYmlsbGluZ2dyb3VwL3tpZH06aW52b2ljZVNldHRpbmdzEqsBCiFVcGRhdGVCaWxsaW5nR3JvdXBSZXNlbGxlckNoYXJnZXMSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwUmVzZWxsZXJDaGFyZ2VzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIwgtPkkwIqOgEqGiUvdjEvYmlsbGluZ2dyb3VwL3tpZH06cmVzZWxsZXJDaGFyZ2VzErEBCiNVcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlcxI+LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMoLT5JMCLDoBKhonL3YxL2JpbGxpbmdncm91cC97aWR9OmFkZGl0aW9uYWxDaGFyZ2VzEtQBCiFHZXRCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW4SPC5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuUmVxdWVzdBo9LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5SZXNwb25zZSIygtPkkwIsEiovdjEvYmlsbGluZ2dyb3VwL3tpZH0ve3ZlbmRvcn0vc3VwcG9ydHBsYW4StgEKJFVwZGF0ZUJpbGxpbmdHcm91cEFjY291bnRTdXBwb3J0UGxhbhI/LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi86ASoaKi92MS9iaWxsaW5nZ3JvdXAve2lkfS97dmVuZG9yfS9zdXBwb3J0cGxhbhKBAQoSQ3JlYXRlQW5ub3VuY2VtZW50Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUFubm91bmNlbWVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJILT5JMCHjoBKiIZL3YxL3Jlc2VsbGVyL2Fubm91bmNlbWVudBKSAQoSVXBkYXRlQW5ub3VuY2VtZW50Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFubm91bmNlbWVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiNYLT5JMCLzoBKhoqL3YxL3Jlc2VsbGVyL2Fubm91bmNlbWVudC97YW5ub3VuY2VtZW50SWR9EpwBChlVcGRhdGVBbm5vdW5jZW1lbnRzU3RhdHVzEjQuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFubm91bmNlbWVudHNTdGF0dXNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjGC0+STAis6ASoyJi92MS9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL2J1bGsvc3RhdHVzEqABChZVcGRhdGVBbm5vdW5jZW1lbnREYXRlEjEuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFubm91bmNlbWVudERhdGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjuC0+STAjU6ASoyMC92MS9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL3thbm5vdW5jZW1lbnRJZH0vZGF0ZRKPAQoSRGVsZXRlQW5ub3VuY2VtZW50Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUFubm91bmNlbWVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMoLT5JMCLCoqL3YxL3Jlc2VsbGVyL2Fubm91bmNlbWVudC97YW5ub3VuY2VtZW50SWR9EqABChBHZXRBbm5vdW5jZW1lbnRzEisuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEFubm91bmNlbWVudHNSZXF1ZXN0GiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkFubm91bmNlbWVudCI7gtPkkwI1EjMvYmlsbGluZy92MS9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL3thbm5vdW5jZW1lbnRJZH0wARLOAQocR2V0QmlsbGluZ0dyb3VwQW5ub3VuY2VtZW50cxI3LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBBbm5vdW5jZW1lbnRzUmVxdWVzdBo4LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBBbm5vdW5jZW1lbnRzUmVzcG9uc2UiOYLT5JMCMxIxL3YxL2JpbGxpbmdncm91cC9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL3tncm91cElkfTABEmYKCkdldENyZWRpdHMSJS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3JlZGl0c1JlcXVlc3QaGi5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlZGl0IhOC0+STAg0SCy92MS9jcmVkaXRzMAESdgoOR2V0Q3N2U2V0dGluZ3MSKS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3N2U2V0dGluZ3NSZXF1ZXN0Gh4uYmx1ZWFwaS5iaWxsaW5nLnYxLkNzdlNldHRpbmciF4LT5JMCERIPL3YxL2NzdnNldHRpbmdzMAESqQEKF0NyZWF0ZUNoaWxkQmlsbGluZ0dyb3VwEjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUNoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBozLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlIiWC0+STAh86ASoiGi92MS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuEqoBChRHZXRDaGlsZEJpbGxpbmdHcm91cBIvLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QaMC5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSIvgtPkkwIpEicvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0SoAEKFlJlYWRDaGlsZEJpbGxpbmdHcm91cHMSMS5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZENoaWxkQmlsbGluZ0dyb3Vwc1JlcXVlc3QaJS5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXAiKoLT5JMCJDoBKiIfL3YxL2JpbGxpbmdncm91cHMvY2hpbGRyZW46cmVhZDABErYBChdVcGRhdGVDaGlsZEJpbGxpbmdHcm91cBIyLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QaMy5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSIygtPkkwIsOgEqGicvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0SswEKF0RlbGV0ZUNoaWxkQmlsbGluZ0dyb3VwEjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUNoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBozLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlIi+C0+STAikqJy92MS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfRLzAQomVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSQS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3NSZXF1ZXN0GkIuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUNoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzUmVzcG9uc2UiQoLT5JMCPDoBKho3L3YxL2JpbGxpbmdncm91cHMvY2hpbGRyZW4ve2ludGVybmFsSWR9L2ludm9pY2VTZXR0aW5ncxLSAQorU2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJGLmJsdWVhcGkuYmlsbGluZy52MS5TZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9OgEqIjgvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0vc2VydmljZURpc2NvdW50cxLtAQoyU2V0Q2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSTS5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAko6ASoiRS92MS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfS9zZXJ2aWNlRGlzY291bnRzL2FjY291bnRzOnNldBLlAQosU2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2USRy5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlSC0+STAk46ASoiSS92MS97dmVuZG9yfS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfS9jdXN0b21pemVkQmlsbGluZ1NlcnZpY2USlgIKLEdldENoaWxkQmlsbGluZ0dyb3VwQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlEkcuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldENoaWxkQmlsbGluZ0dyb3VwQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBpILmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlc3BvbnNlIlGC0+STAksSSS92MS97dmVuZG9yfS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfS9jdXN0b21pemVkQmlsbGluZ1NlcnZpY2UwARKAAgorR2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJGLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpHLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2UiQILT5JMCOhI4L3YxL2JpbGxpbmdncm91cHMvY2hpbGRyZW4ve2ludGVybmFsSWR9L3NlcnZpY2VEaXNjb3VudHMSiwIKM1JlYWRDaGlsZEJpbGxpbmdHcm91cEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cxJOLmJsdWVhcGkuYmlsbGluZy52MS5SZWFkQ2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cyJOgtPkkwJIEkYvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0vc2VydmljZURpc2NvdW50cy9hY2NvdW50czpyZWFkMAEShwEKFkJ1bGtDcmVhdGVCaWxsaW5nR3JvdXASMS5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa0NyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3QaES5wcm90b3MuT3BlcmF0aW9uIieC0+STAiE6ASoiHC92MS9iaWxsaW5nZ3JvdXBzOmJ1bGtDcmVhdGUSvwEKGUNyZWF0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnkSNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlRXhjbHVkZVNlcnZpY2VFbnRyeVJlcXVlc3QaNS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlRXhjbHVkZVNlcnZpY2VFbnRyeVJlc3BvbnNlIjWC0+STAi86ASoiKi92MS9iaWxsaW5nZ3JvdXBzL2V4Y2x1ZGUtc2VydmljZS1zZXR0aW5ncxK/AQoZVXBkYXRlRXhjbHVkZVNlcnZpY2VFbnRyeRI0LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVxdWVzdBo1LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVzcG9uc2UiNYLT5JMCLzoBKhoqL3YxL2JpbGxpbmdncm91cHMvZXhjbHVkZS1zZXJ2aWNlLXNldHRpbmdzErwBChlEZWxldGVFeGNsdWRlU2VydmljZUVudHJ5EjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXF1ZXN0GjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXNwb25zZSIygtPkkwIsKiovdjEvYmlsbGluZ2dyb3Vwcy9leGNsdWRlLXNlcnZpY2Utc2V0dGluZ3MSqgEKE0xpc3RFeGNsdWRlU2VydmljZXMSLi5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEV4Y2x1ZGVTZXJ2aWNlc1JlcXVlc3QaLy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEV4Y2x1ZGVTZXJ2aWNlc1Jlc3BvbnNlIjKC0+STAiwSKi92MS9iaWxsaW5nZ3JvdXBzL2V4Y2x1ZGUtc2VydmljZS1zZXR0aW5ncxKAAQoMTGlzdFNlcnZpY2VzEicuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RTZXJ2aWNlc1JlcXVlc3QaKC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdFNlcnZpY2VzUmVzcG9uc2UiHYLT5JMCFxIVL3YxL3t2ZW5kb3J9L3NlcnZpY2VzEn4KD0J1bGtMaW5rQWNjb3VudBIqLmJsdWVhcGkuYmlsbGluZy52MS5CdWxrTGlua0FjY291bnRSZXF1ZXN0GhEucHJvdG9zLk9wZXJhdGlvbiIsgtPkkwImOgEqIiEvdjEvYmlsbGluZ2dyb3VwczpidWxrTGlua0FjY291bnQSfgoTQnVsa1RhZ0JpbGxpbmdHcm91cBIuLmJsdWVhcGkuYmlsbGluZy52MS5CdWxrVGFnQmlsbGluZ0dyb3VwUmVxdWVzdBoRLnByb3Rvcy5PcGVyYXRpb24iJILT5JMCHjoBKiIZL3YxL2JpbGxpbmdncm91cHM6YnVsa1RhZxLXAQoiR2V0QmlsbGluZ0dyb3VwSW52b2ljZUxheW91dENvbmZpZxI9LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBo+LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnUmVzcG9uc2UiMoLT5JMCLBIqL3YxL2JpbGxpbmdncm91cHMve2lkfS9pbnZvaWNlbGF5b3V0Y29uZmlnErIBCiJTZXRCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnEj0uYmx1ZWFwaS5iaWxsaW5nLnYxLlNldEJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi86ASoiKi92MS9iaWxsaW5nZ3JvdXBzL3tpZH0vaW52b2ljZWxheW91dGNvbmZpZxKsAQoZQ3JlYXRlSW52b2ljZUxheW91dENvbmZpZxI0LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBo1LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVzcG9uc2UiIoLT5JMCHDoBKiIXL3YxL2ludm9pY2VsYXlvdXRjb25maWcSkgEKGVVwZGF0ZUludm9pY2VMYXlvdXRDb25maWcSNC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJ4LT5JMCIToBKhocL3YxL2ludm9pY2VsYXlvdXRjb25maWcve2lkfRKtAQoXUmVhZEludm9pY2VMYXlvdXRDb25maWcSMi5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0GjMuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlYWRJbnZvaWNlTGF5b3V0Q29uZmlnUmVzcG9uc2UiJ4LT5JMCIToBKiIcL3YxL2ludm9pY2VsYXlvdXRjb25maWc6cmVhZDABErUBCiVEZWxldGVCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnEkAuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjKC0+STAiwqKi92MS9iaWxsaW5nZ3JvdXBzL3tpZH0vaW52b2ljZWxheW91dGNvbmZpZxKPAQoZRGVsZXRlSW52b2ljZUxheW91dENvbmZpZxI0LmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIkgtPkkwIeKhwvdjEvaW52b2ljZWxheW91dGNvbmZpZy97aWR9Et0BCiRMaXN0SW52b2ljZUxheW91dENvbmZpZ0JpbGxpbmdHcm91cHMSPy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VMYXlvdXRDb25maWdCaWxsaW5nR3JvdXBzUmVxdWVzdBpALmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZUxheW91dENvbmZpZ0JpbGxpbmdHcm91cHNSZXNwb25zZSIygtPkkwIsEiovdjEvaW52b2ljZWxheW91dGNvbmZpZy97aWR9L2JpbGxpbmdncm91cHManQGSQZkBEkYoQkVUQSkgQmlsbGluZyBBUEkuIEJhc2UgVVJMOiBodHRwczovL2FwaS5hbHBoYXVzLmNsb3VkL20vYmx1ZS9iaWxsaW5nGk8KElNlcnZpY2UgZGVmaW5pdGlvbhI5aHR0cHM6Ly9naXRodWIuY29tL2FscGhhdXNsYWJzL2JsdWVhcGkvdHJlZS9tYWluL2JpbGxpbmcvQlEKGWNsb3VkLmFscGhhdXMuYXBpLmJpbGxpbmdCDEJpbGxpbmdQcm90b1omZ2l0aHViLmNvbS9hbHBoYXVzbGFicy9ibHVlYXBpL2JpbGxpbmdiBnByb3RvMw", [file_api_account, file_api_invoice, file_api_costtag, file_api_ripple_accessgroup, file_api_ripple_billinggroup, file_api_ripple_reseller, file_api_ripple_yearmonth, file_api_ripple_rounding, file_api_ripple_invoicelayout, file_api_ripple_duedate, file_api_ripple_exchangerate, file_api_ripple_untaggedgroup, file_api_ripple_customizedbillingservice, file_api_ripple_v1_invoiceservicediscounts, file_api_ripple_v1_accountsupportplan, file_api_ripple_v1_adjustmententry, file_api_adjustment, file_api_wave_adjustment, file_protos_operation, file_google_api_annotations, file_google_api_field_behavior, file_google_protobuf_empty, file_protoc_gen_openapiv2_options_annotations, file_google_protobuf_field_mask]);
56
+ fileDesc("ChhiaWxsaW5nL3YxL2JpbGxpbmcucHJvdG8SEmJsdWVhcGkuYmlsbGluZy52MSKgBAoMQmlsbGluZ0dyb3VwEhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYAyABKAkSEwoLY29tcGFueU5hbWUYByABKAkSDAoEdHlwZRgMIAEoCRIQCghoYXNDaGlsZBgNIAEoCBI+ChBiaWxsaW5nR3JvdXBJbmZvGAogASgLMiQuYmx1ZWFwaS5hcGkucmlwcGxlLkJpbGxpbmdHcm91cEluZm8SOgoOYWNjb3VudE9wdGlvbnMYCCABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnMSJgoIYWNjb3VudHMYBCADKAsyFC5ibHVlYXBpLmFwaS5BY2NvdW50EiIKBHRhZ3MYBiADKAsyFC5ibHVlYXBpLmFwaS5Db3N0VGFnEkgKD2ludm9pY2VTZXR0aW5ncxgFIAEoCzIvLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSSAoPYWRkaXRpb25hbEl0ZW1zGAsgASgLMi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cEFkZGl0aW9uYWxJdGVtcxIyCgphd3NPcHRpb25zGAkgASgLMh4uYmx1ZWFwaS5iaWxsaW5nLnYxLkF3c09wdGlvbnMioAEKG0JpbGxpbmdHcm91cEFkZGl0aW9uYWxJdGVtcxIpCgNhd3MYASADKAsyHC5ibHVlYXBpLmFwaS5BZGRpdGlvbmFsSXRlbXMSKwoFYXp1cmUYAiADKAsyHC5ibHVlYXBpLmFwaS5BZGRpdGlvbmFsSXRlbXMSKQoDZ2NwGAMgAygLMhwuYmx1ZWFwaS5hcGkuQWRkaXRpb25hbEl0ZW1zIu4BChtCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSQwoDYXdzGAEgASgLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cFZlbmRvcmVkSW52b2ljZVNldHRpbmcSRQoFYXp1cmUYAiABKAsyNi5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZxJDCgNnY3AYAyABKAsyNi5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZyLxAwoiQmlsbGluZ0dyb3VwVmVuZG9yZWRJbnZvaWNlU2V0dGluZxIQCghjYWxjVHlwZRgBIAEoCRIUCgxkaXNjb3VudFJhdGUYAiABKAESFwoPc3Vic3RpdHV0aW9uRmVlGAMgASgJEhcKD3N1YnN0aXR1dGlvbkZpeBgEIAEoARIYChBzdWJzdGl0dXRpb25SYXRlGAUgASgBEhIKCnN1cHBvcnRGZWUYBiABKAkSEwoLc3VwcG9ydFJhdGUYByABKAESEgoKc3VwcG9ydEZpeBgIIAEoARIPCgd0YXhSYXRlGAkgASgBEhAKCGN1cnJlbmN5GAogASgJEhsKE2Rpc2NvdW50VGFyZ2V0VXNhZ2UYCyABKAkSIgoac3Vic3RpdHV0aW9uRmVlVGFyZ2V0VXNhZ2UYDCABKAkSGQoRZGlzY291bnRDYWxjTG9naWMYDSABKAkSIQoZc3Vic3RpdHV0aW9uRmVlQ2FsY1RhcmdldBgOIAEoCRIfChdzdWJzdGl0dXRpb25GZWVDYWxjVHlwZRgPIAEoCRIbChNzdXBwb3J0QW1vdW50VGFyZ2V0GBAgASgJEhwKFHN1cHBvcnRGZWVDYWxjVGFyZ2V0GBEgASgJEhwKFHN1cHBvcnRGZWVBZGp1c3RtZW50GBIgASgBIpIBChhMaXN0QmlsbGluZ0dyb3Vwc1JlcXVlc3QSLgoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sSDwoHdmVuZG9ycxgCIAEoCRIQCghjYWxjVHlwZRgDIAEoCRITCgtkaXNwbGF5Q29zdBgEIAEoCRIOCgZiZ1R5cGUYBSABKAkiswQKGUNyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3QSFgoOYmlsbGluZ0dyb3VwSWQYASABKAkSGAoQYmlsbGluZ0dyb3VwTmFtZRgCIAEoCRITCgtjb21wYW55TmFtZRgDIAEoCRIUCgxiaWxsaW5nVGl0bGUYBCABKAkSEwoLcGhvbmVOdW1iZXIYBSABKAkSEgoKcG9zdGFsQ29kZRgGIAEoCRIPCgdhZGRyZXNzGAcgASgJEhAKCHBlcnNvbmFsGAggASgJEg8KB3JlbWFya3MYCSABKAkSEQoJcHJvamVjdElkGAogASgJEhAKCGxhbmd1YWdlGAsgASgJEhMKC2Rpc3BsYXlDb3N0GAwgASgJEhgKEGV4Y2hhbmdlUmF0ZVR5cGUYDSABKAkSOgoOYWNjb3VudE9wdGlvbnMYDyABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnMSRgoIaW52b2ljZXMYDiABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2USMgoKYXdzT3B0aW9ucxgQIAEoCzIeLmJsdWVhcGkuYmlsbGluZy52MS5Bd3NPcHRpb25zEgwKBGNpdHkYESABKAkSEgoKcHJlZmVjdHVyZRgSIAEoCRIPCgdjb3VudHJ5GBMgASgJEh0KFWludm9pY2VMYXlvdXRDb25maWdJZBgUIAEoCSI1CgpBd3NPcHRpb25zEhYKDnVzZVByb0Zvcm1hQ3VyGAEgASgIEg8KB3BheWVySWQYAiABKAkiqwEKDkFjY291bnRPcHRpb25zEjEKA2F3cxgBIAEoCzIkLmJsdWVhcGkuYmlsbGluZy52MS5SZWdpc3RlckFjY291bnRzEjEKA2djcBgCIAEoCzIkLmJsdWVhcGkuYmlsbGluZy52MS5SZWdpc3RlckFjY291bnRzEjMKBWF6dXJlGAMgASgLMiQuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlZ2lzdGVyQWNjb3VudHMiTgoQUmVnaXN0ZXJBY2NvdW50cxIPCgdlbmFibGVkGAEgASgIEhEKCWFjY291bnRJZBgCIAEoCRIWCg51bkxpbmtPblJlbW92ZRgDIAEoCCJUCg5WZW5kb3JBY2NvdW50cxIOCgZ2ZW5kb3IYASABKAkSMgoIYWNjb3VudHMYAiADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudFRvQWRkImAKDEF6dXJlT3B0aW9ucxIVCg1yZXNvdXJjZUdyb3VwGAEgASgIEhsKE2FwcGx5UGNFYXJuZWRDcmVkaXQYAiABKAgSHAoUYXBwbHlDYW1wYWlnblByaWNpbmcYAyABKAgiqgcKH0NyZWF0ZUJpbGxpbmdHcm91cE1lcmdlZFJlcXVlc3QSFgoOYmlsbGluZ0dyb3VwSWQYASABKAkSGAoQYmlsbGluZ0dyb3VwTmFtZRgCIAEoCRITCgtjb21wYW55TmFtZRgDIAEoCRIUCgxiaWxsaW5nVGl0bGUYBCABKAkSEwoLcGhvbmVOdW1iZXIYBSABKAkSEgoKcG9zdGFsQ29kZRgGIAEoCRIPCgdhZGRyZXNzGAcgASgJEhAKCHBlcnNvbmFsGAggASgJEg8KB3JlbWFya3MYCSABKAkSEQoJcHJvamVjdElkGAogASgJEhAKCGxhbmd1YWdlGAsgASgJEhMKC2Rpc3BsYXlDb3N0GAwgASgJEhgKEGV4Y2hhbmdlUmF0ZVR5cGUYDSABKAkSOgoOYWNjb3VudE9wdGlvbnMYDyABKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudE9wdGlvbnMSRgoIaW52b2ljZXMYDiABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2USMgoKYXdzT3B0aW9ucxgQIAEoCzIeLmJsdWVhcGkuYmlsbGluZy52MS5Bd3NPcHRpb25zEgwKBGNpdHkYESABKAkSEgoKcHJlZmVjdHVyZRgSIAEoCRIPCgdjb3VudHJ5GBMgASgJEhkKEWludm9pY2VUZW1wbGF0ZUlkGBQgASgJEjMKC3RhZ1NldHRpbmdzGBUgAygLMh4uYmx1ZWFwaS5iaWxsaW5nLnYxLlRhZ1NldHRpbmcSOAoNbm9uVGFnU2V0dGluZxgWIAEoCzIhLmJsdWVhcGkuYmlsbGluZy52MS5Ob25UYWdTZXR0aW5nEjoKDnZlbmRvckFjY291bnRzGBcgAygLMiIuYmx1ZWFwaS5iaWxsaW5nLnYxLlZlbmRvckFjY291bnRzElsKDGN1c3RvbUZpZWxkcxgYIAMoCzJFLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBNZXJnZWRSZXF1ZXN0LkN1c3RvbUZpZWxkc0VudHJ5EjYKDGF6dXJlT3B0aW9ucxgZIAEoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5BenVyZU9wdGlvbnMaMwoRQ3VzdG9tRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASL/AQogQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2USRwoDYXdzGAEgASgLMjouYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3RJbnZvaWNlVmVuZG9yEkkKBWF6dXJlGAIgASgLMjouYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3RJbnZvaWNlVmVuZG9yEkcKA2djcBgDIAEoCzI6LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBSZXF1ZXN0SW52b2ljZVZlbmRvciL1AwomQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2VWZW5kb3ISEAoIY2FsY1R5cGUYASABKAkSFAoMZGlzY291bnRSYXRlGAIgASgBEhcKD3N1YnN0aXR1dGlvbkZlZRgDIAEoCRIXCg9zdWJzdGl0dXRpb25GaXgYBCABKAESGAoQc3Vic3RpdHV0aW9uUmF0ZRgFIAEoARISCgpzdXBwb3J0RmVlGAYgASgJEhMKC3N1cHBvcnRSYXRlGAcgASgBEhIKCnN1cHBvcnRGaXgYCCABKAESDwoHdGF4UmF0ZRgJIAEoARIQCghjdXJyZW5jeRgKIAEoCRIbChNkaXNjb3VudFRhcmdldFVzYWdlGAsgASgJEiIKGnN1YnN0aXR1dGlvbkZlZVRhcmdldFVzYWdlGAwgASgJEhkKEWRpc2NvdW50Q2FsY0xvZ2ljGA0gASgJEiEKGXN1YnN0aXR1dGlvbkZlZUNhbGNUYXJnZXQYDiABKAkSHwoXc3Vic3RpdHV0aW9uRmVlQ2FsY1R5cGUYDyABKAkSGwoTc3VwcG9ydEFtb3VudFRhcmdldBgQIAEoCRIcChRzdXBwb3J0RmVlQ2FsY1RhcmdldBgRIAEoCRIcChRzdXBwb3J0RmVlQWRqdXN0bWVudBgSIAEoASJjChZHZXRCaWxsaW5nR3JvdXBSZXF1ZXN0EhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEi4KCmZpZWxkX21hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIlEKF0dldEJpbGxpbmdHcm91cFJlc3BvbnNlEjYKDGJpbGxpbmdHcm91cBgBIAEoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXAilgEKC0FjY2Vzc0dyb3VwEhUKDWFjY2Vzc0dyb3VwSWQYASABKAkSFwoPYWNjZXNzR3JvdXBOYW1lGAIgASgJEh4KFmFjY2Vzc0dyb3VwRGVzY3JpcHRpb24YAyABKAkSNwoNYmlsbGluZ0dyb3VwcxgEIAMoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXAiXgoVR2V0QWNjZXNzR3JvdXBSZXF1ZXN0EhUKDWFjY2Vzc0dyb3VwSWQYASABKAkSLgoKZmllbGRfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2siTgoWR2V0QWNjZXNzR3JvdXBSZXNwb25zZRI0CgthY2Nlc3NHcm91cBgBIAEoCzIfLmJsdWVhcGkuYmlsbGluZy52MS5BY2Nlc3NHcm91cCKvAgoSQXdzRGFpbHlSdW5IaXN0b3J5EhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEg0KBW1vbnRoGAMgASgJEkAKCGFjY291bnRzGAQgAygLMi4uYmx1ZWFwaS5iaWxsaW5nLnYxLkF3c0RhaWx5UnVuSGlzdG9yeS5BY2NvdW50GpQBCgdBY2NvdW50EhEKCWFjY291bnRJZBgBIAEoCRJHCgdoaXN0b3J5GAIgAygLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkF3c0RhaWx5UnVuSGlzdG9yeS5BY2NvdW50Lkhpc3RvcnkaLQoHSGlzdG9yeRIRCgl0aW1lc3RhbXAYASABKAkSDwoHdHJpZ2dlchgCIAEoCSI/Ch1MaXN0QXdzRGFpbHlSdW5IaXN0b3J5UmVxdWVzdBINCgVtb250aBgBIAEoCRIPCgdncm91cElkGAIgASgJIlYKGkxpc3RVc2FnZUNvc3RzRHJpZnRSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRIZChFiaWxsaW5nSW50ZXJuYWxJZBgCIAEoCRINCgVtb250aBgDIAEoCSKGAQoPVXNhZ2VDb3N0c0RyaWZ0EhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEg8KB2FjY291bnQYAyABKAkSEAoIc25hcHNob3QYBCABKAESDwoHY3VycmVudBgFIAEoARIMCgRkaWZmGAYgASgBIjIKEUdldEludm9pY2VSZXF1ZXN0EgwKBGRhdGUYASABKAkSDwoHZ3JvdXBJZBgCIAEoCSI5ChhFeHBvcnRJbnZvaWNlRmlsZVJlcXVlc3QSDAoEZGF0ZRgBIAEoCRIPCgdncm91cElkGAIgASgJIigKGUV4cG9ydEludm9pY2VGaWxlUmVzcG9uc2USCwoDdXJsGAEgASgJIjUKI1JlYWRTZXJ2aWNlRGlzY291bnRzU2VydmljZXNSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCSIkCiJMaXN0SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Il4KIUdldEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIKCgJpZBgBIAEoCRItCglmaWVsZE1hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrImoKF0ludm9pY2VTZXJ2aWNlRGlzY291bnRzEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDwoHY3JlYXRlZBgEIAEoCRIPCgd1cGRhdGVkGAUgASgJIhwKGkxpc3RJbnZvaWNlVGVtcGxhdGVSZXF1ZXN0Il0KKFVwZGF0ZUJpbGxpbmdHcm91cEludm9pY2VUZW1wbGF0ZVJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISHwoRaW52b2ljZVRlbXBsYXRlSWQYAiABKAlCBOJBAQIingIKG0xpc3RJbnZvaWNlVGVtcGxhdGVSZXNwb25zZRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg8KB2NyZWF0ZWQYBCABKAkSDwoHdXBkYXRlZBgFIAEoCRIZChFudW1iZXJPZkNvbm5lY3RlZBgGIAEoBRJQChVjb25uZWN0ZWRCaWxsaW5nR3JvdXAYByADKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuSW52b2ljZUNvbm5lY3RlZEJpbGxpbmdHcm91cHMSQQoIaW52b2ljZXMYCCABKAsyLy5ibHVlYXBpLmJpbGxpbmcudjEuQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzIiIKIEdldEludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXF1ZXN0IkgKIUdldEludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXNwb25zZRIjChtzaG93UklTUFVwZnJvbnRUaW1lSW50ZXJ2YWwYASABKAgirAEKI1VwZGF0ZUludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXF1ZXN0ElUKB3NldHRpbmcYASADKAsyRC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZURpc3BsYXlTZXR0aW5nc1JlcXVlc3QuU2V0dGluZ0VudHJ5Gi4KDFNldHRpbmdFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAg6AjgBImwKHUludm9pY2VDb25uZWN0ZWRCaWxsaW5nR3JvdXBzEhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYAyABKAkiPAopTGlzdEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCSKHAQoeQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEgoKAmlkGAEgASgJEg8KB2FjY291bnQYAiABKAkSSAoQc2VydmljZURpc2NvdW50cxgDIAEoCzIuLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50cyI4ChdBY2NvdW50U2VydmljZURpc2NvdW50cxIKCgJpZBgBIAEoCRIRCglhY2NvdW50SWQYAiABKAkifQorQ3JlYXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJEj0KCGFjY291bnRzGAQgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIm0KLENyZWF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlEj0KCGFjY291bnRzGAQgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIn0KK1VwZGF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRI9CghhY2NvdW50cxgEIAMoCzIrLmJsdWVhcGkuYmlsbGluZy52MS5BY2NvdW50U2VydmljZURpc2NvdW50cyJtCixVcGRhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZRI9CghhY2NvdW50cxgEIAMoCzIrLmJsdWVhcGkuYmlsbGluZy52MS5BY2NvdW50U2VydmljZURpc2NvdW50cyI+CitEZWxldGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkifQorUmVtb3ZlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJEj0KCGFjY291bnRzGAQgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIk8KMENyZWF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJEgoKAmlkGAIgASgJIj8KMUNyZWF0ZUJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2USCgoCaWQYASABKAkiTwowVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSCgoCaWQYAiABKAkiPwoxVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZRIKCgJpZBgBIAEoCSJDCjBEZWxldGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCSJXChRDcmVhdGVJbnZvaWNlUmVxdWVzdBIMCgRkYXRlGAQgASgJEg4KBnZlbmRvchgBIAEoCRIRCglhbGxHcm91cHMYAiABKAgSDgoGZ3JvdXBzGAMgAygJIiUKF0dldEludm9pY2VTdGF0dXNSZXF1ZXN0EgoKAmlkGAEgASgJIigKGExpc3RJbnZvaWNlU3RhdHVzUmVxdWVzdBIMCgRkYXRlGAEgASgJImAKHFVwZGF0ZUludm9pY2VQcmV2aWV3c1JlcXVlc3QSDAoEZGF0ZRgBIAEoCRIRCglhbGxHcm91cHMYAiABKAgSDgoGZ3JvdXBzGAMgAygJEg8KB2VuYWJsZWQYBCABKAgizwEKFUNyZWF0ZVJlc2VsbGVyUmVxdWVzdBIPCgdncm91cElkGAEgASgJEg0KBWVtYWlsGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJEhQKDG5vdGlmaWNhdGlvbhgEIAEoCBI2Cgp3YXZlQ29uZmlnGAUgAygLMiIuYmx1ZWFwaS5hcGkucmlwcGxlLlJlc2VsbGVyQ29uZmlnEjYKCmFxdWFDb25maWcYBiADKAsyIi5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXJDb25maWciRgoUTGlzdFJlc2VsbGVyc1JlcXVlc3QSLgoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2siUAoSR2V0UmVzZWxsZXJSZXF1ZXN0EgoKAmlkGAEgASgJEi4KCmZpZWxkX21hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIqYCChVVcGRhdGVSZXNlbGxlclJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISEwoFZW1haWwYAiABKAlCBOJBAQESFwoIcGFzc3dvcmQYAyABKAlCBeJBAgQBEjwKCndhdmVDb25maWcYBCADKAsyIi5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXJDb25maWdCBOJBAQESPAoKYXF1YUNvbmZpZxgFIAMoCzIiLmJsdWVhcGkuYXBpLnJpcHBsZS5SZXNlbGxlckNvbmZpZ0IE4kEBARIbCgxub3RpZmljYXRpb24YBiABKAhCBeJBAgQBEjQKCnVwZGF0ZU1hc2sYByABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQgTiQQECIiMKFURlbGV0ZVJlc2VsbGVyUmVxdWVzdBIKCgJpZBgBIAEoCSJKChhHZXRCaWxsaW5nU2V0dGluZ1JlcXVlc3QSLgoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sixwIKGUdldEJpbGxpbmdTZXR0aW5nUmVzcG9uc2USMAoJeWVhck1vbnRoGAEgAygLMh0uYmx1ZWFwaS5hcGkucmlwcGxlLlllYXJNb250aBI0Cg5yb3VuZGluZ01ldGhvZBgCIAEoCzIcLmJsdWVhcGkuYXBpLnJpcHBsZS5Sb3VuZGluZxI6ChRleHBvcnRSb3VuZGluZ01ldGhvZBgDIAEoCzIcLmJsdWVhcGkuYXBpLnJpcHBsZS5Sb3VuZGluZxI4Cg1pbnZvaWNlTGF5b3V0GAQgASgLMiEuYmx1ZWFwaS5hcGkucmlwcGxlLkludm9pY2VMYXlvdXQSMwoOaW52b2ljZUR1ZURhdGUYBSABKAsyGy5ibHVlYXBpLmFwaS5yaXBwbGUuRHVlRGF0ZRIXCg9zdXBwb3J0Q3VycmVuY3kYBiADKAkiOQoYTGlzdEV4Y2hhbmdlUmF0ZXNSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRINCgVtb250aBgCIAEoCSJlChxTZXRHbG9iYWxFeGNoYW5nZVJhdGVSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRINCgVtb250aBgCIAEoCRIQCghjdXJyZW5jeRgDIAEoCRIUCgxleGNoYW5nZVJhdGUYBCABKAEidwobU2V0UGF5ZXJFeGNoYW5nZVJhdGVSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRIRCglhY2NvdW50SWQYAiABKAkSDQoFbW9udGgYAyABKAkSEAoIY3VycmVuY3kYBCABKAkSFAoMZXhjaGFuZ2VSYXRlGAUgASgBImwKIlNldEJpbGxpbmdHcm91cEV4Y2hhbmdlUmF0ZVJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRINCgVtb250aBgCIAEoCRIQCghjdXJyZW5jeRgDIAEoCRIUCgxleGNoYW5nZVJhdGUYBCABKAEi4gEKGUxpc3RFeGNoYW5nZVJhdGVzUmVzcG9uc2USDQoFbW9udGgYASABKAkSNgoGY29tbW9uGAIgASgLMiYuYmx1ZWFwaS5hcGkucmlwcGxlLkNvbW1vbkV4Y2hhbmdlUmF0ZRJCCgxiaWxsaW5nR3JvdXAYAyADKAsyLC5ibHVlYXBpLmFwaS5yaXBwbGUuQmlsbGluZ0dyb3VwRXhjaGFuZ2VSYXRlEjoKBXBheWVyGAQgASgLMisuYmx1ZWFwaS5hcGkucmlwcGxlLlZlbmRvclBheWVyRXhjaGFuZ2VSYXRlIkkKF0xpc3RBY2Nlc3NHcm91cHNSZXF1ZXN0Ei4KCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIlQKGENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdBIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhUKDWJpbGxpbmdHcm91cHMYAyADKAkiYAoYVXBkYXRlQWNjZXNzR3JvdXBSZXF1ZXN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFQoNYmlsbGluZ0dyb3VwcxgEIAMoCSImChhEZWxldGVBY2Nlc3NHcm91cFJlcXVlc3QSCgoCaWQYASABKAkifQoSTGlzdEludm9pY2VSZXF1ZXN0EgwKBGRhdGUYASABKAkSDgoGdmVuZG9yGAIgASgJEhkKEWJpbGxpbmdJbnRlcm5hbElkGAMgASgJEi4KCmZpZWxkX21hc2sYBCABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIp0JChNMaXN0SW52b2ljZVJlc3BvbnNlEhkKEWJpbGxpbmdJbnRlcm5hbElkGAEgASgJEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhgKEGJpbGxpbmdHcm91cE5hbWUYAyABKAkSEwoLY29tcGFueU5hbWUYBCABKAkSGgoSZmluYWxpemF0aW9uU3RhdHVzGAUgASgJEhEKCWlzQ3JlYXRlZBgGIAEoCBIZChFpc1NldHRpbmdNb2RpZmllZBgHIAEoCBITCgtjcmVhdGVkRGF0ZRgIIAEoCRITCgt1cGRhdGVkRGF0ZRgJIAEoCRIWCg5jcmVhdGVkVmVuZG9ycxgKIAMoCRITCgtpc1B1Ymxpc2hlZBgLIAEoCBJdChN2ZW5kb3JCaWxsaW5nQW1vdW50GAwgAygLMkAuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlUmVzcG9uc2UuVmVuZG9yQmlsbGluZ0Ftb3VudEVudHJ5EhoKEmJpbGxpbmdBbW91bnRUb3RhbBgNIAEoCRIQCghjdXJyZW5jeRgOIAEoCRINCgV1cmxJZBgPIAEoCRJtChtjcmVhdGVkVmVuZG9ySW52b2ljZVNldHRpbmcYECADKAsySC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VSZXNwb25zZS5DcmVhdGVkVmVuZG9ySW52b2ljZVNldHRpbmdFbnRyeRJpChlzYXZlZFZlbmRvckludm9pY2VTZXR0aW5nGBEgAygLMkYuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlUmVzcG9uc2UuU2F2ZWRWZW5kb3JJbnZvaWNlU2V0dGluZ0VudHJ5Em0KG2RlZmF1bHRWZW5kb3JJbnZvaWNlU2V0dGluZxgSIAMoCzJILmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVJlc3BvbnNlLkRlZmF1bHRWZW5kb3JJbnZvaWNlU2V0dGluZ0VudHJ5EhAKCGhhc0NoaWxkGBMgASgIEhcKD2F0dGFjaGVkVmVuZG9ycxgUIAMoCRo6ChhWZW5kb3JCaWxsaW5nQW1vdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpnCiBDcmVhdGVkVmVuZG9ySW52b2ljZVNldHRpbmdFbnRyeRILCgNrZXkYASABKAkSMgoFdmFsdWUYAiABKAsyIy5ibHVlYXBpLmJpbGxpbmcudjEuSW52b2ljZVNldHRpbmdzOgI4ARplCh5TYXZlZFZlbmRvckludm9pY2VTZXR0aW5nRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMuYmx1ZWFwaS5iaWxsaW5nLnYxLkludm9pY2VTZXR0aW5nczoCOAEaZwogRGVmYXVsdFZlbmRvckludm9pY2VTZXR0aW5nRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMuYmx1ZWFwaS5iaWxsaW5nLnYxLkludm9pY2VTZXR0aW5nczoCOAEiKQobTGlzdEFiY0JpbGxpbmdHcm91cHNSZXF1ZXN0EgoKAmlkGAEgASgJIk4KIkxpc3RBYmNCaWxsaW5nR3JvdXBBY2NvdW50c1JlcXVlc3QSDwoHcGF5ZXJJZBgBIAEoCRIXCg9iaWxsaW5nR3JvdXBBcm4YAiABKAkijwEKD0FiY0JpbGxpbmdHcm91cBILCgNhcm4YASABKAkSDAoEbmFtZRgCIAEoCRIUCgxjcmVhdGlvblRpbWUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSGAoQcHJpbWFyeUFjY291bnRJZBgFIAEoCRIMCgRzaXplGAYgASgJEg4KBnN0YXR1cxgHIAEoCSI0CgpBYmNBY2NvdW50EhEKCWFjY291bnRJZBgBIAEoCRITCgthY2NvdW50TmFtZRgCIAEoCSJiCh1SZWFkSW52b2ljZUFkanVzdG1lbnRzUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkSEQoJYWNjb3VudElkGAIgASgJEg0KBW1vbnRoGAMgASgJEg8KB2ZlZVR5cGUYBCABKAkimQEKHFJlYWRBZGp1c3RtZW50RW50cmllc1JlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhMKBW1vbnRoGAIgASgJQgTiQQEBGk4KIkFkanVzdG1lbnRFbnRyaWVzUmVxdWVzdEF3c09wdGlvbnMSEwoLc3BwRGlzY291bnQYASABKAgSEwoLZWRwRGlzY291bnQYAiABKAgiQwoZR2V0QWRqdXN0bWVudEVudHJ5UmVxdWVzdBIUCgZ2ZW5kb3IYASABKAlCBOJBAQISEAoCaWQYAiABKAlCBOJBAQIingMKG0FwcGx5QWRqdXN0bWVudEVudHJ5UmVxdWVzdBIUCgZ2ZW5kb3IYASABKAlCBOJBAQISUwoHc2V0dGluZxgCIAEoCzI8LmJsdWVhcGkuYmlsbGluZy52MS5BcHBseUFkanVzdG1lbnRFbnRyeVJlcXVlc3QuQXBwbHlTZXR0aW5nQgTiQQECEhUKB2VudHJpZXMYAyADKAlCBOJBAQIa/AEKDEFwcGx5U2V0dGluZxITCgVtb250aBgBIAEoCUIE4kEBARIVCgd0YXhGcmVlGAIgASgIQgTiQQEBEmoKDGV4Y2hhbmdlUmF0ZRgDIAMoCzJOLmJsdWVhcGkuYmlsbGluZy52MS5BcHBseUFkanVzdG1lbnRFbnRyeVJlcXVlc3QuQXBwbHlTZXR0aW5nLkV4Y2hhbmdlUmF0ZUVudHJ5QgTiQQEBEh8KEWJpbGxpbmdJbnRlcm5hbElkGAQgASgJQgTiQQEBGjMKEUV4Y2hhbmdlUmF0ZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAToCOAEiTAodUmVzdG9yZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhUKB2VudHJpZXMYAyADKAlCBOJBAQIiXwobU3BsaXRBZGp1c3RtZW50RW50cnlSZXF1ZXN0EhQKBnZlbmRvchgBIAEoCUIE4kEBAhIQCgJpZBgCIAEoCUIE4kEBAhIYCgpzdGFydE1vbnRoGAMgASgJQgTiQQECIvwBCh5BbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhAKAmlkGAIgASgJQgTiQQECElYKBmNvbmZpZxgDIAMoCzJALmJsdWVhcGkuYmlsbGluZy52MS5BbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QuQWNjb3VudENvbmZpZ0IE4kEBAhIhChNhY2NvdW50Rm9yUmVtYWluaW5nGAQgASgJQgTiQQECGjcKDUFjY291bnRDb25maWcSEAoCaWQYASABKAlCBOJBAQISFAoGYW1vdW50GAIgASgBQgTiQQECIkwKIlJlc3RvcmVTcGxpdEFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhAKAmlkGAIgASgJQgTiQQECIk8KJVJlc3RvcmVBbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhAKAmlkGAIgASgJQgTiQQECIn4KFkNyZWF0ZUN1c3RvbUZlZVJlcXVlc3QSFAoGdmVuZG9yGAEgASgJQgTiQQECEhMKBW1vbnRoGAIgASgJQgTiQQECEjkKB2VudHJpZXMYAyADKAsyIi5ibHVlYXBpLmJpbGxpbmcudjEuQ3VzdG9tRmVlRW50cnlCBOJBAQIioQMKDkN1c3RvbUZlZUVudHJ5EhcKCWFjY291bnRJZBgBIAEoCUIE4kEBAhIcCg5wYXllckFjY291bnRJZBgCIAEoCUIE4kEBAhIVCgdmZWVUeXBlGAMgASgJQgTiQQECEhkKC21vYmluZ2lUeXBlGAQgASgJQgTiQQECEhQKBmFtb3VudBgFIAEoAUIE4kEBAhIaCgxjdXJyZW5jeUNvZGUYBiABKAlCBOJBAQISGQoLZGVzY3JpcHRpb24YByABKAlCBOJBAQISGQoLcHJvZHVjdENvZGUYCCABKAlCBOJBAQESGQoLcHJvZHVjdE5hbWUYCSABKAlCBOJBAQESGAoKdXNhZ2VTdGFydBgKIAEoCUIE4kEBARIaCgx0aW1lSW50ZXJ2YWwYCyABKAlCBOJBAQESQAoEbWV0YRgMIAMoCzIsLmJsdWVhcGkuYmlsbGluZy52MS5DdXN0b21GZWVFbnRyeS5NZXRhRW50cnlCBOJBAQEaKwoJTWV0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiKgoXQ3JlYXRlQ3VzdG9tRmVlUmVzcG9uc2USDwoHY3JlYXRlZBgBIAEoBSJ9Ch9MaXN0QWRqdXN0bWVudEVudHJ5SXRlbXNSZXF1ZXN0EhQKBnZlbmRvchgBIAEoCUIE4kEBAhITCgVtb250aBgCIAEoCUIE4kEBAhIZCgttb2JpbmdpVHlwZRgDIAEoCUIE4kEBARIUCgZzdGF0dXMYBCABKAlCBOJBAQEiugEKE0FkanVzdG1lbnRFbnRyeUl0ZW0SNQoFZW50cnkYASABKAsyJi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQWRqdXN0bWVudEVudHJ5Ej8KBG1ldGEYAiADKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuQWRqdXN0bWVudEVudHJ5SXRlbS5NZXRhRW50cnkaKwoJTWV0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiPAobTGlzdEFjY291bnRSZXNvdXJjZXNSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRINCgVtb250aBgCIAEoCSJKCg9SZXNvdXJjZUFjY291bnQSDwoHcGF5ZXJJZBgBIAEoCRISCgpjdXN0b21lcklkGAIgASgJEhIKCnJlZ2lzdGVyZWQYAyABKAgiSAoaR2V0QWRqdXN0bWVudENvbmZpZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEhoKEmluY2x1ZGVTUFBEaXNjb3VudBgCIAEoCCKNAQodQ3JlYXRlQWRqdXN0bWVudENvbmZpZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEioKBmNvbmZpZxgCIAMoCzIaLmJsdWVhcGkuYXBpLkNvbmZpZ0ZpbHRlcnMSMAoIYWNjb3VudHMYAyADKAsyHi5ibHVlYXBpLmFwaS5NYW5hZ2VtZW50QWNjb3VudCKNAQodVXBkYXRlQWRqdXN0bWVudENvbmZpZ1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEioKBmNvbmZpZxgCIAMoCzIaLmJsdWVhcGkuYXBpLkNvbmZpZ0ZpbHRlcnMSMAoIYWNjb3VudHMYAyADKAsyHi5ibHVlYXBpLmFwaS5NYW5hZ2VtZW50QWNjb3VudCIvCh1EZWxldGVBZGp1c3RtZW50Q29uZmlnUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkiZwoZUmVhZFVudGFnZ2VkR3JvdXBzUmVxdWVzdBIUCgZ2ZW5kb3IYASABKAlCBOJBAQISNAoKZmllbGRfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCBOJBAQEiXAokUmVhZEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZXNSZXF1ZXN0EjQKCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQgTiQQEBImYKIkdldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QSCgoCaWQYASABKAkSNAoKZmllbGRfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCBOJBAQEifAolQ3JlYXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjAKBmNvbmZpZxgDIAEoCzIgLmJsdWVhcGkuYXBpLnJpcHBsZS5NZXRob2RDb25maWcixQEKJVVwZGF0ZUN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QSEAoCaWQYASABKAlCBOJBAQISVAoYY3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlGAIgASgLMiwuYmx1ZWFwaS5hcGkucmlwcGxlLkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUIE4kEBAhI0Cgp1cGRhdGVNYXNrGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0IE4kEBAiIzCiVEZWxldGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0EgoKAmlkGAEgASgJIl0KLkdldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlcXVlc3QSFQoHZ3JvdXBJZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQIiyQEKL0dldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlc3BvbnNlEhAKAmlkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAhJACg5jaGFyZ2luZ1RhcmdldBgDIAEoDjIiLmJsdWVhcGkuYXBpLnJpcHBsZS5DaGFyZ2luZ1RhcmdldEIE4kEBAhIsCghhY2NvdW50cxgEIAMoCzIULmJsdWVhcGkuYXBpLkFjY291bnRCBOJBAQEi9wIKLlNldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlcXVlc3QSFQoHZ3JvdXBJZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQISgAEKB3NldHRpbmcYAyADKAsyaS5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdC5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nU2V0dGluZ0IE4kEBAhqUAQomQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmcSEAoCaWQYASABKAlCBOJBAQISQAoOY2hhcmdpbmdUYXJnZXQYAiABKA4yIi5ibHVlYXBpLmFwaS5yaXBwbGUuQ2hhcmdpbmdUYXJnZXRCBOJBAQISFgoIYWNjb3VudHMYAyADKAlCBOJBAQEiYAoxRGVsZXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdBIVCgdncm91cElkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAiKRAQokQ3JlYXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSRgoHc2V0dGluZxgDIAEoCzI1LmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50c1NldHRpbmcixQEKJFVwZGF0ZUludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIQCgJpZBgBIAEoCUIE4kEBAhJVChdpbnZvaWNlU2VydmljZURpc2NvdW50cxgCIAEoCzIuLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50c0IE4kEBAhI0Cgp1cGRhdGVNYXNrGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0IE4kEBAiIyCiREZWxldGVJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSCgoCaWQYASABKAkibgoHVGFnRGF0YRISCgpjdXN0b21lcklkGAEgASgJEhEKCWFjY291bnRJZBgCIAEoCRIUCgxjdXN0b21lck5hbWUYAyABKAkSJgoEdGFncxgEIAMoCzIYLmJsdWVhcGkuYmlsbGluZy52MS5UYWdzIiMKBFRhZ3MSCwoDa2V5GAEgASgJEg4KBnZhbHVlcxgCIAMoCSIuCg5HZXRUYWdzUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkSDAoEdHlwZRgCIAEoCSI7CgtDdXN0b21GaWVsZBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkiXgoXQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGQSDQoFdmFsdWUYASABKAkSNAoLY3VzdG9tRmllbGQYAiABKAsyHy5ibHVlYXBpLmJpbGxpbmcudjEuQ3VzdG9tRmllbGQiNQoiTGlzdEJpbGxpbmdHcm91cEN1c3RvbUZpZWxkUmVxdWVzdBIPCgdncm91cElkGAEgASgJIoUBCiNMaXN0QmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXNwb25zZRIPCgdncm91cElkGAEgASgJEk0KGGJpbGxpbmdHcm91cEN1c3RvbUZpZWxkcxgCIAMoCzIrLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXBDdXN0b21GaWVsZCI8ChhDcmVhdGVDdXN0b21GaWVsZFJlcXVlc3QSCwoDa2V5GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJIkgKGFVwZGF0ZUN1c3RvbUZpZWxkUmVxdWVzdBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkiJgoYRGVsZXRlQ3VzdG9tRmllbGRSZXF1ZXN0EgoKAmlkGAEgASgJIhgKFkxpc3RDdXN0b21GaWVsZFJlcXVlc3QiawoXQ3JlYXRlRnJlZUZvcm1hdFJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSLwoFaXRlbXMYAyADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuRnJlZUZvcm1JdGVtImEKDEZyZWVGb3JtSXRlbRINCgVsYWJlbBgBIAEoCRIQCgh1bml0Q29zdBgCIAEoAxINCgV0b3RhbBgFIAEoAxIQCghxdWFudGl0eRgDIAEoDRIPCgdlbmFibGVkGAQgASgIIjoKF0RlbGV0ZUZyZWVGb3JtYXRSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSDgoGdmVuZG9yGAIgASgJIj0KFEdldEZyZWVGb3JtYXRSZXF1ZXN0Eg8KB2dyb3VwSWQYASABKAkSFAoMaXNBc3NvY2lhdGVkGAIgASgIIm4KFUdldEZyZWVGb3JtYXRSZXNwb25zZRIPCgdncm91cElkGAMgASgJEg4KBnZlbmRvchgBIAEoCRI0CgpmcmVlRm9ybWF0GAIgAygLMiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkZyZWVGb3JtSXRlbSI6CiZHZXRNb250aGx5TWlzY0ZlZUltcG9ydFRlbXBsYXRlUmVxdWVzdBIQCghsYW5ndWFnZRgBIAEoCSKxAQocTW9udGhseU1pc2NGZWVJbXBvcnRUZW1wbGF0ZRIOCgZmb3JtYXQYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKAkSDwoHaGVhZGVycxgDIAMoCRISCgpzYW1wbGVfcm93GAQgAygJEhUKDWFsbG93ZWRfbW9kZXMYBSADKAkSGwoTbWF4X2ZpbGVfc2l6ZV9ieXRlcxgGIAEoAxIQCghtYXhfcm93cxgHIAEoBSKvAQogQnVsa0ltcG9ydE1vbnRobHlNaXNjRmVlc1JlcXVlc3QSGQoLY3N2X2NvbnRlbnQYASABKAlCBOJBAQISFwoJZmlsZV9uYW1lGAIgASgJQgTiQQECEhIKBG1vZGUYAyABKAlCBOJBAQISFAoGZm9ybWF0GAQgASgJQgTiQQECEhwKDmZvcm1hdF92ZXJzaW9uGAUgASgJQgTiQQECEg8KB2RyeV9ydW4YBiABKAgisAEKGkxpc3RNb250aGx5TWlzY0ZlZXNSZXF1ZXN0EhsKDWJpbGxpbmdfbW9udGgYASABKAlCBOJBAQISGAoQYmlsbGluZ19ncm91cF9pZBgCIAEoCRIgChhiaWxsaW5nX2dyb3VwX25hbWVfcXVlcnkYAyABKAkSEgoKaXRlbV9xdWVyeRgEIAEoCRIRCglwYWdlX3NpemUYBSABKAUSEgoKcGFnZV90b2tlbhgGIAEoCSJ9ChtMaXN0TW9udGhseU1pc2NGZWVzUmVzcG9uc2USMAoEcm93cxgBIAMoCzIiLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAUiUAobRGVsZXRlTW9udGhseU1pc2NGZWVSZXF1ZXN0EhQKBnJvd19pZBgBIAEoCUIE4kEBAhIbCg1iaWxsaW5nX21vbnRoGAIgASgJQgTiQQECIuYBCg5Nb250aGx5TWlzY0ZlZRIOCgZyb3dfaWQYASABKAkSFQoNYmlsbGluZ19tb250aBgCIAEoCRIYChBiaWxsaW5nX2dyb3VwX2lkGAMgASgJEhoKEmJpbGxpbmdfZ3JvdXBfbmFtZRgEIAEoCRIOCgZ2ZW5kb3IYBSABKAkSEQoJaXRlbV9uYW1lGAYgASgJEhAKCHF1YW50aXR5GAcgASgNEhEKCXVuaXRfY29zdBgIIAEoAxIOCgZhbW91bnQYCSABKAMSDwoHZW5hYmxlZBgKIAEoCBIOCgZzb3VyY2UYCyABKAkilgMKGk1vbnRobHlNaXNjRmVlSW1wb3J0UmVzdWx0Eg4KBnN0YXR1cxgBIAEoCRIRCglmaWxlX25hbWUYAiABKAkSEgoKdG90YWxfcm93cxgDIAEoBRISCgp2YWxpZF9yb3dzGAQgASgFEhUKDWluc2VydGVkX3Jvd3MYBSABKAUSFAoMdXBkYXRlZF9yb3dzGAYgASgFEhYKDnVuY2hhbmdlZF9yb3dzGAcgASgFEhMKC2ZhaWxlZF9yb3dzGAggASgFEkYKC3Jvd19yZXN1bHRzGAkgAygLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk1vbnRobHlNaXNjRmVlSW1wb3J0Um93UmVzdWx0EhQKDHJlbW92ZWRfcm93cxgKIAEoBRIWCg5iaWxsaW5nX21vbnRocxgLIAMoCRIPCgd2ZW5kb3JzGAwgAygJEkwKDmJpbGxpbmdfZ3JvdXBzGA0gAygLMjQuYmx1ZWFwaS5iaWxsaW5nLnYxLk1vbnRobHlNaXNjRmVlSW1wb3J0R3JvdXBTdW1tYXJ5IlgKIE1vbnRobHlNaXNjRmVlSW1wb3J0R3JvdXBTdW1tYXJ5EhgKEGJpbGxpbmdfZ3JvdXBfaWQYASABKAkSGgoSYmlsbGluZ19ncm91cF9uYW1lGAIgASgJIssCCh1Nb250aGx5TWlzY0ZlZUltcG9ydFJvd1Jlc3VsdBIWCg5jc3Zfcm93X251bWJlchgBIAEoBRIOCgZhY3Rpb24YAiABKAkSGAoQYmlsbGluZ19ncm91cF9pZBgDIAEoCRIaChJiaWxsaW5nX2dyb3VwX25hbWUYBCABKAkSDgoGdmVuZG9yGAUgASgJEhEKCWl0ZW1fbmFtZRgGIAEoCRIQCghxdWFudGl0eRgHIAEoDRIRCgl1bml0X2Nvc3QYCCABKAMSDgoGYW1vdW50GAkgASgDEg8KB2VuYWJsZWQYCiABKAgSTAoRdmFsaWRhdGlvbl9lcnJvcnMYCyADKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTW9udGhseU1pc2NGZWVWYWxpZGF0aW9uRXJyb3ISFQoNYmlsbGluZ19tb250aBgMIAEoCSJNCh1Nb250aGx5TWlzY0ZlZVZhbGlkYXRpb25FcnJvchINCgVmaWVsZBgBIAEoCRIMCgRjb2RlGAIgASgJEg8KB21lc3NhZ2UYAyABKAkidwoeVXBkYXRlVGFnc0FkZGluZ1NldHRpbmdSZXF1ZXN0Eg4KBnZlbmRvchgBIAEoCRIPCgdncm91cElkGAIgASgJEjQKBWl0ZW1zGAMgAygLMiUuYmx1ZWFwaS5iaWxsaW5nLnYxLlRhZ3NBZGRpbmdTZXR0aW5nIj4KG0dldFRhZ3NBZGRpbmdTZXR0aW5nUmVxdWVzdBIOCgZ2ZW5kb3IYASABKAkSDwoHZ3JvdXBJZBgCIAEoCSJJChFUYWdzQWRkaW5nU2V0dGluZxIPCgdncm91cElkGAEgASgJEhIKCmN1c3RvbWVySWQYAiABKAkSDwoHdGFnS2V5cxgDIAMoCSJNCh1FeHBvcnRTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIUCgZmb3JtYXQYASABKAlCBOJBAQISFgoIbGFuZ3VhZ2UYAiABKAlCBOJBAQEibworRXhwb3J0QWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIUCgZmb3JtYXQYASABKAlCBOJBAQISFgoIbGFuZ3VhZ2UYAiABKAlCBOJBAQESEgoKZGlyZWN0TGluaxgDIAEoCCJ0CjBFeHBvcnRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSFAoGZm9ybWF0GAEgASgJQgTiQQECEhYKCGxhbmd1YWdlGAIgASgJQgTiQQEBEhIKCmRpcmVjdExpbmsYAyABKAgiNgocRXhwb3J0QmlsbGluZ0dyb3VwQ3N2UmVxdWVzdBIWCghsYW5ndWFnZRgCIAEoCUIE4kEBASI1Ch1FeHBvcnRCaWxsaW5nR3JvdXBDc3ZSZXNwb25zZRIUCgxkb3dubG9hZExpbmsYASABKAkiXAoeRXhwb3J0SW52b2ljZVNldHRpbmdDc3ZSZXF1ZXN0EhYKCGxhbmd1YWdlGAIgASgJQgTiQQEBEiIKFGluY2x1ZGVNaXNjZWxsYW5lb3VzGAMgASgIQgTiQQEBIjcKH0V4cG9ydEludm9pY2VTZXR0aW5nQ3N2UmVzcG9uc2USFAoMZG93bmxvYWRMaW5rGAEgASgJIkAKLUdldEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBIPCgdncm91cElkGAEgASgJIjwKLkdldEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2USCgoCaWQYASABKAkiuQEKIUFkZEJpbGxpbmdHcm91cEN1c3RvbUZpZWxkUmVxdWVzdBIPCgdncm91cElkGAEgASgJElMKB2lkVG9LZXkYAiADKAsyQi5ibHVlYXBpLmJpbGxpbmcudjEuQWRkQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXF1ZXN0LklkVG9LZXlFbnRyeRouCgxJZFRvS2V5RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJOCiREZWxldGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZFJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRIVCg1jdXN0b21GaWVsZElkGAIgASgJInYKH0FkZEFjY291bnRUb0JpbGxpbmdHcm91cFJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSMgoIYWNjb3VudHMYAyADKAsyIC5ibHVlYXBpLmJpbGxpbmcudjEuQWNjb3VudFRvQWRkIlEKDEFjY291bnRUb0FkZBISCgpjdXN0b21lcklkGAEgASgJEhEKCWFjY291bnRJZBgCIAEoCRIMCgRuYW1lGAMgASgJEgwKBG5vdGUYBCABKAkiqwEKHEFkZFRhZ3NUb0JpbGxpbmdHcm91cFJlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSMAoIc2V0dGluZ3MYAyADKAsyHi5ibHVlYXBpLmJpbGxpbmcudjEuVGFnU2V0dGluZxI4Cg1ub25UYWdTZXR0aW5nGAQgASgLMiEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vblRhZ1NldHRpbmciRwoKVGFnU2V0dGluZxISCgpjdXN0b21lcklkGAEgASgJEiUKBHRhZ3MYAiADKAsyFy5ibHVlYXBpLmJpbGxpbmcudjEuVGFnIjEKA1RhZxILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAkSDgoGYXNzaWduGAMgASgFIj4KDU5vblRhZ1NldHRpbmcSDwoHaW5jbHVkZRgBIAEoCBIMCgR0eXBlGAIgASgJEg4KBmFtb3VudBgDIAEoASI+Ch1TYXZlVGFnSW52b2ljZVNldHRpbmdSZXNwb25zZRIOCgZzdGF0dXMYASABKAkSDQoFZXJyb3IYAiABKAkifgomVXBkYXRlTm9uVGFnR3JvdXBUb0JpbGxpbmdHcm91cFJlcXVlc3QSCgoCaWQYASABKAkSDgoGdmVuZG9yGAIgASgJEjgKCHNldHRpbmdzGAMgAygLMiYuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vblRhZ0dyb3VwU2V0dGluZyI+ChJOb25UYWdHcm91cFNldHRpbmcSCgoCaWQYASABKAkSDAoEdHlwZRgCIAEoCRIOCgZhbW91bnQYAyABKAEimgEKGlNhdmVJbnZvaWNlU2V0dGluZ3NSZXF1ZXN0EgwKBGRhdGUYASABKAkSDgoGdmVuZG9yGAIgASgJEhEKCWFsbEdyb3VwcxgDIAEoCBIOCgZncm91cHMYBCADKAkSOwoOaW52b2ljZVNldHRpbmcYBSABKAsyIy5ibHVlYXBpLmJpbGxpbmcudjEuSW52b2ljZVNldHRpbmdzIrMECg9JbnZvaWNlU2V0dGluZ3MSEQoJaW52b2ljZU5vGAIgASgJEhQKDGRpc2NvdW50UmF0ZRgEIAEoARIbChNkaXNjb3VudFRhcmdldFVzYWdlGAUgASgJEhkKEWRpc2NvdW50Q2FsY0xvZ2ljGAYgASgJEg8KB3RheFJhdGUYByABKAESEgoKc3VwcG9ydEZlZRgIIAEoCRITCgtzdXBwb3J0UmF0ZRgJIAEoARIcChRzdXBwb3J0RmVlQ2FsY1RhcmdldBgKIAEoCRISCgpzdXBwb3J0Rml4GAsgASgBEhcKD3N1YnN0aXR1dGlvbkZlZRgMIAEoCRIYChBzdWJzdGl0dXRpb25SYXRlGA0gASgBEhcKD3N1YnN0aXR1dGlvbkZpeBgOIAEoARIhChlzdWJzdGl0dXRpb25GZWVDYWxjVGFyZ2V0GA8gASgJEiIKGnN1YnN0aXR1dGlvbkZlZVRhcmdldFVzYWdlGBAgASgJEh8KF3N1YnN0aXR1dGlvbkZlZUNhbGNUeXBlGBEgASgJEhAKCGN1cnJlbmN5GAMgASgJEhQKDGV4Y2hhbmdlUmF0ZRgSIAEoARIMCgRtZW1vGBMgASgJEhAKCGNhbGNUeXBlGBQgASgJEjkKD2FkZGl0aW9uYWxJdGVtcxgVIAMoCzIgLmJsdWVhcGkuYmlsbGluZy52MS5GcmVlRm9ybUl0ZW0SHAoUc3VwcG9ydEZlZUFkanVzdG1lbnQYFiABKAEirQMKEEJhc2ljSW5mb3JtYXRpb24SGAoQYmlsbGluZ0dyb3VwTmFtZRgCIAEoCRIWCg5iaWxsaW5nR3JvdXBJZBgDIAEoCRITCgtjb21wYW55TmFtZRgEIAEoCRIWCglhZGRyZXNzZWUYBSABKAlIAIgBARIUCgdjb3VudHJ5GAYgASgJSAGIAQESFwoKcG9zdGFsQ29kZRgHIAEoCUgCiAEBEhEKBGNpdHkYCCABKAlIA4gBARIYCgtwaG9uZU51bWJlchgJIAEoCUgEiAEBEhkKDGFkZHJlc3NMaW5lMRgKIAEoCUgFiAEBEhkKDGFkZHJlc3NMaW5lMhgLIAEoCUgGiAEBEhIKBXN0YXRlGAwgASgJSAeIAQESFwoKcHJlZmVjdHVyZRgNIAEoCUgIiAEBQgwKCl9hZGRyZXNzZWVCCgoIX2NvdW50cnlCDQoLX3Bvc3RhbENvZGVCBwoFX2NpdHlCDgoMX3Bob25lTnVtYmVyQg8KDV9hZGRyZXNzTGluZTFCDwoNX2FkZHJlc3NMaW5lMkIICgZfc3RhdGVCDQoLX3ByZWZlY3R1cmUidwopVXBkYXRlQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvblJlcXVlc3QSCgoCaWQYASABKAkSPgoQYmFzaWNJbmZvcm1hdGlvbhgCIAEoCzIkLmJsdWVhcGkuYmlsbGluZy52MS5CYXNpY0luZm9ybWF0aW9uIrwBCiVVcGRhdGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZHNSZXF1ZXN0EgoKAmlkGAEgASgJElcKB2lkVG9LZXkYAiADKAsyRi5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRzUmVxdWVzdC5JZFRvS2V5RW50cnkaLgoMSWRUb0tleUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicgojVXBkYXRlQmlsbGluZ0dyb3VwRnJlZUZvcm1hdFJlcXVlc3QSCgoCaWQYASABKAkSDgoGdmVuZG9yGAIgASgJEi8KBWl0ZW1zGAMgAygLMiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkZyZWVGb3JtSXRlbSLqAgooVXBkYXRlQmlsbGluZ0dyb3VwTGlua2VkUmVzb3VyY2VzUmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSFwoPc2VsZWN0aW9uTWV0aG9kGAMgASgJEjIKCGFjY291bnRzGAQgAygLMiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRUb0FkZBIwCghzZXR0aW5ncxgFIAMoCzIeLmJsdWVhcGkuYmlsbGluZy52MS5UYWdTZXR0aW5nEj0KDW5vblRhZ1NldHRpbmcYBiABKAsyIS5ibHVlYXBpLmJpbGxpbmcudjEuTm9uVGFnU2V0dGluZ0gAiAEBEj8KDmFjY291bnRPcHRpb25zGAcgASgLMiIuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRPcHRpb25zSAGIAQFCEAoOX25vblRhZ1NldHRpbmdCEQoPX2FjY291bnRPcHRpb25zIvYBCihVcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3NSZXF1ZXN0EgoKAmlkGAEgASgJEhkKDGJpbGxpbmdUaXRsZRgCIAEoCUgAiAEBEhwKD2NhbGN1bGF0aW9uVHlwZRgDIAEoCUgBiAEBEhUKCGxhbmd1YWdlGAQgASgJSAKIAQESIgoVaW52b2ljZUxheW91dENvbmZpZ0lkGAUgASgJSAOIAQFCDwoNX2JpbGxpbmdUaXRsZUISChBfY2FsY3VsYXRpb25UeXBlQgsKCV9sYW5ndWFnZUIYChZfaW52b2ljZUxheW91dENvbmZpZ0lkIq8BCihVcGRhdGVCaWxsaW5nR3JvdXBSZXNlbGxlckNoYXJnZXNSZXF1ZXN0EgoKAmlkGAEgASgJEhwKD2ludm9pY2VUZW1wbGF0ZRgCIAEoCUgAiAEBEkUKB2ludm9pY2UYAyABKAsyNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdEludm9pY2VCEgoQX2ludm9pY2VUZW1wbGF0ZSK/BAoqVXBkYXRlQmlsbGluZ0dyb3VwQWRkaXRpb25hbENoYXJnZXNSZXF1ZXN0EgoKAmlkGAEgASgJEngKA2F3cxgCIAMoCzJlLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlc1JlcXVlc3QuQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmdCBOJBAQISegoFYXp1cmUYAyADKAsyZS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwQWRkaXRpb25hbENoYXJnZXNSZXF1ZXN0LkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdTZXR0aW5nQgTiQQECEngKA2djcBgEIAMoCzJlLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlc1JlcXVlc3QuQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmdCBOJBAQIalAEKJkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdTZXR0aW5nEhAKAmlkGAEgASgJQgTiQQECEkAKDmNoYXJnaW5nVGFyZ2V0GAIgASgOMiIuYmx1ZWFwaS5hcGkucmlwcGxlLkNoYXJnaW5nVGFyZ2V0QgTiQQECEhYKCGFjY291bnRzGAMgAygJQgTiQQEBIicKGURlbGV0ZUJpbGxpbmdHcm91cFJlcXVlc3QSCgoCaWQYASABKAkiUgooR2V0QmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuUmVxdWVzdBIQCgJpZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQIioAEKKUdldEJpbGxpbmdHcm91cEFjY291bnRTdXBwb3J0UGxhblJlc3BvbnNlEgoKAmlkGAEgASgJEg4KBnZlbmRvchgCIAEoCRIPCgdlbmFibGVkGAMgASgIEkYKB3NldHRpbmcYBCADKAsyNS5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuIvABCitVcGRhdGVCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5SZXF1ZXN0EhAKAmlkGAEgASgJQgTiQQECEhQKBnZlbmRvchgCIAEoCUIE4kEBAhIVCgdlbmFibGVkGAMgASgIQgTiQQEBEkwKB3NldHRpbmcYBCADKAsyNS5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuQgTiQQEBEjQKCnVwZGF0ZU1hc2sYBSABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQgTiQQECIjEKF0dldEFubm91bmNlbWVudHNSZXF1ZXN0EhYKDmFubm91bmNlbWVudElkGAEgASgJIqcBChlDcmVhdGVBbm5vdW5jZW1lbnRSZXF1ZXN0Eg0KBWxhYmVsGAEgASgJEgwKBHR5cGUYAiABKAkSEAoIY29udGVudHMYAyABKAkSFQoNYmlsbGluZ0dyb3VwcxgEIAMoCRIYChBhbGxCaWxsaW5nR3JvdXBzGAUgASgIEg0KBXN0YXJ0GAYgASgDEgsKA2VuZBgHIAEoAxIOCgZzdGF0dXMYCCABKAkieAoZVXBkYXRlQW5ub3VuY2VtZW50UmVxdWVzdBIWCg5hbm5vdW5jZW1lbnRJZBgBIAEoCRJDCgxhbm5vdW5jZW1lbnQYAiABKAsyLS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQW5ub3VuY2VtZW50UmVxdWVzdCJKCiBVcGRhdGVBbm5vdW5jZW1lbnRzU3RhdHVzUmVxdWVzdBIWCg5hbm5vdW5jZW1lbnRJZBgBIAMoCRIOCgZzdGF0dXMYAiABKAkiRQodVXBkYXRlQW5ub3VuY2VtZW50RGF0ZVJlcXVlc3QSFgoOYW5ub3VuY2VtZW50SWQYASADKAkSDAoEZGF0ZRgCIAEoAyIzChlEZWxldGVBbm5vdW5jZW1lbnRSZXF1ZXN0EhYKDmFubm91bmNlbWVudElkGAEgASgJIukBCgxBbm5vdW5jZW1lbnQSCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSDAoEdHlwZRgDIAEoCRIPCgdtZXNzYWdlGAQgASgJEhUKDWJpbGxpbmdHcm91cHMYBSADKAkSGAoQYWxsQmlsbGluZ0dyb3VwcxgNIAEoCBINCgVzdGFydBgGIAEoCRILCgNlbmQYByABKAkSDAoEZGF0ZRgIIAEoCRIOCgZzdGF0dXMYCSABKAkSEgoKdXNlclN0YXR1cxgKIAEoCRIPCgdjcmVhdGVkGAsgASgJEg8KB3VwZGF0ZWQYDCABKAkiNgojR2V0QmlsbGluZ0dyb3VwQW5ub3VuY2VtZW50c1JlcXVlc3QSDwoHZ3JvdXBJZBgBIAEoCSKWAQokR2V0QmlsbGluZ0dyb3VwQW5ub3VuY2VtZW50c1Jlc3BvbnNlEg8KB2dyb3VwSWQYASABKAkSEQoJZ3JvdXBOYW1lGAIgASgJEhEKCWNvbXBhbnlJZBgDIAEoCRI3Cg1hbm5vdW5jZW1lbnRzGAQgAygLMiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkFubm91bmNlbWVudCITChFHZXRDcmVkaXRzUmVxdWVzdCLEAQoGQ3JlZGl0EgoKAmlkGAEgASgJEhIKCmN1c3RvbWVySWQYAiABKAkSFAoMY3VzdG9tZXJOYW1lGAMgASgJEhQKDGNyZWRpdEFtb3VudBgEIAEoARIMCgR0ZXJtGAUgASgJEhMKC2Rlc2NyaXB0aW9uGAYgASgJEg8KB2NyZWF0ZWQYByABKAkSEgoKaW5pdGlhbEZlZRgIIAEoARIVCg1jcmVkaXRCYWxhbmNlGAkgASgBEg8KB2FwcGxpZWQYCiABKAgiFwoVR2V0Q3N2U2V0dGluZ3NSZXF1ZXN0IqQBCgpDc3ZTZXR0aW5nEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSMgoDY29sGAMgAygLMiUuYmx1ZWFwaS5iaWxsaW5nLnYxLkNzdlNldHRpbmcuQ29sdW1uGkgKBkNvbHVtbhIMCgRuYW1lGAEgASgJEgoKAmlkGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg8KB2VuYWJsZWQYBCABKAgi5gEKIFVwZGF0ZUludm9pY2VFeGNoYW5nZVJhdGVSZXF1ZXN0Eg0KBW1vbnRoGAEgASgJEg4KBnZlbmRvchgCIAEoCRJcCgxleGNoYW5nZVJhdGUYAyADKAsyRi5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZUV4Y2hhbmdlUmF0ZVJlcXVlc3QuRXhjaGFuZ2VSYXRlRW50cnkSEAoIZ3JvdXBJZHMYBCADKAkaMwoRRXhjaGFuZ2VSYXRlRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgBOgI4ASJbChpDb252ZXJ0SW52b2ljZVRvUGRmUmVxdWVzdBIMCgRkYXRlGAEgASgJEhUKDWJpbGxpbmdncm91cHMYAiADKAkSGAoQYWxsQmlsbGluZ0dyb3VwcxgDIAEoCCJEChtDb252ZXJ0SW52b2ljZVRvUGRmUmVzcG9uc2USEAoIcHJvZ3Jlc3MYASABKAkSEwoLZG93bmxvYWRVcmwYAiABKAkiiAIKIUxpc3RCaWxsaW5nR3JvdXBzUGFnaW5hdGVkUmVxdWVzdBIuCgpmaWVsZF9tYXNrGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzaxIPCgd2ZW5kb3JzGAIgASgJEhAKCGNhbGNUeXBlGAMgASgJEhMKC2Rpc3BsYXlDb3N0GAQgASgJEg4KBmJnVHlwZRgFIAEoCRITCgtjb21wYW55TmFtZRgGIAEoCRIYChBiaWxsaW5nR3JvdXBOYW1lGAcgASgJEhYKDmJpbGxpbmdHcm91cElkGAggASgJEhAKCHBhZ2VTaXplGAkgASgFEhIKCnBhZ2VOdW1iZXIYCiABKAUilwIKFEJpbGxpbmdHcm91cExpc3RJdGVtEhgKEGJpbGxpbmdHcm91cE5hbWUYASABKAkSFgoOYmlsbGluZ0dyb3VwSWQYAiABKAkSEwoLY29tcGFueU5hbWUYAyABKAkSGAoQYmlsbGluZ0dyb3VwVHlwZRgEIAEoCRJMCgd2ZW5kb3JzGAUgAygLMjsuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cExpc3RJdGVtLkJpbGxpbmdHcm91cFZlbmRvchIZChFiaWxsaW5nSW50ZXJuYWxJZBgGIAEoCRo1ChJCaWxsaW5nR3JvdXBWZW5kb3ISDgoGdmVuZG9yGAEgASgJEg8KB2VuYWJsZWQYAiABKAgitAEKIkxpc3RCaWxsaW5nR3JvdXBzUGFnaW5hdGVkUmVzcG9uc2USPwoNYmlsbGluZ0dyb3VwcxgBIAMoCzIoLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXBMaXN0SXRlbRISCgp0b3RhbENvdW50GAIgASgFEhMKC2N1cnJlbnRQYWdlGAMgASgFEhAKCHBhZ2VTaXplGAQgASgFEhIKCnRvdGFsUGFnZXMYBSABKAUijgEKIUNoaWxkQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvbhIKCgJpZBgBIAEoCRISCgppbnRlcm5hbElkGAYgASgJEhAKCHBhcmVudElkGAIgASgJEhQKDHJvb3RQYXJlbnRJZBgFIAEoCRIMCgRuYW1lGAMgASgJEhMKC2NvbXBhbnlOYW1lGAQgASgJIr4BCiRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXASEAoCaWQYASABKAlCBOJBAQISFAoGdmVuZG9yGAIgASgJQgTiQQECEkAKDmNoYXJnaW5nVGFyZ2V0GAMgASgOMiIuYmx1ZWFwaS5hcGkucmlwcGxlLkNoYXJnaW5nVGFyZ2V0QgTiQQECEiwKCGFjY291bnRzGAQgAygLMhQuYmx1ZWFwaS5hcGkuQWNjb3VudEIE4kEBASKAAgoRQ2hpbGRCaWxsaW5nR3JvdXASTwoQYmFzaWNJbmZvcm1hdGlvbhgBIAEoCzI1LmJsdWVhcGkuYmlsbGluZy52MS5DaGlsZEJpbGxpbmdHcm91cEJhc2ljSW5mb3JtYXRpb24STQoPaW52b2ljZVNldHRpbmdzGAIgASgLMjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkNoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzEjkKC2JpbGxpbmdJbmZvGAMgASgLMiQuYmx1ZWFwaS5hcGkucmlwcGxlLkJpbGxpbmdHcm91cEluZm8SEAoIaGFzQ2hpbGQYBCABKAgirAIKIENoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzEkMKA2F3cxgBIAEoCzI2LmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXBWZW5kb3JlZEludm9pY2VTZXR0aW5nEiEKGWFjY291bnRTdXBwb3J0UGxhbkVuYWJsZWQYAiABKAgSWQoaYWNjb3VudFN1cHBvcnRQbGFuU2V0dGluZ3MYAyADKAsyNS5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuEkUKBWF6dXJlGAQgASgLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cFZlbmRvcmVkSW52b2ljZVNldHRpbmcimgIKHkNyZWF0ZUNoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBJPChBiYXNpY0luZm9ybWF0aW9uGAEgASgLMjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkNoaWxkQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvbhI5CgtiaWxsaW5nSW5mbxgDIAEoCzIkLmJsdWVhcGkuYXBpLnJpcHBsZS5CaWxsaW5nR3JvdXBJbmZvEk0KD2ludm9pY2VTZXR0aW5ncxgCIAEoCzI0LmJsdWVhcGkuYmlsbGluZy52MS5DaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXR0aW5ncxIdChVpbnZvaWNlTGF5b3V0Q29uZmlnSWQYBCABKAkiIQofQ3JlYXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSIxChtHZXRDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCSJWChxHZXRDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlEjYKB2RldGFpbHMYASABKAsyJS5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXAiQQodUmVhZENoaWxkQmlsbGluZ0dyb3Vwc1JlcXVlc3QSDgoGcm9vdElkGAEgASgJEhAKCHBhcmVudElkGAIgASgJIsABCh5VcGRhdGVDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCRJPChBiYXNpY0luZm9ybWF0aW9uGAIgASgLMjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkNoaWxkQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvbhI5CgtiaWxsaW5nSW5mbxgDIAEoCzIkLmJsdWVhcGkuYXBpLnJpcHBsZS5CaWxsaW5nR3JvdXBJbmZvIiEKH1VwZGF0ZUNoaWxkQmlsbGluZ0dyb3VwUmVzcG9uc2UiNAoeRGVsZXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXF1ZXN0EhIKCmludGVybmFsSWQYASABKAkiIQofRGVsZXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSLQAQotVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3NSZXF1ZXN0EhIKCmludGVybmFsSWQYASABKAkSTQoPaW52b2ljZVNldHRpbmdzGAIgASgLMjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkNoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzEiIKFWludm9pY2VMYXlvdXRDb25maWdJZBgDIAEoCUgAiAEBQhgKFl9pbnZvaWNlTGF5b3V0Q29uZmlnSWQiMAouVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3NSZXNwb25zZSKaAwozU2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0EhgKCmludGVybmFsSWQYASABKAlCBOJBAQISFAoGdmVuZG9yGAIgASgJQgTiQQECEhQKBnJvb3RJZBgDIAEoCUIE4kEBAhKFAQoHc2V0dGluZxgEIAMoCzJuLmJsdWVhcGkuYmlsbGluZy52MS5TZXRDaGlsZEJpbGxpbmdHcm91cEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QuQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ1NldHRpbmdCBOJBAQIalAEKJkN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdTZXR0aW5nEhAKAmlkGAEgASgJQgTiQQECEkAKDmNoYXJnaW5nVGFyZ2V0GAIgASgOMiIuYmx1ZWFwaS5hcGkucmlwcGxlLkNoYXJnaW5nVGFyZ2V0QgTiQQECEhYKCGFjY291bnRzGAMgAygJQgTiQQEBIlQKMlNldENoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EhIKCmludGVybmFsSWQYASABKAkSCgoCaWQYAiABKAkijgEKOVNldENoaWxkQmlsbGluZ0dyb3VwQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBISCgppbnRlcm5hbElkGAEgASgJEj0KCGFjY291bnRzGAIgAygLMisuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzIlkKM0dldENoaWxkQmlsbGluZ0dyb3VwQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBISCgppbnRlcm5hbElkGAEgASgJEg4KBnZlbmRvchgCIAEoCSLOAQo0R2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXNwb25zZRIQCgJpZBgBIAEoCUIE4kEBAhIUCgZ2ZW5kb3IYAiABKAlCBOJBAQISQAoOY2hhcmdpbmdUYXJnZXQYAyABKA4yIi5ibHVlYXBpLmFwaS5yaXBwbGUuQ2hhcmdpbmdUYXJnZXRCBOJBAQISLAoIYWNjb3VudHMYBCADKAsyFC5ibHVlYXBpLmFwaS5BY2NvdW50QgTiQQEBIkgKMkdldENoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0EhIKCmludGVybmFsSWQYASABKAkiQQozR2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlEgoKAmlkGAEgASgJIlAKOlJlYWRDaGlsZEJpbGxpbmdHcm91cEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QSEgoKaW50ZXJuYWxJZBgBIAEoCSJ5Ch1CdWxrQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdBIOCgZ2ZW5kb3IYBSABKAkSEgoKY3N2Q29udGVudBgBIAEoDBIRCglkZWxpbWl0ZXIYAiABKAkSEQoJaGFzSGVhZGVyGAMgASgIEg4KBmRyeVJ1bhgEIAEoCCJVChtCdWxrQ3JlYXRlQmlsbGluZ0dyb3VwRXJyb3ISDQoFaW5kZXgYASABKAUSFgoOYmlsbGluZ0dyb3VwSWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCSKzAgoeQnVsa0NyZWF0ZUJpbGxpbmdHcm91cE1ldGFkYXRhEg4KBnN0YXR1cxgBIAEoCRISCgp0b3RhbENvdW50GAIgASgFEhYKDnByb2Nlc3NlZENvdW50GAMgASgFEhQKDHN1Y2Nlc3NDb3VudBgEIAEoBRIUCgxmYWlsdXJlQ291bnQYBSABKAUSPwoGZXJyb3JzGAYgAygLMi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkJ1bGtDcmVhdGVCaWxsaW5nR3JvdXBFcnJvchIRCglzdGFydFRpbWUYByABKAkSDwoHZW5kVGltZRgIIAEoCRJECgRyb3dzGAkgAygLMjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkJ1bGtCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3NSb3ciPgodTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSDQoFdmFsdWUYASABKAkSDgoGc291cmNlGAIgASgJIqkNChlOb3JtYWxpemVkSW52b2ljZVNldHRpbmdzEkMKCGNhbGNUeXBlGAEgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEkYKC2Rpc3BsYXlDb3N0GAIgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEk4KE3N1cHBvcnRBbW91bnRUYXJnZXQYAyABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSTwoUc3VwcG9ydEZlZUNhbGNUYXJnZXQYBCABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSVAoZc3Vic3RpdHV0aW9uRmVlQ2FsY1RhcmdldBgFIAEoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Ob3JtYWxpemVkSW52b2ljZVNldHRpbmdGaWVsZBJKCg9pbnZvaWNlVGVtcGxhdGUYBiABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSSAoNY3VzdG9tU2VydmljZRgHIAEoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Ob3JtYWxpemVkSW52b2ljZVNldHRpbmdGaWVsZBJLChBzZXJ2aWNlRGlzY291bnRzGAggASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEkMKCGN1cnJlbmN5GAkgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEkIKB3RheFJhdGUYCiABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSRwoMZGlzY291bnRSYXRlGAsgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEk4KE2Rpc2NvdW50VGFyZ2V0VXNhZ2UYDCABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSTAoRZGlzY291bnRDYWxjTG9naWMYDSABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSSgoPc3Vic3RpdHV0aW9uRmVlGA4gASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEksKEHN1YnN0aXR1dGlvblJhdGUYDyABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSSgoPc3Vic3RpdHV0aW9uRml4GBAgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkElUKGnN1YnN0aXR1dGlvbkZlZVRhcmdldFVzYWdlGBEgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkElIKF3N1YnN0aXR1dGlvbkZlZUNhbGNUeXBlGBIgASgLMjEuYmx1ZWFwaS5iaWxsaW5nLnYxLk5vcm1hbGl6ZWRJbnZvaWNlU2V0dGluZ0ZpZWxkEkUKCnN1cHBvcnRGZWUYEyABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSRgoLc3VwcG9ydFJhdGUYFCABKAsyMS5ibHVlYXBpLmJpbGxpbmcudjEuTm9ybWFsaXplZEludm9pY2VTZXR0aW5nRmllbGQSRQoKc3VwcG9ydEZpeBgVIAEoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Ob3JtYWxpemVkSW52b2ljZVNldHRpbmdGaWVsZBJPChRzdXBwb3J0RmVlQWRqdXN0bWVudBgWIAEoCzIxLmJsdWVhcGkuYmlsbGluZy52MS5Ob3JtYWxpemVkSW52b2ljZVNldHRpbmdGaWVsZCLiAQoiQnVsa0JpbGxpbmdHcm91cEludm9pY2VTZXR0aW5nc1JvdxINCgVpbmRleBgBIAEoBRIWCg5iaWxsaW5nR3JvdXBJZBgCIAEoCRIOCgZzdGF0dXMYAyABKAkSDgoGZXJyb3JzGAQgAygJEkkKEm5vcm1hbGl6ZWRTZXR0aW5ncxgFIAEoCzItLmJsdWVhcGkuYmlsbGluZy52MS5Ob3JtYWxpemVkSW52b2ljZVNldHRpbmdzEhMKC2Rpc3Bvc2l0aW9uGAYgASgJEhUKDWNzdkxpbmVOdW1iZXIYByABKAUieQodQnVsa1VwZGF0ZUJpbGxpbmdHcm91cFJlcXVlc3QSDgoGdmVuZG9yGAUgASgJEhIKCmNzdkNvbnRlbnQYASABKAwSEQoJZGVsaW1pdGVyGAIgASgJEhEKCWhhc0hlYWRlchgDIAEoCBIOCgZkcnlSdW4YBCABKAgiZQobQnVsa1VwZGF0ZUJpbGxpbmdHcm91cEVycm9yEg0KBWluZGV4GAEgASgFEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDgoGcmVhc29uGAQgASgJIrMCCh5CdWxrVXBkYXRlQmlsbGluZ0dyb3VwTWV0YWRhdGESDgoGc3RhdHVzGAEgASgJEhIKCnRvdGFsQ291bnQYAiABKAUSFgoOcHJvY2Vzc2VkQ291bnQYAyABKAUSFAoMc3VjY2Vzc0NvdW50GAQgASgFEhQKDGZhaWx1cmVDb3VudBgFIAEoBRI/CgZlcnJvcnMYBiADKAsyLy5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa1VwZGF0ZUJpbGxpbmdHcm91cEVycm9yEhEKCXN0YXJ0VGltZRgHIAEoCRIPCgdlbmRUaW1lGAggASgJEkQKBHJvd3MYCSADKAsyNi5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa0JpbGxpbmdHcm91cEludm9pY2VTZXR0aW5nc1JvdyK5AQoTRXhjbHVkZVNlcnZpY2VFbnRyeRIOCgZtc3BfaWQYASABKAkSDgoGdmVuZG9yGAIgASgJEhAKCHBheWVyX2lkGAMgASgJEg8KB3NlcnZpY2UYBCABKAkSDwoHcHJvZHVjdBgFIAEoCRIXCg9leGNlcHRfcGF5ZXJfaWQYBiADKAkSDgoGYWN0aW9uGAcgASgJEg4KBnN0YXR1cxgIIAEoCRIVCg1lcnJvcl9tZXNzYWdlGAkgASgJIo8BCiBDcmVhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVxdWVzdBIOCgZtc3BfaWQYASABKAkSDgoGdmVuZG9yGAIgASgJEhAKCHBheWVyX2lkGAMgASgJEg8KB3NlcnZpY2UYBCABKAkSDwoHcHJvZHVjdBgFIAEoCRIXCg9leGNlcHRfcGF5ZXJfaWQYBiADKAkiWwohQ3JlYXRlRXhjbHVkZVNlcnZpY2VFbnRyeVJlc3BvbnNlEjYKBWVudHJ5GAEgASgLMicuYmx1ZWFwaS5iaWxsaW5nLnYxLkV4Y2x1ZGVTZXJ2aWNlRW50cnkijwEKIFVwZGF0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXF1ZXN0Eg4KBm1zcF9pZBgBIAEoCRIOCgZ2ZW5kb3IYAiABKAkSEAoIcGF5ZXJfaWQYAyABKAkSDwoHc2VydmljZRgEIAEoCRIPCgdwcm9kdWN0GAUgASgJEhcKD2V4Y2VwdF9wYXllcl9pZBgGIAMoCSJbCiFVcGRhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVzcG9uc2USNgoFZW50cnkYASABKAsyJy5ibHVlYXBpLmJpbGxpbmcudjEuRXhjbHVkZVNlcnZpY2VFbnRyeSJ2CiBEZWxldGVFeGNsdWRlU2VydmljZUVudHJ5UmVxdWVzdBIOCgZtc3BfaWQYASABKAkSDgoGdmVuZG9yGAIgASgJEhAKCHBheWVyX2lkGAMgASgJEg8KB3NlcnZpY2UYBCABKAkSDwoHcHJvZHVjdBgFIAEoCSJbCiFEZWxldGVFeGNsdWRlU2VydmljZUVudHJ5UmVzcG9uc2USNgoFZW50cnkYASABKAsyJy5ibHVlYXBpLmJpbGxpbmcudjEuRXhjbHVkZVNlcnZpY2VFbnRyeSI8ChpMaXN0RXhjbHVkZVNlcnZpY2VzUmVxdWVzdBIOCgZtc3BfaWQYASABKAkSDgoGdmVuZG9yGAIgASgJIlcKG0xpc3RFeGNsdWRlU2VydmljZXNSZXNwb25zZRI4CgdlbnRyaWVzGAEgAygLMicuYmx1ZWFwaS5iaWxsaW5nLnYxLkV4Y2x1ZGVTZXJ2aWNlRW50cnkiRAoLU2VydmljZUl0ZW0SCgoCaWQYASABKAkSDAoEY29kZRgCIAEoCRINCgVuYW1lcxgDIAMoCRIMCgRza3VzGAQgAygJIjMKE0xpc3RTZXJ2aWNlc1JlcXVlc3QSDgoGdmVuZG9yGAEgASgJEgwKBGNvZGUYAiABKAkiRQoUTGlzdFNlcnZpY2VzUmVzcG9uc2USLQoEZGF0YRgBIAMoCzIfLmJsdWVhcGkuYmlsbGluZy52MS5TZXJ2aWNlSXRlbSJyChZCdWxrTGlua0FjY291bnRSZXF1ZXN0Eg4KBnZlbmRvchgFIAEoCRISCgpjc3ZDb250ZW50GAEgASgMEhEKCWRlbGltaXRlchgCIAEoCRIRCgloYXNIZWFkZXIYAyABKAgSDgoGZHJ5UnVuGAQgASgIImEKFEJ1bGtMaW5rQWNjb3VudEVycm9yEg0KBWluZGV4GAEgASgFEhYKDmJpbGxpbmdHcm91cElkGAIgASgJEhEKCWFjY291bnRJZBgDIAEoCRIPCgdtZXNzYWdlGAQgASgJIt8BChdCdWxrTGlua0FjY291bnRNZXRhZGF0YRIOCgZzdGF0dXMYASABKAkSEgoKdG90YWxDb3VudBgCIAEoBRIWCg5wcm9jZXNzZWRDb3VudBgDIAEoBRIUCgxzdWNjZXNzQ291bnQYBCABKAUSFAoMZmFpbHVyZUNvdW50GAUgASgFEjgKBmVycm9ycxgGIAMoCzIoLmJsdWVhcGkuYmlsbGluZy52MS5CdWxrTGlua0FjY291bnRFcnJvchIRCglzdGFydFRpbWUYByABKAkSDwoHZW5kVGltZRgIIAEoCSI+ChpCdWxrVGFnQmlsbGluZ0dyb3VwUmVxdWVzdBISCgpjc3ZDb250ZW50GAEgASgMEgwKBG1vZGUYAiABKAkiggEKGEJ1bGtUYWdCaWxsaW5nR3JvdXBFcnJvchINCgVpbmRleBgBIAEoBRIWCg5iaWxsaW5nR3JvdXBJZBgCIAEoCRISCgpjdXN0b21lcklkGAMgASgJEgsKA2tleRgEIAEoCRINCgV2YWx1ZRgFIAEoCRIPCgdtZXNzYWdlGAYgASgJIucBChtCdWxrVGFnQmlsbGluZ0dyb3VwTWV0YWRhdGESDgoGc3RhdHVzGAEgASgJEhIKCnRvdGFsQ291bnQYAiABKAUSFgoOcHJvY2Vzc2VkQ291bnQYAyABKAUSFAoMc3VjY2Vzc0NvdW50GAQgASgFEhQKDGZhaWx1cmVDb3VudBgFIAEoBRI8CgZlcnJvcnMYBiADKAsyLC5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa1RhZ0JpbGxpbmdHcm91cEVycm9yEhEKCXN0YXJ0VGltZRgHIAEoCRIPCgdlbmRUaW1lGAggASgJIjcKKUdldEJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0EgoKAmlkGAEgASgJInkKKkdldEJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXNwb25zZRIxCgZsYXlvdXQYASABKAsyIS5ibHVlYXBpLmFwaS5yaXBwbGUuSW52b2ljZUxheW91dBIKCgJpZBgCIAEoCRIMCgRuYW1lGAMgASgJIkoKKVNldEJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0EgoKAmlkGAEgASgJEhEKCWxheW91dF9pZBgCIAEoCSJjCiBDcmVhdGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBIMCgRuYW1lGAEgASgJEjEKBmxheW91dBgCIAEoCzIhLmJsdWVhcGkuYXBpLnJpcHBsZS5JbnZvaWNlTGF5b3V0IjYKIUNyZWF0ZUludm9pY2VMYXlvdXRDb25maWdSZXNwb25zZRIRCglsYXlvdXRfaWQYASABKAkibwogVXBkYXRlSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QSCgoCaWQYASABKAkSMQoGbGF5b3V0GAIgASgLMiEuYmx1ZWFwaS5hcGkucmlwcGxlLkludm9pY2VMYXlvdXQSDAoEbmFtZRgDIAEoCSIgCh5SZWFkSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QibgofUmVhZEludm9pY2VMYXlvdXRDb25maWdSZXNwb25zZRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEjEKBmxheW91dBgDIAEoCzIhLmJsdWVhcGkuYXBpLnJpcHBsZS5JbnZvaWNlTGF5b3V0IjoKLERlbGV0ZUJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0EgoKAmlkGAEgASgJIi4KIERlbGV0ZUludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0EgoKAmlkGAEgASgJIjkKK0xpc3RJbnZvaWNlTGF5b3V0Q29uZmlnQmlsbGluZ0dyb3Vwc1JlcXVlc3QSCgoCaWQYASABKAkiSAosTGlzdEludm9pY2VMYXlvdXRDb25maWdCaWxsaW5nR3JvdXBzUmVzcG9uc2USGAoQYmlsbGluZ2dyb3VwX2lkcxgBIAMoCTLAxgEKB0JpbGxpbmcSgAEKEUxpc3RCaWxsaW5nR3JvdXBzEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RCaWxsaW5nR3JvdXBzUmVxdWVzdBogLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXAiGYLT5JMCExIRL3YxL2JpbGxpbmdncm91cHMwARKwAQoaTGlzdEJpbGxpbmdHcm91cHNQYWdpbmF0ZWQSNS5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEJpbGxpbmdHcm91cHNQYWdpbmF0ZWRSZXF1ZXN0GjYuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RCaWxsaW5nR3JvdXBzUGFnaW5hdGVkUmVzcG9uc2UiI4LT5JMCHRIbL3YxL2JpbGxpbmdncm91cHM6cGFnaW5hdGVkEoMBChJDcmVhdGVCaWxsaW5nR3JvdXASLS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwUmVxdWVzdBogLmJsdWVhcGkuYmlsbGluZy52MS5CaWxsaW5nR3JvdXAiHILT5JMCFjoBKiIRL3YxL2JpbGxpbmdncm91cHMSlgEKGENyZWF0ZUJpbGxpbmdHcm91cE1lcmdlZBIzLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBNZXJnZWRSZXF1ZXN0GiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkJpbGxpbmdHcm91cCIjgtPkkwIdOgEqIhgvdjEvYmlsbGluZ2dyb3Vwcy9tZXJnZWQSeQoRRGVsZXRlQmlsbGluR3JvdXASLS5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQmlsbGluZ0dyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIdgtPkkwIXKhUvdjEvYmlsbGluZ2dyb3VwL3tpZH0SjAEKGEFkZEFjY291bnRUb0JpbGxpbmdHcm91cBIzLmJsdWVhcGkuYmlsbGluZy52MS5BZGRBY2NvdW50VG9CaWxsaW5nR3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiOC0+STAh06ASoiGC92MS9iaWxsaW5nZ3JvdXAvYWNjb3VudBKZAQoPR2V0QmlsbGluZ0dyb3VwEiouYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEJpbGxpbmdHcm91cFJlcXVlc3QaKy5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QmlsbGluZ0dyb3VwUmVzcG9uc2UiLYLT5JMCJxIlL3YxL2JpbGxpbmdncm91cHMve2JpbGxpbmdJbnRlcm5hbElkfRKRAQoOR2V0QWNjZXNzR3JvdXASKS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QWNjZXNzR3JvdXBSZXF1ZXN0GiouYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEFjY2Vzc0dyb3VwUmVzcG9uc2UiKILT5JMCIhIgL3YxL2FjY2Vzc2dyb3Vwcy97YWNjZXNzR3JvdXBJZH0SngEKFkxpc3RBd3NEYWlseVJ1bkhpc3RvcnkSMS5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEF3c0RhaWx5UnVuSGlzdG9yeVJlcXVlc3QaJi5ibHVlYXBpLmJpbGxpbmcudjEuQXdzRGFpbHlSdW5IaXN0b3J5IieC0+STAiE6ASoiHC92MS9hd3MvZGFpbHlydW5oaXN0b3J5OnJlYWQwARKaAQoTTGlzdFVzYWdlQ29zdHNEcmlmdBIuLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0VXNhZ2VDb3N0c0RyaWZ0UmVxdWVzdBojLmJsdWVhcGkuYmlsbGluZy52MS5Vc2FnZUNvc3RzRHJpZnQiLILT5JMCJjoBKiIhL3YxL3t2ZW5kb3J9L3VzYWdlY29zdHNkcmlmdDpyZWFkMAESfAoNQ3JlYXRlSW52b2ljZRIoLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVJbnZvaWNlUmVxdWVzdBobLmJsdWVhcGkuYXBpLkludm9pY2VNZXNzYWdlIiSC0+STAh46ASoiGS92MS9pbnZvaWNlL3tkYXRlfTpjcmVhdGUSmwEKGUNyZWF0ZUludm9pY2VXaXRoU2V0dGluZ3MSLi5ibHVlYXBpLmJpbGxpbmcudjEuU2F2ZUludm9pY2VTZXR0aW5nc1JlcXVlc3QaGy5ibHVlYXBpLmFwaS5JbnZvaWNlTWVzc2FnZSIxgtPkkwIrOgEqIiYvdjEvaW52b2ljZS97ZGF0ZX06Y3JlYXRlJnNhdmVzZXR0aW5ncxKJAQoTU2F2ZUludm9pY2VTZXR0aW5ncxIuLmJsdWVhcGkuYmlsbGluZy52MS5TYXZlSW52b2ljZVNldHRpbmdzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIqgtPkkwIkOgEqIh8vdjEvaW52b2ljZS97ZGF0ZX06c2F2ZXNldHRpbmdzEqIBChNDb252ZXJ0SW52b2ljZVRvUGRmEi4uYmx1ZWFwaS5iaWxsaW5nLnYxLkNvbnZlcnRJbnZvaWNlVG9QZGZSZXF1ZXN0Gi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkNvbnZlcnRJbnZvaWNlVG9QZGZSZXNwb25zZSIqgtPkkwIkOgEqIh8vdjEvaW52b2ljZS97ZGF0ZX06Y29udmVydHRvcGRmEn0KEEdldEludm9pY2VTdGF0dXMSKy5ibHVlYXBpLmJpbGxpbmcudjEuR2V0SW52b2ljZVN0YXR1c1JlcXVlc3QaGy5ibHVlYXBpLmFwaS5JbnZvaWNlTWVzc2FnZSIfgtPkkwIZEhcvdjEvaW52b2ljZS9zdGF0dXMve2lkfRKLAQoRTGlzdEludm9pY2VTdGF0dXMSLC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VTdGF0dXNSZXF1ZXN0GhsuYmx1ZWFwaS5hcGkuSW52b2ljZU1lc3NhZ2UiKYLT5JMCIzoBKiIeL3YxL2ludm9pY2Uvc3RhdHVzL3tkYXRlfTpyZWFkMAESbQoKR2V0SW52b2ljZRIlLmJsdWVhcGkuYmlsbGluZy52MS5HZXRJbnZvaWNlUmVxdWVzdBoULmJsdWVhcGkuYXBpLkludm9pY2UiIoLT5JMCHDoBKiIXL3YxL2ludm9pY2Uve2RhdGV9OnJlYWQSfQoLTGlzdEludm9pY2USJi5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VSZXF1ZXN0GicuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RJbnZvaWNlUmVzcG9uc2UiG4LT5JMCFToBKiIQL3YxL2ludm9pY2U6cmVhZDABEogBChVVcGRhdGVJbnZvaWNlUHJldmlld3MSMC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZVByZXZpZXdzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIlgtPkkwIfOgEqGhovdjEvaW52b2ljZS97ZGF0ZX06cHJldmlldxKWAQoRRXhwb3J0SW52b2ljZUZpbGUSLC5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0SW52b2ljZUZpbGVSZXF1ZXN0Gi0uYmx1ZWFwaS5iaWxsaW5nLnYxLkV4cG9ydEludm9pY2VGaWxlUmVzcG9uc2UiJILT5JMCHjoBKiIZL3YxL2ludm9pY2Uve2RhdGV9OmV4cG9ydBKWAQoTTGlzdEludm9pY2VUZW1wbGF0ZRIuLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVRlbXBsYXRlUmVxdWVzdBovLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZVRlbXBsYXRlUmVzcG9uc2UiHILT5JMCFhIUL3YxL2ludm9pY2UvdGVtcGxhdGUwARKtAQoZR2V0SW52b2ljZURpc3BsYXlTZXR0aW5ncxI0LmJsdWVhcGkuYmlsbGluZy52MS5HZXRJbnZvaWNlRGlzcGxheVNldHRpbmdzUmVxdWVzdBo1LmJsdWVhcGkuYmlsbGluZy52MS5HZXRJbnZvaWNlRGlzcGxheVNldHRpbmdzUmVzcG9uc2UiI4LT5JMCHRIbL3YxL2ludm9pY2UvZGlzcGxheXNldHRpbmdzEpcBChxVcGRhdGVJbnZvaWNlRGlzcGxheVNldHRpbmdzEjcuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUludm9pY2VEaXNwbGF5U2V0dGluZ3NSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiaC0+STAiA6ASoiGy92MS9pbnZvaWNlL2Rpc3BsYXlzZXR0aW5ncxKWAQoZVXBkYXRlSW52b2ljZUV4Y2hhbmdlUmF0ZRI0LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVJbnZvaWNlRXhjaGFuZ2VSYXRlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIrgtPkkwIlOgEqGiAvdjEvaW52b2ljZS9leGNoYW5nZXJhdGUve21vbnRofRKsAQohVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVRlbXBsYXRlEjwuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUJpbGxpbmdHcm91cEludm9pY2VUZW1wbGF0ZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMYLT5JMCKzoBKiImL3YxL2JpbGxpbmdncm91cHMve2lkfS9pbnZvaWNldGVtcGxhdGUSsQEKHFJlYWRTZXJ2aWNlRGlzY291bnRzU2VydmljZXMSNy5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZFNlcnZpY2VEaXNjb3VudHNTZXJ2aWNlc1JlcXVlc3QaHi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuU2VydmljZSI2gtPkkwIwOgEqIisvdjEvc2VydmljZWRpc2NvdW50cy97dmVuZG9yfS9zZXJ2aWNlczpyZWFkMAESqgEKHUNyZWF0ZUludm9pY2VTZXJ2aWNlRGlzY291bnRzEjguYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBouLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50cyIfgtPkkwIZOgEqIhQvdjEvc2VydmljZWRpc2NvdW50cxKvAQodVXBkYXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHMSOC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Gi4uYmx1ZWFwaS5hcGkucmlwcGxlLnYxLkludm9pY2VTZXJ2aWNlRGlzY291bnRzIiSC0+STAh46ASoaGS92MS9zZXJ2aWNlZGlzY291bnRzL3tpZH0SlAEKHURlbGV0ZUludm9pY2VTZXJ2aWNlRGlzY291bnRzEjguYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIhgtPkkwIbKhkvdjEvc2VydmljZWRpc2NvdW50cy97aWR9EqoBChtMaXN0SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSNi5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBorLmJsdWVhcGkuYmlsbGluZy52MS5JbnZvaWNlU2VydmljZURpc2NvdW50cyIkgtPkkwIeOgEqIhkvdjEvc2VydmljZWRpc2NvdW50czpyZWFkMAESpgEKGkdldEludm9pY2VTZXJ2aWNlRGlzY291bnRzEjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBouLmJsdWVhcGkuYXBpLnJpcHBsZS52MS5JbnZvaWNlU2VydmljZURpc2NvdW50cyIhgtPkkwIbEhkvdjEvc2VydmljZWRpc2NvdW50cy97aWR9EqIBChZFeHBvcnRTZXJ2aWNlRGlzY291bnRzEjEuYmx1ZWFwaS5iaWxsaW5nLnYxLkV4cG9ydFNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0Gi0uYmx1ZWFwaS5hcGkucmlwcGxlLnYxLlNlcnZpY2VEaXNjb3VudHNFeHBvcnQiJoLT5JMCIDoBKiIbL3YxL3NlcnZpY2VkaXNjb3VudHM6ZXhwb3J0EvABCilDcmVhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJELmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaRS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZSI2gtPkkwIwOgEqIisvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYmlsbGluZ2dyb3VwEvABCilVcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJELmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaRS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZSI2gtPkkwIwOgEqGisvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYmlsbGluZ2dyb3VwEr4BCilEZWxldGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJELmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiM4LT5JMCLSorL3YxL3NlcnZpY2VkaXNjb3VudHMve2dyb3VwSWR9L2JpbGxpbmdncm91cBLRAQoiTGlzdEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cxI9LmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoyLmJsdWVhcGkuYmlsbGluZy52MS5BY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHMiNoLT5JMCMDoBKiIrL3YxL3NlcnZpY2VkaXNjb3VudHMve2dyb3VwSWR9L2FjY291bnQ6cmVhZDABEtwBCiRDcmVhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSPy5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpALmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXNwb25zZSIxgtPkkwIrOgEqIiYvdjEvc2VydmljZWRpc2NvdW50cy97Z3JvdXBJZH0vYWNjb3VudBLcAQokVXBkYXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEj8uYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaQC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2UiMYLT5JMCKzoBKhomL3YxL3NlcnZpY2VkaXNjb3VudHMve2dyb3VwSWR9L2FjY291bnQSuQEKJFJlbW92ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cxI/LmJsdWVhcGkuYmlsbGluZy52MS5SZW1vdmVBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjiC0+STAjI6ASoaLS92MS9zZXJ2aWNlZGlzY291bnRzL3tncm91cElkfS9hY2NvdW50OnJlbW92ZRKvAQokRGVsZXRlQWNjb3VudEludm9pY2VTZXJ2aWNlRGlzY291bnRzEj8uYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiLoLT5JMCKComL3YxL3NlcnZpY2VkaXNjb3VudHMve2dyb3VwSWR9L2FjY291bnQSzQEKJEV4cG9ydEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cxI/LmJsdWVhcGkuYmlsbGluZy52MS5FeHBvcnRBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GjQuYmx1ZWFwaS5hcGkucmlwcGxlLnYxLkFjY291bnRTZXJ2aWNlRGlzY291bnRzRXhwb3J0Ii6C0+STAig6ASoiIy92MS9zZXJ2aWNlZGlzY291bnRzL2FjY291bnQ6ZXhwb3J0EtoBCilFeHBvcnRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJELmJsdWVhcGkuYmlsbGluZy52MS5FeHBvcnRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1JlcXVlc3QaMi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuR3JvdXBTZXJ2aWNlRGlzY291bnRzRXhwb3J0IjOC0+STAi06ASoiKC92MS9zZXJ2aWNlZGlzY291bnRzL2JpbGxpbmdncm91cDpleHBvcnQS5AEKJkdldEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzEkEuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpCLmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50c1Jlc3BvbnNlIjOC0+STAi0SKy92MS9zZXJ2aWNlZGlzY291bnRzL3tncm91cElkfS9iaWxsaW5nZ3JvdXAScwoOQ3JlYXRlUmVzZWxsZXISKS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlUmVzZWxsZXJSZXF1ZXN0GhwuYmx1ZWFwaS5hcGkucmlwcGxlLlJlc2VsbGVyIhiC0+STAhI6ASoiDS92MS9yZXNlbGxlcnMScAoNTGlzdFJlc2VsbGVycxIoLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0UmVzZWxsZXJzUmVxdWVzdBocLmJsdWVhcGkuYXBpLnJpcHBsZS5SZXNlbGxlciIVgtPkkwIPEg0vdjEvcmVzZWxsZXJzMAESbwoLR2V0UmVzZWxsZXISJi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0UmVzZWxsZXJSZXF1ZXN0GhwuYmx1ZWFwaS5hcGkucmlwcGxlLlJlc2VsbGVyIhqC0+STAhQSEi92MS9yZXNlbGxlcnMve2lkfRJ4Cg5VcGRhdGVSZXNlbGxlchIpLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVSZXNlbGxlclJlcXVlc3QaHC5ibHVlYXBpLmFwaS5yaXBwbGUuUmVzZWxsZXIiHYLT5JMCFzoBKhoSL3YxL3Jlc2VsbGVycy97aWR9Em8KDkRlbGV0ZVJlc2VsbGVyEikuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZVJlc2VsbGVyUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIagtPkkwIUKhIvdjEvcmVzZWxsZXJzL3tpZH0ShgEKEUdldEJpbGxpbmdTZXR0aW5nEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEJpbGxpbmdTZXR0aW5nUmVxdWVzdBotLmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nU2V0dGluZ1Jlc3BvbnNlIhSC0+STAg4SDC92MS9zZXR0aW5ncxKbAQoRTGlzdEV4Y2hhbmdlUmF0ZXMSLC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEV4Y2hhbmdlUmF0ZXNSZXF1ZXN0Gi0uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RFeGNoYW5nZVJhdGVzUmVzcG9uc2UiKYLT5JMCIxIhL3YxL3t2ZW5kb3J9L2V4Y2hhbmdlcmF0ZS97bW9udGh9EpYBChVTZXRHbG9iYWxFeGNoYW5nZVJhdGUSMC5ibHVlYXBpLmJpbGxpbmcudjEuU2V0R2xvYmFsRXhjaGFuZ2VSYXRlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIzgtPkkwItOgEqIigvdjEvZXhjaGFuZ2VyYXRlL2dsb2JhbC97dmVuZG9yfS97bW9udGh9EooBChRTZXRQYXllckV4Y2hhbmdlUmF0ZRIvLmJsdWVhcGkuYmlsbGluZy52MS5TZXRQYXllckV4Y2hhbmdlUmF0ZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiKYLT5JMCIzoBKiIeL3YxL2V4Y2hhbmdlcmF0ZS9wYXllci97bW9udGh9Ep8BChtTZXRCaWxsaW5nR3JvdXBFeGNoYW5nZVJhdGUSNi5ibHVlYXBpLmJpbGxpbmcudjEuU2V0QmlsbGluZ0dyb3VwRXhjaGFuZ2VSYXRlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIwgtPkkwIqOgEqIiUvdjEvZXhjaGFuZ2VyYXRlL2JpbGxpbmdncm91cC97bW9udGh9EnwKEExpc3RBY2Nlc3NHcm91cHMSKy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEFjY2Vzc0dyb3Vwc1JlcXVlc3QaHy5ibHVlYXBpLmFwaS5yaXBwbGUuQWNjZXNzR3JvdXAiGILT5JMCEhIQL3YxL2FjY2Vzc2dyb3VwczABEn8KEUNyZWF0ZUFjY2Vzc0dyb3VwEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdBofLmJsdWVhcGkuYXBpLnJpcHBsZS5BY2Nlc3NHcm91cCIbgtPkkwIVOgEqIhAvdjEvYWNjZXNzZ3JvdXBzEoQBChFVcGRhdGVBY2Nlc3NHcm91cBIsLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVBY2Nlc3NHcm91cFJlcXVlc3QaHy5ibHVlYXBpLmFwaS5yaXBwbGUuQWNjZXNzR3JvdXAiIILT5JMCGjoBKhoVL3YxL2FjY2Vzc2dyb3Vwcy97aWR9EngKEURlbGV0ZUFjY2Vzc0dyb3VwEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUFjY2Vzc0dyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIdgtPkkwIXKhUvdjEvYWNjZXNzZ3JvdXBzL3tpZH0SnwEKFExpc3RBYmNCaWxsaW5nR3JvdXBzEi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RBYmNCaWxsaW5nR3JvdXBzUmVxdWVzdBojLmJsdWVhcGkuYmlsbGluZy52MS5BYmNCaWxsaW5nR3JvdXAiL4LT5JMCKRInL3YxL2JpbGxpbmdncm91cHMvYmlsbGluZ2NvbmR1Y3Rvci97aWR9MAEStgEKG0xpc3RBYmNCaWxsaW5nR3JvdXBBY2NvdW50cxI2LmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QWJjQmlsbGluZ0dyb3VwQWNjb3VudHNSZXF1ZXN0Gh4uYmx1ZWFwaS5iaWxsaW5nLnYxLkFiY0FjY291bnQiPYLT5JMCNxI1L3YxL2JpbGxpbmdncm91cHMvYmlsbGluZ2NvbmR1Y3Rvci97cGF5ZXJJZH0vYWNjb3VudHMwARKcAQoWUmVhZEludm9pY2VBZGp1c3RtZW50cxIxLmJsdWVhcGkuYmlsbGluZy52MS5SZWFkSW52b2ljZUFkanVzdG1lbnRzUmVxdWVzdBocLmJsdWVhcGkuYXBpLndhdmUuQWRqdXN0bWVudCIvgtPkkwIpOgEqIiQvdjEve3ZlbmRvcn0vaW52b2ljZWFkanVzdG1lbnRzOnJlYWQwARKjAQoVUmVhZEFkanVzdG1lbnRFbnRyaWVzEjAuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlYWRBZGp1c3RtZW50RW50cmllc1JlcXVlc3QaJi5ibHVlYXBpLmFwaS5yaXBwbGUudjEuQWRqdXN0bWVudEVudHJ5Ii6C0+STAig6ASoiIy92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllczpyZWFkMAESmAEKEkdldEFkanVzdG1lbnRFbnRyeRItLmJsdWVhcGkuYmlsbGluZy52MS5HZXRBZGp1c3RtZW50RW50cnlSZXF1ZXN0GiYuYmx1ZWFwaS5hcGkucmlwcGxlLnYxLkFkanVzdG1lbnRFbnRyeSIrgtPkkwIlEiMvdjEve3ZlbmRvcn0vYWRqdXN0bWVudGVudHJpZXMve2lkfRKQAQoUQXBwbHlBZGp1c3RtZW50RW50cnkSLy5ibHVlYXBpLmJpbGxpbmcudjEuQXBwbHlBZGp1c3RtZW50RW50cnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ii+C0+STAik6ASoiJC92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllczphcHBseRKWAQoWUmVzdG9yZUFkanVzdG1lbnRFbnRyeRIxLmJsdWVhcGkuYmlsbGluZy52MS5SZXN0b3JlQWRqdXN0bWVudEVudHJ5UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIxgtPkkwIrOgEqIiYvdjEve3ZlbmRvcn0vYWRqdXN0bWVudGVudHJpZXM6cmVzdG9yZRKVAQoUU3BsaXRBZGp1c3RtZW50RW50cnkSLy5ibHVlYXBpLmJpbGxpbmcudjEuU3BsaXRBZGp1c3RtZW50RW50cnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjSC0+STAi46ASoiKS92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllcy97aWR9L3NwbGl0Ep4BChdBbGxvY2F0ZUFkanVzdG1lbnRFbnRyeRIyLmJsdWVhcGkuYmlsbGluZy52MS5BbGxvY2F0ZUFkanVzdG1lbnRFbnRyeVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiN4LT5JMCMToBKiIsL3YxL3t2ZW5kb3J9L2FkanVzdG1lbnRlbnRyaWVzL3tpZH0vYWxsb2NhdGUSqwEKG1Jlc3RvcmVTcGxpdEFkanVzdG1lbnRFbnRyeRI2LmJsdWVhcGkuYmlsbGluZy52MS5SZXN0b3JlU3BsaXRBZGp1c3RtZW50RW50cnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjyC0+STAjY6ASoiMS92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllcy97aWR9L3NwbGl0OnJlc3RvcmUStAEKHlJlc3RvcmVBbGxvY2F0ZUFkanVzdG1lbnRFbnRyeRI5LmJsdWVhcGkuYmlsbGluZy52MS5SZXN0b3JlQWxsb2NhdGVBZGp1c3RtZW50RW50cnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ij+C0+STAjk6ASoiNC92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllcy97aWR9L2FsbG9jYXRlOnJlc3RvcmUSoAEKD0NyZWF0ZUN1c3RvbUZlZRIqLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVDdXN0b21GZWVSZXF1ZXN0GisuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUN1c3RvbUZlZVJlc3BvbnNlIjSC0+STAi46ASoiKS92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cmllcy9jdXN0b21mZWVzEq0BChhMaXN0QWRqdXN0bWVudEVudHJ5SXRlbXMSMy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEFkanVzdG1lbnRFbnRyeUl0ZW1zUmVxdWVzdBonLmJsdWVhcGkuYmlsbGluZy52MS5BZGp1c3RtZW50RW50cnlJdGVtIjGC0+STAis6ASoiJi92MS97dmVuZG9yfS9hZGp1c3RtZW50ZW50cnlpdGVtczpyZWFkMAESlwEKFExpc3RBY2NvdW50UmVzb3VyY2VzEi8uYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RBY2NvdW50UmVzb3VyY2VzUmVxdWVzdBojLmJsdWVhcGkuYmlsbGluZy52MS5SZXNvdXJjZUFjY291bnQiJ4LT5JMCIRIfL3YxL3Jlc291cmNlcy9hY2NvdW50cy97dmVuZG9yfTABEosBChNHZXRBZGp1c3RtZW50Q29uZmlnEi4uYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEFkanVzdG1lbnRDb25maWdSZXF1ZXN0Gh0uYmx1ZWFwaS5hcGkuQWRqdXN0bWVudENvbmZpZyIlgtPkkwIfEh0vdjEvYWRqdXN0bWVudGNvbmZpZy97dmVuZG9yfRKUAQoWQ3JlYXRlQWRqdXN0bWVudENvbmZpZxIxLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVBZGp1c3RtZW50Q29uZmlnUmVxdWVzdBodLmJsdWVhcGkuYXBpLkFkanVzdG1lbnRDb25maWciKILT5JMCIjoBKiIdL3YxL2FkanVzdG1lbnRjb25maWcve3ZlbmRvcn0SlAEKFlVwZGF0ZUFkanVzdG1lbnRDb25maWcSMS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQWRqdXN0bWVudENvbmZpZ1JlcXVlc3QaHS5ibHVlYXBpLmFwaS5BZGp1c3RtZW50Q29uZmlnIiiC0+STAiI6ASoaHS92MS9hZGp1c3RtZW50Y29uZmlnL3t2ZW5kb3J9EooBChZEZWxldGVBZGp1c3RtZW50Q29uZmlnEjEuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUFkanVzdG1lbnRDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiWC0+STAh8qHS92MS9hZGp1c3RtZW50Y29uZmlnL3t2ZW5kb3J9EpUBChJSZWFkVW50YWdnZWRHcm91cHMSLS5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZFVudGFnZ2VkR3JvdXBzUmVxdWVzdBohLmJsdWVhcGkuYXBpLnJpcHBsZS5VbnRhZ2dlZEdyb3VwIiuC0+STAiU6ASoiIC92MS97dmVuZG9yfS91bnRhZ2dlZGdyb3VwczpyZWFkMAESuAEKHVJlYWRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VzEjguYmx1ZWFwaS5iaWxsaW5nLnYxLlJlYWRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VzUmVxdWVzdBosLmJsdWVhcGkuYXBpLnJpcHBsZS5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2UiLYLT5JMCJzoBKiIiL3YxL2N1c3RvbWl6ZWRiaWxsaW5nc2VydmljZXM6cmVhZDABEq8BChtHZXRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2USNi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBosLmJsdWVhcGkuYXBpLnJpcHBsZS5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2UiKoLT5JMCJBIiL3YxL2N1c3RvbWl6ZWRiaWxsaW5nc2VydmljZXMve2lkfRKzAQoeQ3JlYXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlEjkuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QaLC5ibHVlYXBpLmFwaS5yaXBwbGUuQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlIiiC0+STAiI6ASoiHS92MS9jdXN0b21pemVkYmlsbGluZ3NlcnZpY2VzErgBCh5VcGRhdGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2USOS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBosLmJsdWVhcGkuYXBpLnJpcHBsZS5DdXN0b21pemVkQmlsbGluZ1NlcnZpY2UiLYLT5JMCJzoBKhoiL3YxL2N1c3RvbWl6ZWRiaWxsaW5nc2VydmljZXMve2lkfRKfAQoeRGVsZXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlEjkuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiKoLT5JMCJCoiL3YxL2N1c3RvbWl6ZWRiaWxsaW5nc2VydmljZXMve2lkfRL7AQonR2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwEkIuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZUJpbGxpbmdHcm91cFJlcXVlc3QaQy5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVzcG9uc2UiRYLT5JMCPxI9L3YxL2N1c3RvbWl6ZWRiaWxsaW5nc2VydmljZXMvYmlsbGluZ2dyb3VwL3tncm91cElkfS97dmVuZG9yfTABEs8BCidTZXRDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXASQi5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJIgtPkkwJCOgEqIj0vdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlcy9iaWxsaW5nZ3JvdXAve2dyb3VwSWR9L3t2ZW5kb3J9EtIBCipEZWxldGVDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VCaWxsaW5nR3JvdXASRS5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlQmlsbGluZ0dyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJFgtPkkwI/Kj0vdjEvY3VzdG9taXplZGJpbGxpbmdzZXJ2aWNlcy9iaWxsaW5nZ3JvdXAve2dyb3VwSWR9L3t2ZW5kb3J9El4KB0dldFRhZ3MSIi5ibHVlYXBpLmJpbGxpbmcudjEuR2V0VGFnc1JlcXVlc3QaGy5ibHVlYXBpLmJpbGxpbmcudjEuVGFnRGF0YSIQgtPkkwIKEggvdjEvdGFnczABEn4KEUNyZWF0ZUN1c3RvbUZpZWxkEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUN1c3RvbUZpZWxkUmVxdWVzdBofLmJsdWVhcGkuYmlsbGluZy52MS5DdXN0b21GaWVsZCIagtPkkwIUOgEqIg8vdjEvY3VzdG9tZmllbGQSgQEKD0xpc3RDdXN0b21GaWVsZBIqLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0Q3VzdG9tRmllbGRSZXF1ZXN0Gh8uYmx1ZWFwaS5iaWxsaW5nLnYxLkN1c3RvbUZpZWxkIh+C0+STAhk6ASoiFC92MS9jdXN0b21maWVsZDpyZWFkMAESlAEKGkFkZEJpbGxpbmdHcm91cEN1c3RvbUZpZWxkEjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkFkZEJpbGxpbmdHcm91cEN1c3RvbUZpZWxkUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIngtPkkwIhOgEqIhwvdjEvYmlsbGluZ2dyb3VwL2N1c3RvbWZpZWxkEr4BChtMaXN0QmlsbGluZ0dyb3VwQ3VzdG9tRmllbGQSNi5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEJpbGxpbmdHcm91cEN1c3RvbUZpZWxkUmVxdWVzdBo3LmJsdWVhcGkuYmlsbGluZy52MS5MaXN0QmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXNwb25zZSIsgtPkkwImOgEqIiEvdjEvYmlsbGluZ2dyb3VwL2N1c3RvbWZpZWxkOnJlYWQwARKDAQoVQWRkVGFnc1RvQmlsbGluZ0dyb3VwEjAuYmx1ZWFwaS5iaWxsaW5nLnYxLkFkZFRhZ3NUb0JpbGxpbmdHcm91cFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiIILT5JMCGjoBKiIVL3YxL2JpbGxpbmdncm91cC90YWdzEq8BCh9VcGRhdGVOb25UYWdHcm91cFRvQmlsbGluZ0dyb3VwEjouYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZU5vblRhZ0dyb3VwVG9CaWxsaW5nR3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjiC0+STAjI6ASoiLS92MS9iaWxsaW5nZ3JvdXAve2lkfS97dmVuZG9yfS91bnRhZ2dlZGdyb3VwcxKxAQodRGVsZXRlQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGQSOC5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ij6C0+STAjgqNi92MS9iaWxsaW5nZ3JvdXAvY3VzdG9tZmllbGQve2dyb3VwSWR9L3tjdXN0b21GaWVsZElkfRKDAQoRVXBkYXRlQ3VzdG9tRmllbGQSLC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQ3VzdG9tRmllbGRSZXF1ZXN0Gh8uYmx1ZWFwaS5iaWxsaW5nLnYxLkN1c3RvbUZpZWxkIh+C0+STAhk6ASoaFC92MS9jdXN0b21maWVsZC97aWR9EncKEURlbGV0ZUN1c3RvbUZpZWxkEiwuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUN1c3RvbUZpZWxkUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIcgtPkkwIWKhQvdjEvY3VzdG9tZmllbGQve2lkfRJyChBDcmVhdGVGcmVlRm9ybWF0EisuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUZyZWVGb3JtYXRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhmC0+STAhM6ASoiDi92MS9mcmVlZm9ybWF0EnkKEERlbGV0ZUZyZWVGb3JtYXQSKy5ibHVlYXBpLmJpbGxpbmcudjEuRGVsZXRlRnJlZUZvcm1hdFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiIILT5JMCGioYL3YxL2ZyZWVmb3JtYXQve2dyb3VwSWR9EogBCg1HZXRGcmVlRm9ybWF0EiguYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEZyZWVGb3JtYXRSZXF1ZXN0GikuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEZyZWVGb3JtYXRSZXNwb25zZSIggtPkkwIaEhgvdjEvZnJlZWZvcm1hdC97Z3JvdXBJZH0wARK9AQofR2V0TW9udGhseU1pc2NGZWVJbXBvcnRUZW1wbGF0ZRI6LmJsdWVhcGkuYmlsbGluZy52MS5HZXRNb250aGx5TWlzY0ZlZUltcG9ydFRlbXBsYXRlUmVxdWVzdBowLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZUltcG9ydFRlbXBsYXRlIiyC0+STAiYSJC92MS9tb250aGx5LW1pc2MtZmVlczppbXBvcnRUZW1wbGF0ZRKuAQoZQnVsa0ltcG9ydE1vbnRobHlNaXNjRmVlcxI0LmJsdWVhcGkuYmlsbGluZy52MS5CdWxrSW1wb3J0TW9udGhseU1pc2NGZWVzUmVxdWVzdBouLmJsdWVhcGkuYmlsbGluZy52MS5Nb250aGx5TWlzY0ZlZUltcG9ydFJlc3VsdCIrgtPkkwIlOgEqIiAvdjEvbW9udGhseS1taXNjLWZlZXM6YnVsa0ltcG9ydBKVAQoTTGlzdE1vbnRobHlNaXNjRmVlcxIuLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0TW9udGhseU1pc2NGZWVzUmVxdWVzdBovLmJsdWVhcGkuYmlsbGluZy52MS5MaXN0TW9udGhseU1pc2NGZWVzUmVzcG9uc2UiHYLT5JMCFxIVL3YxL21vbnRobHktbWlzYy1mZWVzEocBChREZWxldGVNb250aGx5TWlzY0ZlZRIvLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVNb250aGx5TWlzY0ZlZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJoLT5JMCICoeL3YxL21vbnRobHktbWlzYy1mZWVzL3tyb3dfaWR9EqIBChRHZXRUYWdzQWRkaW5nU2V0dGluZxIvLmJsdWVhcGkuYmlsbGluZy52MS5HZXRUYWdzQWRkaW5nU2V0dGluZ1JlcXVlc3QaJS5ibHVlYXBpLmJpbGxpbmcudjEuVGFnc0FkZGluZ1NldHRpbmciMILT5JMCKhIoL3YxL3t2ZW5kb3J9L3RhZ3NhZGRpbmdzZXR0aW5nL3tncm91cElkfTABEpoBChdVcGRhdGVUYWdzQWRkaW5nU2V0dGluZxIyLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVUYWdzQWRkaW5nU2V0dGluZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiM4LT5JMCLToBKhooL3YxL3t2ZW5kb3J9L3RhZ3NhZGRpbmdzZXR0aW5nL3tncm91cElkfRKhAQoVRXhwb3J0QmlsbGluZ0dyb3VwQ3N2EjAuYmx1ZWFwaS5iaWxsaW5nLnYxLkV4cG9ydEJpbGxpbmdHcm91cENzdlJlcXVlc3QaMS5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0QmlsbGluZ0dyb3VwQ3N2UmVzcG9uc2UiI4LT5JMCHRIbL3YxL2V4cG9ydGNzdi9iaWxsaW5nLWdyb3VwEqkBChdFeHBvcnRJbnZvaWNlU2V0dGluZ0NzdhIyLmJsdWVhcGkuYmlsbGluZy52MS5FeHBvcnRJbnZvaWNlU2V0dGluZ0NzdlJlcXVlc3QaMy5ibHVlYXBpLmJpbGxpbmcudjEuRXhwb3J0SW52b2ljZVNldHRpbmdDc3ZSZXNwb25zZSIlgtPkkwIfEh0vdjEvZXhwb3J0Y3N2L2ludm9pY2Utc2V0dGluZxKnAQoiVXBkYXRlQmlsbGluZ0dyb3VwQmFzaWNJbmZvcm1hdGlvbhI9LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBCYXNpY0luZm9ybWF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIqgtPkkwIkOgEqGh8vdjEvYmlsbGluZ2dyb3VwL3tpZH06YmFzaWNJbmZvEqIBCh5VcGRhdGVCaWxsaW5nR3JvdXBDdXN0b21GaWVsZHMSOS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwQ3VzdG9tRmllbGRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSItgtPkkwInOgEqGiIvdjEvYmlsbGluZ2dyb3VwL3tpZH06Y3VzdG9tRmllbGRzEpwBChxVcGRhdGVCaWxsaW5nR3JvdXBGcmVlRm9ybWF0EjcuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUJpbGxpbmdHcm91cEZyZWVGb3JtYXRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiuC0+STAiU6ASoaIC92MS9iaWxsaW5nZ3JvdXAve2lkfTpmcmVlRm9ybWF0EqUBCiFVcGRhdGVCaWxsaW5nR3JvdXBMaW5rZWRSZXNvdXJjZXMSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwTGlua2VkUmVzb3VyY2VzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIqgtPkkwIkOgEqGh8vdjEvYmlsbGluZ2dyb3VwL3tpZH06cmVzb3VyY2VzEqsBCiFVcGRhdGVCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIwgtPkkwIqOgEqGiUvdjEvYmlsbGluZ2dyb3VwL3tpZH06aW52b2ljZVNldHRpbmdzEqsBCiFVcGRhdGVCaWxsaW5nR3JvdXBSZXNlbGxlckNoYXJnZXMSPC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQmlsbGluZ0dyb3VwUmVzZWxsZXJDaGFyZ2VzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIwgtPkkwIqOgEqGiUvdjEvYmlsbGluZ2dyb3VwL3tpZH06cmVzZWxsZXJDaGFyZ2VzErEBCiNVcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlcxI+LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBZGRpdGlvbmFsQ2hhcmdlc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMoLT5JMCLDoBKhonL3YxL2JpbGxpbmdncm91cC97aWR9OmFkZGl0aW9uYWxDaGFyZ2VzEtQBCiFHZXRCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW4SPC5ibHVlYXBpLmJpbGxpbmcudjEuR2V0QmlsbGluZ0dyb3VwQWNjb3VudFN1cHBvcnRQbGFuUmVxdWVzdBo9LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5SZXNwb25zZSIygtPkkwIsEiovdjEvYmlsbGluZ2dyb3VwL3tpZH0ve3ZlbmRvcn0vc3VwcG9ydHBsYW4StgEKJFVwZGF0ZUJpbGxpbmdHcm91cEFjY291bnRTdXBwb3J0UGxhbhI/LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVCaWxsaW5nR3JvdXBBY2NvdW50U3VwcG9ydFBsYW5SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi86ASoaKi92MS9iaWxsaW5nZ3JvdXAve2lkfS97dmVuZG9yfS9zdXBwb3J0cGxhbhKBAQoSQ3JlYXRlQW5ub3VuY2VtZW50Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUFubm91bmNlbWVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJILT5JMCHjoBKiIZL3YxL3Jlc2VsbGVyL2Fubm91bmNlbWVudBKSAQoSVXBkYXRlQW5ub3VuY2VtZW50Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFubm91bmNlbWVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiNYLT5JMCLzoBKhoqL3YxL3Jlc2VsbGVyL2Fubm91bmNlbWVudC97YW5ub3VuY2VtZW50SWR9EpwBChlVcGRhdGVBbm5vdW5jZW1lbnRzU3RhdHVzEjQuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFubm91bmNlbWVudHNTdGF0dXNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjGC0+STAis6ASoyJi92MS9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL2J1bGsvc3RhdHVzEqABChZVcGRhdGVBbm5vdW5jZW1lbnREYXRlEjEuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUFubm91bmNlbWVudERhdGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjuC0+STAjU6ASoyMC92MS9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL3thbm5vdW5jZW1lbnRJZH0vZGF0ZRKPAQoSRGVsZXRlQW5ub3VuY2VtZW50Ei0uYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUFubm91bmNlbWVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMoLT5JMCLCoqL3YxL3Jlc2VsbGVyL2Fubm91bmNlbWVudC97YW5ub3VuY2VtZW50SWR9EqABChBHZXRBbm5vdW5jZW1lbnRzEisuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldEFubm91bmNlbWVudHNSZXF1ZXN0GiAuYmx1ZWFwaS5iaWxsaW5nLnYxLkFubm91bmNlbWVudCI7gtPkkwI1EjMvYmlsbGluZy92MS9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL3thbm5vdW5jZW1lbnRJZH0wARLOAQocR2V0QmlsbGluZ0dyb3VwQW5ub3VuY2VtZW50cxI3LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBBbm5vdW5jZW1lbnRzUmVxdWVzdBo4LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBBbm5vdW5jZW1lbnRzUmVzcG9uc2UiOYLT5JMCMxIxL3YxL2JpbGxpbmdncm91cC9yZXNlbGxlci9hbm5vdW5jZW1lbnRzL3tncm91cElkfTABEmYKCkdldENyZWRpdHMSJS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3JlZGl0c1JlcXVlc3QaGi5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlZGl0IhOC0+STAg0SCy92MS9jcmVkaXRzMAESdgoOR2V0Q3N2U2V0dGluZ3MSKS5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q3N2U2V0dGluZ3NSZXF1ZXN0Gh4uYmx1ZWFwaS5iaWxsaW5nLnYxLkNzdlNldHRpbmciF4LT5JMCERIPL3YxL2NzdnNldHRpbmdzMAESqQEKF0NyZWF0ZUNoaWxkQmlsbGluZ0dyb3VwEjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkNyZWF0ZUNoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBozLmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlIiWC0+STAh86ASoiGi92MS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuEqoBChRHZXRDaGlsZEJpbGxpbmdHcm91cBIvLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QaMC5ibHVlYXBpLmJpbGxpbmcudjEuR2V0Q2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSIvgtPkkwIpEicvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0SoAEKFlJlYWRDaGlsZEJpbGxpbmdHcm91cHMSMS5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZENoaWxkQmlsbGluZ0dyb3Vwc1JlcXVlc3QaJS5ibHVlYXBpLmJpbGxpbmcudjEuQ2hpbGRCaWxsaW5nR3JvdXAiKoLT5JMCJDoBKiIfL3YxL2JpbGxpbmdncm91cHMvY2hpbGRyZW46cmVhZDABErYBChdVcGRhdGVDaGlsZEJpbGxpbmdHcm91cBIyLmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVDaGlsZEJpbGxpbmdHcm91cFJlcXVlc3QaMy5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBSZXNwb25zZSIygtPkkwIsOgEqGicvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0SswEKF0RlbGV0ZUNoaWxkQmlsbGluZ0dyb3VwEjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUNoaWxkQmlsbGluZ0dyb3VwUmVxdWVzdBozLmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVDaGlsZEJpbGxpbmdHcm91cFJlc3BvbnNlIi+C0+STAikqJy92MS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfRLzAQomVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3MSQS5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlQ2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2V0dGluZ3NSZXF1ZXN0GkIuYmx1ZWFwaS5iaWxsaW5nLnYxLlVwZGF0ZUNoaWxkQmlsbGluZ0dyb3VwSW52b2ljZVNldHRpbmdzUmVzcG9uc2UiQoLT5JMCPDoBKho3L3YxL2JpbGxpbmdncm91cHMvY2hpbGRyZW4ve2ludGVybmFsSWR9L2ludm9pY2VTZXR0aW5ncxLSAQorU2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJGLmJsdWVhcGkuYmlsbGluZy52MS5TZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9OgEqIjgvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0vc2VydmljZURpc2NvdW50cxLtAQoyU2V0Q2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHMSTS5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAko6ASoiRS92MS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfS9zZXJ2aWNlRGlzY291bnRzL2FjY291bnRzOnNldBLlAQosU2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2USRy5ibHVlYXBpLmJpbGxpbmcudjEuU2V0Q2hpbGRCaWxsaW5nR3JvdXBDdXN0b21pemVkQmlsbGluZ1NlcnZpY2VSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlSC0+STAk46ASoiSS92MS97dmVuZG9yfS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfS9jdXN0b21pemVkQmlsbGluZ1NlcnZpY2USlgIKLEdldENoaWxkQmlsbGluZ0dyb3VwQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlEkcuYmx1ZWFwaS5iaWxsaW5nLnYxLkdldENoaWxkQmlsbGluZ0dyb3VwQ3VzdG9taXplZEJpbGxpbmdTZXJ2aWNlUmVxdWVzdBpILmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cEN1c3RvbWl6ZWRCaWxsaW5nU2VydmljZVJlc3BvbnNlIlGC0+STAksSSS92MS97dmVuZG9yfS9iaWxsaW5nZ3JvdXBzL2NoaWxkcmVuL3tpbnRlcm5hbElkfS9jdXN0b21pemVkQmlsbGluZ1NlcnZpY2UwARKAAgorR2V0Q2hpbGRCaWxsaW5nR3JvdXBJbnZvaWNlU2VydmljZURpc2NvdW50cxJGLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVxdWVzdBpHLmJsdWVhcGkuYmlsbGluZy52MS5HZXRDaGlsZEJpbGxpbmdHcm91cEludm9pY2VTZXJ2aWNlRGlzY291bnRzUmVzcG9uc2UiQILT5JMCOhI4L3YxL2JpbGxpbmdncm91cHMvY2hpbGRyZW4ve2ludGVybmFsSWR9L3NlcnZpY2VEaXNjb3VudHMSiwIKM1JlYWRDaGlsZEJpbGxpbmdHcm91cEFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cxJOLmJsdWVhcGkuYmlsbGluZy52MS5SZWFkQ2hpbGRCaWxsaW5nR3JvdXBBY2NvdW50SW52b2ljZVNlcnZpY2VEaXNjb3VudHNSZXF1ZXN0GjIuYmx1ZWFwaS5iaWxsaW5nLnYxLkFjY291bnRJbnZvaWNlU2VydmljZURpc2NvdW50cyJOgtPkkwJIEkYvdjEvYmlsbGluZ2dyb3Vwcy9jaGlsZHJlbi97aW50ZXJuYWxJZH0vc2VydmljZURpc2NvdW50cy9hY2NvdW50czpyZWFkMAEShwEKFkJ1bGtDcmVhdGVCaWxsaW5nR3JvdXASMS5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa0NyZWF0ZUJpbGxpbmdHcm91cFJlcXVlc3QaES5wcm90b3MuT3BlcmF0aW9uIieC0+STAiE6ASoiHC92MS9iaWxsaW5nZ3JvdXBzOmJ1bGtDcmVhdGUShwEKFkJ1bGtVcGRhdGVCaWxsaW5nR3JvdXASMS5ibHVlYXBpLmJpbGxpbmcudjEuQnVsa1VwZGF0ZUJpbGxpbmdHcm91cFJlcXVlc3QaES5wcm90b3MuT3BlcmF0aW9uIieC0+STAiE6ASoiHC92MS9iaWxsaW5nZ3JvdXBzOmJ1bGtVcGRhdGUSvwEKGUNyZWF0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnkSNC5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlRXhjbHVkZVNlcnZpY2VFbnRyeVJlcXVlc3QaNS5ibHVlYXBpLmJpbGxpbmcudjEuQ3JlYXRlRXhjbHVkZVNlcnZpY2VFbnRyeVJlc3BvbnNlIjWC0+STAi86ASoiKi92MS9iaWxsaW5nZ3JvdXBzL2V4Y2x1ZGUtc2VydmljZS1zZXR0aW5ncxK/AQoZVXBkYXRlRXhjbHVkZVNlcnZpY2VFbnRyeRI0LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVxdWVzdBo1LmJsdWVhcGkuYmlsbGluZy52MS5VcGRhdGVFeGNsdWRlU2VydmljZUVudHJ5UmVzcG9uc2UiNYLT5JMCLzoBKhoqL3YxL2JpbGxpbmdncm91cHMvZXhjbHVkZS1zZXJ2aWNlLXNldHRpbmdzErwBChlEZWxldGVFeGNsdWRlU2VydmljZUVudHJ5EjQuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXF1ZXN0GjUuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUV4Y2x1ZGVTZXJ2aWNlRW50cnlSZXNwb25zZSIygtPkkwIsKiovdjEvYmlsbGluZ2dyb3Vwcy9leGNsdWRlLXNlcnZpY2Utc2V0dGluZ3MSqgEKE0xpc3RFeGNsdWRlU2VydmljZXMSLi5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEV4Y2x1ZGVTZXJ2aWNlc1JlcXVlc3QaLy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEV4Y2x1ZGVTZXJ2aWNlc1Jlc3BvbnNlIjKC0+STAiwSKi92MS9iaWxsaW5nZ3JvdXBzL2V4Y2x1ZGUtc2VydmljZS1zZXR0aW5ncxKAAQoMTGlzdFNlcnZpY2VzEicuYmx1ZWFwaS5iaWxsaW5nLnYxLkxpc3RTZXJ2aWNlc1JlcXVlc3QaKC5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdFNlcnZpY2VzUmVzcG9uc2UiHYLT5JMCFxIVL3YxL3t2ZW5kb3J9L3NlcnZpY2VzEn4KD0J1bGtMaW5rQWNjb3VudBIqLmJsdWVhcGkuYmlsbGluZy52MS5CdWxrTGlua0FjY291bnRSZXF1ZXN0GhEucHJvdG9zLk9wZXJhdGlvbiIsgtPkkwImOgEqIiEvdjEvYmlsbGluZ2dyb3VwczpidWxrTGlua0FjY291bnQSfgoTQnVsa1RhZ0JpbGxpbmdHcm91cBIuLmJsdWVhcGkuYmlsbGluZy52MS5CdWxrVGFnQmlsbGluZ0dyb3VwUmVxdWVzdBoRLnByb3Rvcy5PcGVyYXRpb24iJILT5JMCHjoBKiIZL3YxL2JpbGxpbmdncm91cHM6YnVsa1RhZxLXAQoiR2V0QmlsbGluZ0dyb3VwSW52b2ljZUxheW91dENvbmZpZxI9LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBo+LmJsdWVhcGkuYmlsbGluZy52MS5HZXRCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnUmVzcG9uc2UiMoLT5JMCLBIqL3YxL2JpbGxpbmdncm91cHMve2lkfS9pbnZvaWNlbGF5b3V0Y29uZmlnErIBCiJTZXRCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnEj0uYmx1ZWFwaS5iaWxsaW5nLnYxLlNldEJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi86ASoiKi92MS9iaWxsaW5nZ3JvdXBzL3tpZH0vaW52b2ljZWxheW91dGNvbmZpZxKsAQoZQ3JlYXRlSW52b2ljZUxheW91dENvbmZpZxI0LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBo1LmJsdWVhcGkuYmlsbGluZy52MS5DcmVhdGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVzcG9uc2UiIoLT5JMCHDoBKiIXL3YxL2ludm9pY2VsYXlvdXRjb25maWcSkgEKGVVwZGF0ZUludm9pY2VMYXlvdXRDb25maWcSNC5ibHVlYXBpLmJpbGxpbmcudjEuVXBkYXRlSW52b2ljZUxheW91dENvbmZpZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJ4LT5JMCIToBKhocL3YxL2ludm9pY2VsYXlvdXRjb25maWcve2lkfRKtAQoXUmVhZEludm9pY2VMYXlvdXRDb25maWcSMi5ibHVlYXBpLmJpbGxpbmcudjEuUmVhZEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0GjMuYmx1ZWFwaS5iaWxsaW5nLnYxLlJlYWRJbnZvaWNlTGF5b3V0Q29uZmlnUmVzcG9uc2UiJ4LT5JMCIToBKiIcL3YxL2ludm9pY2VsYXlvdXRjb25maWc6cmVhZDABErUBCiVEZWxldGVCaWxsaW5nR3JvdXBJbnZvaWNlTGF5b3V0Q29uZmlnEkAuYmx1ZWFwaS5iaWxsaW5nLnYxLkRlbGV0ZUJpbGxpbmdHcm91cEludm9pY2VMYXlvdXRDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjKC0+STAiwqKi92MS9iaWxsaW5nZ3JvdXBzL3tpZH0vaW52b2ljZWxheW91dGNvbmZpZxKPAQoZRGVsZXRlSW52b2ljZUxheW91dENvbmZpZxI0LmJsdWVhcGkuYmlsbGluZy52MS5EZWxldGVJbnZvaWNlTGF5b3V0Q29uZmlnUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIkgtPkkwIeKhwvdjEvaW52b2ljZWxheW91dGNvbmZpZy97aWR9Et0BCiRMaXN0SW52b2ljZUxheW91dENvbmZpZ0JpbGxpbmdHcm91cHMSPy5ibHVlYXBpLmJpbGxpbmcudjEuTGlzdEludm9pY2VMYXlvdXRDb25maWdCaWxsaW5nR3JvdXBzUmVxdWVzdBpALmJsdWVhcGkuYmlsbGluZy52MS5MaXN0SW52b2ljZUxheW91dENvbmZpZ0JpbGxpbmdHcm91cHNSZXNwb25zZSIygtPkkwIsEiovdjEvaW52b2ljZWxheW91dGNvbmZpZy97aWR9L2JpbGxpbmdncm91cHManQGSQZkBEkYoQkVUQSkgQmlsbGluZyBBUEkuIEJhc2UgVVJMOiBodHRwczovL2FwaS5hbHBoYXVzLmNsb3VkL20vYmx1ZS9iaWxsaW5nGk8KElNlcnZpY2UgZGVmaW5pdGlvbhI5aHR0cHM6Ly9naXRodWIuY29tL2FscGhhdXNsYWJzL2JsdWVhcGkvdHJlZS9tYWluL2JpbGxpbmcvQlEKGWNsb3VkLmFscGhhdXMuYXBpLmJpbGxpbmdCDEJpbGxpbmdQcm90b1omZ2l0aHViLmNvbS9hbHBoYXVzbGFicy9ibHVlYXBpL2JpbGxpbmdiBnByb3RvMw", [file_api_account, file_api_invoice, file_api_costtag, file_api_ripple_accessgroup, file_api_ripple_billinggroup, file_api_ripple_reseller, file_api_ripple_yearmonth, file_api_ripple_rounding, file_api_ripple_invoicelayout, file_api_ripple_duedate, file_api_ripple_exchangerate, file_api_ripple_untaggedgroup, file_api_ripple_customizedbillingservice, file_api_ripple_v1_invoiceservicediscounts, file_api_ripple_v1_accountsupportplan, file_api_ripple_v1_adjustmententry, file_api_adjustment, file_api_wave_adjustment, file_protos_operation, file_google_api_annotations, file_google_api_field_behavior, file_google_protobuf_empty, file_protoc_gen_openapiv2_options_annotations, file_google_protobuf_field_mask]);
57
57
 
58
58
  /**
59
59
  * @generated from message blueapi.billing.v1.BillingGroup
@@ -4828,7 +4828,7 @@ export const GetFreeFormatResponseSchema: GenMessage<GetFreeFormatResponse> = /*
4828
4828
  */
4829
4829
  export type GetMonthlyMiscFeeImportTemplateRequest = Message<"blueapi.billing.v1.GetMonthlyMiscFeeImportTemplateRequest"> & {
4830
4830
  /**
4831
- * Optional. Template language. Supported values are "en" and "ja". Empty uses the caller's language or server default.
4831
+ * Optional. Template language. Supported values are "en" and "ja".
4832
4832
  *
4833
4833
  * @generated from field: string language = 1;
4834
4834
  */
@@ -4847,60 +4847,46 @@ export const GetMonthlyMiscFeeImportTemplateRequestSchema: GenMessage<GetMonthly
4847
4847
  */
4848
4848
  export type MonthlyMiscFeeImportTemplate = Message<"blueapi.billing.v1.MonthlyMiscFeeImportTemplate"> & {
4849
4849
  /**
4850
- * Supported import format. Currently "csv".
4851
- *
4852
4850
  * @generated from field: string format = 1;
4853
4851
  */
4854
4852
  format: string;
4855
4853
 
4856
4854
  /**
4857
- * Supported format version. Currently "misc_fee_import_v1".
4858
- *
4859
4855
  * @generated from field: string format_version = 2;
4860
4856
  */
4861
4857
  formatVersion: string;
4862
4858
 
4863
4859
  /**
4864
- * CSV header columns in required order.
4860
+ * CSV header columns in required order. Has no "enabled" column: every item the
4861
+ * workflow imports is saved as enabled.
4865
4862
  *
4866
4863
  * @generated from field: repeated string headers = 3;
4867
4864
  */
4868
4865
  headers: string[];
4869
4866
 
4870
4867
  /**
4871
- * Example CSV row matching the current format version.
4872
- *
4873
4868
  * @generated from field: repeated string sample_row = 4;
4874
4869
  */
4875
4870
  sampleRow: string[];
4876
4871
 
4877
4872
  /**
4878
- * Supported modes: "dry-run", "replace-month", and "merge".
4873
+ * Supported values for BulkImportMonthlyMiscFeesRequest.mode: "merge" and "replace".
4874
+ * Preview vs. apply is controlled separately by BulkImportMonthlyMiscFeesRequest.dry_run,
4875
+ * not by this field.
4879
4876
  *
4880
4877
  * @generated from field: repeated string allowed_modes = 5;
4881
4878
  */
4882
4879
  allowedModes: string[];
4883
4880
 
4884
4881
  /**
4885
- * Maximum upload size in bytes.
4886
- *
4887
4882
  * @generated from field: int64 max_file_size_bytes = 6;
4888
4883
  */
4889
4884
  maxFileSizeBytes: bigint;
4890
4885
 
4891
4886
  /**
4892
- * Maximum data rows accepted per CSV file.
4893
- *
4894
4887
  * @generated from field: int32 max_rows = 7;
4895
4888
  */
4896
4889
  maxRows: number;
4897
-
4898
- /**
4899
- * Field-level validation rules for UI guidance.
4900
- *
4901
- * @generated from field: repeated blueapi.billing.v1.MonthlyMiscFeeImportFieldRule field_rules = 8;
4902
- */
4903
- fieldRules: MonthlyMiscFeeImportFieldRule[];
4904
4890
  };
4905
4891
 
4906
4892
  /**
@@ -4911,89 +4897,55 @@ export const MonthlyMiscFeeImportTemplateSchema: GenMessage<MonthlyMiscFeeImport
4911
4897
  messageDesc(file_billing_v1_billing, 127);
4912
4898
 
4913
4899
  /**
4914
- * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportFieldRule
4915
- */
4916
- export type MonthlyMiscFeeImportFieldRule = Message<"blueapi.billing.v1.MonthlyMiscFeeImportFieldRule"> & {
4917
- /**
4918
- * @generated from field: string field = 1;
4919
- */
4920
- field: string;
4921
-
4922
- /**
4923
- * @generated from field: bool required = 2;
4924
- */
4925
- required: boolean;
4926
-
4927
- /**
4928
- * @generated from field: string format = 3;
4929
- */
4930
- format: string;
4931
-
4932
- /**
4933
- * @generated from field: string description = 4;
4934
- */
4935
- description: string;
4936
- };
4937
-
4938
- /**
4939
- * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportFieldRule.
4940
- * Use `create(MonthlyMiscFeeImportFieldRuleSchema)` to create a new message.
4941
- */
4942
- export const MonthlyMiscFeeImportFieldRuleSchema: GenMessage<MonthlyMiscFeeImportFieldRule> = /*@__PURE__*/
4943
- messageDesc(file_billing_v1_billing, 128);
4944
-
4945
- /**
4900
+ * No billing_month or vendor field: each CSV row supplies its own, so one upload can span
4901
+ * any combination of billing groups, vendors, and invoice months.
4902
+ *
4946
4903
  * @generated from message blueapi.billing.v1.BulkImportMonthlyMiscFeesRequest
4947
4904
  */
4948
4905
  export type BulkImportMonthlyMiscFeesRequest = Message<"blueapi.billing.v1.BulkImportMonthlyMiscFeesRequest"> & {
4949
- /**
4950
- * Required. Selected billing cycle in YYYY-MM form; YYYYMM is accepted and normalized by the server.
4951
- *
4952
- * @generated from field: string billing_month = 1;
4953
- */
4954
- billingMonth: string;
4955
-
4956
4906
  /**
4957
4907
  * Required. Uploaded CSV content as normalized UTF-8 text.
4958
4908
  *
4959
- * @generated from field: string csv_content = 2;
4909
+ * @generated from field: string csv_content = 1;
4960
4910
  */
4961
4911
  csvContent: string;
4962
4912
 
4963
4913
  /**
4964
- * Required. Original upload file name for audit metadata.
4914
+ * Required. Original upload file name for audit and result display.
4965
4915
  *
4966
- * @generated from field: string file_name = 3;
4916
+ * @generated from field: string file_name = 2;
4967
4917
  */
4968
4918
  fileName: string;
4969
4919
 
4970
4920
  /**
4971
- * Required. One of "dry-run", "replace-month", or "merge". Empty defaults to "dry-run".
4921
+ * Required. "merge" upserts each row's item by label, leaving every other existing item for
4922
+ * that billing group and vendor untouched. "replace" sets the complete additional-item list
4923
+ * for each (billing_month, billing_group_id, vendor) combination the CSV names to exactly
4924
+ * that combination's CSV rows, removing any existing item the CSV omits for it; a
4925
+ * "replace" CSV must contain rows for exactly one billing_month, and the request is
4926
+ * rejected before saving anything if it spans more than one.
4972
4927
  *
4973
- * @generated from field: string mode = 4;
4928
+ * @generated from field: string mode = 3;
4974
4929
  */
4975
4930
  mode: string;
4976
4931
 
4977
4932
  /**
4978
- * Required. Import format. Currently "csv".
4979
- *
4980
- * @generated from field: string format = 5;
4933
+ * @generated from field: string format = 4;
4981
4934
  */
4982
4935
  format: string;
4983
4936
 
4984
4937
  /**
4985
- * Required. Import format version. Currently "misc_fee_import_v1".
4986
- *
4987
- * @generated from field: string format_version = 6;
4938
+ * @generated from field: string format_version = 5;
4988
4939
  */
4989
4940
  formatVersion: string;
4990
4941
 
4991
4942
  /**
4992
- * Optional. Idempotency key for write-mode imports.
4943
+ * Optional. When true, validates and returns the planned result for either mode without
4944
+ * saving anything.
4993
4945
  *
4994
- * @generated from field: string idempotency_key = 7;
4946
+ * @generated from field: bool dry_run = 6;
4995
4947
  */
4996
- idempotencyKey: string;
4948
+ dryRun: boolean;
4997
4949
  };
4998
4950
 
4999
4951
  /**
@@ -5001,88 +4953,41 @@ export type BulkImportMonthlyMiscFeesRequest = Message<"blueapi.billing.v1.BulkI
5001
4953
  * Use `create(BulkImportMonthlyMiscFeesRequestSchema)` to create a new message.
5002
4954
  */
5003
4955
  export const BulkImportMonthlyMiscFeesRequestSchema: GenMessage<BulkImportMonthlyMiscFeesRequest> = /*@__PURE__*/
5004
- messageDesc(file_billing_v1_billing, 129);
4956
+ messageDesc(file_billing_v1_billing, 128);
5005
4957
 
5006
4958
  /**
5007
4959
  * @generated from message blueapi.billing.v1.ListMonthlyMiscFeesRequest
5008
4960
  */
5009
4961
  export type ListMonthlyMiscFeesRequest = Message<"blueapi.billing.v1.ListMonthlyMiscFeesRequest"> & {
5010
4962
  /**
5011
- * Required. Billing cycle in YYYY-MM form; YYYYMM is accepted and normalized by the server.
5012
- *
5013
4963
  * @generated from field: string billing_month = 1;
5014
4964
  */
5015
4965
  billingMonth: string;
5016
4966
 
5017
4967
  /**
5018
- * Optional. Exact billing group ID filter.
5019
- *
5020
4968
  * @generated from field: string billing_group_id = 2;
5021
4969
  */
5022
4970
  billingGroupId: string;
5023
4971
 
5024
4972
  /**
5025
- * Optional. Case-insensitive billing group name query.
5026
- *
5027
4973
  * @generated from field: string billing_group_name_query = 3;
5028
4974
  */
5029
4975
  billingGroupNameQuery: string;
5030
4976
 
5031
4977
  /**
5032
- * Optional. Case-insensitive item or fee tag query.
5033
- *
5034
4978
  * @generated from field: string item_query = 4;
5035
4979
  */
5036
4980
  itemQuery: string;
5037
4981
 
5038
4982
  /**
5039
- * Optional. Source filter, e.g. "csv", "ui", or "migration".
5040
- *
5041
- * @generated from field: string source = 5;
5042
- */
5043
- source: string;
5044
-
5045
- /**
5046
- * Optional. User identifier that last updated the row.
5047
- *
5048
- * @generated from field: string updated_by = 6;
5049
- */
5050
- updatedBy: string;
5051
-
5052
- /**
5053
- * Optional. RFC3339 lower bound for updated_at.
5054
- *
5055
- * @generated from field: string updated_after = 7;
5056
- */
5057
- updatedAfter: string;
5058
-
5059
- /**
5060
- * Optional. RFC3339 upper bound for updated_at.
5061
- *
5062
- * @generated from field: string updated_before = 8;
5063
- */
5064
- updatedBefore: string;
5065
-
5066
- /**
5067
- * Optional. Page size for pagination. Default and maximum are server-defined.
5068
- *
5069
- * @generated from field: int32 page_size = 9;
4983
+ * @generated from field: int32 page_size = 5;
5070
4984
  */
5071
4985
  pageSize: number;
5072
4986
 
5073
4987
  /**
5074
- * Optional. Opaque page token from a previous response.
5075
- *
5076
- * @generated from field: string page_token = 10;
4988
+ * @generated from field: string page_token = 6;
5077
4989
  */
5078
4990
  pageToken: string;
5079
-
5080
- /**
5081
- * Optional. Stable sort expression. Defaults to billing_group_name, item_name, row_id.
5082
- *
5083
- * @generated from field: string sort = 11;
5084
- */
5085
- sort: string;
5086
4991
  };
5087
4992
 
5088
4993
  /**
@@ -5090,7 +4995,7 @@ export type ListMonthlyMiscFeesRequest = Message<"blueapi.billing.v1.ListMonthly
5090
4995
  * Use `create(ListMonthlyMiscFeesRequestSchema)` to create a new message.
5091
4996
  */
5092
4997
  export const ListMonthlyMiscFeesRequestSchema: GenMessage<ListMonthlyMiscFeesRequest> = /*@__PURE__*/
5093
- messageDesc(file_billing_v1_billing, 130);
4998
+ messageDesc(file_billing_v1_billing, 129);
5094
4999
 
5095
5000
  /**
5096
5001
  * @generated from message blueapi.billing.v1.ListMonthlyMiscFeesResponse
@@ -5117,233 +5022,232 @@ export type ListMonthlyMiscFeesResponse = Message<"blueapi.billing.v1.ListMonthl
5117
5022
  * Use `create(ListMonthlyMiscFeesResponseSchema)` to create a new message.
5118
5023
  */
5119
5024
  export const ListMonthlyMiscFeesResponseSchema: GenMessage<ListMonthlyMiscFeesResponse> = /*@__PURE__*/
5120
- messageDesc(file_billing_v1_billing, 131);
5025
+ messageDesc(file_billing_v1_billing, 130);
5121
5026
 
5122
5027
  /**
5123
- * @generated from message blueapi.billing.v1.GetMonthlyMiscFeeRequest
5028
+ * @generated from message blueapi.billing.v1.DeleteMonthlyMiscFeeRequest
5124
5029
  */
5125
- export type GetMonthlyMiscFeeRequest = Message<"blueapi.billing.v1.GetMonthlyMiscFeeRequest"> & {
5030
+ export type DeleteMonthlyMiscFeeRequest = Message<"blueapi.billing.v1.DeleteMonthlyMiscFeeRequest"> & {
5126
5031
  /**
5127
- * Required. Server-owned row ID.
5032
+ * An opaque ID returned by ListMonthlyMiscFees.
5128
5033
  *
5129
5034
  * @generated from field: string row_id = 1;
5130
5035
  */
5131
5036
  rowId: string;
5132
5037
 
5133
5038
  /**
5134
- * Required. Billing month used to reject cross-month access or mutation mistakes.
5135
- *
5136
5039
  * @generated from field: string billing_month = 2;
5137
5040
  */
5138
5041
  billingMonth: string;
5139
5042
  };
5140
5043
 
5141
5044
  /**
5142
- * Describes the message blueapi.billing.v1.GetMonthlyMiscFeeRequest.
5143
- * Use `create(GetMonthlyMiscFeeRequestSchema)` to create a new message.
5045
+ * Describes the message blueapi.billing.v1.DeleteMonthlyMiscFeeRequest.
5046
+ * Use `create(DeleteMonthlyMiscFeeRequestSchema)` to create a new message.
5144
5047
  */
5145
- export const GetMonthlyMiscFeeRequestSchema: GenMessage<GetMonthlyMiscFeeRequest> = /*@__PURE__*/
5146
- messageDesc(file_billing_v1_billing, 132);
5048
+ export const DeleteMonthlyMiscFeeRequestSchema: GenMessage<DeleteMonthlyMiscFeeRequest> = /*@__PURE__*/
5049
+ messageDesc(file_billing_v1_billing, 131);
5147
5050
 
5148
5051
  /**
5149
- * @generated from message blueapi.billing.v1.ExportMonthlyMiscFeesRequest
5052
+ * @generated from message blueapi.billing.v1.MonthlyMiscFee
5150
5053
  */
5151
- export type ExportMonthlyMiscFeesRequest = Message<"blueapi.billing.v1.ExportMonthlyMiscFeesRequest"> & {
5054
+ export type MonthlyMiscFee = Message<"blueapi.billing.v1.MonthlyMiscFee"> & {
5152
5055
  /**
5153
- * Required. Billing cycle in YYYY-MM form; YYYYMM is accepted and normalized by the server.
5154
- *
5155
- * @generated from field: string billing_month = 1;
5056
+ * @generated from field: string row_id = 1;
5057
+ */
5058
+ rowId: string;
5059
+
5060
+ /**
5061
+ * @generated from field: string billing_month = 2;
5156
5062
  */
5157
5063
  billingMonth: string;
5158
5064
 
5159
5065
  /**
5160
- * Optional. Exact billing group ID filter.
5161
- *
5162
- * @generated from field: string billing_group_id = 2;
5066
+ * @generated from field: string billing_group_id = 3;
5163
5067
  */
5164
5068
  billingGroupId: string;
5165
5069
 
5166
5070
  /**
5167
- * Optional. Case-insensitive billing group name query.
5168
- *
5169
- * @generated from field: string billing_group_name_query = 3;
5071
+ * @generated from field: string billing_group_name = 4;
5170
5072
  */
5171
- billingGroupNameQuery: string;
5073
+ billingGroupName: string;
5172
5074
 
5173
5075
  /**
5174
- * Optional. Case-insensitive item or fee tag query.
5175
- *
5176
- * @generated from field: string item_query = 4;
5076
+ * @generated from field: string vendor = 5;
5177
5077
  */
5178
- itemQuery: string;
5078
+ vendor: string;
5179
5079
 
5180
5080
  /**
5181
- * Optional. Source filter, e.g. "csv", "ui", or "migration".
5182
- *
5183
- * @generated from field: string source = 5;
5081
+ * @generated from field: string item_name = 6;
5184
5082
  */
5185
- source: string;
5083
+ itemName: string;
5186
5084
 
5187
5085
  /**
5188
- * Optional. User identifier that last updated the row.
5189
- *
5190
- * @generated from field: string updated_by = 6;
5086
+ * @generated from field: uint32 quantity = 7;
5191
5087
  */
5192
- updatedBy: string;
5088
+ quantity: number;
5193
5089
 
5194
5090
  /**
5195
- * Optional. RFC3339 lower bound for updated_at.
5196
- *
5197
- * @generated from field: string updated_after = 7;
5091
+ * @generated from field: int64 unit_cost = 8;
5198
5092
  */
5199
- updatedAfter: string;
5093
+ unitCost: bigint;
5200
5094
 
5201
5095
  /**
5202
- * Optional. RFC3339 upper bound for updated_at.
5203
- *
5204
- * @generated from field: string updated_before = 8;
5096
+ * @generated from field: int64 amount = 9;
5205
5097
  */
5206
- updatedBefore: string;
5098
+ amount: bigint;
5099
+
5100
+ /**
5101
+ * @generated from field: bool enabled = 10;
5102
+ */
5103
+ enabled: boolean;
5207
5104
 
5208
5105
  /**
5209
- * Optional. Stable sort expression. Defaults to billing_group_name, item_name, row_id.
5106
+ * One of "saved", "created", or "default".
5210
5107
  *
5211
- * @generated from field: string sort = 9;
5108
+ * @generated from field: string source = 11;
5212
5109
  */
5213
- sort: string;
5110
+ source: string;
5214
5111
  };
5215
5112
 
5216
5113
  /**
5217
- * Describes the message blueapi.billing.v1.ExportMonthlyMiscFeesRequest.
5218
- * Use `create(ExportMonthlyMiscFeesRequestSchema)` to create a new message.
5114
+ * Describes the message blueapi.billing.v1.MonthlyMiscFee.
5115
+ * Use `create(MonthlyMiscFeeSchema)` to create a new message.
5219
5116
  */
5220
- export const ExportMonthlyMiscFeesRequestSchema: GenMessage<ExportMonthlyMiscFeesRequest> = /*@__PURE__*/
5221
- messageDesc(file_billing_v1_billing, 133);
5117
+ export const MonthlyMiscFeeSchema: GenMessage<MonthlyMiscFee> = /*@__PURE__*/
5118
+ messageDesc(file_billing_v1_billing, 132);
5222
5119
 
5223
5120
  /**
5224
- * @generated from message blueapi.billing.v1.ExportMonthlyMiscFeesResponse
5121
+ * No singular billing_month field: a result can now span multiple billing months. See
5122
+ * billing_months below.
5123
+ *
5124
+ * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportResult
5225
5125
  */
5226
- export type ExportMonthlyMiscFeesResponse = Message<"blueapi.billing.v1.ExportMonthlyMiscFeesResponse"> & {
5126
+ export type MonthlyMiscFeeImportResult = Message<"blueapi.billing.v1.MonthlyMiscFeeImportResult"> & {
5227
5127
  /**
5228
- * CSV file bytes when the export is returned inline.
5229
- *
5230
- * @generated from field: bytes csv_content = 1;
5128
+ * @generated from field: string status = 1;
5231
5129
  */
5232
- csvContent: Uint8Array;
5130
+ status: string;
5233
5131
 
5234
5132
  /**
5235
- * Optional staged export reference or direct download URL.
5236
- *
5237
- * @generated from field: string export_ref = 2;
5133
+ * @generated from field: string file_name = 2;
5238
5134
  */
5239
- exportRef: string;
5135
+ fileName: string;
5240
5136
 
5241
5137
  /**
5242
- * Export file name suggested to clients.
5243
- *
5244
- * @generated from field: string file_name = 3;
5138
+ * @generated from field: int32 total_rows = 3;
5245
5139
  */
5246
- fileName: string;
5247
- };
5140
+ totalRows: number;
5248
5141
 
5249
- /**
5250
- * Describes the message blueapi.billing.v1.ExportMonthlyMiscFeesResponse.
5251
- * Use `create(ExportMonthlyMiscFeesResponseSchema)` to create a new message.
5252
- */
5253
- export const ExportMonthlyMiscFeesResponseSchema: GenMessage<ExportMonthlyMiscFeesResponse> = /*@__PURE__*/
5254
- messageDesc(file_billing_v1_billing, 134);
5142
+ /**
5143
+ * @generated from field: int32 valid_rows = 4;
5144
+ */
5145
+ validRows: number;
5255
5146
 
5256
- /**
5257
- * @generated from message blueapi.billing.v1.GetMonthlyMiscFeeImportRequest
5258
- */
5259
- export type GetMonthlyMiscFeeImportRequest = Message<"blueapi.billing.v1.GetMonthlyMiscFeeImportRequest"> & {
5260
5147
  /**
5261
- * Required. Import job ID returned by BulkImportMonthlyMiscFees.
5262
- *
5263
- * @generated from field: string import_job_id = 1;
5148
+ * @generated from field: int32 inserted_rows = 5;
5264
5149
  */
5265
- importJobId: string;
5266
- };
5150
+ insertedRows: number;
5267
5151
 
5268
- /**
5269
- * Describes the message blueapi.billing.v1.GetMonthlyMiscFeeImportRequest.
5270
- * Use `create(GetMonthlyMiscFeeImportRequestSchema)` to create a new message.
5271
- */
5272
- export const GetMonthlyMiscFeeImportRequestSchema: GenMessage<GetMonthlyMiscFeeImportRequest> = /*@__PURE__*/
5273
- messageDesc(file_billing_v1_billing, 135);
5152
+ /**
5153
+ * @generated from field: int32 updated_rows = 6;
5154
+ */
5155
+ updatedRows: number;
5156
+
5157
+ /**
5158
+ * @generated from field: int32 unchanged_rows = 7;
5159
+ */
5160
+ unchangedRows: number;
5161
+
5162
+ /**
5163
+ * @generated from field: int32 failed_rows = 8;
5164
+ */
5165
+ failedRows: number;
5166
+
5167
+ /**
5168
+ * @generated from field: repeated blueapi.billing.v1.MonthlyMiscFeeImportRowResult row_results = 9;
5169
+ */
5170
+ rowResults: MonthlyMiscFeeImportRowResult[];
5274
5171
 
5275
- /**
5276
- * @generated from message blueapi.billing.v1.UpsertMonthlyMiscFeeRequest
5277
- */
5278
- export type UpsertMonthlyMiscFeeRequest = Message<"blueapi.billing.v1.UpsertMonthlyMiscFeeRequest"> & {
5279
5172
  /**
5280
- * Optional for create, required for updating an existing server-owned row.
5173
+ * Existing items removed because a "replace"-mode CSV omitted them from a combination it
5174
+ * touched. Always 0 in "merge" mode.
5281
5175
  *
5282
- * @generated from field: string row_id = 1;
5176
+ * @generated from field: int32 removed_rows = 10;
5283
5177
  */
5284
- rowId: string;
5178
+ removedRows: number;
5179
+
5180
+ /**
5181
+ * Every distinct billing month, in "YYYY-MM" form, a valid row in this file touches.
5182
+ *
5183
+ * @generated from field: repeated string billing_months = 11;
5184
+ */
5185
+ billingMonths: string[];
5285
5186
 
5286
5187
  /**
5287
- * Required. Full row value to create or update.
5188
+ * Every distinct vendor a valid row in this file touches.
5288
5189
  *
5289
- * @generated from field: blueapi.billing.v1.MonthlyMiscFee row = 2;
5190
+ * @generated from field: repeated string vendors = 12;
5290
5191
  */
5291
- row?: MonthlyMiscFee;
5192
+ vendors: string[];
5292
5193
 
5293
5194
  /**
5294
- * Optional. Idempotency key for UI retry safety.
5195
+ * Every distinct billing group a valid row in this file touches.
5295
5196
  *
5296
- * @generated from field: string idempotency_key = 3;
5197
+ * @generated from field: repeated blueapi.billing.v1.MonthlyMiscFeeImportGroupSummary billing_groups = 13;
5297
5198
  */
5298
- idempotencyKey: string;
5199
+ billingGroups: MonthlyMiscFeeImportGroupSummary[];
5299
5200
  };
5300
5201
 
5301
5202
  /**
5302
- * Describes the message blueapi.billing.v1.UpsertMonthlyMiscFeeRequest.
5303
- * Use `create(UpsertMonthlyMiscFeeRequestSchema)` to create a new message.
5203
+ * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportResult.
5204
+ * Use `create(MonthlyMiscFeeImportResultSchema)` to create a new message.
5304
5205
  */
5305
- export const UpsertMonthlyMiscFeeRequestSchema: GenMessage<UpsertMonthlyMiscFeeRequest> = /*@__PURE__*/
5306
- messageDesc(file_billing_v1_billing, 136);
5206
+ export const MonthlyMiscFeeImportResultSchema: GenMessage<MonthlyMiscFeeImportResult> = /*@__PURE__*/
5207
+ messageDesc(file_billing_v1_billing, 133);
5307
5208
 
5308
5209
  /**
5309
- * @generated from message blueapi.billing.v1.DeleteMonthlyMiscFeeRequest
5210
+ * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportGroupSummary
5310
5211
  */
5311
- export type DeleteMonthlyMiscFeeRequest = Message<"blueapi.billing.v1.DeleteMonthlyMiscFeeRequest"> & {
5212
+ export type MonthlyMiscFeeImportGroupSummary = Message<"blueapi.billing.v1.MonthlyMiscFeeImportGroupSummary"> & {
5312
5213
  /**
5313
- * Required. Server-owned row ID.
5314
- *
5315
- * @generated from field: string row_id = 1;
5214
+ * @generated from field: string billing_group_id = 1;
5316
5215
  */
5317
- rowId: string;
5216
+ billingGroupId: string;
5318
5217
 
5319
5218
  /**
5320
- * Required. Billing month used to reject cross-month deletion mistakes.
5321
- *
5322
- * @generated from field: string billing_month = 2;
5219
+ * @generated from field: string billing_group_name = 2;
5323
5220
  */
5324
- billingMonth: string;
5221
+ billingGroupName: string;
5325
5222
  };
5326
5223
 
5327
5224
  /**
5328
- * Describes the message blueapi.billing.v1.DeleteMonthlyMiscFeeRequest.
5329
- * Use `create(DeleteMonthlyMiscFeeRequestSchema)` to create a new message.
5225
+ * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportGroupSummary.
5226
+ * Use `create(MonthlyMiscFeeImportGroupSummarySchema)` to create a new message.
5330
5227
  */
5331
- export const DeleteMonthlyMiscFeeRequestSchema: GenMessage<DeleteMonthlyMiscFeeRequest> = /*@__PURE__*/
5332
- messageDesc(file_billing_v1_billing, 137);
5228
+ export const MonthlyMiscFeeImportGroupSummarySchema: GenMessage<MonthlyMiscFeeImportGroupSummary> = /*@__PURE__*/
5229
+ messageDesc(file_billing_v1_billing, 134);
5333
5230
 
5334
5231
  /**
5335
- * @generated from message blueapi.billing.v1.MonthlyMiscFee
5232
+ * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportRowResult
5336
5233
  */
5337
- export type MonthlyMiscFee = Message<"blueapi.billing.v1.MonthlyMiscFee"> & {
5234
+ export type MonthlyMiscFeeImportRowResult = Message<"blueapi.billing.v1.MonthlyMiscFeeImportRowResult"> & {
5338
5235
  /**
5339
- * @generated from field: string row_id = 1;
5236
+ * The 1-based CSV row this result corresponds to. 0 when action is "remove", since a
5237
+ * removal has no corresponding CSV row.
5238
+ *
5239
+ * @generated from field: int32 csv_row_number = 1;
5340
5240
  */
5341
- rowId: string;
5241
+ csvRowNumber: number;
5342
5242
 
5343
5243
  /**
5344
- * @generated from field: string billing_month = 2;
5244
+ * One of "insert", "update", "unchanged", "invalid", or "remove". "remove" only appears in
5245
+ * "replace" mode, for an existing item the CSV silently drops from a combination it
5246
+ * otherwise touches.
5247
+ *
5248
+ * @generated from field: string action = 2;
5345
5249
  */
5346
- billingMonth: string;
5250
+ action: string;
5347
5251
 
5348
5252
  /**
5349
5253
  * @generated from field: string billing_group_id = 3;
@@ -5356,311 +5260,93 @@ export type MonthlyMiscFee = Message<"blueapi.billing.v1.MonthlyMiscFee"> & {
5356
5260
  billingGroupName: string;
5357
5261
 
5358
5262
  /**
5359
- * @generated from field: string item_name = 5;
5263
+ * @generated from field: string vendor = 5;
5264
+ */
5265
+ vendor: string;
5266
+
5267
+ /**
5268
+ * @generated from field: string item_name = 6;
5360
5269
  */
5361
5270
  itemName: string;
5362
5271
 
5363
5272
  /**
5364
- * @generated from field: string quantity = 6;
5273
+ * @generated from field: uint32 quantity = 7;
5365
5274
  */
5366
- quantity: string;
5275
+ quantity: number;
5367
5276
 
5368
5277
  /**
5369
- * @generated from field: string unit_cost = 7;
5278
+ * @generated from field: int64 unit_cost = 8;
5370
5279
  */
5371
- unitCost: string;
5280
+ unitCost: bigint;
5372
5281
 
5373
5282
  /**
5374
- * @generated from field: string amount = 8;
5283
+ * @generated from field: int64 amount = 9;
5375
5284
  */
5376
- amount: string;
5285
+ amount: bigint;
5377
5286
 
5378
5287
  /**
5379
- * @generated from field: string source = 9;
5288
+ * @generated from field: bool enabled = 10;
5380
5289
  */
5381
- source: string;
5290
+ enabled: boolean;
5382
5291
 
5383
5292
  /**
5384
- * @generated from field: string import_job_id = 10;
5293
+ * @generated from field: repeated blueapi.billing.v1.MonthlyMiscFeeValidationError validation_errors = 11;
5385
5294
  */
5386
- importJobId: string;
5295
+ validationErrors: MonthlyMiscFeeValidationError[];
5387
5296
 
5388
5297
  /**
5389
- * @generated from field: string created_by = 11;
5298
+ * The row's own billing month in "YYYY-MM" form. Always populated, including for "remove"
5299
+ * results, since a request can span multiple months.
5300
+ *
5301
+ * @generated from field: string billing_month = 12;
5390
5302
  */
5391
- createdBy: string;
5303
+ billingMonth: string;
5304
+ };
5305
+
5306
+ /**
5307
+ * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportRowResult.
5308
+ * Use `create(MonthlyMiscFeeImportRowResultSchema)` to create a new message.
5309
+ */
5310
+ export const MonthlyMiscFeeImportRowResultSchema: GenMessage<MonthlyMiscFeeImportRowResult> = /*@__PURE__*/
5311
+ messageDesc(file_billing_v1_billing, 135);
5392
5312
 
5313
+ /**
5314
+ * @generated from message blueapi.billing.v1.MonthlyMiscFeeValidationError
5315
+ */
5316
+ export type MonthlyMiscFeeValidationError = Message<"blueapi.billing.v1.MonthlyMiscFeeValidationError"> & {
5393
5317
  /**
5394
- * @generated from field: string created_at = 12;
5318
+ * @generated from field: string field = 1;
5395
5319
  */
5396
- createdAt: string;
5320
+ field: string;
5397
5321
 
5398
5322
  /**
5399
- * @generated from field: string updated_by = 13;
5323
+ * @generated from field: string code = 2;
5400
5324
  */
5401
- updatedBy: string;
5325
+ code: string;
5402
5326
 
5403
5327
  /**
5404
- * @generated from field: string updated_at = 14;
5328
+ * @generated from field: string message = 3;
5405
5329
  */
5406
- updatedAt: string;
5330
+ message: string;
5407
5331
  };
5408
5332
 
5409
5333
  /**
5410
- * Describes the message blueapi.billing.v1.MonthlyMiscFee.
5411
- * Use `create(MonthlyMiscFeeSchema)` to create a new message.
5334
+ * Describes the message blueapi.billing.v1.MonthlyMiscFeeValidationError.
5335
+ * Use `create(MonthlyMiscFeeValidationErrorSchema)` to create a new message.
5412
5336
  */
5413
- export const MonthlyMiscFeeSchema: GenMessage<MonthlyMiscFee> = /*@__PURE__*/
5414
- messageDesc(file_billing_v1_billing, 138);
5337
+ export const MonthlyMiscFeeValidationErrorSchema: GenMessage<MonthlyMiscFeeValidationError> = /*@__PURE__*/
5338
+ messageDesc(file_billing_v1_billing, 136);
5415
5339
 
5416
5340
  /**
5417
- * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportResult
5341
+ * BillingGroup tags adding setting
5342
+ *
5343
+ * @generated from message blueapi.billing.v1.UpdateTagsAddingSettingRequest
5418
5344
  */
5419
- export type MonthlyMiscFeeImportResult = Message<"blueapi.billing.v1.MonthlyMiscFeeImportResult"> & {
5345
+ export type UpdateTagsAddingSettingRequest = Message<"blueapi.billing.v1.UpdateTagsAddingSettingRequest"> & {
5420
5346
  /**
5421
- * @generated from field: string import_job_id = 1;
5347
+ * @generated from field: string vendor = 1;
5422
5348
  */
5423
- importJobId: string;
5424
-
5425
- /**
5426
- * @generated from field: string status = 2;
5427
- */
5428
- status: string;
5429
-
5430
- /**
5431
- * @generated from field: string mode = 3;
5432
- */
5433
- mode: string;
5434
-
5435
- /**
5436
- * @generated from field: string billing_month = 4;
5437
- */
5438
- billingMonth: string;
5439
-
5440
- /**
5441
- * @generated from field: string file_name = 5;
5442
- */
5443
- fileName: string;
5444
-
5445
- /**
5446
- * @generated from field: string file_hash = 6;
5447
- */
5448
- fileHash: string;
5449
-
5450
- /**
5451
- * @generated from field: int32 total_rows = 7;
5452
- */
5453
- totalRows: number;
5454
-
5455
- /**
5456
- * @generated from field: int32 valid_rows = 8;
5457
- */
5458
- validRows: number;
5459
-
5460
- /**
5461
- * @generated from field: int32 inserted_rows = 9;
5462
- */
5463
- insertedRows: number;
5464
-
5465
- /**
5466
- * @generated from field: int32 updated_rows = 10;
5467
- */
5468
- updatedRows: number;
5469
-
5470
- /**
5471
- * @generated from field: int32 unchanged_rows = 11;
5472
- */
5473
- unchangedRows: number;
5474
-
5475
- /**
5476
- * @generated from field: int32 deleted_rows = 12;
5477
- */
5478
- deletedRows: number;
5479
-
5480
- /**
5481
- * @generated from field: int32 failed_rows = 13;
5482
- */
5483
- failedRows: number;
5484
-
5485
- /**
5486
- * @generated from field: int32 replace_month_existing_rows = 14;
5487
- */
5488
- replaceMonthExistingRows: number;
5489
-
5490
- /**
5491
- * @generated from field: string export_ref = 15;
5492
- */
5493
- exportRef: string;
5494
-
5495
- /**
5496
- * @generated from field: repeated blueapi.billing.v1.MonthlyMiscFeeImportRowResult row_results = 16;
5497
- */
5498
- rowResults: MonthlyMiscFeeImportRowResult[];
5499
-
5500
- /**
5501
- * @generated from field: string created_by = 17;
5502
- */
5503
- createdBy: string;
5504
-
5505
- /**
5506
- * @generated from field: string created_at = 18;
5507
- */
5508
- createdAt: string;
5509
-
5510
- /**
5511
- * @generated from field: string updated_at = 19;
5512
- */
5513
- updatedAt: string;
5514
- };
5515
-
5516
- /**
5517
- * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportResult.
5518
- * Use `create(MonthlyMiscFeeImportResultSchema)` to create a new message.
5519
- */
5520
- export const MonthlyMiscFeeImportResultSchema: GenMessage<MonthlyMiscFeeImportResult> = /*@__PURE__*/
5521
- messageDesc(file_billing_v1_billing, 139);
5522
-
5523
- /**
5524
- * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportRowResult
5525
- */
5526
- export type MonthlyMiscFeeImportRowResult = Message<"blueapi.billing.v1.MonthlyMiscFeeImportRowResult"> & {
5527
- /**
5528
- * @generated from field: int32 csv_row_number = 1;
5529
- */
5530
- csvRowNumber: number;
5531
-
5532
- /**
5533
- * @generated from field: string action = 2;
5534
- */
5535
- action: string;
5536
-
5537
- /**
5538
- * @generated from field: string row_id = 3;
5539
- */
5540
- rowId: string;
5541
-
5542
- /**
5543
- * @generated from field: string billing_month = 4;
5544
- */
5545
- billingMonth: string;
5546
-
5547
- /**
5548
- * @generated from field: string billing_group_id = 5;
5549
- */
5550
- billingGroupId: string;
5551
-
5552
- /**
5553
- * @generated from field: string billing_group_name = 6;
5554
- */
5555
- billingGroupName: string;
5556
-
5557
- /**
5558
- * @generated from field: string item_name = 7;
5559
- */
5560
- itemName: string;
5561
-
5562
- /**
5563
- * @generated from field: string quantity = 8;
5564
- */
5565
- quantity: string;
5566
-
5567
- /**
5568
- * @generated from field: string unit_cost = 9;
5569
- */
5570
- unitCost: string;
5571
-
5572
- /**
5573
- * @generated from field: string amount = 10;
5574
- */
5575
- amount: string;
5576
-
5577
- /**
5578
- * @generated from field: blueapi.billing.v1.MonthlyMiscFeeImportPreviousValue previous_value = 11;
5579
- */
5580
- previousValue?: MonthlyMiscFeeImportPreviousValue;
5581
-
5582
- /**
5583
- * @generated from field: repeated blueapi.billing.v1.MonthlyMiscFeeValidationError validation_errors = 12;
5584
- */
5585
- validationErrors: MonthlyMiscFeeValidationError[];
5586
-
5587
- /**
5588
- * @generated from field: string note = 13;
5589
- */
5590
- note: string;
5591
- };
5592
-
5593
- /**
5594
- * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportRowResult.
5595
- * Use `create(MonthlyMiscFeeImportRowResultSchema)` to create a new message.
5596
- */
5597
- export const MonthlyMiscFeeImportRowResultSchema: GenMessage<MonthlyMiscFeeImportRowResult> = /*@__PURE__*/
5598
- messageDesc(file_billing_v1_billing, 140);
5599
-
5600
- /**
5601
- * @generated from message blueapi.billing.v1.MonthlyMiscFeeImportPreviousValue
5602
- */
5603
- export type MonthlyMiscFeeImportPreviousValue = Message<"blueapi.billing.v1.MonthlyMiscFeeImportPreviousValue"> & {
5604
- /**
5605
- * @generated from field: string quantity = 1;
5606
- */
5607
- quantity: string;
5608
-
5609
- /**
5610
- * @generated from field: string unit_cost = 2;
5611
- */
5612
- unitCost: string;
5613
-
5614
- /**
5615
- * @generated from field: string amount = 3;
5616
- */
5617
- amount: string;
5618
- };
5619
-
5620
- /**
5621
- * Describes the message blueapi.billing.v1.MonthlyMiscFeeImportPreviousValue.
5622
- * Use `create(MonthlyMiscFeeImportPreviousValueSchema)` to create a new message.
5623
- */
5624
- export const MonthlyMiscFeeImportPreviousValueSchema: GenMessage<MonthlyMiscFeeImportPreviousValue> = /*@__PURE__*/
5625
- messageDesc(file_billing_v1_billing, 141);
5626
-
5627
- /**
5628
- * @generated from message blueapi.billing.v1.MonthlyMiscFeeValidationError
5629
- */
5630
- export type MonthlyMiscFeeValidationError = Message<"blueapi.billing.v1.MonthlyMiscFeeValidationError"> & {
5631
- /**
5632
- * @generated from field: string field = 1;
5633
- */
5634
- field: string;
5635
-
5636
- /**
5637
- * @generated from field: string code = 2;
5638
- */
5639
- code: string;
5640
-
5641
- /**
5642
- * @generated from field: string message = 3;
5643
- */
5644
- message: string;
5645
- };
5646
-
5647
- /**
5648
- * Describes the message blueapi.billing.v1.MonthlyMiscFeeValidationError.
5649
- * Use `create(MonthlyMiscFeeValidationErrorSchema)` to create a new message.
5650
- */
5651
- export const MonthlyMiscFeeValidationErrorSchema: GenMessage<MonthlyMiscFeeValidationError> = /*@__PURE__*/
5652
- messageDesc(file_billing_v1_billing, 142);
5653
-
5654
- /**
5655
- * BillingGroup tags adding setting
5656
- *
5657
- * @generated from message blueapi.billing.v1.UpdateTagsAddingSettingRequest
5658
- */
5659
- export type UpdateTagsAddingSettingRequest = Message<"blueapi.billing.v1.UpdateTagsAddingSettingRequest"> & {
5660
- /**
5661
- * @generated from field: string vendor = 1;
5662
- */
5663
- vendor: string;
5349
+ vendor: string;
5664
5350
 
5665
5351
  /**
5666
5352
  * @generated from field: string groupId = 2;
@@ -5678,7 +5364,7 @@ export type UpdateTagsAddingSettingRequest = Message<"blueapi.billing.v1.UpdateT
5678
5364
  * Use `create(UpdateTagsAddingSettingRequestSchema)` to create a new message.
5679
5365
  */
5680
5366
  export const UpdateTagsAddingSettingRequestSchema: GenMessage<UpdateTagsAddingSettingRequest> = /*@__PURE__*/
5681
- messageDesc(file_billing_v1_billing, 143);
5367
+ messageDesc(file_billing_v1_billing, 137);
5682
5368
 
5683
5369
  /**
5684
5370
  * @generated from message blueapi.billing.v1.GetTagsAddingSettingRequest
@@ -5700,7 +5386,7 @@ export type GetTagsAddingSettingRequest = Message<"blueapi.billing.v1.GetTagsAdd
5700
5386
  * Use `create(GetTagsAddingSettingRequestSchema)` to create a new message.
5701
5387
  */
5702
5388
  export const GetTagsAddingSettingRequestSchema: GenMessage<GetTagsAddingSettingRequest> = /*@__PURE__*/
5703
- messageDesc(file_billing_v1_billing, 144);
5389
+ messageDesc(file_billing_v1_billing, 138);
5704
5390
 
5705
5391
  /**
5706
5392
  * @generated from message blueapi.billing.v1.TagsAddingSetting
@@ -5727,7 +5413,7 @@ export type TagsAddingSetting = Message<"blueapi.billing.v1.TagsAddingSetting">
5727
5413
  * Use `create(TagsAddingSettingSchema)` to create a new message.
5728
5414
  */
5729
5415
  export const TagsAddingSettingSchema: GenMessage<TagsAddingSetting> = /*@__PURE__*/
5730
- messageDesc(file_billing_v1_billing, 145);
5416
+ messageDesc(file_billing_v1_billing, 139);
5731
5417
 
5732
5418
  /**
5733
5419
  * Request message for the ExportServiceDiscounts rpc.
@@ -5759,7 +5445,7 @@ export type ExportServiceDiscountsRequest = Message<"blueapi.billing.v1.ExportSe
5759
5445
  * Use `create(ExportServiceDiscountsRequestSchema)` to create a new message.
5760
5446
  */
5761
5447
  export const ExportServiceDiscountsRequestSchema: GenMessage<ExportServiceDiscountsRequest> = /*@__PURE__*/
5762
- messageDesc(file_billing_v1_billing, 146);
5448
+ messageDesc(file_billing_v1_billing, 140);
5763
5449
 
5764
5450
  /**
5765
5451
  * Request message for the ExportAccountInvoiceServiceDiscounts rpc.
@@ -5798,7 +5484,7 @@ export type ExportAccountInvoiceServiceDiscountsRequest = Message<"blueapi.billi
5798
5484
  * Use `create(ExportAccountInvoiceServiceDiscountsRequestSchema)` to create a new message.
5799
5485
  */
5800
5486
  export const ExportAccountInvoiceServiceDiscountsRequestSchema: GenMessage<ExportAccountInvoiceServiceDiscountsRequest> = /*@__PURE__*/
5801
- messageDesc(file_billing_v1_billing, 147);
5487
+ messageDesc(file_billing_v1_billing, 141);
5802
5488
 
5803
5489
  /**
5804
5490
  * Request message for the ExportBillingGroupInvoiceServiceDiscounts rpc.
@@ -5837,7 +5523,7 @@ export type ExportBillingGroupInvoiceServiceDiscountsRequest = Message<"blueapi.
5837
5523
  * Use `create(ExportBillingGroupInvoiceServiceDiscountsRequestSchema)` to create a new message.
5838
5524
  */
5839
5525
  export const ExportBillingGroupInvoiceServiceDiscountsRequestSchema: GenMessage<ExportBillingGroupInvoiceServiceDiscountsRequest> = /*@__PURE__*/
5840
- messageDesc(file_billing_v1_billing, 148);
5526
+ messageDesc(file_billing_v1_billing, 142);
5841
5527
 
5842
5528
  /**
5843
5529
  * Request message for the ExportBillingGroupCsv rpc.
@@ -5861,7 +5547,7 @@ export type ExportBillingGroupCsvRequest = Message<"blueapi.billing.v1.ExportBil
5861
5547
  * Use `create(ExportBillingGroupCsvRequestSchema)` to create a new message.
5862
5548
  */
5863
5549
  export const ExportBillingGroupCsvRequestSchema: GenMessage<ExportBillingGroupCsvRequest> = /*@__PURE__*/
5864
- messageDesc(file_billing_v1_billing, 149);
5550
+ messageDesc(file_billing_v1_billing, 143);
5865
5551
 
5866
5552
  /**
5867
5553
  * Response message for the ExportBillingGroupCsv rpc.
@@ -5883,7 +5569,7 @@ export type ExportBillingGroupCsvResponse = Message<"blueapi.billing.v1.ExportBi
5883
5569
  * Use `create(ExportBillingGroupCsvResponseSchema)` to create a new message.
5884
5570
  */
5885
5571
  export const ExportBillingGroupCsvResponseSchema: GenMessage<ExportBillingGroupCsvResponse> = /*@__PURE__*/
5886
- messageDesc(file_billing_v1_billing, 150);
5572
+ messageDesc(file_billing_v1_billing, 144);
5887
5573
 
5888
5574
  /**
5889
5575
  * port from m/ripple/exportcsv/billing-group-setting
@@ -5913,7 +5599,7 @@ export type ExportInvoiceSettingCsvRequest = Message<"blueapi.billing.v1.ExportI
5913
5599
  * Use `create(ExportInvoiceSettingCsvRequestSchema)` to create a new message.
5914
5600
  */
5915
5601
  export const ExportInvoiceSettingCsvRequestSchema: GenMessage<ExportInvoiceSettingCsvRequest> = /*@__PURE__*/
5916
- messageDesc(file_billing_v1_billing, 151);
5602
+ messageDesc(file_billing_v1_billing, 145);
5917
5603
 
5918
5604
  /**
5919
5605
  * Response message for the ExportBillingGroupCsv rpc.
@@ -5935,7 +5621,7 @@ export type ExportInvoiceSettingCsvResponse = Message<"blueapi.billing.v1.Export
5935
5621
  * Use `create(ExportInvoiceSettingCsvResponseSchema)` to create a new message.
5936
5622
  */
5937
5623
  export const ExportInvoiceSettingCsvResponseSchema: GenMessage<ExportInvoiceSettingCsvResponse> = /*@__PURE__*/
5938
- messageDesc(file_billing_v1_billing, 152);
5624
+ messageDesc(file_billing_v1_billing, 146);
5939
5625
 
5940
5626
  /**
5941
5627
  * @generated from message blueapi.billing.v1.GetBillingGroupInvoiceServiceDiscountsRequest
@@ -5952,7 +5638,7 @@ export type GetBillingGroupInvoiceServiceDiscountsRequest = Message<"blueapi.bil
5952
5638
  * Use `create(GetBillingGroupInvoiceServiceDiscountsRequestSchema)` to create a new message.
5953
5639
  */
5954
5640
  export const GetBillingGroupInvoiceServiceDiscountsRequestSchema: GenMessage<GetBillingGroupInvoiceServiceDiscountsRequest> = /*@__PURE__*/
5955
- messageDesc(file_billing_v1_billing, 153);
5641
+ messageDesc(file_billing_v1_billing, 147);
5956
5642
 
5957
5643
  /**
5958
5644
  * @generated from message blueapi.billing.v1.GetBillingGroupInvoiceServiceDiscountsResponse
@@ -5971,7 +5657,7 @@ export type GetBillingGroupInvoiceServiceDiscountsResponse = Message<"blueapi.bi
5971
5657
  * Use `create(GetBillingGroupInvoiceServiceDiscountsResponseSchema)` to create a new message.
5972
5658
  */
5973
5659
  export const GetBillingGroupInvoiceServiceDiscountsResponseSchema: GenMessage<GetBillingGroupInvoiceServiceDiscountsResponse> = /*@__PURE__*/
5974
- messageDesc(file_billing_v1_billing, 154);
5660
+ messageDesc(file_billing_v1_billing, 148);
5975
5661
 
5976
5662
  /**
5977
5663
  * @generated from message blueapi.billing.v1.AddBillingGroupCustomFieldRequest
@@ -5997,7 +5683,7 @@ export type AddBillingGroupCustomFieldRequest = Message<"blueapi.billing.v1.AddB
5997
5683
  * Use `create(AddBillingGroupCustomFieldRequestSchema)` to create a new message.
5998
5684
  */
5999
5685
  export const AddBillingGroupCustomFieldRequestSchema: GenMessage<AddBillingGroupCustomFieldRequest> = /*@__PURE__*/
6000
- messageDesc(file_billing_v1_billing, 155);
5686
+ messageDesc(file_billing_v1_billing, 149);
6001
5687
 
6002
5688
  /**
6003
5689
  * @generated from message blueapi.billing.v1.DeleteBillingGroupCustomFieldRequest
@@ -6023,7 +5709,7 @@ export type DeleteBillingGroupCustomFieldRequest = Message<"blueapi.billing.v1.D
6023
5709
  * Use `create(DeleteBillingGroupCustomFieldRequestSchema)` to create a new message.
6024
5710
  */
6025
5711
  export const DeleteBillingGroupCustomFieldRequestSchema: GenMessage<DeleteBillingGroupCustomFieldRequest> = /*@__PURE__*/
6026
- messageDesc(file_billing_v1_billing, 156);
5712
+ messageDesc(file_billing_v1_billing, 150);
6027
5713
 
6028
5714
  /**
6029
5715
  * @generated from message blueapi.billing.v1.AddAccountToBillingGroupRequest
@@ -6056,7 +5742,7 @@ export type AddAccountToBillingGroupRequest = Message<"blueapi.billing.v1.AddAcc
6056
5742
  * Use `create(AddAccountToBillingGroupRequestSchema)` to create a new message.
6057
5743
  */
6058
5744
  export const AddAccountToBillingGroupRequestSchema: GenMessage<AddAccountToBillingGroupRequest> = /*@__PURE__*/
6059
- messageDesc(file_billing_v1_billing, 157);
5745
+ messageDesc(file_billing_v1_billing, 151);
6060
5746
 
6061
5747
  /**
6062
5748
  * New message for account details
@@ -6098,7 +5784,7 @@ export type AccountToAdd = Message<"blueapi.billing.v1.AccountToAdd"> & {
6098
5784
  * Use `create(AccountToAddSchema)` to create a new message.
6099
5785
  */
6100
5786
  export const AccountToAddSchema: GenMessage<AccountToAdd> = /*@__PURE__*/
6101
- messageDesc(file_billing_v1_billing, 158);
5787
+ messageDesc(file_billing_v1_billing, 152);
6102
5788
 
6103
5789
  /**
6104
5790
  * @generated from message blueapi.billing.v1.AddTagsToBillingGroupRequest
@@ -6138,7 +5824,7 @@ export type AddTagsToBillingGroupRequest = Message<"blueapi.billing.v1.AddTagsTo
6138
5824
  * Use `create(AddTagsToBillingGroupRequestSchema)` to create a new message.
6139
5825
  */
6140
5826
  export const AddTagsToBillingGroupRequestSchema: GenMessage<AddTagsToBillingGroupRequest> = /*@__PURE__*/
6141
- messageDesc(file_billing_v1_billing, 159);
5827
+ messageDesc(file_billing_v1_billing, 153);
6142
5828
 
6143
5829
  /**
6144
5830
  * Settings for a specific customer account for AddTagsToBillingGroup
@@ -6166,7 +5852,7 @@ export type TagSetting = Message<"blueapi.billing.v1.TagSetting"> & {
6166
5852
  * Use `create(TagSettingSchema)` to create a new message.
6167
5853
  */
6168
5854
  export const TagSettingSchema: GenMessage<TagSetting> = /*@__PURE__*/
6169
- messageDesc(file_billing_v1_billing, 160);
5855
+ messageDesc(file_billing_v1_billing, 154);
6170
5856
 
6171
5857
  /**
6172
5858
  * Individual tag definition for AddTagsToBillingGroup
@@ -6201,7 +5887,7 @@ export type Tag = Message<"blueapi.billing.v1.Tag"> & {
6201
5887
  * Use `create(TagSchema)` to create a new message.
6202
5888
  */
6203
5889
  export const TagSchema: GenMessage<Tag> = /*@__PURE__*/
6204
- messageDesc(file_billing_v1_billing, 161);
5890
+ messageDesc(file_billing_v1_billing, 155);
6205
5891
 
6206
5892
  /**
6207
5893
  * Non-tag settings for a billing group for AddTagsToBillingGroup
@@ -6236,7 +5922,7 @@ export type NonTagSetting = Message<"blueapi.billing.v1.NonTagSetting"> & {
6236
5922
  * Use `create(NonTagSettingSchema)` to create a new message.
6237
5923
  */
6238
5924
  export const NonTagSettingSchema: GenMessage<NonTagSetting> = /*@__PURE__*/
6239
- messageDesc(file_billing_v1_billing, 162);
5925
+ messageDesc(file_billing_v1_billing, 156);
6240
5926
 
6241
5927
  /**
6242
5928
  * Response message for tag invoice setting operation for AddTagsToBillingGroup
@@ -6264,7 +5950,7 @@ export type SaveTagInvoiceSettingResponse = Message<"blueapi.billing.v1.SaveTagI
6264
5950
  * Use `create(SaveTagInvoiceSettingResponseSchema)` to create a new message.
6265
5951
  */
6266
5952
  export const SaveTagInvoiceSettingResponseSchema: GenMessage<SaveTagInvoiceSettingResponse> = /*@__PURE__*/
6267
- messageDesc(file_billing_v1_billing, 163);
5953
+ messageDesc(file_billing_v1_billing, 157);
6268
5954
 
6269
5955
  /**
6270
5956
  * Request message for updating non-tag group settings for a billing group for UpdateNonTagGroupToBillingGroup
@@ -6299,7 +5985,7 @@ export type UpdateNonTagGroupToBillingGroupRequest = Message<"blueapi.billing.v1
6299
5985
  * Use `create(UpdateNonTagGroupToBillingGroupRequestSchema)` to create a new message.
6300
5986
  */
6301
5987
  export const UpdateNonTagGroupToBillingGroupRequestSchema: GenMessage<UpdateNonTagGroupToBillingGroupRequest> = /*@__PURE__*/
6302
- messageDesc(file_billing_v1_billing, 164);
5988
+ messageDesc(file_billing_v1_billing, 158);
6303
5989
 
6304
5990
  /**
6305
5991
  * Individual non-tag group setting for UpdateNonTagGroupToBillingGroup
@@ -6334,7 +6020,7 @@ export type NonTagGroupSetting = Message<"blueapi.billing.v1.NonTagGroupSetting"
6334
6020
  * Use `create(NonTagGroupSettingSchema)` to create a new message.
6335
6021
  */
6336
6022
  export const NonTagGroupSettingSchema: GenMessage<NonTagGroupSetting> = /*@__PURE__*/
6337
- messageDesc(file_billing_v1_billing, 165);
6023
+ messageDesc(file_billing_v1_billing, 159);
6338
6024
 
6339
6025
  /**
6340
6026
  * @generated from message blueapi.billing.v1.SaveInvoiceSettingsRequest
@@ -6384,7 +6070,7 @@ export type SaveInvoiceSettingsRequest = Message<"blueapi.billing.v1.SaveInvoice
6384
6070
  * Use `create(SaveInvoiceSettingsRequestSchema)` to create a new message.
6385
6071
  */
6386
6072
  export const SaveInvoiceSettingsRequestSchema: GenMessage<SaveInvoiceSettingsRequest> = /*@__PURE__*/
6387
- messageDesc(file_billing_v1_billing, 166);
6073
+ messageDesc(file_billing_v1_billing, 160);
6388
6074
 
6389
6075
  /**
6390
6076
  * @generated from message blueapi.billing.v1.InvoiceSettings
@@ -6524,7 +6210,7 @@ export type InvoiceSettings = Message<"blueapi.billing.v1.InvoiceSettings"> & {
6524
6210
  * Use `create(InvoiceSettingsSchema)` to create a new message.
6525
6211
  */
6526
6212
  export const InvoiceSettingsSchema: GenMessage<InvoiceSettings> = /*@__PURE__*/
6527
- messageDesc(file_billing_v1_billing, 167);
6213
+ messageDesc(file_billing_v1_billing, 161);
6528
6214
 
6529
6215
  /**
6530
6216
  * @generated from message blueapi.billing.v1.BasicInformation
@@ -6596,7 +6282,7 @@ export type BasicInformation = Message<"blueapi.billing.v1.BasicInformation"> &
6596
6282
  * Use `create(BasicInformationSchema)` to create a new message.
6597
6283
  */
6598
6284
  export const BasicInformationSchema: GenMessage<BasicInformation> = /*@__PURE__*/
6599
- messageDesc(file_billing_v1_billing, 168);
6285
+ messageDesc(file_billing_v1_billing, 162);
6600
6286
 
6601
6287
  /**
6602
6288
  * @generated from message blueapi.billing.v1.UpdateBillingGroupBasicInformationRequest
@@ -6618,7 +6304,7 @@ export type UpdateBillingGroupBasicInformationRequest = Message<"blueapi.billing
6618
6304
  * Use `create(UpdateBillingGroupBasicInformationRequestSchema)` to create a new message.
6619
6305
  */
6620
6306
  export const UpdateBillingGroupBasicInformationRequestSchema: GenMessage<UpdateBillingGroupBasicInformationRequest> = /*@__PURE__*/
6621
- messageDesc(file_billing_v1_billing, 169);
6307
+ messageDesc(file_billing_v1_billing, 163);
6622
6308
 
6623
6309
  /**
6624
6310
  * @generated from message blueapi.billing.v1.UpdateBillingGroupCustomFieldsRequest
@@ -6640,7 +6326,7 @@ export type UpdateBillingGroupCustomFieldsRequest = Message<"blueapi.billing.v1.
6640
6326
  * Use `create(UpdateBillingGroupCustomFieldsRequestSchema)` to create a new message.
6641
6327
  */
6642
6328
  export const UpdateBillingGroupCustomFieldsRequestSchema: GenMessage<UpdateBillingGroupCustomFieldsRequest> = /*@__PURE__*/
6643
- messageDesc(file_billing_v1_billing, 170);
6329
+ messageDesc(file_billing_v1_billing, 164);
6644
6330
 
6645
6331
  /**
6646
6332
  * @generated from message blueapi.billing.v1.UpdateBillingGroupFreeFormatRequest
@@ -6667,7 +6353,7 @@ export type UpdateBillingGroupFreeFormatRequest = Message<"blueapi.billing.v1.Up
6667
6353
  * Use `create(UpdateBillingGroupFreeFormatRequestSchema)` to create a new message.
6668
6354
  */
6669
6355
  export const UpdateBillingGroupFreeFormatRequestSchema: GenMessage<UpdateBillingGroupFreeFormatRequest> = /*@__PURE__*/
6670
- messageDesc(file_billing_v1_billing, 171);
6356
+ messageDesc(file_billing_v1_billing, 165);
6671
6357
 
6672
6358
  /**
6673
6359
  * @generated from message blueapi.billing.v1.UpdateBillingGroupLinkedResourcesRequest
@@ -6720,7 +6406,7 @@ export type UpdateBillingGroupLinkedResourcesRequest = Message<"blueapi.billing.
6720
6406
  * Use `create(UpdateBillingGroupLinkedResourcesRequestSchema)` to create a new message.
6721
6407
  */
6722
6408
  export const UpdateBillingGroupLinkedResourcesRequestSchema: GenMessage<UpdateBillingGroupLinkedResourcesRequest> = /*@__PURE__*/
6723
- messageDesc(file_billing_v1_billing, 172);
6409
+ messageDesc(file_billing_v1_billing, 166);
6724
6410
 
6725
6411
  /**
6726
6412
  * @generated from message blueapi.billing.v1.UpdateBillingGroupInvoiceSettingsRequest
@@ -6759,7 +6445,7 @@ export type UpdateBillingGroupInvoiceSettingsRequest = Message<"blueapi.billing.
6759
6445
  * Use `create(UpdateBillingGroupInvoiceSettingsRequestSchema)` to create a new message.
6760
6446
  */
6761
6447
  export const UpdateBillingGroupInvoiceSettingsRequestSchema: GenMessage<UpdateBillingGroupInvoiceSettingsRequest> = /*@__PURE__*/
6762
- messageDesc(file_billing_v1_billing, 173);
6448
+ messageDesc(file_billing_v1_billing, 167);
6763
6449
 
6764
6450
  /**
6765
6451
  * @generated from message blueapi.billing.v1.UpdateBillingGroupResellerChargesRequest
@@ -6786,7 +6472,7 @@ export type UpdateBillingGroupResellerChargesRequest = Message<"blueapi.billing.
6786
6472
  * Use `create(UpdateBillingGroupResellerChargesRequestSchema)` to create a new message.
6787
6473
  */
6788
6474
  export const UpdateBillingGroupResellerChargesRequestSchema: GenMessage<UpdateBillingGroupResellerChargesRequest> = /*@__PURE__*/
6789
- messageDesc(file_billing_v1_billing, 174);
6475
+ messageDesc(file_billing_v1_billing, 168);
6790
6476
 
6791
6477
  /**
6792
6478
  * @generated from message blueapi.billing.v1.UpdateBillingGroupAdditionalChargesRequest
@@ -6820,7 +6506,7 @@ export type UpdateBillingGroupAdditionalChargesRequest = Message<"blueapi.billin
6820
6506
  * Use `create(UpdateBillingGroupAdditionalChargesRequestSchema)` to create a new message.
6821
6507
  */
6822
6508
  export const UpdateBillingGroupAdditionalChargesRequestSchema: GenMessage<UpdateBillingGroupAdditionalChargesRequest> = /*@__PURE__*/
6823
- messageDesc(file_billing_v1_billing, 175);
6509
+ messageDesc(file_billing_v1_billing, 169);
6824
6510
 
6825
6511
  /**
6826
6512
  * CustomizedBillingServiceBillingSetting
@@ -6857,7 +6543,7 @@ export type UpdateBillingGroupAdditionalChargesRequest_CustomizedBillingServiceB
6857
6543
  * Use `create(UpdateBillingGroupAdditionalChargesRequest_CustomizedBillingServiceBillingSettingSchema)` to create a new message.
6858
6544
  */
6859
6545
  export const UpdateBillingGroupAdditionalChargesRequest_CustomizedBillingServiceBillingSettingSchema: GenMessage<UpdateBillingGroupAdditionalChargesRequest_CustomizedBillingServiceBillingSetting> = /*@__PURE__*/
6860
- messageDesc(file_billing_v1_billing, 175, 0);
6546
+ messageDesc(file_billing_v1_billing, 169, 0);
6861
6547
 
6862
6548
  /**
6863
6549
  * @generated from message blueapi.billing.v1.DeleteBillingGroupRequest
@@ -6874,7 +6560,7 @@ export type DeleteBillingGroupRequest = Message<"blueapi.billing.v1.DeleteBillin
6874
6560
  * Use `create(DeleteBillingGroupRequestSchema)` to create a new message.
6875
6561
  */
6876
6562
  export const DeleteBillingGroupRequestSchema: GenMessage<DeleteBillingGroupRequest> = /*@__PURE__*/
6877
- messageDesc(file_billing_v1_billing, 176);
6563
+ messageDesc(file_billing_v1_billing, 170);
6878
6564
 
6879
6565
  /**
6880
6566
  * Request message for the GetBillingGroupAccountSupportPlan rpc.
@@ -6902,7 +6588,7 @@ export type GetBillingGroupAccountSupportPlanRequest = Message<"blueapi.billing.
6902
6588
  * Use `create(GetBillingGroupAccountSupportPlanRequestSchema)` to create a new message.
6903
6589
  */
6904
6590
  export const GetBillingGroupAccountSupportPlanRequestSchema: GenMessage<GetBillingGroupAccountSupportPlanRequest> = /*@__PURE__*/
6905
- messageDesc(file_billing_v1_billing, 177);
6591
+ messageDesc(file_billing_v1_billing, 171);
6906
6592
 
6907
6593
  /**
6908
6594
  * Response message for the GetBillingGroupAccountSupportPlan rpc.
@@ -6944,7 +6630,7 @@ export type GetBillingGroupAccountSupportPlanResponse = Message<"blueapi.billing
6944
6630
  * Use `create(GetBillingGroupAccountSupportPlanResponseSchema)` to create a new message.
6945
6631
  */
6946
6632
  export const GetBillingGroupAccountSupportPlanResponseSchema: GenMessage<GetBillingGroupAccountSupportPlanResponse> = /*@__PURE__*/
6947
- messageDesc(file_billing_v1_billing, 178);
6633
+ messageDesc(file_billing_v1_billing, 172);
6948
6634
 
6949
6635
  /**
6950
6636
  * Request message for the UpdateBillingGroupAccountSupportPlan rpc.
@@ -6994,7 +6680,7 @@ export type UpdateBillingGroupAccountSupportPlanRequest = Message<"blueapi.billi
6994
6680
  * Use `create(UpdateBillingGroupAccountSupportPlanRequestSchema)` to create a new message.
6995
6681
  */
6996
6682
  export const UpdateBillingGroupAccountSupportPlanRequestSchema: GenMessage<UpdateBillingGroupAccountSupportPlanRequest> = /*@__PURE__*/
6997
- messageDesc(file_billing_v1_billing, 179);
6683
+ messageDesc(file_billing_v1_billing, 173);
6998
6684
 
6999
6685
  /**
7000
6686
  * @generated from message blueapi.billing.v1.GetAnnouncementsRequest
@@ -7013,7 +6699,7 @@ export type GetAnnouncementsRequest = Message<"blueapi.billing.v1.GetAnnouncemen
7013
6699
  * Use `create(GetAnnouncementsRequestSchema)` to create a new message.
7014
6700
  */
7015
6701
  export const GetAnnouncementsRequestSchema: GenMessage<GetAnnouncementsRequest> = /*@__PURE__*/
7016
- messageDesc(file_billing_v1_billing, 180);
6702
+ messageDesc(file_billing_v1_billing, 174);
7017
6703
 
7018
6704
  /**
7019
6705
  * @generated from message blueapi.billing.v1.CreateAnnouncementRequest
@@ -7081,7 +6767,7 @@ export type CreateAnnouncementRequest = Message<"blueapi.billing.v1.CreateAnnoun
7081
6767
  * Use `create(CreateAnnouncementRequestSchema)` to create a new message.
7082
6768
  */
7083
6769
  export const CreateAnnouncementRequestSchema: GenMessage<CreateAnnouncementRequest> = /*@__PURE__*/
7084
- messageDesc(file_billing_v1_billing, 181);
6770
+ messageDesc(file_billing_v1_billing, 175);
7085
6771
 
7086
6772
  /**
7087
6773
  * @generated from message blueapi.billing.v1.UpdateAnnouncementRequest
@@ -7105,7 +6791,7 @@ export type UpdateAnnouncementRequest = Message<"blueapi.billing.v1.UpdateAnnoun
7105
6791
  * Use `create(UpdateAnnouncementRequestSchema)` to create a new message.
7106
6792
  */
7107
6793
  export const UpdateAnnouncementRequestSchema: GenMessage<UpdateAnnouncementRequest> = /*@__PURE__*/
7108
- messageDesc(file_billing_v1_billing, 182);
6794
+ messageDesc(file_billing_v1_billing, 176);
7109
6795
 
7110
6796
  /**
7111
6797
  * @generated from message blueapi.billing.v1.UpdateAnnouncementsStatusRequest
@@ -7127,7 +6813,7 @@ export type UpdateAnnouncementsStatusRequest = Message<"blueapi.billing.v1.Updat
7127
6813
  * Use `create(UpdateAnnouncementsStatusRequestSchema)` to create a new message.
7128
6814
  */
7129
6815
  export const UpdateAnnouncementsStatusRequestSchema: GenMessage<UpdateAnnouncementsStatusRequest> = /*@__PURE__*/
7130
- messageDesc(file_billing_v1_billing, 183);
6816
+ messageDesc(file_billing_v1_billing, 177);
7131
6817
 
7132
6818
  /**
7133
6819
  * @generated from message blueapi.billing.v1.UpdateAnnouncementDateRequest
@@ -7151,7 +6837,7 @@ export type UpdateAnnouncementDateRequest = Message<"blueapi.billing.v1.UpdateAn
7151
6837
  * Use `create(UpdateAnnouncementDateRequestSchema)` to create a new message.
7152
6838
  */
7153
6839
  export const UpdateAnnouncementDateRequestSchema: GenMessage<UpdateAnnouncementDateRequest> = /*@__PURE__*/
7154
- messageDesc(file_billing_v1_billing, 184);
6840
+ messageDesc(file_billing_v1_billing, 178);
7155
6841
 
7156
6842
  /**
7157
6843
  * @generated from message blueapi.billing.v1.DeleteAnnouncementRequest
@@ -7170,7 +6856,7 @@ export type DeleteAnnouncementRequest = Message<"blueapi.billing.v1.DeleteAnnoun
7170
6856
  * Use `create(DeleteAnnouncementRequestSchema)` to create a new message.
7171
6857
  */
7172
6858
  export const DeleteAnnouncementRequestSchema: GenMessage<DeleteAnnouncementRequest> = /*@__PURE__*/
7173
- messageDesc(file_billing_v1_billing, 185);
6859
+ messageDesc(file_billing_v1_billing, 179);
7174
6860
 
7175
6861
  /**
7176
6862
  * @generated from message blueapi.billing.v1.Announcement
@@ -7247,7 +6933,7 @@ export type Announcement = Message<"blueapi.billing.v1.Announcement"> & {
7247
6933
  * Use `create(AnnouncementSchema)` to create a new message.
7248
6934
  */
7249
6935
  export const AnnouncementSchema: GenMessage<Announcement> = /*@__PURE__*/
7250
- messageDesc(file_billing_v1_billing, 186);
6936
+ messageDesc(file_billing_v1_billing, 180);
7251
6937
 
7252
6938
  /**
7253
6939
  * @generated from message blueapi.billing.v1.GetBillingGroupAnnouncementsRequest
@@ -7266,7 +6952,7 @@ export type GetBillingGroupAnnouncementsRequest = Message<"blueapi.billing.v1.Ge
7266
6952
  * Use `create(GetBillingGroupAnnouncementsRequestSchema)` to create a new message.
7267
6953
  */
7268
6954
  export const GetBillingGroupAnnouncementsRequestSchema: GenMessage<GetBillingGroupAnnouncementsRequest> = /*@__PURE__*/
7269
- messageDesc(file_billing_v1_billing, 187);
6955
+ messageDesc(file_billing_v1_billing, 181);
7270
6956
 
7271
6957
  /**
7272
6958
  * @generated from message blueapi.billing.v1.GetBillingGroupAnnouncementsResponse
@@ -7298,7 +6984,7 @@ export type GetBillingGroupAnnouncementsResponse = Message<"blueapi.billing.v1.G
7298
6984
  * Use `create(GetBillingGroupAnnouncementsResponseSchema)` to create a new message.
7299
6985
  */
7300
6986
  export const GetBillingGroupAnnouncementsResponseSchema: GenMessage<GetBillingGroupAnnouncementsResponse> = /*@__PURE__*/
7301
- messageDesc(file_billing_v1_billing, 188);
6987
+ messageDesc(file_billing_v1_billing, 182);
7302
6988
 
7303
6989
  /**
7304
6990
  * @generated from message blueapi.billing.v1.GetCreditsRequest
@@ -7311,7 +6997,7 @@ export type GetCreditsRequest = Message<"blueapi.billing.v1.GetCreditsRequest">
7311
6997
  * Use `create(GetCreditsRequestSchema)` to create a new message.
7312
6998
  */
7313
6999
  export const GetCreditsRequestSchema: GenMessage<GetCreditsRequest> = /*@__PURE__*/
7314
- messageDesc(file_billing_v1_billing, 189);
7000
+ messageDesc(file_billing_v1_billing, 183);
7315
7001
 
7316
7002
  /**
7317
7003
  * @generated from message blueapi.billing.v1.Credit
@@ -7373,7 +7059,7 @@ export type Credit = Message<"blueapi.billing.v1.Credit"> & {
7373
7059
  * Use `create(CreditSchema)` to create a new message.
7374
7060
  */
7375
7061
  export const CreditSchema: GenMessage<Credit> = /*@__PURE__*/
7376
- messageDesc(file_billing_v1_billing, 190);
7062
+ messageDesc(file_billing_v1_billing, 184);
7377
7063
 
7378
7064
  /**
7379
7065
  * @generated from message blueapi.billing.v1.GetCsvSettingsRequest
@@ -7386,7 +7072,7 @@ export type GetCsvSettingsRequest = Message<"blueapi.billing.v1.GetCsvSettingsRe
7386
7072
  * Use `create(GetCsvSettingsRequestSchema)` to create a new message.
7387
7073
  */
7388
7074
  export const GetCsvSettingsRequestSchema: GenMessage<GetCsvSettingsRequest> = /*@__PURE__*/
7389
- messageDesc(file_billing_v1_billing, 191);
7075
+ messageDesc(file_billing_v1_billing, 185);
7390
7076
 
7391
7077
  /**
7392
7078
  * @generated from message blueapi.billing.v1.CsvSetting
@@ -7413,7 +7099,7 @@ export type CsvSetting = Message<"blueapi.billing.v1.CsvSetting"> & {
7413
7099
  * Use `create(CsvSettingSchema)` to create a new message.
7414
7100
  */
7415
7101
  export const CsvSettingSchema: GenMessage<CsvSetting> = /*@__PURE__*/
7416
- messageDesc(file_billing_v1_billing, 192);
7102
+ messageDesc(file_billing_v1_billing, 186);
7417
7103
 
7418
7104
  /**
7419
7105
  * @generated from message blueapi.billing.v1.CsvSetting.Column
@@ -7445,7 +7131,7 @@ export type CsvSetting_Column = Message<"blueapi.billing.v1.CsvSetting.Column">
7445
7131
  * Use `create(CsvSetting_ColumnSchema)` to create a new message.
7446
7132
  */
7447
7133
  export const CsvSetting_ColumnSchema: GenMessage<CsvSetting_Column> = /*@__PURE__*/
7448
- messageDesc(file_billing_v1_billing, 192, 0);
7134
+ messageDesc(file_billing_v1_billing, 186, 0);
7449
7135
 
7450
7136
  /**
7451
7137
  * @generated from message blueapi.billing.v1.UpdateInvoiceExchangeRateRequest
@@ -7486,7 +7172,7 @@ export type UpdateInvoiceExchangeRateRequest = Message<"blueapi.billing.v1.Updat
7486
7172
  * Use `create(UpdateInvoiceExchangeRateRequestSchema)` to create a new message.
7487
7173
  */
7488
7174
  export const UpdateInvoiceExchangeRateRequestSchema: GenMessage<UpdateInvoiceExchangeRateRequest> = /*@__PURE__*/
7489
- messageDesc(file_billing_v1_billing, 193);
7175
+ messageDesc(file_billing_v1_billing, 187);
7490
7176
 
7491
7177
  /**
7492
7178
  * @generated from message blueapi.billing.v1.ConvertInvoiceToPdfRequest
@@ -7520,7 +7206,7 @@ export type ConvertInvoiceToPdfRequest = Message<"blueapi.billing.v1.ConvertInvo
7520
7206
  * Use `create(ConvertInvoiceToPdfRequestSchema)` to create a new message.
7521
7207
  */
7522
7208
  export const ConvertInvoiceToPdfRequestSchema: GenMessage<ConvertInvoiceToPdfRequest> = /*@__PURE__*/
7523
- messageDesc(file_billing_v1_billing, 194);
7209
+ messageDesc(file_billing_v1_billing, 188);
7524
7210
 
7525
7211
  /**
7526
7212
  * @generated from message blueapi.billing.v1.ConvertInvoiceToPdfResponse
@@ -7545,7 +7231,7 @@ export type ConvertInvoiceToPdfResponse = Message<"blueapi.billing.v1.ConvertInv
7545
7231
  * Use `create(ConvertInvoiceToPdfResponseSchema)` to create a new message.
7546
7232
  */
7547
7233
  export const ConvertInvoiceToPdfResponseSchema: GenMessage<ConvertInvoiceToPdfResponse> = /*@__PURE__*/
7548
- messageDesc(file_billing_v1_billing, 195);
7234
+ messageDesc(file_billing_v1_billing, 189);
7549
7235
 
7550
7236
  /**
7551
7237
  * Request message for the Billing.ListBillingGroupsPaginated rpc.
@@ -7636,7 +7322,7 @@ export type ListBillingGroupsPaginatedRequest = Message<"blueapi.billing.v1.List
7636
7322
  * Use `create(ListBillingGroupsPaginatedRequestSchema)` to create a new message.
7637
7323
  */
7638
7324
  export const ListBillingGroupsPaginatedRequestSchema: GenMessage<ListBillingGroupsPaginatedRequest> = /*@__PURE__*/
7639
- messageDesc(file_billing_v1_billing, 196);
7325
+ messageDesc(file_billing_v1_billing, 190);
7640
7326
 
7641
7327
  /**
7642
7328
  * Response row for paginated billing groups table.
@@ -7692,7 +7378,7 @@ export type BillingGroupListItem = Message<"blueapi.billing.v1.BillingGroupListI
7692
7378
  * Use `create(BillingGroupListItemSchema)` to create a new message.
7693
7379
  */
7694
7380
  export const BillingGroupListItemSchema: GenMessage<BillingGroupListItem> = /*@__PURE__*/
7695
- messageDesc(file_billing_v1_billing, 197);
7381
+ messageDesc(file_billing_v1_billing, 191);
7696
7382
 
7697
7383
  /**
7698
7384
  * Vendor availability entries.
@@ -7720,7 +7406,7 @@ export type BillingGroupListItem_BillingGroupVendor = Message<"blueapi.billing.v
7720
7406
  * Use `create(BillingGroupListItem_BillingGroupVendorSchema)` to create a new message.
7721
7407
  */
7722
7408
  export const BillingGroupListItem_BillingGroupVendorSchema: GenMessage<BillingGroupListItem_BillingGroupVendor> = /*@__PURE__*/
7723
- messageDesc(file_billing_v1_billing, 197, 0);
7409
+ messageDesc(file_billing_v1_billing, 191, 0);
7724
7410
 
7725
7411
  /**
7726
7412
  * Response message for the Billing.ListBillingGroupsPaginated rpc.
@@ -7769,7 +7455,7 @@ export type ListBillingGroupsPaginatedResponse = Message<"blueapi.billing.v1.Lis
7769
7455
  * Use `create(ListBillingGroupsPaginatedResponseSchema)` to create a new message.
7770
7456
  */
7771
7457
  export const ListBillingGroupsPaginatedResponseSchema: GenMessage<ListBillingGroupsPaginatedResponse> = /*@__PURE__*/
7772
- messageDesc(file_billing_v1_billing, 198);
7458
+ messageDesc(file_billing_v1_billing, 192);
7773
7459
 
7774
7460
  /**
7775
7461
  * @generated from message blueapi.billing.v1.ChildBillingGroupBasicInformation
@@ -7823,7 +7509,7 @@ export type ChildBillingGroupBasicInformation = Message<"blueapi.billing.v1.Chil
7823
7509
  * Use `create(ChildBillingGroupBasicInformationSchema)` to create a new message.
7824
7510
  */
7825
7511
  export const ChildBillingGroupBasicInformationSchema: GenMessage<ChildBillingGroupBasicInformation> = /*@__PURE__*/
7826
- messageDesc(file_billing_v1_billing, 199);
7512
+ messageDesc(file_billing_v1_billing, 193);
7827
7513
 
7828
7514
  /**
7829
7515
  * @generated from message blueapi.billing.v1.CustomizedBillingServiceBillingGroup
@@ -7863,7 +7549,7 @@ export type CustomizedBillingServiceBillingGroup = Message<"blueapi.billing.v1.C
7863
7549
  * Use `create(CustomizedBillingServiceBillingGroupSchema)` to create a new message.
7864
7550
  */
7865
7551
  export const CustomizedBillingServiceBillingGroupSchema: GenMessage<CustomizedBillingServiceBillingGroup> = /*@__PURE__*/
7866
- messageDesc(file_billing_v1_billing, 200);
7552
+ messageDesc(file_billing_v1_billing, 194);
7867
7553
 
7868
7554
  /**
7869
7555
  * Contains basic information and invoice settings related data.
@@ -7907,7 +7593,7 @@ export type ChildBillingGroup = Message<"blueapi.billing.v1.ChildBillingGroup">
7907
7593
  * Use `create(ChildBillingGroupSchema)` to create a new message.
7908
7594
  */
7909
7595
  export const ChildBillingGroupSchema: GenMessage<ChildBillingGroup> = /*@__PURE__*/
7910
- messageDesc(file_billing_v1_billing, 201);
7596
+ messageDesc(file_billing_v1_billing, 195);
7911
7597
 
7912
7598
  /**
7913
7599
  * @generated from message blueapi.billing.v1.ChildBillingGroupInvoiceSettings
@@ -7945,7 +7631,7 @@ export type ChildBillingGroupInvoiceSettings = Message<"blueapi.billing.v1.Child
7945
7631
  * Use `create(ChildBillingGroupInvoiceSettingsSchema)` to create a new message.
7946
7632
  */
7947
7633
  export const ChildBillingGroupInvoiceSettingsSchema: GenMessage<ChildBillingGroupInvoiceSettings> = /*@__PURE__*/
7948
- messageDesc(file_billing_v1_billing, 202);
7634
+ messageDesc(file_billing_v1_billing, 196);
7949
7635
 
7950
7636
  /**
7951
7637
  * @generated from message blueapi.billing.v1.CreateChildBillingGroupRequest
@@ -7985,7 +7671,7 @@ export type CreateChildBillingGroupRequest = Message<"blueapi.billing.v1.CreateC
7985
7671
  * Use `create(CreateChildBillingGroupRequestSchema)` to create a new message.
7986
7672
  */
7987
7673
  export const CreateChildBillingGroupRequestSchema: GenMessage<CreateChildBillingGroupRequest> = /*@__PURE__*/
7988
- messageDesc(file_billing_v1_billing, 203);
7674
+ messageDesc(file_billing_v1_billing, 197);
7989
7675
 
7990
7676
  /**
7991
7677
  * @generated from message blueapi.billing.v1.CreateChildBillingGroupResponse
@@ -7998,7 +7684,7 @@ export type CreateChildBillingGroupResponse = Message<"blueapi.billing.v1.Create
7998
7684
  * Use `create(CreateChildBillingGroupResponseSchema)` to create a new message.
7999
7685
  */
8000
7686
  export const CreateChildBillingGroupResponseSchema: GenMessage<CreateChildBillingGroupResponse> = /*@__PURE__*/
8001
- messageDesc(file_billing_v1_billing, 204);
7687
+ messageDesc(file_billing_v1_billing, 198);
8002
7688
 
8003
7689
  /**
8004
7690
  * @generated from message blueapi.billing.v1.GetChildBillingGroupRequest
@@ -8017,7 +7703,7 @@ export type GetChildBillingGroupRequest = Message<"blueapi.billing.v1.GetChildBi
8017
7703
  * Use `create(GetChildBillingGroupRequestSchema)` to create a new message.
8018
7704
  */
8019
7705
  export const GetChildBillingGroupRequestSchema: GenMessage<GetChildBillingGroupRequest> = /*@__PURE__*/
8020
- messageDesc(file_billing_v1_billing, 205);
7706
+ messageDesc(file_billing_v1_billing, 199);
8021
7707
 
8022
7708
  /**
8023
7709
  * @generated from message blueapi.billing.v1.GetChildBillingGroupResponse
@@ -8034,7 +7720,7 @@ export type GetChildBillingGroupResponse = Message<"blueapi.billing.v1.GetChildB
8034
7720
  * Use `create(GetChildBillingGroupResponseSchema)` to create a new message.
8035
7721
  */
8036
7722
  export const GetChildBillingGroupResponseSchema: GenMessage<GetChildBillingGroupResponse> = /*@__PURE__*/
8037
- messageDesc(file_billing_v1_billing, 206);
7723
+ messageDesc(file_billing_v1_billing, 200);
8038
7724
 
8039
7725
  /**
8040
7726
  * @generated from message blueapi.billing.v1.ReadChildBillingGroupsRequest
@@ -8062,7 +7748,7 @@ export type ReadChildBillingGroupsRequest = Message<"blueapi.billing.v1.ReadChil
8062
7748
  * Use `create(ReadChildBillingGroupsRequestSchema)` to create a new message.
8063
7749
  */
8064
7750
  export const ReadChildBillingGroupsRequestSchema: GenMessage<ReadChildBillingGroupsRequest> = /*@__PURE__*/
8065
- messageDesc(file_billing_v1_billing, 207);
7751
+ messageDesc(file_billing_v1_billing, 201);
8066
7752
 
8067
7753
  /**
8068
7754
  * @generated from message blueapi.billing.v1.UpdateChildBillingGroupRequest
@@ -8095,7 +7781,7 @@ export type UpdateChildBillingGroupRequest = Message<"blueapi.billing.v1.UpdateC
8095
7781
  * Use `create(UpdateChildBillingGroupRequestSchema)` to create a new message.
8096
7782
  */
8097
7783
  export const UpdateChildBillingGroupRequestSchema: GenMessage<UpdateChildBillingGroupRequest> = /*@__PURE__*/
8098
- messageDesc(file_billing_v1_billing, 208);
7784
+ messageDesc(file_billing_v1_billing, 202);
8099
7785
 
8100
7786
  /**
8101
7787
  * @generated from message blueapi.billing.v1.UpdateChildBillingGroupResponse
@@ -8108,7 +7794,7 @@ export type UpdateChildBillingGroupResponse = Message<"blueapi.billing.v1.Update
8108
7794
  * Use `create(UpdateChildBillingGroupResponseSchema)` to create a new message.
8109
7795
  */
8110
7796
  export const UpdateChildBillingGroupResponseSchema: GenMessage<UpdateChildBillingGroupResponse> = /*@__PURE__*/
8111
- messageDesc(file_billing_v1_billing, 209);
7797
+ messageDesc(file_billing_v1_billing, 203);
8112
7798
 
8113
7799
  /**
8114
7800
  * @generated from message blueapi.billing.v1.DeleteChildBillingGroupRequest
@@ -8127,7 +7813,7 @@ export type DeleteChildBillingGroupRequest = Message<"blueapi.billing.v1.DeleteC
8127
7813
  * Use `create(DeleteChildBillingGroupRequestSchema)` to create a new message.
8128
7814
  */
8129
7815
  export const DeleteChildBillingGroupRequestSchema: GenMessage<DeleteChildBillingGroupRequest> = /*@__PURE__*/
8130
- messageDesc(file_billing_v1_billing, 210);
7816
+ messageDesc(file_billing_v1_billing, 204);
8131
7817
 
8132
7818
  /**
8133
7819
  * @generated from message blueapi.billing.v1.DeleteChildBillingGroupResponse
@@ -8140,7 +7826,7 @@ export type DeleteChildBillingGroupResponse = Message<"blueapi.billing.v1.Delete
8140
7826
  * Use `create(DeleteChildBillingGroupResponseSchema)` to create a new message.
8141
7827
  */
8142
7828
  export const DeleteChildBillingGroupResponseSchema: GenMessage<DeleteChildBillingGroupResponse> = /*@__PURE__*/
8143
- messageDesc(file_billing_v1_billing, 211);
7829
+ messageDesc(file_billing_v1_billing, 205);
8144
7830
 
8145
7831
  /**
8146
7832
  * @generated from message blueapi.billing.v1.UpdateChildBillingGroupInvoiceSettingsRequest
@@ -8173,7 +7859,7 @@ export type UpdateChildBillingGroupInvoiceSettingsRequest = Message<"blueapi.bil
8173
7859
  * Use `create(UpdateChildBillingGroupInvoiceSettingsRequestSchema)` to create a new message.
8174
7860
  */
8175
7861
  export const UpdateChildBillingGroupInvoiceSettingsRequestSchema: GenMessage<UpdateChildBillingGroupInvoiceSettingsRequest> = /*@__PURE__*/
8176
- messageDesc(file_billing_v1_billing, 212);
7862
+ messageDesc(file_billing_v1_billing, 206);
8177
7863
 
8178
7864
  /**
8179
7865
  * @generated from message blueapi.billing.v1.UpdateChildBillingGroupInvoiceSettingsResponse
@@ -8186,266 +7872,667 @@ export type UpdateChildBillingGroupInvoiceSettingsResponse = Message<"blueapi.bi
8186
7872
  * Use `create(UpdateChildBillingGroupInvoiceSettingsResponseSchema)` to create a new message.
8187
7873
  */
8188
7874
  export const UpdateChildBillingGroupInvoiceSettingsResponseSchema: GenMessage<UpdateChildBillingGroupInvoiceSettingsResponse> = /*@__PURE__*/
8189
- messageDesc(file_billing_v1_billing, 213);
7875
+ messageDesc(file_billing_v1_billing, 207);
7876
+
7877
+ /**
7878
+ * @generated from message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest
7879
+ */
7880
+ export type SetChildBillingGroupCustomizedBillingServiceRequest = Message<"blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest"> & {
7881
+ /**
7882
+ * Required. internal id of the child billing group.
7883
+ *
7884
+ * @generated from field: string internalId = 1;
7885
+ */
7886
+ internalId: string;
7887
+
7888
+ /**
7889
+ * Required. At the moment, `aws` is supported.
7890
+ *
7891
+ * @generated from field: string vendor = 2;
7892
+ */
7893
+ vendor: string;
7894
+
7895
+ /**
7896
+ * Required. Root parent Id.
7897
+ *
7898
+ * @generated from field: string rootId = 3;
7899
+ */
7900
+ rootId: string;
7901
+
7902
+ /**
7903
+ * Required. customized billing service setting.
7904
+ *
7905
+ * @generated from field: repeated blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting setting = 4;
7906
+ */
7907
+ setting: SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSetting[];
7908
+ };
7909
+
7910
+ /**
7911
+ * Describes the message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.
7912
+ * Use `create(SetChildBillingGroupCustomizedBillingServiceRequestSchema)` to create a new message.
7913
+ */
7914
+ export const SetChildBillingGroupCustomizedBillingServiceRequestSchema: GenMessage<SetChildBillingGroupCustomizedBillingServiceRequest> = /*@__PURE__*/
7915
+ messageDesc(file_billing_v1_billing, 208);
7916
+
7917
+ /**
7918
+ * CustomizedBillingServiceBillingSetting
7919
+ *
7920
+ * @generated from message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting
7921
+ */
7922
+ export type SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSetting = Message<"blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting"> & {
7923
+ /**
7924
+ * Required. [blueapi.api.ripple.CustomizedBillingService.id]
7925
+ *
7926
+ * @generated from field: string id = 1;
7927
+ */
7928
+ id: string;
7929
+
7930
+ /**
7931
+ * Required. [blueapi.api.ripple.ChargingTarget]
7932
+ *
7933
+ * @generated from field: blueapi.api.ripple.ChargingTarget chargingTarget = 2;
7934
+ */
7935
+ chargingTarget: ChargingTarget;
7936
+
7937
+ /**
7938
+ * Optional. if chargingTarget is BILLINGGROUP, `accounts` is set emptty.
7939
+ *
7940
+ * Specify the accountIds. For example: [`accountId1`,`accountId2`,`accountId3`]
7941
+ *
7942
+ * @generated from field: repeated string accounts = 3;
7943
+ */
7944
+ accounts: string[];
7945
+ };
7946
+
7947
+ /**
7948
+ * Describes the message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting.
7949
+ * Use `create(SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSettingSchema)` to create a new message.
7950
+ */
7951
+ export const SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSettingSchema: GenMessage<SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSetting> = /*@__PURE__*/
7952
+ messageDesc(file_billing_v1_billing, 208, 0);
7953
+
7954
+ /**
7955
+ * @generated from message blueapi.billing.v1.SetChildBillingGroupInvoiceServiceDiscountsRequest
7956
+ */
7957
+ export type SetChildBillingGroupInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.SetChildBillingGroupInvoiceServiceDiscountsRequest"> & {
7958
+ /**
7959
+ * Required. Internal Id of the child billing group.
7960
+ *
7961
+ * @generated from field: string internalId = 1;
7962
+ */
7963
+ internalId: string;
7964
+
7965
+ /**
7966
+ * Required.
7967
+ *
7968
+ * Service discount id.
7969
+ *
7970
+ * @generated from field: string id = 2;
7971
+ */
7972
+ id: string;
7973
+ };
7974
+
7975
+ /**
7976
+ * Describes the message blueapi.billing.v1.SetChildBillingGroupInvoiceServiceDiscountsRequest.
7977
+ * Use `create(SetChildBillingGroupInvoiceServiceDiscountsRequestSchema)` to create a new message.
7978
+ */
7979
+ export const SetChildBillingGroupInvoiceServiceDiscountsRequestSchema: GenMessage<SetChildBillingGroupInvoiceServiceDiscountsRequest> = /*@__PURE__*/
7980
+ messageDesc(file_billing_v1_billing, 209);
7981
+
7982
+ /**
7983
+ * @generated from message blueapi.billing.v1.SetChildBillingGroupAccountInvoiceServiceDiscountsRequest
7984
+ */
7985
+ export type SetChildBillingGroupAccountInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.SetChildBillingGroupAccountInvoiceServiceDiscountsRequest"> & {
7986
+ /**
7987
+ * Required. child billing group's internal Id.
7988
+ *
7989
+ * @generated from field: string internalId = 1;
7990
+ */
7991
+ internalId: string;
7992
+
7993
+ /**
7994
+ * Required.
7995
+ *
7996
+ * @generated from field: repeated blueapi.billing.v1.AccountServiceDiscounts accounts = 2;
7997
+ */
7998
+ accounts: AccountServiceDiscounts[];
7999
+ };
8000
+
8001
+ /**
8002
+ * Describes the message blueapi.billing.v1.SetChildBillingGroupAccountInvoiceServiceDiscountsRequest.
8003
+ * Use `create(SetChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema)` to create a new message.
8004
+ */
8005
+ export const SetChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema: GenMessage<SetChildBillingGroupAccountInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8006
+ messageDesc(file_billing_v1_billing, 210);
8007
+
8008
+ /**
8009
+ * @generated from message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceRequest
8010
+ */
8011
+ export type GetChildBillingGroupCustomizedBillingServiceRequest = Message<"blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceRequest"> & {
8012
+ /**
8013
+ * Required. Internal Id
8014
+ *
8015
+ * @generated from field: string internalId = 1;
8016
+ */
8017
+ internalId: string;
8018
+
8019
+ /**
8020
+ * Required. At the moment, `aws` is supported.
8021
+ *
8022
+ * @generated from field: string vendor = 2;
8023
+ */
8024
+ vendor: string;
8025
+ };
8026
+
8027
+ /**
8028
+ * Describes the message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceRequest.
8029
+ * Use `create(GetChildBillingGroupCustomizedBillingServiceRequestSchema)` to create a new message.
8030
+ */
8031
+ export const GetChildBillingGroupCustomizedBillingServiceRequestSchema: GenMessage<GetChildBillingGroupCustomizedBillingServiceRequest> = /*@__PURE__*/
8032
+ messageDesc(file_billing_v1_billing, 211);
8033
+
8034
+ /**
8035
+ * @generated from message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceResponse
8036
+ */
8037
+ export type GetChildBillingGroupCustomizedBillingServiceResponse = Message<"blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceResponse"> & {
8038
+ /**
8039
+ * Required. [blueapi.api.ripple.CustomizedBillingService.id]
8040
+ *
8041
+ * @generated from field: string id = 1;
8042
+ */
8043
+ id: string;
8044
+
8045
+ /**
8046
+ * Required. vendor that applied to the CustomizedBillingService config.
8047
+ *
8048
+ * @generated from field: string vendor = 2;
8049
+ */
8050
+ vendor: string;
8051
+
8052
+ /**
8053
+ * Required. [blueapi.api.ripple.ChargingTarget]
8054
+ *
8055
+ * @generated from field: blueapi.api.ripple.ChargingTarget chargingTarget = 3;
8056
+ */
8057
+ chargingTarget: ChargingTarget;
8058
+
8059
+ /**
8060
+ * Optional. accounts that applied to the CustomizedBillingService config.
8061
+ *
8062
+ * @generated from field: repeated blueapi.api.Account accounts = 4;
8063
+ */
8064
+ accounts: Account[];
8065
+ };
8066
+
8067
+ /**
8068
+ * Describes the message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceResponse.
8069
+ * Use `create(GetChildBillingGroupCustomizedBillingServiceResponseSchema)` to create a new message.
8070
+ */
8071
+ export const GetChildBillingGroupCustomizedBillingServiceResponseSchema: GenMessage<GetChildBillingGroupCustomizedBillingServiceResponse> = /*@__PURE__*/
8072
+ messageDesc(file_billing_v1_billing, 212);
8073
+
8074
+ /**
8075
+ * @generated from message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsRequest
8076
+ */
8077
+ export type GetChildBillingGroupInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsRequest"> & {
8078
+ /**
8079
+ * Required. Child Billing Group Internal Id
8080
+ *
8081
+ * @generated from field: string internalId = 1;
8082
+ */
8083
+ internalId: string;
8084
+ };
8085
+
8086
+ /**
8087
+ * Describes the message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsRequest.
8088
+ * Use `create(GetChildBillingGroupInvoiceServiceDiscountsRequestSchema)` to create a new message.
8089
+ */
8090
+ export const GetChildBillingGroupInvoiceServiceDiscountsRequestSchema: GenMessage<GetChildBillingGroupInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8091
+ messageDesc(file_billing_v1_billing, 213);
8092
+
8093
+ /**
8094
+ * @generated from message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsResponse
8095
+ */
8096
+ export type GetChildBillingGroupInvoiceServiceDiscountsResponse = Message<"blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsResponse"> & {
8097
+ /**
8098
+ * Service discount id
8099
+ *
8100
+ * @generated from field: string id = 1;
8101
+ */
8102
+ id: string;
8103
+ };
8104
+
8105
+ /**
8106
+ * Describes the message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsResponse.
8107
+ * Use `create(GetChildBillingGroupInvoiceServiceDiscountsResponseSchema)` to create a new message.
8108
+ */
8109
+ export const GetChildBillingGroupInvoiceServiceDiscountsResponseSchema: GenMessage<GetChildBillingGroupInvoiceServiceDiscountsResponse> = /*@__PURE__*/
8110
+ messageDesc(file_billing_v1_billing, 214);
8111
+
8112
+ /**
8113
+ * @generated from message blueapi.billing.v1.ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest
8114
+ */
8115
+ export type ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest"> & {
8116
+ /**
8117
+ * Required. Child Billing Group Internal Id
8118
+ *
8119
+ * @generated from field: string internalId = 1;
8120
+ */
8121
+ internalId: string;
8122
+ };
8123
+
8124
+ /**
8125
+ * Describes the message blueapi.billing.v1.ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest.
8126
+ * Use `create(ReadChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema)` to create a new message.
8127
+ */
8128
+ export const ReadChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema: GenMessage<ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8129
+ messageDesc(file_billing_v1_billing, 215);
8130
+
8131
+ /**
8132
+ * @generated from message blueapi.billing.v1.BulkCreateBillingGroupRequest
8133
+ */
8134
+ export type BulkCreateBillingGroupRequest = Message<"blueapi.billing.v1.BulkCreateBillingGroupRequest"> & {
8135
+ /**
8136
+ * Required. The cloud vendor for all billing groups in this CSV.
8137
+ * Must be one of: aws, azure, gcp.
8138
+ *
8139
+ * @generated from field: string vendor = 5;
8140
+ */
8141
+ vendor: string;
8142
+
8143
+ /**
8144
+ * Required. The CSV file content as bytes.
8145
+ *
8146
+ * @generated from field: bytes csvContent = 1;
8147
+ */
8148
+ csvContent: Uint8Array;
8149
+
8150
+ /**
8151
+ * Optional. The delimiter used in the CSV file. Defaults to comma (,).
8152
+ *
8153
+ * @generated from field: string delimiter = 2;
8154
+ */
8155
+ delimiter: string;
8156
+
8157
+ /**
8158
+ * Optional. Whether the CSV file has a header row. Defaults to true.
8159
+ *
8160
+ * @generated from field: bool hasHeader = 3;
8161
+ */
8162
+ hasHeader: boolean;
8163
+
8164
+ /**
8165
+ * Optional. If true, validate the CSV and check for errors without actually creating billing groups.
8166
+ * Useful for validating CSV format and data before performing the actual bulk creation.
8167
+ *
8168
+ * @generated from field: bool dryRun = 4;
8169
+ */
8170
+ dryRun: boolean;
8171
+ };
8172
+
8173
+ /**
8174
+ * Describes the message blueapi.billing.v1.BulkCreateBillingGroupRequest.
8175
+ * Use `create(BulkCreateBillingGroupRequestSchema)` to create a new message.
8176
+ */
8177
+ export const BulkCreateBillingGroupRequestSchema: GenMessage<BulkCreateBillingGroupRequest> = /*@__PURE__*/
8178
+ messageDesc(file_billing_v1_billing, 216);
8179
+
8180
+ /**
8181
+ * @generated from message blueapi.billing.v1.BulkCreateBillingGroupError
8182
+ */
8183
+ export type BulkCreateBillingGroupError = Message<"blueapi.billing.v1.BulkCreateBillingGroupError"> & {
8184
+ /**
8185
+ * The index of the row that failed (zero-based).
8186
+ *
8187
+ * @generated from field: int32 index = 1;
8188
+ */
8189
+ index: number;
8190
+
8191
+ /**
8192
+ * The billing group ID that failed to create.
8193
+ *
8194
+ * @generated from field: string billingGroupId = 2;
8195
+ */
8196
+ billingGroupId: string;
8197
+
8198
+ /**
8199
+ * Error message.
8200
+ *
8201
+ * @generated from field: string message = 3;
8202
+ */
8203
+ message: string;
8204
+ };
8205
+
8206
+ /**
8207
+ * Describes the message blueapi.billing.v1.BulkCreateBillingGroupError.
8208
+ * Use `create(BulkCreateBillingGroupErrorSchema)` to create a new message.
8209
+ */
8210
+ export const BulkCreateBillingGroupErrorSchema: GenMessage<BulkCreateBillingGroupError> = /*@__PURE__*/
8211
+ messageDesc(file_billing_v1_billing, 217);
8212
+
8213
+ /**
8214
+ * Metadata for the BulkCreateBillingGroup long-running operation.
8215
+ * Stored in protos.Operation.metadata.
8216
+ *
8217
+ * @generated from message blueapi.billing.v1.BulkCreateBillingGroupMetadata
8218
+ */
8219
+ export type BulkCreateBillingGroupMetadata = Message<"blueapi.billing.v1.BulkCreateBillingGroupMetadata"> & {
8220
+ /**
8221
+ * The current status: "pending", "processing", "completed", "partial_failed", "failed".
8222
+ *
8223
+ * @generated from field: string status = 1;
8224
+ */
8225
+ status: string;
8226
+
8227
+ /**
8228
+ * Total number of billing groups to create.
8229
+ *
8230
+ * @generated from field: int32 totalCount = 2;
8231
+ */
8232
+ totalCount: number;
8233
+
8234
+ /**
8235
+ * Number of billing groups processed so far.
8236
+ *
8237
+ * @generated from field: int32 processedCount = 3;
8238
+ */
8239
+ processedCount: number;
8240
+
8241
+ /**
8242
+ * Number of billing groups successfully created.
8243
+ *
8244
+ * @generated from field: int32 successCount = 4;
8245
+ */
8246
+ successCount: number;
8247
+
8248
+ /**
8249
+ * Number of billing groups that failed.
8250
+ *
8251
+ * @generated from field: int32 failureCount = 5;
8252
+ */
8253
+ failureCount: number;
8254
+
8255
+ /**
8256
+ * Details of failed billing groups.
8257
+ *
8258
+ * @generated from field: repeated blueapi.billing.v1.BulkCreateBillingGroupError errors = 6;
8259
+ */
8260
+ errors: BulkCreateBillingGroupError[];
8261
+
8262
+ /**
8263
+ * Job start timestamp (RFC 3339).
8264
+ *
8265
+ * @generated from field: string startTime = 7;
8266
+ */
8267
+ startTime: string;
8268
+
8269
+ /**
8270
+ * Job end timestamp. Empty if still running.
8271
+ *
8272
+ * @generated from field: string endTime = 8;
8273
+ */
8274
+ endTime: string;
8275
+
8276
+ /**
8277
+ * Per-row normalized Invoice Settings results, populated for dryRun requests and for
8278
+ * completed executions. Reused by BulkUpdateBillingGroupMetadata so Dry-run and execution
8279
+ * for both Create and Update share one row-result shape.
8280
+ *
8281
+ * @generated from field: repeated blueapi.billing.v1.BulkBillingGroupInvoiceSettingsRow rows = 9;
8282
+ */
8283
+ rows: BulkBillingGroupInvoiceSettingsRow[];
8284
+ };
8285
+
8286
+ /**
8287
+ * Describes the message blueapi.billing.v1.BulkCreateBillingGroupMetadata.
8288
+ * Use `create(BulkCreateBillingGroupMetadataSchema)` to create a new message.
8289
+ */
8290
+ export const BulkCreateBillingGroupMetadataSchema: GenMessage<BulkCreateBillingGroupMetadata> = /*@__PURE__*/
8291
+ messageDesc(file_billing_v1_billing, 218);
8292
+
8293
+ /**
8294
+ * A single Invoice Settings field's normalized value together with where that value came from.
8295
+ *
8296
+ * @generated from message blueapi.billing.v1.NormalizedInvoiceSettingField
8297
+ */
8298
+ export type NormalizedInvoiceSettingField = Message<"blueapi.billing.v1.NormalizedInvoiceSettingField"> & {
8299
+ /**
8300
+ * Canonical string-encoded normalized value. Empty if the setting has no value.
8301
+ *
8302
+ * @generated from field: string value = 1;
8303
+ */
8304
+ value: string;
8305
+
8306
+ /**
8307
+ * Where this value came from. One of: "uploaded", "existing", "default_derived",
8308
+ * "org_derived", "connection_resolved". "existing" means the value was carried
8309
+ * forward unchanged from the billing group's current stored state (the common case
8310
+ * for a blank Update CSV cell — see BulkUpdateBillingGroup's merge semantics).
8311
+ * Omitted (empty) if the server cannot determine a classification.
8312
+ * A field the Bulk CSV schema does not accept as an input column (e.g. support_amount_target)
8313
+ * must never be classified as "uploaded".
8314
+ *
8315
+ * @generated from field: string source = 2;
8316
+ */
8317
+ source: string;
8318
+ };
8319
+
8320
+ /**
8321
+ * Describes the message blueapi.billing.v1.NormalizedInvoiceSettingField.
8322
+ * Use `create(NormalizedInvoiceSettingFieldSchema)` to create a new message.
8323
+ */
8324
+ export const NormalizedInvoiceSettingFieldSchema: GenMessage<NormalizedInvoiceSettingField> = /*@__PURE__*/
8325
+ messageDesc(file_billing_v1_billing, 219);
8326
+
8327
+ /**
8328
+ * Server-normalized Invoice Settings for a single bulk row, as they will be (Dry-run) or were
8329
+ * (execution) applied. Shared by BulkCreateBillingGroup and BulkUpdateBillingGroup results.
8330
+ *
8331
+ * @generated from message blueapi.billing.v1.NormalizedInvoiceSettings
8332
+ */
8333
+ export type NormalizedInvoiceSettings = Message<"blueapi.billing.v1.NormalizedInvoiceSettings"> & {
8334
+ /**
8335
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField calcType = 1;
8336
+ */
8337
+ calcType?: NormalizedInvoiceSettingField;
8338
+
8339
+ /**
8340
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField displayCost = 2;
8341
+ */
8342
+ displayCost?: NormalizedInvoiceSettingField;
8343
+
8344
+ /**
8345
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField supportAmountTarget = 3;
8346
+ */
8347
+ supportAmountTarget?: NormalizedInvoiceSettingField;
8348
+
8349
+ /**
8350
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField supportFeeCalcTarget = 4;
8351
+ */
8352
+ supportFeeCalcTarget?: NormalizedInvoiceSettingField;
8190
8353
 
8191
- /**
8192
- * @generated from message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest
8193
- */
8194
- export type SetChildBillingGroupCustomizedBillingServiceRequest = Message<"blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest"> & {
8195
8354
  /**
8196
- * Required. internal id of the child billing group.
8197
- *
8198
- * @generated from field: string internalId = 1;
8355
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField substitutionFeeCalcTarget = 5;
8199
8356
  */
8200
- internalId: string;
8357
+ substitutionFeeCalcTarget?: NormalizedInvoiceSettingField;
8201
8358
 
8202
8359
  /**
8203
- * Required. At the moment, `aws` is supported.
8204
- *
8205
- * @generated from field: string vendor = 2;
8360
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField invoiceTemplate = 6;
8206
8361
  */
8207
- vendor: string;
8362
+ invoiceTemplate?: NormalizedInvoiceSettingField;
8208
8363
 
8209
8364
  /**
8210
- * Required. Root parent Id.
8211
- *
8212
- * @generated from field: string rootId = 3;
8365
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField customService = 7;
8213
8366
  */
8214
- rootId: string;
8367
+ customService?: NormalizedInvoiceSettingField;
8215
8368
 
8216
8369
  /**
8217
- * Required. customized billing service setting.
8370
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField serviceDiscounts = 8;
8371
+ */
8372
+ serviceDiscounts?: NormalizedInvoiceSettingField;
8373
+
8374
+ /**
8375
+ * Complete per-vendor normalized invoice settings. These fields are additive;
8376
+ * fields 1-8 above retain their original numbers.
8218
8377
  *
8219
- * @generated from field: repeated blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting setting = 4;
8378
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField currency = 9;
8220
8379
  */
8221
- setting: SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSetting[];
8222
- };
8380
+ currency?: NormalizedInvoiceSettingField;
8223
8381
 
8224
- /**
8225
- * Describes the message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.
8226
- * Use `create(SetChildBillingGroupCustomizedBillingServiceRequestSchema)` to create a new message.
8227
- */
8228
- export const SetChildBillingGroupCustomizedBillingServiceRequestSchema: GenMessage<SetChildBillingGroupCustomizedBillingServiceRequest> = /*@__PURE__*/
8229
- messageDesc(file_billing_v1_billing, 214);
8382
+ /**
8383
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField taxRate = 10;
8384
+ */
8385
+ taxRate?: NormalizedInvoiceSettingField;
8230
8386
 
8231
- /**
8232
- * CustomizedBillingServiceBillingSetting
8233
- *
8234
- * @generated from message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting
8235
- */
8236
- export type SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSetting = Message<"blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting"> & {
8237
8387
  /**
8238
- * Required. [blueapi.api.ripple.CustomizedBillingService.id]
8239
- *
8240
- * @generated from field: string id = 1;
8388
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField discountRate = 11;
8241
8389
  */
8242
- id: string;
8390
+ discountRate?: NormalizedInvoiceSettingField;
8243
8391
 
8244
8392
  /**
8245
- * Required. [blueapi.api.ripple.ChargingTarget]
8246
- *
8247
- * @generated from field: blueapi.api.ripple.ChargingTarget chargingTarget = 2;
8393
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField discountTargetUsage = 12;
8248
8394
  */
8249
- chargingTarget: ChargingTarget;
8395
+ discountTargetUsage?: NormalizedInvoiceSettingField;
8250
8396
 
8251
8397
  /**
8252
- * Optional. if chargingTarget is BILLINGGROUP, `accounts` is set emptty.
8253
- *
8254
- * Specify the accountIds. For example: [`accountId1`,`accountId2`,`accountId3`]
8255
- *
8256
- * @generated from field: repeated string accounts = 3;
8398
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField discountCalcLogic = 13;
8257
8399
  */
8258
- accounts: string[];
8259
- };
8400
+ discountCalcLogic?: NormalizedInvoiceSettingField;
8260
8401
 
8261
- /**
8262
- * Describes the message blueapi.billing.v1.SetChildBillingGroupCustomizedBillingServiceRequest.CustomizedBillingServiceBillingSetting.
8263
- * Use `create(SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSettingSchema)` to create a new message.
8264
- */
8265
- export const SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSettingSchema: GenMessage<SetChildBillingGroupCustomizedBillingServiceRequest_CustomizedBillingServiceBillingSetting> = /*@__PURE__*/
8266
- messageDesc(file_billing_v1_billing, 214, 0);
8402
+ /**
8403
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField substitutionFee = 14;
8404
+ */
8405
+ substitutionFee?: NormalizedInvoiceSettingField;
8267
8406
 
8268
- /**
8269
- * @generated from message blueapi.billing.v1.SetChildBillingGroupInvoiceServiceDiscountsRequest
8270
- */
8271
- export type SetChildBillingGroupInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.SetChildBillingGroupInvoiceServiceDiscountsRequest"> & {
8272
8407
  /**
8273
- * Required. Internal Id of the child billing group.
8274
- *
8275
- * @generated from field: string internalId = 1;
8408
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField substitutionRate = 15;
8276
8409
  */
8277
- internalId: string;
8410
+ substitutionRate?: NormalizedInvoiceSettingField;
8278
8411
 
8279
8412
  /**
8280
- * Required.
8281
- *
8282
- * Service discount id.
8283
- *
8284
- * @generated from field: string id = 2;
8413
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField substitutionFix = 16;
8285
8414
  */
8286
- id: string;
8287
- };
8415
+ substitutionFix?: NormalizedInvoiceSettingField;
8288
8416
 
8289
- /**
8290
- * Describes the message blueapi.billing.v1.SetChildBillingGroupInvoiceServiceDiscountsRequest.
8291
- * Use `create(SetChildBillingGroupInvoiceServiceDiscountsRequestSchema)` to create a new message.
8292
- */
8293
- export const SetChildBillingGroupInvoiceServiceDiscountsRequestSchema: GenMessage<SetChildBillingGroupInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8294
- messageDesc(file_billing_v1_billing, 215);
8417
+ /**
8418
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField substitutionFeeTargetUsage = 17;
8419
+ */
8420
+ substitutionFeeTargetUsage?: NormalizedInvoiceSettingField;
8295
8421
 
8296
- /**
8297
- * @generated from message blueapi.billing.v1.SetChildBillingGroupAccountInvoiceServiceDiscountsRequest
8298
- */
8299
- export type SetChildBillingGroupAccountInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.SetChildBillingGroupAccountInvoiceServiceDiscountsRequest"> & {
8300
8422
  /**
8301
- * Required. child billing group's internal Id.
8302
- *
8303
- * @generated from field: string internalId = 1;
8423
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField substitutionFeeCalcType = 18;
8304
8424
  */
8305
- internalId: string;
8425
+ substitutionFeeCalcType?: NormalizedInvoiceSettingField;
8306
8426
 
8307
8427
  /**
8308
- * Required.
8309
- *
8310
- * @generated from field: repeated blueapi.billing.v1.AccountServiceDiscounts accounts = 2;
8428
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField supportFee = 19;
8311
8429
  */
8312
- accounts: AccountServiceDiscounts[];
8313
- };
8430
+ supportFee?: NormalizedInvoiceSettingField;
8314
8431
 
8315
- /**
8316
- * Describes the message blueapi.billing.v1.SetChildBillingGroupAccountInvoiceServiceDiscountsRequest.
8317
- * Use `create(SetChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema)` to create a new message.
8318
- */
8319
- export const SetChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema: GenMessage<SetChildBillingGroupAccountInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8320
- messageDesc(file_billing_v1_billing, 216);
8432
+ /**
8433
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField supportRate = 20;
8434
+ */
8435
+ supportRate?: NormalizedInvoiceSettingField;
8321
8436
 
8322
- /**
8323
- * @generated from message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceRequest
8324
- */
8325
- export type GetChildBillingGroupCustomizedBillingServiceRequest = Message<"blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceRequest"> & {
8326
8437
  /**
8327
- * Required. Internal Id
8328
- *
8329
- * @generated from field: string internalId = 1;
8438
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField supportFix = 21;
8330
8439
  */
8331
- internalId: string;
8440
+ supportFix?: NormalizedInvoiceSettingField;
8332
8441
 
8333
8442
  /**
8334
- * Required. At the moment, `aws` is supported.
8335
- *
8336
- * @generated from field: string vendor = 2;
8443
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettingField supportFeeAdjustment = 22;
8337
8444
  */
8338
- vendor: string;
8445
+ supportFeeAdjustment?: NormalizedInvoiceSettingField;
8339
8446
  };
8340
8447
 
8341
8448
  /**
8342
- * Describes the message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceRequest.
8343
- * Use `create(GetChildBillingGroupCustomizedBillingServiceRequestSchema)` to create a new message.
8449
+ * Describes the message blueapi.billing.v1.NormalizedInvoiceSettings.
8450
+ * Use `create(NormalizedInvoiceSettingsSchema)` to create a new message.
8344
8451
  */
8345
- export const GetChildBillingGroupCustomizedBillingServiceRequestSchema: GenMessage<GetChildBillingGroupCustomizedBillingServiceRequest> = /*@__PURE__*/
8346
- messageDesc(file_billing_v1_billing, 217);
8452
+ export const NormalizedInvoiceSettingsSchema: GenMessage<NormalizedInvoiceSettings> = /*@__PURE__*/
8453
+ messageDesc(file_billing_v1_billing, 220);
8347
8454
 
8348
8455
  /**
8349
- * @generated from message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceResponse
8456
+ * Per-row result for a bulk Create or Update Invoice Settings operation.
8457
+ *
8458
+ * @generated from message blueapi.billing.v1.BulkBillingGroupInvoiceSettingsRow
8350
8459
  */
8351
- export type GetChildBillingGroupCustomizedBillingServiceResponse = Message<"blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceResponse"> & {
8460
+ export type BulkBillingGroupInvoiceSettingsRow = Message<"blueapi.billing.v1.BulkBillingGroupInvoiceSettingsRow"> & {
8352
8461
  /**
8353
- * Required. [blueapi.api.ripple.CustomizedBillingService.id]
8462
+ * The canonical logical data-row index in the original CSV (zero-based,
8463
+ * excluding the header when hasHeader is true). This index is preserved for
8464
+ * valid rows, parse errors, and worker results; it is never compressed after
8465
+ * a malformed or missing row.
8354
8466
  *
8355
- * @generated from field: string id = 1;
8467
+ * @generated from field: int32 index = 1;
8356
8468
  */
8357
- id: string;
8469
+ index: number;
8358
8470
 
8359
8471
  /**
8360
- * Required. vendor that applied to the CustomizedBillingService config.
8472
+ * The billing group ID. For Update, the resolved existing billing group. For Create,
8473
+ * populated once known (empty for a row that has not yet been processed on a dryRun).
8361
8474
  *
8362
- * @generated from field: string vendor = 2;
8475
+ * @generated from field: string billingGroupId = 2;
8363
8476
  */
8364
- vendor: string;
8477
+ billingGroupId: string;
8365
8478
 
8366
8479
  /**
8367
- * Required. [blueapi.api.ripple.ChargingTarget]
8480
+ * Row status: "valid" (Dry-run row ready), "invalid" (parse/validation failure),
8481
+ * "not_found" (referenced billing group does not exist), "updated" (execution
8482
+ * succeeded), "failed" (row-level failure during execution). "created" is reserved
8483
+ * for the Create side of this shared row-result shape.
8368
8484
  *
8369
- * @generated from field: blueapi.api.ripple.ChargingTarget chargingTarget = 3;
8485
+ * @generated from field: string status = 3;
8370
8486
  */
8371
- chargingTarget: ChargingTarget;
8487
+ status: string;
8372
8488
 
8373
8489
  /**
8374
- * Optional. accounts that applied to the CustomizedBillingService config.
8490
+ * Human-readable error message(s) for this row, if any.
8375
8491
  *
8376
- * @generated from field: repeated blueapi.api.Account accounts = 4;
8492
+ * @generated from field: repeated string errors = 4;
8377
8493
  */
8378
- accounts: Account[];
8379
- };
8380
-
8381
- /**
8382
- * Describes the message blueapi.billing.v1.GetChildBillingGroupCustomizedBillingServiceResponse.
8383
- * Use `create(GetChildBillingGroupCustomizedBillingServiceResponseSchema)` to create a new message.
8384
- */
8385
- export const GetChildBillingGroupCustomizedBillingServiceResponseSchema: GenMessage<GetChildBillingGroupCustomizedBillingServiceResponse> = /*@__PURE__*/
8386
- messageDesc(file_billing_v1_billing, 218);
8494
+ errors: string[];
8387
8495
 
8388
- /**
8389
- * @generated from message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsRequest
8390
- */
8391
- export type GetChildBillingGroupInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsRequest"> & {
8392
8496
  /**
8393
- * Required. Child Billing Group Internal Id
8497
+ * The normalized Invoice Settings this row will produce (dryRun) or produced (execution).
8394
8498
  *
8395
- * @generated from field: string internalId = 1;
8499
+ * @generated from field: blueapi.billing.v1.NormalizedInvoiceSettings normalizedSettings = 5;
8396
8500
  */
8397
- internalId: string;
8398
- };
8399
-
8400
- /**
8401
- * Describes the message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsRequest.
8402
- * Use `create(GetChildBillingGroupInvoiceServiceDiscountsRequestSchema)` to create a new message.
8403
- */
8404
- export const GetChildBillingGroupInvoiceServiceDiscountsRequestSchema: GenMessage<GetChildBillingGroupInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8405
- messageDesc(file_billing_v1_billing, 219);
8501
+ normalizedSettings?: NormalizedInvoiceSettings;
8406
8502
 
8407
- /**
8408
- * @generated from message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsResponse
8409
- */
8410
- export type GetChildBillingGroupInvoiceServiceDiscountsResponse = Message<"blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsResponse"> & {
8411
8503
  /**
8412
- * Service discount id
8504
+ * Explicit row disposition. Values: "ready" (Dry-run row will update), "invalid"
8505
+ * (parse/validation failure), "not_found" (referenced billing group does not exist),
8506
+ * "connection_resolution_failed" (service-discount connection resolution failed),
8507
+ * "unsupported_field" (a requested setting is not supported, e.g. non-blank
8508
+ * custom_service), "updated" (execution succeeded), "failed" (any other row-level
8509
+ * execution failure). It is separate from status so a terminal operation status
8510
+ * cannot be mistaken for row success.
8413
8511
  *
8414
- * @generated from field: string id = 1;
8512
+ * @generated from field: string disposition = 6;
8415
8513
  */
8416
- id: string;
8417
- };
8418
-
8419
- /**
8420
- * Describes the message blueapi.billing.v1.GetChildBillingGroupInvoiceServiceDiscountsResponse.
8421
- * Use `create(GetChildBillingGroupInvoiceServiceDiscountsResponseSchema)` to create a new message.
8422
- */
8423
- export const GetChildBillingGroupInvoiceServiceDiscountsResponseSchema: GenMessage<GetChildBillingGroupInvoiceServiceDiscountsResponse> = /*@__PURE__*/
8424
- messageDesc(file_billing_v1_billing, 220);
8514
+ disposition: string;
8425
8515
 
8426
- /**
8427
- * @generated from message blueapi.billing.v1.ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest
8428
- */
8429
- export type ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest = Message<"blueapi.billing.v1.ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest"> & {
8430
8516
  /**
8431
- * Required. Child Billing Group Internal Id
8517
+ * One-based physical CSV line number when known, including a header line.
8518
+ * Zero means the line number was not available.
8432
8519
  *
8433
- * @generated from field: string internalId = 1;
8520
+ * @generated from field: int32 csvLineNumber = 7;
8434
8521
  */
8435
- internalId: string;
8522
+ csvLineNumber: number;
8436
8523
  };
8437
8524
 
8438
8525
  /**
8439
- * Describes the message blueapi.billing.v1.ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest.
8440
- * Use `create(ReadChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema)` to create a new message.
8526
+ * Describes the message blueapi.billing.v1.BulkBillingGroupInvoiceSettingsRow.
8527
+ * Use `create(BulkBillingGroupInvoiceSettingsRowSchema)` to create a new message.
8441
8528
  */
8442
- export const ReadChildBillingGroupAccountInvoiceServiceDiscountsRequestSchema: GenMessage<ReadChildBillingGroupAccountInvoiceServiceDiscountsRequest> = /*@__PURE__*/
8529
+ export const BulkBillingGroupInvoiceSettingsRowSchema: GenMessage<BulkBillingGroupInvoiceSettingsRow> = /*@__PURE__*/
8443
8530
  messageDesc(file_billing_v1_billing, 221);
8444
8531
 
8445
8532
  /**
8446
- * @generated from message blueapi.billing.v1.BulkCreateBillingGroupRequest
8533
+ * @generated from message blueapi.billing.v1.BulkUpdateBillingGroupRequest
8447
8534
  */
8448
- export type BulkCreateBillingGroupRequest = Message<"blueapi.billing.v1.BulkCreateBillingGroupRequest"> & {
8535
+ export type BulkUpdateBillingGroupRequest = Message<"blueapi.billing.v1.BulkUpdateBillingGroupRequest"> & {
8449
8536
  /**
8450
8537
  * Required. The cloud vendor for all billing groups in this CSV.
8451
8538
  * Must be one of: aws, azure, gcp.
@@ -8469,15 +8556,21 @@ export type BulkCreateBillingGroupRequest = Message<"blueapi.billing.v1.BulkCrea
8469
8556
  delimiter: string;
8470
8557
 
8471
8558
  /**
8472
- * Optional. Whether the CSV file has a header row. Defaults to true.
8559
+ * Optional. Whether the first CSV line names the columns. When true, the first
8560
+ * line is read as a header and columns are matched by name. When false OR omitted
8561
+ * (proto3 scalar default), the CSV is interpreted using the canonical bulk-update
8562
+ * column order (the same order as the downloadable template, headerless).
8563
+ * Callers SHOULD set this field explicitly. Unlike BulkCreateBillingGroup — which
8564
+ * always interprets the first CSV line as a header — Bulk Update honors this field
8565
+ * as given, and the value is preserved on the async execution payload.
8473
8566
  *
8474
8567
  * @generated from field: bool hasHeader = 3;
8475
8568
  */
8476
8569
  hasHeader: boolean;
8477
8570
 
8478
8571
  /**
8479
- * Optional. If true, validate the CSV and check for errors without actually creating billing groups.
8480
- * Useful for validating CSV format and data before performing the actual bulk creation.
8572
+ * Optional. If true, validate the CSV and resolve/merge against existing billing group
8573
+ * state, returning the normalized result, without persisting any change.
8481
8574
  *
8482
8575
  * @generated from field: bool dryRun = 4;
8483
8576
  */
@@ -8485,25 +8578,28 @@ export type BulkCreateBillingGroupRequest = Message<"blueapi.billing.v1.BulkCrea
8485
8578
  };
8486
8579
 
8487
8580
  /**
8488
- * Describes the message blueapi.billing.v1.BulkCreateBillingGroupRequest.
8489
- * Use `create(BulkCreateBillingGroupRequestSchema)` to create a new message.
8581
+ * Describes the message blueapi.billing.v1.BulkUpdateBillingGroupRequest.
8582
+ * Use `create(BulkUpdateBillingGroupRequestSchema)` to create a new message.
8490
8583
  */
8491
- export const BulkCreateBillingGroupRequestSchema: GenMessage<BulkCreateBillingGroupRequest> = /*@__PURE__*/
8584
+ export const BulkUpdateBillingGroupRequestSchema: GenMessage<BulkUpdateBillingGroupRequest> = /*@__PURE__*/
8492
8585
  messageDesc(file_billing_v1_billing, 222);
8493
8586
 
8494
8587
  /**
8495
- * @generated from message blueapi.billing.v1.BulkCreateBillingGroupError
8588
+ * @generated from message blueapi.billing.v1.BulkUpdateBillingGroupError
8496
8589
  */
8497
- export type BulkCreateBillingGroupError = Message<"blueapi.billing.v1.BulkCreateBillingGroupError"> & {
8590
+ export type BulkUpdateBillingGroupError = Message<"blueapi.billing.v1.BulkUpdateBillingGroupError"> & {
8498
8591
  /**
8499
- * The index of the row that failed (zero-based).
8592
+ * The canonical logical data-row index of the failed row (zero-based, excluding
8593
+ * the header line when hasHeader is true). Same definition as
8594
+ * BulkBillingGroupInvoiceSettingsRow.index: preserved for parse errors and worker
8595
+ * results, never compressed after a malformed or missing row.
8500
8596
  *
8501
8597
  * @generated from field: int32 index = 1;
8502
8598
  */
8503
8599
  index: number;
8504
8600
 
8505
8601
  /**
8506
- * The billing group ID that failed to create.
8602
+ * The billing group ID from the failed row, if present in the CSV.
8507
8603
  *
8508
8604
  * @generated from field: string billingGroupId = 2;
8509
8605
  */
@@ -8515,22 +8611,33 @@ export type BulkCreateBillingGroupError = Message<"blueapi.billing.v1.BulkCreate
8515
8611
  * @generated from field: string message = 3;
8516
8612
  */
8517
8613
  message: string;
8614
+
8615
+ /**
8616
+ * Failure reason code: "not_found" (billing group does not exist),
8617
+ * "validation_failed" (CSV parse or validation failure),
8618
+ * "connection_resolution_failed" (service-discount connection resolution failed),
8619
+ * or "unsupported_field" (a requested setting is not supported, e.g. non-blank
8620
+ * custom_service).
8621
+ *
8622
+ * @generated from field: string reason = 4;
8623
+ */
8624
+ reason: string;
8518
8625
  };
8519
8626
 
8520
8627
  /**
8521
- * Describes the message blueapi.billing.v1.BulkCreateBillingGroupError.
8522
- * Use `create(BulkCreateBillingGroupErrorSchema)` to create a new message.
8628
+ * Describes the message blueapi.billing.v1.BulkUpdateBillingGroupError.
8629
+ * Use `create(BulkUpdateBillingGroupErrorSchema)` to create a new message.
8523
8630
  */
8524
- export const BulkCreateBillingGroupErrorSchema: GenMessage<BulkCreateBillingGroupError> = /*@__PURE__*/
8631
+ export const BulkUpdateBillingGroupErrorSchema: GenMessage<BulkUpdateBillingGroupError> = /*@__PURE__*/
8525
8632
  messageDesc(file_billing_v1_billing, 223);
8526
8633
 
8527
8634
  /**
8528
- * Metadata for the BulkCreateBillingGroup long-running operation.
8635
+ * Metadata for the BulkUpdateBillingGroup long-running operation.
8529
8636
  * Stored in protos.Operation.metadata.
8530
8637
  *
8531
- * @generated from message blueapi.billing.v1.BulkCreateBillingGroupMetadata
8638
+ * @generated from message blueapi.billing.v1.BulkUpdateBillingGroupMetadata
8532
8639
  */
8533
- export type BulkCreateBillingGroupMetadata = Message<"blueapi.billing.v1.BulkCreateBillingGroupMetadata"> & {
8640
+ export type BulkUpdateBillingGroupMetadata = Message<"blueapi.billing.v1.BulkUpdateBillingGroupMetadata"> & {
8534
8641
  /**
8535
8642
  * The current status: "pending", "processing", "completed", "partial_failed", "failed".
8536
8643
  *
@@ -8539,39 +8646,39 @@ export type BulkCreateBillingGroupMetadata = Message<"blueapi.billing.v1.BulkCre
8539
8646
  status: string;
8540
8647
 
8541
8648
  /**
8542
- * Total number of billing groups to create.
8649
+ * Total number of rows to process.
8543
8650
  *
8544
8651
  * @generated from field: int32 totalCount = 2;
8545
8652
  */
8546
8653
  totalCount: number;
8547
8654
 
8548
8655
  /**
8549
- * Number of billing groups processed so far.
8656
+ * Number of rows processed so far.
8550
8657
  *
8551
8658
  * @generated from field: int32 processedCount = 3;
8552
8659
  */
8553
8660
  processedCount: number;
8554
8661
 
8555
8662
  /**
8556
- * Number of billing groups successfully created.
8663
+ * Number of rows successfully updated.
8557
8664
  *
8558
8665
  * @generated from field: int32 successCount = 4;
8559
8666
  */
8560
8667
  successCount: number;
8561
8668
 
8562
8669
  /**
8563
- * Number of billing groups that failed.
8670
+ * Number of rows that failed (including not-found billing groups).
8564
8671
  *
8565
8672
  * @generated from field: int32 failureCount = 5;
8566
8673
  */
8567
8674
  failureCount: number;
8568
8675
 
8569
8676
  /**
8570
- * Details of failed billing groups.
8677
+ * Details of failed rows.
8571
8678
  *
8572
- * @generated from field: repeated blueapi.billing.v1.BulkCreateBillingGroupError errors = 6;
8679
+ * @generated from field: repeated blueapi.billing.v1.BulkUpdateBillingGroupError errors = 6;
8573
8680
  */
8574
- errors: BulkCreateBillingGroupError[];
8681
+ errors: BulkUpdateBillingGroupError[];
8575
8682
 
8576
8683
  /**
8577
8684
  * Job start timestamp (RFC 3339).
@@ -8586,13 +8693,21 @@ export type BulkCreateBillingGroupMetadata = Message<"blueapi.billing.v1.BulkCre
8586
8693
  * @generated from field: string endTime = 8;
8587
8694
  */
8588
8695
  endTime: string;
8696
+
8697
+ /**
8698
+ * Per-row normalized Invoice Settings results, populated for dryRun requests and for
8699
+ * completed executions.
8700
+ *
8701
+ * @generated from field: repeated blueapi.billing.v1.BulkBillingGroupInvoiceSettingsRow rows = 9;
8702
+ */
8703
+ rows: BulkBillingGroupInvoiceSettingsRow[];
8589
8704
  };
8590
8705
 
8591
8706
  /**
8592
- * Describes the message blueapi.billing.v1.BulkCreateBillingGroupMetadata.
8593
- * Use `create(BulkCreateBillingGroupMetadataSchema)` to create a new message.
8707
+ * Describes the message blueapi.billing.v1.BulkUpdateBillingGroupMetadata.
8708
+ * Use `create(BulkUpdateBillingGroupMetadataSchema)` to create a new message.
8594
8709
  */
8595
- export const BulkCreateBillingGroupMetadataSchema: GenMessage<BulkCreateBillingGroupMetadata> = /*@__PURE__*/
8710
+ export const BulkUpdateBillingGroupMetadataSchema: GenMessage<BulkUpdateBillingGroupMetadata> = /*@__PURE__*/
8596
8711
  messageDesc(file_billing_v1_billing, 224);
8597
8712
 
8598
8713
  /**
@@ -10611,17 +10726,19 @@ export const Billing: GenService<{
10611
10726
  output: typeof MonthlyMiscFeeImportTemplateSchema;
10612
10727
  },
10613
10728
  /**
10614
- * Validates or imports monthly miscellaneous fees from CSV.
10729
+ * Validates or imports monthly FreeFormItems from CSV through invoice settings. The CSV
10730
+ * supplies each row's own billing month, billing group, and vendor; there is no
10731
+ * request-level billing_month or vendor to scope the call.
10615
10732
  *
10616
10733
  * @generated from rpc blueapi.billing.v1.Billing.BulkImportMonthlyMiscFees
10617
10734
  */
10618
10735
  bulkImportMonthlyMiscFees: {
10619
10736
  methodKind: "unary";
10620
10737
  input: typeof BulkImportMonthlyMiscFeesRequestSchema;
10621
- output: typeof OperationSchema;
10738
+ output: typeof MonthlyMiscFeeImportResultSchema;
10622
10739
  },
10623
10740
  /**
10624
- * Lists monthly miscellaneous fee rows.
10741
+ * Lists effective monthly FreeFormItems.
10625
10742
  *
10626
10743
  * @generated from rpc blueapi.billing.v1.Billing.ListMonthlyMiscFees
10627
10744
  */
@@ -10631,47 +10748,7 @@ export const Billing: GenService<{
10631
10748
  output: typeof ListMonthlyMiscFeesResponseSchema;
10632
10749
  },
10633
10750
  /**
10634
- * Gets a monthly miscellaneous fee row.
10635
- *
10636
- * @generated from rpc blueapi.billing.v1.Billing.GetMonthlyMiscFee
10637
- */
10638
- getMonthlyMiscFee: {
10639
- methodKind: "unary";
10640
- input: typeof GetMonthlyMiscFeeRequestSchema;
10641
- output: typeof MonthlyMiscFeeSchema;
10642
- },
10643
- /**
10644
- * Exports monthly miscellaneous fee rows using the list filters.
10645
- *
10646
- * @generated from rpc blueapi.billing.v1.Billing.ExportMonthlyMiscFees
10647
- */
10648
- exportMonthlyMiscFees: {
10649
- methodKind: "unary";
10650
- input: typeof ExportMonthlyMiscFeesRequestSchema;
10651
- output: typeof ExportMonthlyMiscFeesResponseSchema;
10652
- },
10653
- /**
10654
- * Gets a completed monthly miscellaneous fee import result.
10655
- *
10656
- * @generated from rpc blueapi.billing.v1.Billing.GetMonthlyMiscFeeImport
10657
- */
10658
- getMonthlyMiscFeeImport: {
10659
- methodKind: "unary";
10660
- input: typeof GetMonthlyMiscFeeImportRequestSchema;
10661
- output: typeof MonthlyMiscFeeImportResultSchema;
10662
- },
10663
- /**
10664
- * Creates or updates a monthly miscellaneous fee row.
10665
- *
10666
- * @generated from rpc blueapi.billing.v1.Billing.UpsertMonthlyMiscFee
10667
- */
10668
- upsertMonthlyMiscFee: {
10669
- methodKind: "unary";
10670
- input: typeof UpsertMonthlyMiscFeeRequestSchema;
10671
- output: typeof MonthlyMiscFeeSchema;
10672
- },
10673
- /**
10674
- * Deletes a monthly miscellaneous fee row.
10751
+ * Deletes one monthly FreeFormItem through invoice settings.
10675
10752
  *
10676
10753
  * @generated from rpc blueapi.billing.v1.Billing.DeleteMonthlyMiscFee
10677
10754
  */
@@ -11025,6 +11102,20 @@ export const Billing: GenService<{
11025
11102
  input: typeof BulkCreateBillingGroupRequestSchema;
11026
11103
  output: typeof OperationSchema;
11027
11104
  },
11105
+ /**
11106
+ * Update invoice settings on existing billing groups in bulk from a CSV file.
11107
+ * Unlike BulkCreateBillingGroup, a blank CSV cell preserves the billing group's existing
11108
+ * value for that setting rather than clearing it, and a row referencing a billing group
11109
+ * that does not exist fails only that row (no implicit create).
11110
+ * Returns a long-running operation. Poll status via the Operations service (GET /ops/v1/{name}).
11111
+ *
11112
+ * @generated from rpc blueapi.billing.v1.Billing.BulkUpdateBillingGroup
11113
+ */
11114
+ bulkUpdateBillingGroup: {
11115
+ methodKind: "unary";
11116
+ input: typeof BulkUpdateBillingGroupRequestSchema;
11117
+ output: typeof OperationSchema;
11118
+ },
11028
11119
  /**
11029
11120
  * Create Exclude Service Entry
11030
11121
  *