From 40c9a52c4d81650820a065406c4593cadd8e8832 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 1 Jun 2026 17:08:50 -0400 Subject: [PATCH 1/5] StartEgress v2 --- protobufs/livekit_egress.proto | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index 37bb20f59..53b81309b 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -25,12 +25,7 @@ option ruby_package = "LiveKit::Proto"; service Egress { // Unified StartEgress RPC - // rpc StartEgress(StartEgressRequest) returns (EgressInfo); - rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo); - rpc StartWebEgress(WebEgressRequest) returns (EgressInfo); - rpc StartParticipantEgress(ParticipantEgressRequest) returns (EgressInfo); - rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo); - rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo); + rpc StartEgress(StartEgressRequest) returns (EgressInfo); // Update url/template or stream outputs // rpc UpdateEgress(UpdateEgressRequest) returns (EgressInfo); @@ -42,6 +37,13 @@ service Egress { // Stop a recording or stream rpc StopEgress(StopEgressRequest) returns (EgressInfo); + + // To be deprecated + rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo); + rpc StartWebEgress(WebEgressRequest) returns (EgressInfo); + rpc StartParticipantEgress(ParticipantEgressRequest) returns (EgressInfo); + rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo); + rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo); } // --- Core Request --- @@ -96,10 +98,11 @@ message MediaSource { oneof video { string video_track_id = 1 [(logger.name) = "videoTrackID"]; ParticipantVideo participant_video = 2; + // string layout = 3; } - AudioConfig audio = 3; - DataConfig data = 4; + AudioConfig audio = 4; + DataConfig data = 5; } message ParticipantVideo { @@ -371,7 +374,7 @@ message EgressInfo { int64 updated_at = 18; oneof request { - // StartEgressRequest egress = 29; + StartEgressRequest egress = 29; ExportReplayRequest replay = 30; RoomCompositeEgressRequest room_composite = 4; From 9f46388344cf5b6966a590c9ce030411a21418e5 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:09:53 +0000 Subject: [PATCH 2/5] generated protobuf --- livekit/livekit_egress.pb.go | 259 ++--- livekit/livekit_egress.twirp.go | 1584 ++++++++++++++++++------------- 2 files changed, 1072 insertions(+), 771 deletions(-) diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index 968918fcd..6cddefebd 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -928,8 +928,8 @@ type MediaSource struct { // *MediaSource_VideoTrackId // *MediaSource_ParticipantVideo Video isMediaSource_Video `protobuf_oneof:"video"` - Audio *AudioConfig `protobuf:"bytes,3,opt,name=audio,proto3" json:"audio,omitempty"` - Data *DataConfig `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + Audio *AudioConfig `protobuf:"bytes,4,opt,name=audio,proto3" json:"audio,omitempty"` + Data *DataConfig `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1012,7 +1012,7 @@ type MediaSource_VideoTrackId struct { } type MediaSource_ParticipantVideo struct { - ParticipantVideo *ParticipantVideo `protobuf:"bytes,2,opt,name=participant_video,json=participantVideo,proto3,oneof"` + ParticipantVideo *ParticipantVideo `protobuf:"bytes,2,opt,name=participant_video,json=participantVideo,proto3,oneof"` // string layout = 3; } func (*MediaSource_VideoTrackId) isMediaSource_Video() {} @@ -2849,6 +2849,7 @@ type EgressInfo struct { UpdatedAt int64 `protobuf:"varint,18,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Types that are valid to be assigned to Request: // + // *EgressInfo_Egress // *EgressInfo_Replay // *EgressInfo_RoomComposite // *EgressInfo_Web @@ -2971,6 +2972,15 @@ func (x *EgressInfo) GetRequest() isEgressInfo_Request { return nil } +func (x *EgressInfo) GetEgress() *StartEgressRequest { + if x != nil { + if x, ok := x.Request.(*EgressInfo_Egress); ok { + return x.Egress + } + } + return nil +} + func (x *EgressInfo) GetReplay() *ExportReplayRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Replay); ok { @@ -3136,8 +3146,11 @@ type isEgressInfo_Request interface { isEgressInfo_Request() } +type EgressInfo_Egress struct { + Egress *StartEgressRequest `protobuf:"bytes,29,opt,name=egress,proto3,oneof"` +} + type EgressInfo_Replay struct { - // StartEgressRequest egress = 29; Replay *ExportReplayRequest `protobuf:"bytes,30,opt,name=replay,proto3,oneof"` } @@ -3161,6 +3174,8 @@ type EgressInfo_Track struct { Track *TrackEgressRequest `protobuf:"bytes,6,opt,name=track,proto3,oneof"` } +func (*EgressInfo_Egress) isEgressInfo_Request() {} + func (*EgressInfo_Replay) isEgressInfo_Request() {} func (*EgressInfo_RoomComposite) isEgressInfo_Request() {} @@ -5363,8 +5378,8 @@ const file_livekit_egress_proto_rawDesc = "" + "\vMediaSource\x127\n" + "\x0evideo_track_id\x18\x01 \x01(\tB\x0f\xbaP\fvideoTrackIDH\x00R\fvideoTrackId\x12H\n" + "\x11participant_video\x18\x02 \x01(\v2\x19.livekit.ParticipantVideoH\x00R\x10participantVideo\x12*\n" + - "\x05audio\x18\x03 \x01(\v2\x14.livekit.AudioConfigR\x05audio\x12'\n" + - "\x04data\x18\x04 \x01(\v2\x13.livekit.DataConfigR\x04dataB\a\n" + + "\x05audio\x18\x04 \x01(\v2\x14.livekit.AudioConfigR\x05audio\x12'\n" + + "\x04data\x18\x05 \x01(\v2\x13.livekit.DataConfigR\x04dataB\a\n" + "\x05video\"^\n" + "\x10ParticipantVideo\x12\x1a\n" + "\bidentity\x18\x01 \x01(\tR\bidentity\x12.\n" + @@ -5510,7 +5525,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0fadd_stream_urls\x18\x04 \x03(\tR\raddStreamUrls\x12,\n" + "\x12remove_stream_urls\x18\x05 \x03(\tR\x10removeStreamUrls\"=\n" + "\x11StopEgressRequest\x12(\n" + - "\tegress_id\x18\x01 \x01(\tB\v\xbaP\begressIDR\begressId\"\xa8\n" + + "\tegress_id\x18\x01 \x01(\tB\v\xbaP\begressIDR\begressId\"\xdf\n" + "\n" + "\n" + "EgressInfo\x12(\n" + @@ -5525,7 +5540,8 @@ const file_livekit_egress_proto_rawDesc = "" + " \x01(\x03R\tstartedAt\x12\x19\n" + "\bended_at\x18\v \x01(\x03R\aendedAt\x12\x1d\n" + "\n" + - "updated_at\x18\x12 \x01(\x03R\tupdatedAt\x126\n" + + "updated_at\x18\x12 \x01(\x03R\tupdatedAt\x125\n" + + "\x06egress\x18\x1d \x01(\v2\x1b.livekit.StartEgressRequestH\x00R\x06egress\x126\n" + "\x06replay\x18\x1e \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12L\n" + "\x0eroom_composite\x18\x04 \x01(\v2#.livekit.RoomCompositeEgressRequestH\x00R\rroomComposite\x12-\n" + "\x03web\x18\x0e \x01(\v2\x19.livekit.WebEgressRequestH\x00R\x03web\x12E\n" + @@ -5775,19 +5791,20 @@ const file_livekit_egress_proto_rawDesc = "" + "\vAudioMixing\x12\x12\n" + "\x0eDEFAULT_MIXING\x10\x00\x12\x16\n" + "\x12DUAL_CHANNEL_AGENT\x10\x01\x12\x1a\n" + - "\x16DUAL_CHANNEL_ALTERNATE\x10\x022\x9c\x05\n" + - "\x06Egress\x12T\n" + - "\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12@\n" + - "\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\x12P\n" + - "\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\x12V\n" + - "\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12D\n" + - "\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\x12A\n" + + "\x16DUAL_CHANNEL_ALTERNATE\x10\x022\xdd\x05\n" + + "\x06Egress\x12?\n" + + "\vStartEgress\x12\x1b.livekit.StartEgressRequest\x1a\x13.livekit.EgressInfo\x12A\n" + "\fUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\x12A\n" + "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\x12E\n" + "\n" + "ListEgress\x12\x1a.livekit.ListEgressRequest\x1a\x1b.livekit.ListEgressResponse\x12=\n" + "\n" + - "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" + "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfo\x12T\n" + + "\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12@\n" + + "\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\x12P\n" + + "\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\x12V\n" + + "\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12D\n" + + "\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" var ( file_livekit_egress_proto_rawDescOnce sync.Once @@ -5915,109 +5932,112 @@ var file_livekit_egress_proto_depIdxs = []int32{ 60, // 45: livekit.ListEgressResponse.next_page_token:type_name -> livekit.TokenPagination 7, // 46: livekit.EgressInfo.source_type:type_name -> livekit.EgressSourceType 8, // 47: livekit.EgressInfo.status:type_name -> livekit.EgressStatus - 43, // 48: livekit.EgressInfo.replay:type_name -> livekit.ExportReplayRequest - 44, // 49: livekit.EgressInfo.room_composite:type_name -> livekit.RoomCompositeEgressRequest - 45, // 50: livekit.EgressInfo.web:type_name -> livekit.WebEgressRequest - 46, // 51: livekit.EgressInfo.participant:type_name -> livekit.ParticipantEgressRequest - 47, // 52: livekit.EgressInfo.track_composite:type_name -> livekit.TrackCompositeEgressRequest - 48, // 53: livekit.EgressInfo.track:type_name -> livekit.TrackEgressRequest - 37, // 54: livekit.EgressInfo.stream_results:type_name -> livekit.StreamInfo - 38, // 55: livekit.EgressInfo.file_results:type_name -> livekit.FileInfo - 39, // 56: livekit.EgressInfo.segment_results:type_name -> livekit.SegmentsInfo - 40, // 57: livekit.EgressInfo.image_results:type_name -> livekit.ImagesInfo - 53, // 58: livekit.EgressInfo.stream:type_name -> livekit.StreamInfoList - 38, // 59: livekit.EgressInfo.file:type_name -> livekit.FileInfo - 39, // 60: livekit.EgressInfo.segments:type_name -> livekit.SegmentsInfo - 10, // 61: livekit.StreamInfo.status:type_name -> livekit.StreamInfo.Status - 1, // 62: livekit.AutoParticipantEgress.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 63: livekit.AutoParticipantEgress.advanced:type_name -> livekit.EncodingOptions - 50, // 64: livekit.AutoParticipantEgress.file_outputs:type_name -> livekit.EncodedFileOutput - 24, // 65: livekit.AutoParticipantEgress.segment_outputs:type_name -> livekit.SegmentedFileOutput - 27, // 66: livekit.AutoTrackEgress.s3:type_name -> livekit.S3Upload - 28, // 67: livekit.AutoTrackEgress.gcp:type_name -> livekit.GCPUpload - 29, // 68: livekit.AutoTrackEgress.azure:type_name -> livekit.AzureBlobUpload - 30, // 69: livekit.AutoTrackEgress.aliOSS:type_name -> livekit.AliOSSUpload - 12, // 70: livekit.ExportReplayRequest.template:type_name -> livekit.TemplateSource - 13, // 71: livekit.ExportReplayRequest.web:type_name -> livekit.WebSource - 14, // 72: livekit.ExportReplayRequest.media:type_name -> livekit.MediaSource - 1, // 73: livekit.ExportReplayRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 74: livekit.ExportReplayRequest.advanced:type_name -> livekit.EncodingOptions - 21, // 75: livekit.ExportReplayRequest.outputs:type_name -> livekit.Output - 26, // 76: livekit.ExportReplayRequest.storage:type_name -> livekit.StorageConfig - 55, // 77: livekit.ExportReplayRequest.webhooks:type_name -> livekit.WebhookConfig - 9, // 78: livekit.RoomCompositeEgressRequest.audio_mixing:type_name -> livekit.AudioMixing - 50, // 79: livekit.RoomCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput - 23, // 80: livekit.RoomCompositeEgressRequest.stream:type_name -> livekit.StreamOutput - 24, // 81: livekit.RoomCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 1, // 82: livekit.RoomCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 83: livekit.RoomCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions - 50, // 84: livekit.RoomCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 85: livekit.RoomCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 86: livekit.RoomCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 87: livekit.RoomCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 55, // 88: livekit.RoomCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 50, // 89: livekit.WebEgressRequest.file:type_name -> livekit.EncodedFileOutput - 23, // 90: livekit.WebEgressRequest.stream:type_name -> livekit.StreamOutput - 24, // 91: livekit.WebEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 1, // 92: livekit.WebEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 93: livekit.WebEgressRequest.advanced:type_name -> livekit.EncodingOptions - 50, // 94: livekit.WebEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 95: livekit.WebEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 96: livekit.WebEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 97: livekit.WebEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 55, // 98: livekit.WebEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 1, // 99: livekit.ParticipantEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 100: livekit.ParticipantEgressRequest.advanced:type_name -> livekit.EncodingOptions - 50, // 101: livekit.ParticipantEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 102: livekit.ParticipantEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 103: livekit.ParticipantEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 104: livekit.ParticipantEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 55, // 105: livekit.ParticipantEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 50, // 106: livekit.TrackCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput - 23, // 107: livekit.TrackCompositeEgressRequest.stream:type_name -> livekit.StreamOutput - 24, // 108: livekit.TrackCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 1, // 109: livekit.TrackCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 110: livekit.TrackCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions - 50, // 111: livekit.TrackCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 112: livekit.TrackCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 113: livekit.TrackCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 114: livekit.TrackCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 55, // 115: livekit.TrackCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 49, // 116: livekit.TrackEgressRequest.file:type_name -> livekit.DirectFileOutput - 55, // 117: livekit.TrackEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 27, // 118: livekit.DirectFileOutput.s3:type_name -> livekit.S3Upload - 28, // 119: livekit.DirectFileOutput.gcp:type_name -> livekit.GCPUpload - 29, // 120: livekit.DirectFileOutput.azure:type_name -> livekit.AzureBlobUpload - 30, // 121: livekit.DirectFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 2, // 122: livekit.EncodedFileOutput.file_type:type_name -> livekit.EncodedFileType - 27, // 123: livekit.EncodedFileOutput.s3:type_name -> livekit.S3Upload - 28, // 124: livekit.EncodedFileOutput.gcp:type_name -> livekit.GCPUpload - 29, // 125: livekit.EncodedFileOutput.azure:type_name -> livekit.AzureBlobUpload - 30, // 126: livekit.EncodedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 37, // 127: livekit.StreamInfoList.info:type_name -> livekit.StreamInfo - 44, // 128: livekit.Egress.StartRoomCompositeEgress:input_type -> livekit.RoomCompositeEgressRequest - 45, // 129: livekit.Egress.StartWebEgress:input_type -> livekit.WebEgressRequest - 46, // 130: livekit.Egress.StartParticipantEgress:input_type -> livekit.ParticipantEgressRequest - 47, // 131: livekit.Egress.StartTrackCompositeEgress:input_type -> livekit.TrackCompositeEgressRequest - 48, // 132: livekit.Egress.StartTrackEgress:input_type -> livekit.TrackEgressRequest - 51, // 133: livekit.Egress.UpdateLayout:input_type -> livekit.UpdateLayoutRequest - 52, // 134: livekit.Egress.UpdateStream:input_type -> livekit.UpdateStreamRequest - 32, // 135: livekit.Egress.ListEgress:input_type -> livekit.ListEgressRequest - 35, // 136: livekit.Egress.StopEgress:input_type -> livekit.StopEgressRequest - 36, // 137: livekit.Egress.StartRoomCompositeEgress:output_type -> livekit.EgressInfo - 36, // 138: livekit.Egress.StartWebEgress:output_type -> livekit.EgressInfo - 36, // 139: livekit.Egress.StartParticipantEgress:output_type -> livekit.EgressInfo - 36, // 140: livekit.Egress.StartTrackCompositeEgress:output_type -> livekit.EgressInfo - 36, // 141: livekit.Egress.StartTrackEgress:output_type -> livekit.EgressInfo - 36, // 142: livekit.Egress.UpdateLayout:output_type -> livekit.EgressInfo - 36, // 143: livekit.Egress.UpdateStream:output_type -> livekit.EgressInfo - 33, // 144: livekit.Egress.ListEgress:output_type -> livekit.ListEgressResponse - 36, // 145: livekit.Egress.StopEgress:output_type -> livekit.EgressInfo - 137, // [137:146] is the sub-list for method output_type - 128, // [128:137] is the sub-list for method input_type - 128, // [128:128] is the sub-list for extension type_name - 128, // [128:128] is the sub-list for extension extendee - 0, // [0:128] is the sub-list for field type_name + 11, // 48: livekit.EgressInfo.egress:type_name -> livekit.StartEgressRequest + 43, // 49: livekit.EgressInfo.replay:type_name -> livekit.ExportReplayRequest + 44, // 50: livekit.EgressInfo.room_composite:type_name -> livekit.RoomCompositeEgressRequest + 45, // 51: livekit.EgressInfo.web:type_name -> livekit.WebEgressRequest + 46, // 52: livekit.EgressInfo.participant:type_name -> livekit.ParticipantEgressRequest + 47, // 53: livekit.EgressInfo.track_composite:type_name -> livekit.TrackCompositeEgressRequest + 48, // 54: livekit.EgressInfo.track:type_name -> livekit.TrackEgressRequest + 37, // 55: livekit.EgressInfo.stream_results:type_name -> livekit.StreamInfo + 38, // 56: livekit.EgressInfo.file_results:type_name -> livekit.FileInfo + 39, // 57: livekit.EgressInfo.segment_results:type_name -> livekit.SegmentsInfo + 40, // 58: livekit.EgressInfo.image_results:type_name -> livekit.ImagesInfo + 53, // 59: livekit.EgressInfo.stream:type_name -> livekit.StreamInfoList + 38, // 60: livekit.EgressInfo.file:type_name -> livekit.FileInfo + 39, // 61: livekit.EgressInfo.segments:type_name -> livekit.SegmentsInfo + 10, // 62: livekit.StreamInfo.status:type_name -> livekit.StreamInfo.Status + 1, // 63: livekit.AutoParticipantEgress.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 64: livekit.AutoParticipantEgress.advanced:type_name -> livekit.EncodingOptions + 50, // 65: livekit.AutoParticipantEgress.file_outputs:type_name -> livekit.EncodedFileOutput + 24, // 66: livekit.AutoParticipantEgress.segment_outputs:type_name -> livekit.SegmentedFileOutput + 27, // 67: livekit.AutoTrackEgress.s3:type_name -> livekit.S3Upload + 28, // 68: livekit.AutoTrackEgress.gcp:type_name -> livekit.GCPUpload + 29, // 69: livekit.AutoTrackEgress.azure:type_name -> livekit.AzureBlobUpload + 30, // 70: livekit.AutoTrackEgress.aliOSS:type_name -> livekit.AliOSSUpload + 12, // 71: livekit.ExportReplayRequest.template:type_name -> livekit.TemplateSource + 13, // 72: livekit.ExportReplayRequest.web:type_name -> livekit.WebSource + 14, // 73: livekit.ExportReplayRequest.media:type_name -> livekit.MediaSource + 1, // 74: livekit.ExportReplayRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 75: livekit.ExportReplayRequest.advanced:type_name -> livekit.EncodingOptions + 21, // 76: livekit.ExportReplayRequest.outputs:type_name -> livekit.Output + 26, // 77: livekit.ExportReplayRequest.storage:type_name -> livekit.StorageConfig + 55, // 78: livekit.ExportReplayRequest.webhooks:type_name -> livekit.WebhookConfig + 9, // 79: livekit.RoomCompositeEgressRequest.audio_mixing:type_name -> livekit.AudioMixing + 50, // 80: livekit.RoomCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 81: livekit.RoomCompositeEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 82: livekit.RoomCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 83: livekit.RoomCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 84: livekit.RoomCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 85: livekit.RoomCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 86: livekit.RoomCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 87: livekit.RoomCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 88: livekit.RoomCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 89: livekit.RoomCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 50, // 90: livekit.WebEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 91: livekit.WebEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 92: livekit.WebEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 93: livekit.WebEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 94: livekit.WebEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 95: livekit.WebEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 96: livekit.WebEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 97: livekit.WebEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 98: livekit.WebEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 99: livekit.WebEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 1, // 100: livekit.ParticipantEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 101: livekit.ParticipantEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 102: livekit.ParticipantEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 103: livekit.ParticipantEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 104: livekit.ParticipantEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 105: livekit.ParticipantEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 106: livekit.ParticipantEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 50, // 107: livekit.TrackCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 108: livekit.TrackCompositeEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 109: livekit.TrackCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 110: livekit.TrackCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 111: livekit.TrackCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 112: livekit.TrackCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 113: livekit.TrackCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 114: livekit.TrackCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 115: livekit.TrackCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 116: livekit.TrackCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 49, // 117: livekit.TrackEgressRequest.file:type_name -> livekit.DirectFileOutput + 55, // 118: livekit.TrackEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 27, // 119: livekit.DirectFileOutput.s3:type_name -> livekit.S3Upload + 28, // 120: livekit.DirectFileOutput.gcp:type_name -> livekit.GCPUpload + 29, // 121: livekit.DirectFileOutput.azure:type_name -> livekit.AzureBlobUpload + 30, // 122: livekit.DirectFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 2, // 123: livekit.EncodedFileOutput.file_type:type_name -> livekit.EncodedFileType + 27, // 124: livekit.EncodedFileOutput.s3:type_name -> livekit.S3Upload + 28, // 125: livekit.EncodedFileOutput.gcp:type_name -> livekit.GCPUpload + 29, // 126: livekit.EncodedFileOutput.azure:type_name -> livekit.AzureBlobUpload + 30, // 127: livekit.EncodedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 37, // 128: livekit.StreamInfoList.info:type_name -> livekit.StreamInfo + 11, // 129: livekit.Egress.StartEgress:input_type -> livekit.StartEgressRequest + 51, // 130: livekit.Egress.UpdateLayout:input_type -> livekit.UpdateLayoutRequest + 52, // 131: livekit.Egress.UpdateStream:input_type -> livekit.UpdateStreamRequest + 32, // 132: livekit.Egress.ListEgress:input_type -> livekit.ListEgressRequest + 35, // 133: livekit.Egress.StopEgress:input_type -> livekit.StopEgressRequest + 44, // 134: livekit.Egress.StartRoomCompositeEgress:input_type -> livekit.RoomCompositeEgressRequest + 45, // 135: livekit.Egress.StartWebEgress:input_type -> livekit.WebEgressRequest + 46, // 136: livekit.Egress.StartParticipantEgress:input_type -> livekit.ParticipantEgressRequest + 47, // 137: livekit.Egress.StartTrackCompositeEgress:input_type -> livekit.TrackCompositeEgressRequest + 48, // 138: livekit.Egress.StartTrackEgress:input_type -> livekit.TrackEgressRequest + 36, // 139: livekit.Egress.StartEgress:output_type -> livekit.EgressInfo + 36, // 140: livekit.Egress.UpdateLayout:output_type -> livekit.EgressInfo + 36, // 141: livekit.Egress.UpdateStream:output_type -> livekit.EgressInfo + 33, // 142: livekit.Egress.ListEgress:output_type -> livekit.ListEgressResponse + 36, // 143: livekit.Egress.StopEgress:output_type -> livekit.EgressInfo + 36, // 144: livekit.Egress.StartRoomCompositeEgress:output_type -> livekit.EgressInfo + 36, // 145: livekit.Egress.StartWebEgress:output_type -> livekit.EgressInfo + 36, // 146: livekit.Egress.StartParticipantEgress:output_type -> livekit.EgressInfo + 36, // 147: livekit.Egress.StartTrackCompositeEgress:output_type -> livekit.EgressInfo + 36, // 148: livekit.Egress.StartTrackEgress:output_type -> livekit.EgressInfo + 139, // [139:149] is the sub-list for method output_type + 129, // [129:139] is the sub-list for method input_type + 129, // [129:129] is the sub-list for extension type_name + 129, // [129:129] is the sub-list for extension extendee + 0, // [0:129] is the sub-list for field type_name } func init() { file_livekit_egress_proto_init() } @@ -6072,6 +6092,7 @@ func file_livekit_egress_proto_init() { (*StorageConfig_AliOSS)(nil), } file_livekit_egress_proto_msgTypes[25].OneofWrappers = []any{ + (*EgressInfo_Egress)(nil), (*EgressInfo_Replay)(nil), (*EgressInfo_RoomComposite)(nil), (*EgressInfo_Web)(nil), diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index b2b419706..213f07163 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -28,16 +28,7 @@ const _ = twirp.TwirpPackageMinVersion_8_1_0 type Egress interface { // Unified StartEgress RPC - // rpc StartEgress(StartEgressRequest) returns (EgressInfo); - StartRoomCompositeEgress(context.Context, *RoomCompositeEgressRequest) (*EgressInfo, error) - - StartWebEgress(context.Context, *WebEgressRequest) (*EgressInfo, error) - - StartParticipantEgress(context.Context, *ParticipantEgressRequest) (*EgressInfo, error) - - StartTrackCompositeEgress(context.Context, *TrackCompositeEgressRequest) (*EgressInfo, error) - - StartTrackEgress(context.Context, *TrackEgressRequest) (*EgressInfo, error) + StartEgress(context.Context, *StartEgressRequest) (*EgressInfo, error) // Update url/template or stream outputs // rpc UpdateEgress(UpdateEgressRequest) returns (EgressInfo); @@ -50,6 +41,17 @@ type Egress interface { // Stop a recording or stream StopEgress(context.Context, *StopEgressRequest) (*EgressInfo, error) + + // To be deprecated + StartRoomCompositeEgress(context.Context, *RoomCompositeEgressRequest) (*EgressInfo, error) + + StartWebEgress(context.Context, *WebEgressRequest) (*EgressInfo, error) + + StartParticipantEgress(context.Context, *ParticipantEgressRequest) (*EgressInfo, error) + + StartTrackCompositeEgress(context.Context, *TrackCompositeEgressRequest) (*EgressInfo, error) + + StartTrackEgress(context.Context, *TrackEgressRequest) (*EgressInfo, error) } // ====================== @@ -58,7 +60,7 @@ type Egress interface { type egressProtobufClient struct { client HTTPClient - urls [9]string + urls [10]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -86,16 +88,17 @@ func NewEgressProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Cl // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(pathPrefix, "livekit", "Egress") - urls := [9]string{ + urls := [10]string{ + serviceURL + "StartEgress", + serviceURL + "UpdateLayout", + serviceURL + "UpdateStream", + serviceURL + "ListEgress", + serviceURL + "StopEgress", serviceURL + "StartRoomCompositeEgress", serviceURL + "StartWebEgress", serviceURL + "StartParticipantEgress", serviceURL + "StartTrackCompositeEgress", serviceURL + "StartTrackEgress", - serviceURL + "UpdateLayout", - serviceURL + "UpdateStream", - serviceURL + "ListEgress", - serviceURL + "StopEgress", } return &egressProtobufClient{ @@ -106,20 +109,20 @@ func NewEgressProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Cl } } -func (c *egressProtobufClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") - caller := c.callStartRoomCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") + caller := c.callStartEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*StartEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") } - return c.callStartRoomCompositeEgress(ctx, typedReq) + return c.callStartEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -135,7 +138,7 @@ func (c *egressProtobufClient) StartRoomCompositeEgress(ctx context.Context, in return caller(ctx, in) } -func (c *egressProtobufClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) if err != nil { @@ -152,20 +155,20 @@ func (c *egressProtobufClient) callStartRoomCompositeEgress(ctx context.Context, return out, nil } -func (c *egressProtobufClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") - caller := c.callStartWebEgress + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + caller := c.callUpdateLayout if c.interceptor != nil { - caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*UpdateLayoutRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") } - return c.callStartWebEgress(ctx, typedReq) + return c.callUpdateLayout(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -181,7 +184,7 @@ func (c *egressProtobufClient) StartWebEgress(ctx context.Context, in *WebEgress return caller(ctx, in) } -func (c *egressProtobufClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) if err != nil { @@ -198,20 +201,20 @@ func (c *egressProtobufClient) callStartWebEgress(ctx context.Context, in *WebEg return out, nil } -func (c *egressProtobufClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") - caller := c.callStartParticipantEgress + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + caller := c.callUpdateStream if c.interceptor != nil { - caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*UpdateStreamRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") } - return c.callStartParticipantEgress(ctx, typedReq) + return c.callUpdateStream(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -227,7 +230,7 @@ func (c *egressProtobufClient) StartParticipantEgress(ctx context.Context, in *P return caller(ctx, in) } -func (c *egressProtobufClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) if err != nil { @@ -244,26 +247,26 @@ func (c *egressProtobufClient) callStartParticipantEgress(ctx context.Context, i return out, nil } -func (c *egressProtobufClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") - caller := c.callStartTrackCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + caller := c.callListEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*ListEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") } - return c.callStartTrackCompositeEgress(ctx, typedReq) + return c.callListEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*EgressInfo) + typedResp, ok := resp.(*ListEgressResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") } return typedResp, err } @@ -273,8 +276,8 @@ func (c *egressProtobufClient) StartTrackCompositeEgress(ctx context.Context, in return caller(ctx, in) } -func (c *egressProtobufClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { - out := new(EgressInfo) +func (c *egressProtobufClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { + out := new(ListEgressResponse) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -290,20 +293,20 @@ func (c *egressProtobufClient) callStartTrackCompositeEgress(ctx context.Context return out, nil } -func (c *egressProtobufClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") - caller := c.callStartTrackEgress + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + caller := c.callStopEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return c.callStartTrackEgress(ctx, typedReq) + return c.callStopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -319,7 +322,7 @@ func (c *egressProtobufClient) StartTrackEgress(ctx context.Context, in *TrackEg return caller(ctx, in) } -func (c *egressProtobufClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) if err != nil { @@ -336,20 +339,20 @@ func (c *egressProtobufClient) callStartTrackEgress(ctx context.Context, in *Tra return out, nil } -func (c *egressProtobufClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") - caller := c.callUpdateLayout + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + caller := c.callStartRoomCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return c.callUpdateLayout(ctx, typedReq) + return c.callStartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -365,7 +368,7 @@ func (c *egressProtobufClient) UpdateLayout(ctx context.Context, in *UpdateLayou return caller(ctx, in) } -func (c *egressProtobufClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[5], in, out) if err != nil { @@ -382,20 +385,20 @@ func (c *egressProtobufClient) callUpdateLayout(ctx context.Context, in *UpdateL return out, nil } -func (c *egressProtobufClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") - caller := c.callUpdateStream + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + caller := c.callStartWebEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return c.callUpdateStream(ctx, typedReq) + return c.callStartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -411,7 +414,7 @@ func (c *egressProtobufClient) UpdateStream(ctx context.Context, in *UpdateStrea return caller(ctx, in) } -func (c *egressProtobufClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[6], in, out) if err != nil { @@ -428,26 +431,26 @@ func (c *egressProtobufClient) callUpdateStream(ctx context.Context, in *UpdateS return out, nil } -func (c *egressProtobufClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { +func (c *egressProtobufClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") - caller := c.callListEgress + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + caller := c.callStartParticipantEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return c.callListEgress(ctx, typedReq) + return c.callStartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -457,8 +460,8 @@ func (c *egressProtobufClient) ListEgress(ctx context.Context, in *ListEgressReq return caller(ctx, in) } -func (c *egressProtobufClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { - out := new(ListEgressResponse) +func (c *egressProtobufClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { + out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -474,20 +477,20 @@ func (c *egressProtobufClient) callListEgress(ctx context.Context, in *ListEgres return out, nil } -func (c *egressProtobufClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") - caller := c.callStopEgress + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + caller := c.callStartTrackCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return c.callStopEgress(ctx, typedReq) + return c.callStartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -503,7 +506,7 @@ func (c *egressProtobufClient) StopEgress(ctx context.Context, in *StopEgressReq return caller(ctx, in) } -func (c *egressProtobufClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[8], in, out) if err != nil { @@ -520,13 +523,59 @@ func (c *egressProtobufClient) callStopEgress(ctx context.Context, in *StopEgres return out, nil } +func (c *egressProtobufClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + caller := c.callStartTrackEgress + if c.interceptor != nil { + caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*TrackEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + } + return c.callStartTrackEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *egressProtobufClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { + out := new(EgressInfo) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[9], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ================== // Egress JSON Client // ================== type egressJSONClient struct { client HTTPClient - urls [9]string + urls [10]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -554,16 +603,17 @@ func NewEgressJSONClient(baseURL string, client HTTPClient, opts ...twirp.Client // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(pathPrefix, "livekit", "Egress") - urls := [9]string{ + urls := [10]string{ + serviceURL + "StartEgress", + serviceURL + "UpdateLayout", + serviceURL + "UpdateStream", + serviceURL + "ListEgress", + serviceURL + "StopEgress", serviceURL + "StartRoomCompositeEgress", serviceURL + "StartWebEgress", serviceURL + "StartParticipantEgress", serviceURL + "StartTrackCompositeEgress", serviceURL + "StartTrackEgress", - serviceURL + "UpdateLayout", - serviceURL + "UpdateStream", - serviceURL + "ListEgress", - serviceURL + "StopEgress", } return &egressJSONClient{ @@ -574,20 +624,20 @@ func NewEgressJSONClient(baseURL string, client HTTPClient, opts ...twirp.Client } } -func (c *egressJSONClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") - caller := c.callStartRoomCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") + caller := c.callStartEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*StartEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") } - return c.callStartRoomCompositeEgress(ctx, typedReq) + return c.callStartEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -603,7 +653,7 @@ func (c *egressJSONClient) StartRoomCompositeEgress(ctx context.Context, in *Roo return caller(ctx, in) } -func (c *egressJSONClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) if err != nil { @@ -620,20 +670,20 @@ func (c *egressJSONClient) callStartRoomCompositeEgress(ctx context.Context, in return out, nil } -func (c *egressJSONClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") - caller := c.callStartWebEgress + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + caller := c.callUpdateLayout if c.interceptor != nil { - caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*UpdateLayoutRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") } - return c.callStartWebEgress(ctx, typedReq) + return c.callUpdateLayout(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -649,7 +699,7 @@ func (c *egressJSONClient) StartWebEgress(ctx context.Context, in *WebEgressRequ return caller(ctx, in) } -func (c *egressJSONClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) if err != nil { @@ -666,20 +716,20 @@ func (c *egressJSONClient) callStartWebEgress(ctx context.Context, in *WebEgress return out, nil } -func (c *egressJSONClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") - caller := c.callStartParticipantEgress + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + caller := c.callUpdateStream if c.interceptor != nil { - caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*UpdateStreamRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") } - return c.callStartParticipantEgress(ctx, typedReq) + return c.callUpdateStream(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -695,7 +745,7 @@ func (c *egressJSONClient) StartParticipantEgress(ctx context.Context, in *Parti return caller(ctx, in) } -func (c *egressJSONClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) if err != nil { @@ -712,26 +762,26 @@ func (c *egressJSONClient) callStartParticipantEgress(ctx context.Context, in *P return out, nil } -func (c *egressJSONClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") - caller := c.callStartTrackCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + caller := c.callListEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*ListEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") } - return c.callStartTrackCompositeEgress(ctx, typedReq) + return c.callListEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*EgressInfo) + typedResp, ok := resp.(*ListEgressResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") } return typedResp, err } @@ -741,8 +791,8 @@ func (c *egressJSONClient) StartTrackCompositeEgress(ctx context.Context, in *Tr return caller(ctx, in) } -func (c *egressJSONClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { - out := new(EgressInfo) +func (c *egressJSONClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { + out := new(ListEgressResponse) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -758,20 +808,20 @@ func (c *egressJSONClient) callStartTrackCompositeEgress(ctx context.Context, in return out, nil } -func (c *egressJSONClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") - caller := c.callStartTrackEgress + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + caller := c.callStopEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return c.callStartTrackEgress(ctx, typedReq) + return c.callStopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -787,7 +837,7 @@ func (c *egressJSONClient) StartTrackEgress(ctx context.Context, in *TrackEgress return caller(ctx, in) } -func (c *egressJSONClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) if err != nil { @@ -804,20 +854,20 @@ func (c *egressJSONClient) callStartTrackEgress(ctx context.Context, in *TrackEg return out, nil } -func (c *egressJSONClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") - caller := c.callUpdateLayout + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + caller := c.callStartRoomCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return c.callUpdateLayout(ctx, typedReq) + return c.callStartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -833,7 +883,7 @@ func (c *egressJSONClient) UpdateLayout(ctx context.Context, in *UpdateLayoutReq return caller(ctx, in) } -func (c *egressJSONClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[5], in, out) if err != nil { @@ -850,20 +900,20 @@ func (c *egressJSONClient) callUpdateLayout(ctx context.Context, in *UpdateLayou return out, nil } -func (c *egressJSONClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") - caller := c.callUpdateStream + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + caller := c.callStartWebEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return c.callUpdateStream(ctx, typedReq) + return c.callStartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -879,7 +929,7 @@ func (c *egressJSONClient) UpdateStream(ctx context.Context, in *UpdateStreamReq return caller(ctx, in) } -func (c *egressJSONClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[6], in, out) if err != nil { @@ -896,26 +946,26 @@ func (c *egressJSONClient) callUpdateStream(ctx context.Context, in *UpdateStrea return out, nil } -func (c *egressJSONClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { +func (c *egressJSONClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") - caller := c.callListEgress + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + caller := c.callStartParticipantEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return c.callListEgress(ctx, typedReq) + return c.callStartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -925,8 +975,8 @@ func (c *egressJSONClient) ListEgress(ctx context.Context, in *ListEgressRequest return caller(ctx, in) } -func (c *egressJSONClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { - out := new(ListEgressResponse) +func (c *egressJSONClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { + out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -942,20 +992,20 @@ func (c *egressJSONClient) callListEgress(ctx context.Context, in *ListEgressReq return out, nil } -func (c *egressJSONClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") - caller := c.callStopEgress + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + caller := c.callStartTrackCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return c.callStopEgress(ctx, typedReq) + return c.callStartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -971,7 +1021,7 @@ func (c *egressJSONClient) StopEgress(ctx context.Context, in *StopEgressRequest return caller(ctx, in) } -func (c *egressJSONClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[8], in, out) if err != nil { @@ -988,6 +1038,52 @@ func (c *egressJSONClient) callStopEgress(ctx context.Context, in *StopEgressReq return out, nil } +func (c *egressJSONClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + caller := c.callStartTrackEgress + if c.interceptor != nil { + caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*TrackEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + } + return c.callStartTrackEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *egressJSONClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { + out := new(EgressInfo) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[9], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ===================== // Egress Server Handler // ===================== @@ -1085,6 +1181,21 @@ func (s *egressServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { } switch method { + case "StartEgress": + s.serveStartEgress(ctx, resp, req) + return + case "UpdateLayout": + s.serveUpdateLayout(ctx, resp, req) + return + case "UpdateStream": + s.serveUpdateStream(ctx, resp, req) + return + case "ListEgress": + s.serveListEgress(ctx, resp, req) + return + case "StopEgress": + s.serveStopEgress(ctx, resp, req) + return case "StartRoomCompositeEgress": s.serveStartRoomCompositeEgress(ctx, resp, req) return @@ -1100,18 +1211,6 @@ func (s *egressServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { case "StartTrackEgress": s.serveStartTrackEgress(ctx, resp, req) return - case "UpdateLayout": - s.serveUpdateLayout(ctx, resp, req) - return - case "UpdateStream": - s.serveUpdateStream(ctx, resp, req) - return - case "ListEgress": - s.serveListEgress(ctx, resp, req) - return - case "StopEgress": - s.serveStopEgress(ctx, resp, req) - return default: msg := fmt.Sprintf("no handler for path %q", req.URL.Path) s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) @@ -1119,7 +1218,7 @@ func (s *egressServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { } } -func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1127,9 +1226,9 @@ func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp h } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartRoomCompositeEgressJSON(ctx, resp, req) + s.serveStartEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartRoomCompositeEgressProtobuf(ctx, resp, req) + s.serveStartEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1137,9 +1236,9 @@ func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp h } } -func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1152,23 +1251,23 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(RoomCompositeEgressRequest) + reqContent := new(StartEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartRoomCompositeEgress + handler := s.Egress.StartEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*StartEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") } - return s.Egress.StartRoomCompositeEgress(ctx, typedReq) + return s.Egress.StartEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1194,7 +1293,7 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartEgress. nil responses are not supported")) return } @@ -1220,9 +1319,9 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1234,22 +1333,22 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(RoomCompositeEgressRequest) + reqContent := new(StartEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartRoomCompositeEgress + handler := s.Egress.StartEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*StartEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") } - return s.Egress.StartRoomCompositeEgress(ctx, typedReq) + return s.Egress.StartEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1275,7 +1374,7 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartEgress. nil responses are not supported")) return } @@ -1299,7 +1398,7 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1307,9 +1406,9 @@ func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.Respon } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartWebEgressJSON(ctx, resp, req) + s.serveUpdateLayoutJSON(ctx, resp, req) case "application/protobuf": - s.serveStartWebEgressProtobuf(ctx, resp, req) + s.serveUpdateLayoutProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1317,9 +1416,9 @@ func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.Respon } } -func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1332,23 +1431,23 @@ func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.Re s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(WebEgressRequest) + reqContent := new(UpdateLayoutRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartWebEgress + handler := s.Egress.UpdateLayout if s.interceptor != nil { - handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*UpdateLayoutRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") } - return s.Egress.StartWebEgress(ctx, typedReq) + return s.Egress.UpdateLayout(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1374,7 +1473,7 @@ func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.Re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) return } @@ -1400,9 +1499,9 @@ func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.Re callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1414,22 +1513,22 @@ func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp htt s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(WebEgressRequest) + reqContent := new(UpdateLayoutRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartWebEgress + handler := s.Egress.UpdateLayout if s.interceptor != nil { - handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*UpdateLayoutRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") } - return s.Egress.StartWebEgress(ctx, typedReq) + return s.Egress.UpdateLayout(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1455,7 +1554,7 @@ func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp htt return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) return } @@ -1479,7 +1578,7 @@ func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp htt callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1487,9 +1586,9 @@ func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp htt } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartParticipantEgressJSON(ctx, resp, req) + s.serveUpdateStreamJSON(ctx, resp, req) case "application/protobuf": - s.serveStartParticipantEgressProtobuf(ctx, resp, req) + s.serveUpdateStreamProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1497,9 +1596,9 @@ func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp htt } } -func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1512,23 +1611,23 @@ func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(ParticipantEgressRequest) + reqContent := new(UpdateStreamRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartParticipantEgress + handler := s.Egress.UpdateStream if s.interceptor != nil { - handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*UpdateStreamRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") } - return s.Egress.StartParticipantEgress(ctx, typedReq) + return s.Egress.UpdateStream(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1554,7 +1653,7 @@ func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) return } @@ -1580,9 +1679,9 @@ func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1594,22 +1693,22 @@ func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(ParticipantEgressRequest) + reqContent := new(UpdateStreamRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartParticipantEgress + handler := s.Egress.UpdateStream if s.interceptor != nil { - handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*UpdateStreamRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") } - return s.Egress.StartParticipantEgress(ctx, typedReq) + return s.Egress.UpdateStream(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1635,7 +1734,7 @@ func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) return } @@ -1659,7 +1758,7 @@ func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1667,9 +1766,9 @@ func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartTrackCompositeEgressJSON(ctx, resp, req) + s.serveListEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartTrackCompositeEgressProtobuf(ctx, resp, req) + s.serveListEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1677,9 +1776,189 @@ func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp } } -func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + d := json.NewDecoder(req.Body) + rawReqBody := json.RawMessage{} + if err := d.Decode(&rawReqBody); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + reqContent := new(ListEgressRequest) + unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} + if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + + handler := s.Egress.ListEgress + if s.interceptor != nil { + handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*ListEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + } + return s.Egress.ListEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*ListEgressResponse) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *ListEgressResponse + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} + respBytes, err := marshaler.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + buf, err := io.ReadAll(req.Body) + if err != nil { + s.handleRequestBodyError(ctx, resp, "failed to read request body", err) + return + } + reqContent := new(ListEgressRequest) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) + return + } + + handler := s.Egress.ListEgress + if s.interceptor != nil { + handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*ListEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + } + return s.Egress.ListEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*ListEgressResponse) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *ListEgressResponse + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveStopEgressJSON(ctx, resp, req) + case "application/protobuf": + s.serveStopEgressProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1692,23 +1971,23 @@ func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, r s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(TrackCompositeEgressRequest) + reqContent := new(StopEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartTrackCompositeEgress + handler := s.Egress.StopEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return s.Egress.StartTrackCompositeEgress(ctx, typedReq) + return s.Egress.StopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1734,7 +2013,7 @@ func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, r return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) return } @@ -1760,9 +2039,9 @@ func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, r callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1774,22 +2053,22 @@ func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Contex s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(TrackCompositeEgressRequest) + reqContent := new(StopEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartTrackCompositeEgress + handler := s.Egress.StopEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return s.Egress.StartTrackCompositeEgress(ctx, typedReq) + return s.Egress.StopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1815,7 +2094,7 @@ func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Contex return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) return } @@ -1839,7 +2118,7 @@ func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Contex callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1847,9 +2126,9 @@ func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.Resp } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartTrackEgressJSON(ctx, resp, req) + s.serveStartRoomCompositeEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartTrackEgressProtobuf(ctx, resp, req) + s.serveStartRoomCompositeEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1857,9 +2136,9 @@ func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.Resp } } -func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1872,23 +2151,23 @@ func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(TrackEgressRequest) + reqContent := new(RoomCompositeEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartTrackEgress + handler := s.Egress.StartRoomCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return s.Egress.StartTrackEgress(ctx, typedReq) + return s.Egress.StartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1914,7 +2193,7 @@ func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) return } @@ -1940,9 +2219,9 @@ func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1954,22 +2233,22 @@ func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp h s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(TrackEgressRequest) + reqContent := new(RoomCompositeEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartTrackEgress + handler := s.Egress.StartRoomCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return s.Egress.StartTrackEgress(ctx, typedReq) + return s.Egress.StartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1995,7 +2274,7 @@ func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp h return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) return } @@ -2019,7 +2298,7 @@ func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp h callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2027,9 +2306,9 @@ func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.Response } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveUpdateLayoutJSON(ctx, resp, req) + s.serveStartWebEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveUpdateLayoutProtobuf(ctx, resp, req) + s.serveStartWebEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2037,9 +2316,9 @@ func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.Response } } -func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2052,23 +2331,23 @@ func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.Resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(UpdateLayoutRequest) + reqContent := new(WebEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.UpdateLayout + handler := s.Egress.StartWebEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return s.Egress.UpdateLayout(ctx, typedReq) + return s.Egress.StartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2094,7 +2373,7 @@ func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.Resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) return } @@ -2120,9 +2399,9 @@ func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.Resp callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2134,22 +2413,22 @@ func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(UpdateLayoutRequest) + reqContent := new(WebEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.UpdateLayout + handler := s.Egress.StartWebEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return s.Egress.UpdateLayout(ctx, typedReq) + return s.Egress.StartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2175,7 +2454,7 @@ func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) return } @@ -2199,7 +2478,7 @@ func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2207,9 +2486,9 @@ func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.Response } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveUpdateStreamJSON(ctx, resp, req) + s.serveStartParticipantEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveUpdateStreamProtobuf(ctx, resp, req) + s.serveStartParticipantEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2217,9 +2496,9 @@ func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.Response } } -func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2232,23 +2511,23 @@ func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.Resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(UpdateStreamRequest) + reqContent := new(ParticipantEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.UpdateStream + handler := s.Egress.StartParticipantEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return s.Egress.UpdateStream(ctx, typedReq) + return s.Egress.StartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2274,7 +2553,7 @@ func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.Resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) return } @@ -2300,9 +2579,9 @@ func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.Resp callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2314,22 +2593,22 @@ func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(UpdateStreamRequest) + reqContent := new(ParticipantEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.UpdateStream + handler := s.Egress.StartParticipantEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return s.Egress.UpdateStream(ctx, typedReq) + return s.Egress.StartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2355,7 +2634,7 @@ func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) return } @@ -2379,7 +2658,7 @@ func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2387,9 +2666,9 @@ func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWr } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveListEgressJSON(ctx, resp, req) + s.serveStartTrackCompositeEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveListEgressProtobuf(ctx, resp, req) + s.serveStartTrackCompositeEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2397,9 +2676,9 @@ func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWr } } -func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2412,29 +2691,29 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(ListEgressRequest) + reqContent := new(TrackCompositeEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.ListEgress + handler := s.Egress.StartTrackCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return s.Egress.ListEgress(ctx, typedReq) + return s.Egress.StartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -2443,7 +2722,7 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon } // Call service method - var respContent *ListEgressResponse + var respContent *EgressInfo func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -2454,7 +2733,7 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) return } @@ -2480,9 +2759,9 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2494,28 +2773,28 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(ListEgressRequest) + reqContent := new(TrackCompositeEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.ListEgress + handler := s.Egress.StartTrackCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return s.Egress.ListEgress(ctx, typedReq) + return s.Egress.StartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -2524,7 +2803,7 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re } // Call service method - var respContent *ListEgressResponse + var respContent *EgressInfo func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -2535,7 +2814,7 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) return } @@ -2559,7 +2838,7 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2567,9 +2846,9 @@ func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWr } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStopEgressJSON(ctx, resp, req) + s.serveStartTrackEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStopEgressProtobuf(ctx, resp, req) + s.serveStartTrackEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2577,9 +2856,9 @@ func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWr } } -func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2592,23 +2871,23 @@ func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.Respon s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(StopEgressRequest) + reqContent := new(TrackEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StopEgress + handler := s.Egress.StartTrackEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*TrackEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") } - return s.Egress.StopEgress(ctx, typedReq) + return s.Egress.StartTrackEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2634,7 +2913,7 @@ func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.Respon return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) return } @@ -2660,9 +2939,9 @@ func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.Respon callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2674,22 +2953,22 @@ func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.Re s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(StopEgressRequest) + reqContent := new(TrackEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StopEgress + handler := s.Egress.StartTrackEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*TrackEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") } - return s.Egress.StopEgress(ctx, typedReq) + return s.Egress.StartTrackEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2715,7 +2994,7 @@ func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.Re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) return } @@ -2755,271 +3034,272 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor2 = []byte{ - // 4243 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7b, 0xcd, 0x6f, 0x1b, 0x49, - 0x76, 0xb8, 0xba, 0xf9, 0xfd, 0xf8, 0xd5, 0x2a, 0xc9, 0x32, 0x2d, 0xef, 0x8c, 0xbd, 0xed, 0x9d, - 0xb1, 0x47, 0x9e, 0x95, 0xf5, 0x93, 0x3c, 0xf6, 0xac, 0x7f, 0x99, 0xc5, 0x50, 0x62, 0x4b, 0xe4, - 0x5a, 0x12, 0xb9, 0x4d, 0x6a, 0x3c, 0x09, 0x82, 0x34, 0x5a, 0xec, 0x12, 0xd5, 0x10, 0xd9, 0xcd, - 0xed, 0x6e, 0xca, 0xd6, 0xde, 0x72, 0x09, 0x90, 0x20, 0x1b, 0x04, 0x09, 0x72, 0x49, 0x02, 0xe4, - 0x12, 0x04, 0x41, 0xb2, 0x97, 0x5c, 0x7d, 0xc9, 0xde, 0xf7, 0x10, 0x20, 0x41, 0x90, 0xff, 0x21, - 0x41, 0x16, 0xb9, 0xe4, 0x1e, 0xd4, 0x47, 0x7f, 0xb0, 0xd5, 0x92, 0x49, 0x6b, 0x32, 0xb9, 0xec, - 0x49, 0xac, 0xf7, 0x5e, 0x55, 0xbf, 0xaa, 0xf7, 0x51, 0xef, 0xbd, 0x7a, 0x82, 0xe5, 0xa1, 0x79, - 0x8e, 0xcf, 0x4c, 0x4f, 0xc3, 0x03, 0x07, 0xbb, 0xee, 0xfa, 0xd8, 0xb1, 0x3d, 0x1b, 0xe5, 0x38, - 0x74, 0x35, 0x40, 0x8f, 0x6c, 0x03, 0x0f, 0x39, 0x7a, 0x75, 0x79, 0x68, 0x0f, 0x06, 0xd8, 0x79, - 0x62, 0x8f, 0x3d, 0xd3, 0xb6, 0x38, 0x54, 0xfe, 0xb7, 0x14, 0xa0, 0xae, 0xa7, 0x3b, 0x9e, 0x42, - 0x97, 0x52, 0xf1, 0x4f, 0x26, 0xd8, 0xf5, 0xd0, 0x5d, 0x28, 0x38, 0xb6, 0x3d, 0xd2, 0x2c, 0x7d, - 0x84, 0x6b, 0xc2, 0x7d, 0xe1, 0x51, 0x41, 0xcd, 0x13, 0xc0, 0xa1, 0x3e, 0xc2, 0xe8, 0x33, 0xc8, - 0x7b, 0x78, 0x34, 0x1e, 0xea, 0x1e, 0xae, 0x89, 0xf7, 0x85, 0x47, 0xc5, 0xcd, 0xdb, 0xeb, 0xfc, - 0x93, 0xeb, 0x3d, 0x8e, 0xe8, 0xda, 0x13, 0xa7, 0x8f, 0x9b, 0x0b, 0x6a, 0x40, 0x8a, 0x3e, 0x86, - 0xd4, 0x6b, 0x7c, 0x5c, 0x4b, 0xd1, 0x19, 0x28, 0x98, 0xf1, 0x0a, 0x1f, 0x07, 0xc4, 0x84, 0x00, - 0x7d, 0x0a, 0x99, 0x11, 0x36, 0x4c, 0xbd, 0x96, 0xa6, 0x94, 0xcb, 0x01, 0xe5, 0x01, 0x81, 0x06, - 0xb4, 0x8c, 0x08, 0x7d, 0x0e, 0xd9, 0xb1, 0x83, 0x5d, 0xec, 0xd5, 0x32, 0xf7, 0x85, 0x47, 0x95, - 0xcd, 0x0f, 0x03, 0x72, 0xc5, 0xea, 0xdb, 0x86, 0x69, 0x0d, 0xda, 0x6c, 0xc3, 0x1d, 0x4a, 0xd5, - 0x14, 0x54, 0x4e, 0x8f, 0x9e, 0x41, 0x5e, 0x37, 0xce, 0x75, 0xab, 0x8f, 0x8d, 0x5a, 0x96, 0x7e, - 0xaa, 0x76, 0xd5, 0xdc, 0xa6, 0xa0, 0x06, 0xb4, 0xe8, 0x13, 0xc8, 0xd9, 0x13, 0x6f, 0x3c, 0xf1, - 0xdc, 0x5a, 0xee, 0x7e, 0xea, 0x51, 0x71, 0xb3, 0x1a, 0x4c, 0x6b, 0x53, 0xb8, 0xea, 0xe3, 0xd1, - 0x06, 0xe4, 0x5c, 0xcf, 0x76, 0xf4, 0x01, 0xae, 0xe5, 0xe9, 0x17, 0x56, 0x02, 0xd2, 0x2e, 0x83, - 0xef, 0xd8, 0xd6, 0x89, 0x39, 0x50, 0x7d, 0x32, 0xb4, 0x09, 0xf9, 0xd7, 0xf8, 0xf8, 0xd4, 0xb6, - 0xcf, 0xdc, 0x5a, 0x81, 0xae, 0xbe, 0x12, 0x3d, 0x29, 0x82, 0xe0, 0x53, 0x02, 0xba, 0xed, 0x3c, - 0x64, 0x5d, 0x7a, 0x2a, 0xdb, 0x00, 0x79, 0xcc, 0x39, 0x97, 0xff, 0x48, 0x80, 0xca, 0xb4, 0x34, - 0xd0, 0x0a, 0x64, 0x87, 0xfa, 0x85, 0x3d, 0xf1, 0xb8, 0x48, 0xf9, 0x08, 0x7d, 0x00, 0xa0, 0x4f, - 0x0c, 0xd3, 0xd6, 0x6c, 0x6b, 0x78, 0x41, 0x45, 0x9a, 0x57, 0x0b, 0x14, 0xd2, 0xb6, 0x86, 0x17, - 0x04, 0x7d, 0x6e, 0x1a, 0x98, 0xa3, 0x53, 0x0c, 0x4d, 0x21, 0x14, 0xfd, 0x31, 0x54, 0xfb, 0x13, - 0xd7, 0xb3, 0x47, 0xda, 0xb1, 0xee, 0x62, 0x6d, 0xe2, 0x0c, 0xa9, 0xe4, 0x0a, 0x6a, 0x99, 0x81, - 0xb7, 0x75, 0x17, 0x1f, 0x39, 0x43, 0xf9, 0xf7, 0x05, 0x28, 0x04, 0xc2, 0x46, 0x12, 0xa4, 0x08, - 0x25, 0x63, 0x84, 0xfc, 0xbc, 0x21, 0x17, 0x9f, 0x02, 0xd2, 0x5f, 0xeb, 0xa6, 0xa7, 0xb9, 0x44, - 0x9b, 0x35, 0xd7, 0x1c, 0x58, 0x3a, 0x63, 0x24, 0xaf, 0x4a, 0x14, 0x43, 0xd5, 0xbc, 0x4b, 0xe1, - 0xf2, 0xaf, 0x04, 0x28, 0x46, 0xd4, 0x09, 0x3d, 0x87, 0x0a, 0x5b, 0xdc, 0x73, 0xf4, 0xfe, 0x99, - 0x66, 0x1a, 0x8c, 0xb1, 0xed, 0xea, 0xdb, 0x4e, 0x89, 0x22, 0x7a, 0x04, 0xde, 0x6a, 0x34, 0x17, - 0xd4, 0xe8, 0xd8, 0x40, 0x4d, 0x58, 0x1c, 0xeb, 0x8e, 0x67, 0xf6, 0xcd, 0xb1, 0x6e, 0x79, 0x1a, - 0xc5, 0x71, 0xa3, 0xb8, 0x13, 0x08, 0xae, 0x13, 0x52, 0x7c, 0x45, 0x08, 0x9a, 0x0b, 0xaa, 0x34, - 0x8e, 0xc1, 0xd0, 0x1a, 0x64, 0xe8, 0x66, 0xb9, 0x81, 0x84, 0x6a, 0x5f, 0x27, 0x50, 0x2e, 0x74, - 0x46, 0x82, 0x1e, 0x42, 0xda, 0xd0, 0x3d, 0xdf, 0x42, 0x96, 0x02, 0xd2, 0x86, 0xee, 0xe9, 0x9c, - 0x92, 0x12, 0x6c, 0xe7, 0x20, 0x43, 0x59, 0x92, 0x7f, 0x07, 0xa4, 0x38, 0x17, 0x68, 0x15, 0xf2, - 0xa6, 0x81, 0x2d, 0xcf, 0xf4, 0x2e, 0x7c, 0x1b, 0xf7, 0xc7, 0x68, 0x1d, 0x96, 0xc6, 0x0e, 0x3e, - 0xc1, 0x8e, 0xe6, 0xf6, 0x1d, 0x8c, 0x2d, 0xcd, 0x3d, 0xd5, 0x1d, 0xcc, 0xa5, 0xb2, 0xc8, 0x50, - 0x5d, 0x8a, 0xe9, 0x12, 0x84, 0xfc, 0x02, 0x8a, 0x11, 0x3e, 0xd1, 0x63, 0xc8, 0x3a, 0xf6, 0xc4, - 0xc3, 0x6e, 0x4d, 0xa0, 0x4a, 0xbc, 0x34, 0xbd, 0x1b, 0x95, 0xe0, 0x54, 0x4e, 0x22, 0xff, 0x97, - 0x00, 0x10, 0x82, 0xd1, 0x43, 0xc8, 0xc7, 0xa4, 0x00, 0x6f, 0x3b, 0x39, 0x2f, 0x10, 0x00, 0xff, - 0x69, 0xa0, 0x2d, 0x58, 0x8e, 0x9e, 0x7d, 0xb0, 0x17, 0xc2, 0x64, 0xa1, 0xb9, 0xa0, 0x2e, 0x45, - 0xb0, 0x2d, 0x7f, 0x63, 0x3f, 0x82, 0xe8, 0xd1, 0x6b, 0x67, 0xa6, 0x65, 0xd0, 0x13, 0xaf, 0x6c, - 0x7e, 0x90, 0x24, 0xaf, 0x96, 0x75, 0x62, 0xaf, 0xbf, 0x34, 0x2d, 0xa3, 0xb9, 0xa0, 0x56, 0x23, - 0x13, 0x09, 0x08, 0x3d, 0x81, 0x5c, 0xff, 0x54, 0xb7, 0x2c, 0xcc, 0x14, 0xad, 0xb2, 0x79, 0x2b, - 0x26, 0x34, 0x86, 0x54, 0x7d, 0x2a, 0x22, 0x8e, 0x91, 0xee, 0xf5, 0x4f, 0xe5, 0x3a, 0x40, 0x28, - 0x2b, 0xb4, 0x05, 0x05, 0x17, 0x0f, 0x71, 0xdf, 0xb3, 0x1d, 0xff, 0xc0, 0x6e, 0x4d, 0xc9, 0xb4, - 0xcb, 0xb1, 0x6a, 0x48, 0x27, 0xff, 0x4c, 0x80, 0x52, 0x14, 0xf7, 0xbf, 0x7c, 0x6e, 0x2b, 0x90, - 0xf1, 0xec, 0xb1, 0xd9, 0xa7, 0x87, 0x45, 0xa8, 0xd8, 0x30, 0xdc, 0xd2, 0x3f, 0xa7, 0xa0, 0x1a, - 0x73, 0x9b, 0x68, 0x19, 0x32, 0xaf, 0x4d, 0xc3, 0x3b, 0xa5, 0xfc, 0x64, 0x54, 0x36, 0x20, 0x6e, - 0xe8, 0x14, 0x9b, 0x83, 0x53, 0x8f, 0x7e, 0x31, 0xa3, 0xf2, 0x11, 0xa1, 0x36, 0xf0, 0xd8, 0x3b, - 0xa5, 0x9f, 0xc8, 0xa8, 0x6c, 0x80, 0xbe, 0x03, 0x85, 0x13, 0x47, 0x1f, 0x61, 0x87, 0x5c, 0x37, - 0x69, 0x8a, 0x09, 0x01, 0xe8, 0x29, 0x14, 0x99, 0xd3, 0xe8, 0xdb, 0x06, 0xee, 0xf3, 0x3b, 0x60, - 0x29, 0x6e, 0x3b, 0x06, 0xee, 0xab, 0xcc, 0xb9, 0xd0, 0xdf, 0xe8, 0x01, 0x94, 0xd9, 0xac, 0x63, - 0xd3, 0xa3, 0xeb, 0x66, 0xe9, 0xba, 0x25, 0x0a, 0xdc, 0x66, 0x30, 0xf4, 0x10, 0xaa, 0x8c, 0xe8, - 0xc4, 0x21, 0xb7, 0xa2, 0xd5, 0xbf, 0xa8, 0xe5, 0x28, 0x59, 0x85, 0x82, 0x77, 0x7d, 0x28, 0xe1, - 0x81, 0x39, 0x0f, 0xc6, 0x43, 0x3e, 0xc6, 0x03, 0x35, 0x36, 0xce, 0xc3, 0x79, 0xf0, 0x9b, 0xf0, - 0xc0, 0x66, 0xf9, 0x3c, 0x14, 0x18, 0x0f, 0x14, 0xe8, 0xf3, 0xf0, 0x29, 0xa0, 0x33, 0x7c, 0xa1, - 0xd1, 0xfd, 0x6a, 0xa6, 0xe5, 0x61, 0xe7, 0x5c, 0x1f, 0xd6, 0xe0, 0xbe, 0xf0, 0x48, 0x50, 0xa5, - 0x33, 0x7c, 0xb1, 0x4b, 0x10, 0x2d, 0x0e, 0x47, 0x0f, 0xfd, 0x6d, 0xfd, 0x64, 0xa2, 0x0f, 0x89, - 0x44, 0x8b, 0x64, 0xc9, 0x6d, 0xb1, 0x26, 0xf0, 0xad, 0xfd, 0x98, 0xc1, 0x09, 0x21, 0xfb, 0xb6, - 0x4f, 0x58, 0x0a, 0x09, 0x29, 0x82, 0x13, 0xca, 0x7f, 0x28, 0x42, 0x96, 0x5d, 0x6a, 0xe8, 0x13, - 0x48, 0x9f, 0x98, 0x43, 0x16, 0x0d, 0x44, 0x0d, 0x7a, 0xd7, 0x1c, 0x62, 0x46, 0xd2, 0x5c, 0x50, - 0x29, 0x09, 0x7a, 0x02, 0x59, 0xd7, 0x73, 0xb0, 0x3e, 0xe2, 0x9e, 0xf0, 0x56, 0xe4, 0xd6, 0x23, - 0xe0, 0x80, 0x9c, 0x93, 0xa1, 0x17, 0x90, 0x77, 0xf1, 0x60, 0x84, 0x2d, 0xcf, 0xe5, 0xee, 0xef, - 0x3b, 0xe1, 0x14, 0x86, 0xc0, 0xc6, 0xd4, 0x87, 0x02, 0x7a, 0xb4, 0x0e, 0x59, 0x73, 0xa4, 0x0f, - 0xb0, 0x7b, 0x29, 0x5e, 0x68, 0x11, 0x70, 0xf8, 0x2d, 0x46, 0x15, 0xbd, 0x93, 0xb3, 0x33, 0xdd, - 0xc9, 0xe4, 0x7e, 0xed, 0x53, 0x90, 0xfc, 0x07, 0x02, 0x40, 0xc8, 0x06, 0xfa, 0x0c, 0x0a, 0x64, - 0xbf, 0x9a, 0x77, 0x31, 0x66, 0xe7, 0x52, 0x89, 0x87, 0x10, 0x8c, 0xeb, 0xde, 0xc5, 0x18, 0xab, - 0xf9, 0x13, 0xfe, 0x8b, 0xf8, 0x5d, 0xf2, 0x7b, 0xac, 0x7b, 0xa7, 0xcc, 0xe6, 0xd4, 0x60, 0x8c, - 0x3e, 0x01, 0xc9, 0x30, 0x5d, 0xfd, 0x78, 0x88, 0xb5, 0x91, 0x6e, 0x99, 0x27, 0xd8, 0xf5, 0xf8, - 0x5d, 0x57, 0xe5, 0xf0, 0x03, 0x0e, 0x96, 0x5f, 0x41, 0x29, 0x7a, 0x9c, 0x68, 0x0b, 0xf2, 0x34, - 0xa6, 0xeb, 0xdb, 0x43, 0xce, 0xcc, 0xed, 0xd8, 0xb9, 0x77, 0x38, 0x5a, 0x0d, 0x08, 0x11, 0x82, - 0xf4, 0xc4, 0x19, 0xba, 0x35, 0xf1, 0x7e, 0xea, 0x51, 0x41, 0xa5, 0xbf, 0xe5, 0xbf, 0x4e, 0xc3, - 0x52, 0xc2, 0xa9, 0x13, 0x29, 0xc5, 0x3e, 0xf0, 0x61, 0xb2, 0x94, 0x12, 0xbe, 0xf3, 0x10, 0xaa, - 0x64, 0x8f, 0x24, 0x9e, 0xd4, 0xc8, 0xed, 0x61, 0xbe, 0xe1, 0x5b, 0xaf, 0xf8, 0xe0, 0x0e, 0x85, - 0x12, 0xb3, 0x18, 0x0f, 0xf5, 0x8b, 0xa1, 0xe9, 0x7a, 0x2c, 0xfa, 0xa4, 0xfe, 0x46, 0x2d, 0xf9, - 0x40, 0x1a, 0x81, 0x7e, 0x0a, 0x88, 0x7c, 0x58, 0x9b, 0xa6, 0x2c, 0x52, 0x4a, 0x89, 0x60, 0x3a, - 0x51, 0xea, 0x4f, 0x40, 0xe2, 0xda, 0xa2, 0x19, 0x13, 0x47, 0x27, 0xae, 0x89, 0xea, 0x4a, 0x59, - 0xad, 0x72, 0x78, 0x83, 0x83, 0x91, 0x12, 0x61, 0xd3, 0x9d, 0x9c, 0x10, 0x36, 0x81, 0xee, 0xf4, - 0x0a, 0x7d, 0xec, 0x52, 0x9a, 0x70, 0x13, 0x6c, 0x9c, 0x28, 0xc5, 0x7c, 0xa2, 0x14, 0xd1, 0x03, - 0x10, 0xdd, 0x2d, 0xea, 0xb7, 0x8a, 0x9b, 0x8b, 0xe1, 0x47, 0xb6, 0x8e, 0xc6, 0x43, 0x5b, 0x27, - 0xb7, 0x8e, 0xe8, 0x6e, 0x91, 0xd0, 0x79, 0xd0, 0x1f, 0x73, 0x7d, 0x0d, 0x43, 0xe7, 0xbd, 0x9d, - 0x4e, 0x40, 0x46, 0x08, 0xd0, 0x06, 0x64, 0xf4, 0x9f, 0x4e, 0x1c, 0x4c, 0x1d, 0x55, 0x34, 0x9e, - 0xad, 0x13, 0xe8, 0xf6, 0xd0, 0x3e, 0x0e, 0xe8, 0x19, 0x21, 0x31, 0x55, 0x7d, 0x68, 0xb6, 0xbb, - 0x5d, 0xea, 0x7e, 0xa2, 0xa6, 0x5a, 0xa7, 0xe0, 0x80, 0x9e, 0x93, 0x11, 0x63, 0x60, 0xd1, 0xad, - 0xfc, 0x9f, 0x29, 0x28, 0x46, 0x4c, 0x8c, 0x6c, 0xba, 0xaf, 0x8f, 0xbd, 0x89, 0x13, 0xf1, 0x54, - 0x02, 0x3b, 0x66, 0x0e, 0x0f, 0x1c, 0x55, 0x70, 0x2f, 0x88, 0xc9, 0xf7, 0x42, 0x6a, 0xea, 0x5e, - 0x48, 0xd0, 0x9d, 0x74, 0xa2, 0xee, 0xd4, 0x2f, 0x4b, 0x2f, 0x13, 0xb3, 0x4a, 0xca, 0xf0, 0x35, - 0x92, 0x7b, 0x0a, 0x45, 0xea, 0x27, 0xb8, 0x2f, 0xcf, 0xc6, 0x7c, 0x39, 0x9d, 0xce, 0x7d, 0xb9, - 0x19, 0xfc, 0x4e, 0x94, 0x77, 0xee, 0x3a, 0x79, 0xe7, 0x67, 0x92, 0x77, 0x61, 0x66, 0x79, 0xc3, - 0xfc, 0xf2, 0x2e, 0xce, 0x2b, 0xef, 0x5f, 0x0a, 0x50, 0x9e, 0xf2, 0x90, 0x7c, 0x2f, 0xc2, 0x4c, - 0x7b, 0x11, 0x67, 0xde, 0x4b, 0x6a, 0xfe, 0xbd, 0xa4, 0x67, 0xdb, 0x0b, 0x50, 0x07, 0x46, 0x2e, - 0x38, 0x47, 0xfe, 0x8f, 0x34, 0xe4, 0x7d, 0x4e, 0x91, 0x0c, 0xa0, 0xf7, 0xfb, 0xd8, 0x75, 0xb5, - 0x33, 0xcc, 0x63, 0xe1, 0xed, 0xd4, 0x2f, 0x3a, 0xa2, 0x5a, 0x60, 0xe0, 0x97, 0xf8, 0x02, 0xdd, - 0x85, 0xac, 0x8b, 0xfb, 0x0e, 0x66, 0x51, 0x0b, 0xc7, 0x73, 0x10, 0x7a, 0x04, 0x65, 0x17, 0xbb, - 0xae, 0x69, 0x5b, 0x9a, 0x67, 0x9f, 0x61, 0x8b, 0xf9, 0x22, 0x46, 0x53, 0xe2, 0x98, 0x1e, 0x41, - 0xa0, 0xc7, 0x50, 0xd5, 0x5d, 0x77, 0x32, 0xc2, 0x9a, 0x63, 0x0f, 0xb1, 0xa6, 0x3b, 0x16, 0xbd, - 0x7c, 0x29, 0xad, 0xa0, 0x96, 0x19, 0x4e, 0xb5, 0x87, 0xb8, 0xee, 0x58, 0xe8, 0xc7, 0x70, 0x3b, - 0x4a, 0x8c, 0xdf, 0x78, 0xd8, 0xb1, 0xf4, 0x21, 0x89, 0xf0, 0xca, 0x74, 0xd2, 0xea, 0x2f, 0x3a, - 0xe2, 0xdb, 0xce, 0x72, 0x38, 0x4b, 0xe1, 0x24, 0xad, 0x86, 0x9a, 0x04, 0x35, 0x88, 0x91, 0x39, - 0x78, 0x40, 0x5c, 0x20, 0x73, 0xac, 0x7c, 0x44, 0x2e, 0x25, 0x6c, 0x19, 0x63, 0xdb, 0xb4, 0x3c, - 0x6e, 0x5d, 0xc1, 0x98, 0xcc, 0x39, 0x9e, 0xf4, 0xcf, 0x78, 0x8e, 0x5d, 0x50, 0xf9, 0x08, 0x3d, - 0x02, 0xe9, 0xc4, 0x76, 0xfa, 0x58, 0x23, 0x57, 0x97, 0xe6, 0x7a, 0x17, 0x43, 0x76, 0xa7, 0xe6, - 0xd5, 0x0a, 0x85, 0x77, 0x74, 0xef, 0xb4, 0x4b, 0xa0, 0xe8, 0x4b, 0xc8, 0x8f, 0xb0, 0xa7, 0xd3, - 0xa4, 0x85, 0x25, 0xcd, 0xf7, 0x2e, 0xe9, 0xcb, 0xfa, 0x01, 0xa7, 0x50, 0x2c, 0xcf, 0xb9, 0x60, - 0xe7, 0x11, 0xcc, 0x42, 0x1f, 0x40, 0xce, 0xd3, 0x07, 0x03, 0xd3, 0x1a, 0x50, 0xe3, 0xe1, 0xe7, - 0xe5, 0xc3, 0xd0, 0x53, 0x58, 0xea, 0xdb, 0x96, 0x47, 0x7d, 0xbc, 0xe9, 0x8e, 0x6d, 0xd7, 0xa4, - 0x6e, 0xbe, 0x10, 0x92, 0x22, 0x8e, 0x6f, 0x84, 0x68, 0x92, 0x73, 0x8d, 0x1d, 0xfb, 0xcd, 0x05, - 0xb7, 0x9f, 0x30, 0x74, 0xe8, 0x10, 0xa8, 0x9f, 0x73, 0x51, 0x92, 0xd5, 0xff, 0x0f, 0xe5, 0x29, - 0x06, 0x49, 0x06, 0x1b, 0x68, 0x8b, 0x4a, 0x7e, 0x12, 0xb7, 0x76, 0xae, 0x0f, 0x27, 0x98, 0x5f, - 0x6d, 0x6c, 0xf0, 0x42, 0xfc, 0x5c, 0x90, 0xcf, 0xa1, 0x10, 0x28, 0x3c, 0xfa, 0x08, 0x8a, 0x7d, - 0x07, 0xd3, 0xc0, 0x5a, 0x1f, 0xba, 0x51, 0x75, 0x8b, 0xc2, 0x23, 0xa7, 0x2e, 0x4e, 0x9d, 0x7a, - 0xc0, 0x74, 0xea, 0x9d, 0x4c, 0xcb, 0xbf, 0x27, 0x40, 0x35, 0x66, 0x3f, 0xe8, 0x63, 0x28, 0xe9, - 0xfd, 0xbe, 0x3d, 0xb1, 0xbc, 0x48, 0x79, 0x87, 0x9d, 0x51, 0x91, 0x23, 0xe8, 0xb5, 0xf9, 0x3d, - 0xf0, 0x87, 0xd4, 0x2a, 0x22, 0x5a, 0x0f, 0x1c, 0x4e, 0xcc, 0xe2, 0x23, 0xa8, 0x90, 0x83, 0xd5, - 0x4d, 0x0b, 0x3b, 0xd1, 0x0b, 0xbb, 0x1c, 0x40, 0xc9, 0x62, 0xf2, 0x5f, 0x08, 0x50, 0x8a, 0x5a, - 0xe5, 0xcd, 0x4d, 0xee, 0x1b, 0x54, 0x64, 0xf9, 0xb7, 0xa1, 0x18, 0x39, 0xbc, 0x84, 0xda, 0xc4, - 0x2a, 0xe4, 0x27, 0x2e, 0x31, 0xa1, 0x91, 0x2f, 0xdc, 0x60, 0x8c, 0xee, 0x41, 0x7e, 0xac, 0xbb, - 0xee, 0x6b, 0xdb, 0x61, 0x99, 0x24, 0xe7, 0x33, 0x00, 0xca, 0x7f, 0x2f, 0xc0, 0xe2, 0xbe, 0xe9, - 0xce, 0x53, 0x62, 0x7b, 0x04, 0x05, 0x56, 0xdb, 0x23, 0xa6, 0xce, 0x36, 0x5f, 0x7c, 0xdb, 0xc9, - 0x33, 0x58, 0xab, 0xa1, 0xfa, 0xbf, 0xa8, 0x3d, 0xeb, 0x7d, 0xcf, 0x3c, 0xc7, 0x3c, 0x4c, 0xe4, - 0x23, 0xf4, 0x1c, 0x60, 0x4c, 0xee, 0x31, 0xe6, 0x8e, 0xd2, 0x31, 0x9f, 0x4a, 0x7d, 0x51, 0x47, - 0x1f, 0x98, 0x16, 0x8d, 0x7b, 0xd4, 0x02, 0xa1, 0xa5, 0x40, 0xf9, 0x77, 0x05, 0x40, 0x51, 0x6e, - 0xdd, 0xb1, 0x6d, 0xb9, 0x24, 0x88, 0xca, 0x98, 0x1e, 0x1e, 0x5d, 0x4e, 0xe8, 0x19, 0x1d, 0xc9, - 0x93, 0x55, 0x46, 0x81, 0xbe, 0x84, 0xaa, 0x85, 0xdf, 0x78, 0x5a, 0xe4, 0xfb, 0xe2, 0x3b, 0xbe, - 0x5f, 0x26, 0x13, 0x3a, 0x01, 0x0f, 0xff, 0x28, 0xc0, 0xd2, 0xd1, 0xd8, 0xd0, 0x3d, 0x3c, 0x7d, - 0x66, 0x53, 0xc7, 0x22, 0x5c, 0x77, 0x2c, 0x5c, 0x84, 0x62, 0x28, 0xc2, 0xb0, 0xf8, 0x95, 0x9a, - 0x2a, 0x7e, 0x7d, 0x0c, 0x55, 0xdd, 0x30, 0x34, 0x96, 0x89, 0x68, 0x34, 0x18, 0x4e, 0xd3, 0x60, - 0xb8, 0xac, 0x1b, 0x06, 0x8b, 0x9b, 0x8f, 0x9c, 0xa1, 0x4b, 0x62, 0x4e, 0x07, 0x8f, 0xec, 0x73, - 0x3c, 0x45, 0x9a, 0xa1, 0xa4, 0x12, 0xc3, 0x84, 0xd4, 0xf2, 0x17, 0xb0, 0xd8, 0xf5, 0xec, 0xf1, - 0x7b, 0xb2, 0x2f, 0xff, 0x2d, 0x00, 0x84, 0x07, 0x3b, 0xc7, 0xbe, 0x65, 0xc8, 0x51, 0xad, 0x0a, - 0xd4, 0xa6, 0xf0, 0xb6, 0x93, 0x25, 0x90, 0x56, 0x43, 0x65, 0x7f, 0x8d, 0x69, 0xcd, 0x2b, 0xc7, - 0x34, 0xef, 0x05, 0x14, 0x59, 0x31, 0x91, 0x65, 0x35, 0xab, 0x34, 0x00, 0xba, 0x13, 0x93, 0x36, - 0xab, 0x9a, 0xd1, 0xb4, 0x06, 0xdc, 0xe0, 0x37, 0xfa, 0x3e, 0xc9, 0xfb, 0x74, 0x6f, 0xe2, 0xf2, - 0x8a, 0xca, 0xad, 0xf8, 0x34, 0x8a, 0x54, 0x39, 0x11, 0xfa, 0x00, 0x80, 0x16, 0xeb, 0xb0, 0xa1, - 0xe9, 0x1e, 0x75, 0xc1, 0x29, 0xb5, 0xc0, 0x21, 0x75, 0x0f, 0xdd, 0xa1, 0x86, 0xcc, 0x90, 0x45, - 0x8a, 0xcc, 0xd1, 0x71, 0x9d, 0x16, 0x2c, 0x27, 0x54, 0x3d, 0x28, 0x12, 0xb1, 0x99, 0x1c, 0x52, - 0xf7, 0xd0, 0x33, 0xe2, 0x1a, 0x48, 0x6e, 0x50, 0xfb, 0x30, 0x96, 0x4c, 0x2a, 0x6f, 0xc6, 0xb6, - 0xe3, 0xa9, 0x14, 0xc9, 0xa5, 0x42, 0xe2, 0x03, 0x46, 0x8d, 0xf6, 0xa1, 0x42, 0x0f, 0xa6, 0x6f, - 0x8f, 0xe8, 0x15, 0x81, 0xb9, 0xdd, 0x3c, 0x08, 0xe6, 0xab, 0xb6, 0x3d, 0xda, 0xf1, 0xb1, 0x53, - 0xc2, 0x6d, 0x2e, 0xa8, 0x65, 0x27, 0x8a, 0x45, 0xdf, 0x67, 0xf5, 0xee, 0x4a, 0xac, 0x18, 0xf8, - 0x0a, 0x1f, 0xc7, 0x27, 0xd2, 0xb2, 0xb7, 0x02, 0xc5, 0x48, 0xdd, 0xa5, 0xb6, 0x44, 0xa7, 0x7d, - 0x37, 0xa9, 0x26, 0x15, 0x9f, 0x1e, 0x9d, 0x87, 0xda, 0x50, 0x65, 0x55, 0xa0, 0x70, 0x13, 0x2c, - 0xb9, 0xf8, 0x5e, 0x68, 0x7c, 0x04, 0x7f, 0xe5, 0x2e, 0x2a, 0xde, 0x14, 0x1a, 0x6d, 0x41, 0x86, - 0x42, 0x78, 0xf6, 0x71, 0x77, 0x7a, 0x99, 0xf8, 0x6c, 0x46, 0x8b, 0x5e, 0x40, 0x85, 0x5b, 0x89, - 0x83, 0xdd, 0xc9, 0xd0, 0x73, 0x6b, 0xd5, 0x98, 0xdb, 0x60, 0xb6, 0x42, 0xdd, 0x46, 0x99, 0x91, - 0xaa, 0x8c, 0x12, 0x3d, 0x85, 0x12, 0xcd, 0xaa, 0xfd, 0x99, 0x12, 0x9d, 0xb9, 0x38, 0x55, 0x70, - 0xa0, 0xf3, 0x8a, 0x84, 0xcc, 0x9f, 0xf5, 0x43, 0xf0, 0x93, 0xb9, 0x60, 0xe2, 0x62, 0xac, 0x92, - 0xc6, 0x33, 0x37, 0xe6, 0xab, 0x2a, 0x9c, 0xda, 0x9f, 0xff, 0x39, 0x94, 0x59, 0xe0, 0xef, 0xcf, - 0x5e, 0x8e, 0x31, 0x4c, 0x43, 0x7f, 0x36, 0xb7, 0x44, 0x29, 0xfd, 0x99, 0xcb, 0x90, 0xc1, 0x8e, - 0x63, 0x3b, 0x2c, 0xd8, 0x50, 0xd9, 0x80, 0xa8, 0x28, 0xfd, 0x41, 0x13, 0x89, 0xda, 0x0a, 0xab, - 0x5b, 0x51, 0x08, 0x49, 0x19, 0x50, 0x0d, 0x72, 0x06, 0xf6, 0x74, 0x73, 0xe8, 0xd6, 0x6e, 0xd1, - 0x69, 0xfe, 0x10, 0x3d, 0x86, 0x45, 0x3f, 0x87, 0xd0, 0x86, 0x76, 0x9f, 0xa5, 0xab, 0xb7, 0x59, - 0x6a, 0xeb, 0x23, 0xf6, 0x39, 0x1c, 0xad, 0xc3, 0xd2, 0xb1, 0xde, 0x3f, 0x9b, 0x8c, 0x35, 0x5e, - 0xac, 0xd0, 0x26, 0x2e, 0x36, 0x6a, 0x77, 0x58, 0x99, 0x96, 0xa1, 0x78, 0xcc, 0x7e, 0xe4, 0x62, - 0x03, 0xdd, 0x83, 0xa2, 0x83, 0x3d, 0xe7, 0x42, 0xa3, 0xf7, 0x77, 0xed, 0x2e, 0x65, 0x0b, 0x28, - 0x68, 0x87, 0x40, 0xd0, 0x67, 0x41, 0xe9, 0x26, 0x17, 0x7b, 0xd9, 0x09, 0x05, 0x46, 0x6e, 0x87, - 0x6d, 0xb1, 0x26, 0x34, 0x85, 0xa0, 0x80, 0xf3, 0x98, 0x17, 0x87, 0xe2, 0x79, 0x8d, 0x2f, 0x2b, - 0x4e, 0xce, 0xca, 0x43, 0xcf, 0x23, 0xd5, 0x9e, 0x52, 0xbc, 0x40, 0x14, 0x91, 0x11, 0x9f, 0x14, - 0x10, 0x6f, 0x17, 0x20, 0xe7, 0x30, 0x4d, 0x23, 0x69, 0x09, 0x13, 0x94, 0xfc, 0x73, 0x11, 0x20, - 0xe4, 0x2d, 0xf9, 0x5d, 0x21, 0xe2, 0x66, 0xc4, 0xeb, 0xdc, 0x4c, 0x6a, 0xda, 0xcd, 0xac, 0x42, - 0x7e, 0xaa, 0x60, 0x90, 0x52, 0x83, 0x31, 0xda, 0x0c, 0x7c, 0x1d, 0x4b, 0x31, 0x57, 0x13, 0x0e, - 0x6a, 0x3d, 0xe6, 0xf0, 0x02, 0x4d, 0xc9, 0x46, 0x35, 0x45, 0x86, 0xf2, 0x50, 0x77, 0x89, 0xda, - 0x12, 0xc1, 0xe8, 0x2c, 0x73, 0x4c, 0xa9, 0x45, 0x02, 0x54, 0x09, 0xac, 0xee, 0x11, 0x75, 0x21, - 0x68, 0x13, 0xbb, 0xf4, 0x88, 0xcb, 0xaa, 0x3f, 0x94, 0xd7, 0x21, 0xcb, 0xbe, 0x82, 0x00, 0xb2, - 0xf5, 0x9d, 0x5e, 0xeb, 0x2b, 0x45, 0x5a, 0x40, 0x25, 0xc8, 0xef, 0xb6, 0x0e, 0x5b, 0xdd, 0xa6, - 0xd2, 0x90, 0x04, 0x82, 0xd9, 0xad, 0xb7, 0xf6, 0x95, 0x86, 0x24, 0xca, 0x3f, 0x17, 0x20, 0xef, - 0x4b, 0xc5, 0xaf, 0x44, 0x45, 0x43, 0x10, 0x7f, 0xfc, 0x0d, 0x1d, 0x5b, 0x36, 0x76, 0x6c, 0x08, - 0xd2, 0xae, 0xf9, 0x53, 0xcc, 0x8f, 0x93, 0xfe, 0x26, 0xf4, 0x81, 0xa2, 0xb3, 0xb8, 0x2c, 0x18, - 0xcb, 0xff, 0x22, 0x42, 0x29, 0xaa, 0x13, 0x97, 0xeb, 0x43, 0xc2, 0xcc, 0xf5, 0xa1, 0xfc, 0x15, - 0xf5, 0xa1, 0x28, 0xbf, 0xe2, 0x15, 0xfc, 0xa6, 0x22, 0xfc, 0x3e, 0x86, 0xc5, 0x60, 0xe1, 0x80, - 0x71, 0x16, 0x6a, 0x4a, 0x3e, 0x22, 0xb0, 0xd0, 0xa7, 0xb0, 0x32, 0xcd, 0x4a, 0x30, 0x83, 0xb9, - 0x8b, 0xe5, 0x28, 0x3b, 0xc1, 0xac, 0x07, 0x24, 0x9f, 0x64, 0xde, 0x8c, 0x59, 0x6a, 0x86, 0x7e, - 0xbf, 0xc4, 0x81, 0xcc, 0x56, 0xa7, 0x25, 0x94, 0xbd, 0x4e, 0x42, 0xb9, 0x29, 0x09, 0xc9, 0x7f, - 0x2c, 0x00, 0x84, 0xfe, 0x6c, 0xf6, 0x02, 0xcb, 0xbd, 0xb0, 0x3a, 0x42, 0x98, 0x12, 0xe8, 0xaa, - 0x7e, 0x21, 0xe4, 0x32, 0x4b, 0x73, 0x28, 0x8d, 0xfc, 0xe7, 0x22, 0xdc, 0xaa, 0x4f, 0x3c, 0xfb, - 0xd2, 0x3d, 0x17, 0x79, 0xe1, 0x15, 0x66, 0x7a, 0xe1, 0x5d, 0x48, 0x7c, 0xe1, 0x15, 0xdf, 0xf1, - 0xc2, 0xbb, 0x10, 0x79, 0xe1, 0xfd, 0x82, 0xdf, 0x40, 0xfe, 0x33, 0x6f, 0x8a, 0x5e, 0x05, 0xab, - 0x49, 0xa5, 0x5d, 0xfe, 0xe2, 0x4b, 0xaf, 0xa2, 0x36, 0x7f, 0xf5, 0x55, 0xc2, 0xab, 0xc8, 0x5f, - 0x21, 0x4d, 0x57, 0xb8, 0xb6, 0xa8, 0x1d, 0xdc, 0x48, 0x7c, 0x19, 0xe2, 0xed, 0xf8, 0x5b, 0xbd, - 0xfc, 0x27, 0x22, 0x54, 0xc9, 0xe1, 0x44, 0xae, 0xdc, 0xa9, 0x2a, 0xb2, 0x30, 0x43, 0x15, 0x39, - 0x73, 0x5d, 0x3d, 0x4a, 0x9c, 0xa9, 0x86, 0x93, 0x9a, 0xb9, 0x86, 0x93, 0x9e, 0xbf, 0x86, 0x93, - 0x9d, 0xb7, 0x1e, 0xf5, 0x0f, 0x69, 0x58, 0x4a, 0x88, 0xe7, 0x48, 0xb0, 0xcc, 0xe2, 0xb9, 0xe9, - 0x60, 0x99, 0xc1, 0x48, 0xb0, 0xcc, 0x7f, 0x91, 0x4c, 0xb8, 0xca, 0x5e, 0x8b, 0xed, 0x93, 0x13, - 0x17, 0x7b, 0xda, 0xc8, 0xe5, 0x2a, 0x5b, 0xa6, 0xe0, 0x36, 0x85, 0x1e, 0xb8, 0xc4, 0x43, 0x63, - 0xcb, 0x88, 0x50, 0x31, 0xdd, 0x2d, 0x62, 0xcb, 0x08, 0x68, 0xa2, 0x4d, 0x11, 0xe9, 0xb9, 0x9b, - 0x22, 0x32, 0x33, 0x37, 0x45, 0x64, 0xe7, 0x6b, 0x8a, 0xc8, 0xdd, 0xa0, 0x29, 0x22, 0xff, 0x7e, - 0x4d, 0x11, 0x85, 0xd9, 0x9b, 0x22, 0x60, 0xfe, 0xa6, 0x88, 0xe2, 0x8d, 0x9a, 0x22, 0xfe, 0x35, - 0x0b, 0xab, 0x57, 0xc7, 0xf0, 0xd7, 0xe7, 0xe4, 0x61, 0x02, 0x29, 0x5e, 0xd3, 0x3d, 0x91, 0x8a, - 0xf7, 0x2d, 0x3c, 0x07, 0xf6, 0xf6, 0xa6, 0x8d, 0xcc, 0x37, 0xa6, 0x35, 0xa8, 0x55, 0xa9, 0x44, - 0x62, 0xcf, 0xfb, 0x07, 0x14, 0xa7, 0xb2, 0xb7, 0x4c, 0x36, 0x88, 0x35, 0x3c, 0xa4, 0x67, 0x68, - 0xbb, 0xc8, 0x24, 0xb4, 0x5d, 0xa0, 0xa7, 0x3c, 0x34, 0x63, 0x8a, 0x73, 0x8d, 0x13, 0xa3, 0xe1, - 0x96, 0xff, 0x84, 0xb7, 0x15, 0x8b, 0x03, 0x93, 0x9f, 0xf0, 0xf8, 0x14, 0x3f, 0x0a, 0xfc, 0x61, - 0x24, 0xb0, 0x83, 0x77, 0x3f, 0xe3, 0xf1, 0xd9, 0xe1, 0x53, 0x5e, 0xa8, 0xb6, 0xf9, 0x1b, 0xa8, - 0x6d, 0x61, 0x0e, 0xb5, 0x8d, 0x7b, 0xfa, 0xe2, 0x7c, 0x9e, 0xfe, 0x37, 0x82, 0x34, 0xc7, 0x5f, - 0xa0, 0x14, 0xcf, 0x39, 0x22, 0xa7, 0xe5, 0x27, 0x3a, 0xd7, 0xdc, 0x13, 0xe5, 0xf9, 0xef, 0x09, - 0xf4, 0x03, 0x3f, 0x73, 0xf1, 0x17, 0xa9, 0xd0, 0x45, 0x12, 0xdf, 0x41, 0x79, 0xea, 0xe2, 0x4f, - 0x8d, 0x1a, 0x96, 0x34, 0xbb, 0x61, 0xb1, 0x0f, 0x45, 0x2f, 0xa8, 0xff, 0xce, 0x80, 0x14, 0x4f, - 0x6c, 0xbf, 0xa5, 0x16, 0x9f, 0x52, 0x72, 0x8b, 0x4f, 0xa0, 0xf7, 0xe9, 0xf7, 0xd4, 0xfb, 0xcc, - 0xfb, 0xe9, 0x7d, 0xf6, 0x46, 0x7a, 0xff, 0x6d, 0xb9, 0xeb, 0xb8, 0xde, 0x17, 0x6e, 0xaa, 0xf7, - 0x70, 0x33, 0xbd, 0x2f, 0x7e, 0x13, 0x7a, 0x5f, 0x7e, 0x2f, 0xbd, 0xaf, 0xdc, 0x44, 0xef, 0xff, - 0x26, 0x0d, 0xb5, 0xab, 0x2a, 0x33, 0xd7, 0xdf, 0x26, 0xd1, 0xe6, 0x2b, 0x31, 0xd6, 0x7c, 0xf5, - 0x5d, 0x28, 0x4d, 0x75, 0x5d, 0x31, 0x4b, 0x28, 0xba, 0x61, 0xbf, 0x55, 0x44, 0x65, 0xd2, 0x37, - 0x08, 0x8a, 0x33, 0x37, 0x08, 0x8a, 0xb3, 0x37, 0x55, 0x99, 0xdc, 0xcd, 0x54, 0x26, 0xff, 0x4d, - 0xa8, 0x4c, 0xe1, 0xbd, 0x54, 0x06, 0x66, 0x54, 0x99, 0x88, 0xa2, 0xfc, 0x2c, 0x0b, 0x77, 0xaf, - 0xa9, 0xbb, 0xbd, 0xab, 0xe1, 0x96, 0xb5, 0x1c, 0x85, 0xdd, 0x89, 0x62, 0xd0, 0x9d, 0x48, 0x11, - 0xbc, 0x3b, 0x51, 0x8d, 0x8e, 0x0c, 0x32, 0x2d, 0xd6, 0xd4, 0x98, 0x4a, 0x6c, 0x6a, 0x8c, 0xb5, - 0x34, 0xfe, 0x1f, 0x39, 0xce, 0xfc, 0x8d, 0x1c, 0x67, 0xf6, 0x06, 0x8e, 0x33, 0xf7, 0xeb, 0x80, - 0xe1, 0x7d, 0xac, 0xa0, 0x7a, 0x13, 0xc7, 0xf9, 0x2b, 0x01, 0xd0, 0xe5, 0x02, 0xf2, 0xf5, 0x66, - 0xf0, 0x51, 0xa4, 0xc1, 0x51, 0x8c, 0x37, 0x38, 0x86, 0xed, 0x8d, 0x4f, 0xb8, 0xfe, 0xa6, 0x62, - 0x85, 0xf7, 0x86, 0xe9, 0xe0, 0xbe, 0x97, 0xd0, 0xae, 0xf6, 0x11, 0x94, 0x5f, 0xe3, 0x63, 0xd7, - 0xee, 0x9f, 0x61, 0x2f, 0x6c, 0x5f, 0x6e, 0x2e, 0xa8, 0xa5, 0x00, 0x4c, 0x02, 0xe9, 0xe8, 0xde, - 0x33, 0xf3, 0xee, 0x5d, 0xfe, 0x53, 0x11, 0xa4, 0x38, 0x07, 0xbf, 0xce, 0xe1, 0x7f, 0x29, 0xc2, - 0xe2, 0x25, 0x93, 0xf9, 0xb6, 0xfa, 0xea, 0xb2, 0xd7, 0x9d, 0x66, 0x6a, 0xa6, 0xd3, 0x4c, 0xcf, - 0x7c, 0x9a, 0x99, 0xf9, 0x4f, 0x33, 0x37, 0xef, 0x69, 0xbe, 0xf2, 0x5f, 0x4d, 0xf7, 0x69, 0x66, - 0x3a, 0xff, 0xab, 0xe9, 0x15, 0x29, 0xae, 0xfc, 0x67, 0xc1, 0x7b, 0x6c, 0x97, 0x3f, 0xd5, 0xcc, - 0xbb, 0x32, 0x7f, 0x65, 0x65, 0x8c, 0x6a, 0x91, 0x96, 0xc3, 0xb2, 0x6e, 0x18, 0x4c, 0xec, 0xb1, - 0x57, 0xd6, 0x28, 0x69, 0x2a, 0xfa, 0xca, 0x1a, 0x52, 0xcb, 0x3f, 0x80, 0xca, 0xf4, 0xb3, 0x04, - 0x7a, 0x08, 0x69, 0xd3, 0x3a, 0xb1, 0x2f, 0xbd, 0x52, 0x47, 0x9e, 0x9b, 0x28, 0xc1, 0xda, 0x2b, - 0x28, 0x45, 0x7b, 0xb4, 0xd1, 0x0a, 0xa0, 0xfa, 0x51, 0xa3, 0xd5, 0xd6, 0x76, 0x9a, 0xf5, 0xc3, - 0x43, 0x65, 0x5f, 0xdb, 0x6e, 0xf7, 0x9a, 0xd2, 0xc2, 0x65, 0xf8, 0xbe, 0xb2, 0xdb, 0x93, 0x04, - 0x74, 0x1b, 0x96, 0xa6, 0xe1, 0x6a, 0x6b, 0xaf, 0xd9, 0x93, 0xc4, 0xb5, 0x7f, 0x12, 0xe0, 0x56, - 0xe2, 0xed, 0x83, 0x24, 0x28, 0x35, 0x37, 0x9f, 0x3d, 0xd5, 0x9e, 0x6f, 0x6e, 0x74, 0xb4, 0xad, - 0x0d, 0x69, 0x61, 0x1a, 0xf2, 0x6c, 0x43, 0x12, 0xd0, 0x22, 0x94, 0x29, 0xe4, 0xff, 0x6d, 0x7c, - 0xce, 0x88, 0xc4, 0x18, 0xe8, 0xd9, 0x86, 0x94, 0x42, 0x77, 0xe0, 0x56, 0xa7, 0xad, 0xf6, 0xd4, - 0x7a, 0xab, 0xa7, 0x4d, 0x2d, 0x99, 0xbe, 0x02, 0xf5, 0x6c, 0x43, 0xca, 0xa0, 0x55, 0x58, 0x99, - 0x46, 0x05, 0x1f, 0xc9, 0x5e, 0x85, 0x7b, 0xb6, 0x21, 0xe5, 0xd6, 0xb6, 0x79, 0x63, 0x77, 0x68, - 0x74, 0x68, 0x19, 0xa4, 0x86, 0xb2, 0x5b, 0x3f, 0xda, 0xef, 0x69, 0xbb, 0xad, 0x7d, 0xa5, 0xf7, - 0x9b, 0x1d, 0x45, 0x5a, 0x40, 0x39, 0x48, 0x1d, 0x74, 0x9e, 0x4a, 0x02, 0xf9, 0xd1, 0xde, 0xdb, - 0x93, 0x44, 0x06, 0xd9, 0x92, 0x52, 0x6b, 0x4d, 0x5f, 0x52, 0x7e, 0x6f, 0x68, 0x74, 0x89, 0x8e, - 0xda, 0xee, 0xb5, 0x77, 0xda, 0xfb, 0xd2, 0x02, 0xca, 0x43, 0x5a, 0xed, 0x1d, 0x74, 0xd8, 0x1a, - 0x5d, 0xb5, 0x27, 0x89, 0xa8, 0x0c, 0x85, 0x57, 0xca, 0x76, 0xb7, 0xbd, 0xf3, 0x52, 0xe9, 0x49, - 0xa9, 0xb5, 0x43, 0xb8, 0x95, 0xd8, 0x6c, 0x8a, 0x1e, 0xc0, 0x3d, 0x7f, 0xc1, 0xae, 0xb2, 0x77, - 0xa0, 0x1c, 0xf6, 0x94, 0x06, 0xe5, 0x2e, 0xba, 0x3e, 0x39, 0xf1, 0xfd, 0x6e, 0x08, 0x11, 0xd6, - 0x9e, 0xc4, 0x9a, 0x5d, 0x79, 0x23, 0x60, 0x01, 0x32, 0xad, 0xc3, 0x86, 0xf2, 0xb5, 0xb4, 0x40, - 0x18, 0xe8, 0xb5, 0x0e, 0x94, 0x6e, 0xaf, 0x4e, 0x18, 0x5b, 0x3b, 0x81, 0x6a, 0xac, 0x8b, 0x90, - 0x28, 0x49, 0xeb, 0xa0, 0xbe, 0xa7, 0x68, 0xdd, 0xa3, 0xdd, 0xdd, 0xd6, 0xd7, 0x9a, 0x3f, 0x73, - 0x15, 0x56, 0xa6, 0xe0, 0x91, 0x65, 0xd0, 0x3d, 0xb8, 0x3b, 0x85, 0x3b, 0x6c, 0x1f, 0x2a, 0x5a, - 0xfb, 0x2b, 0x45, 0x7d, 0xa5, 0xb6, 0x7a, 0x8a, 0x24, 0xae, 0xfd, 0x08, 0xa4, 0xf8, 0x6b, 0x3b, - 0x59, 0x50, 0xd9, 0x53, 0x95, 0x6e, 0x57, 0xeb, 0xb6, 0x8f, 0xd4, 0x1d, 0x45, 0x23, 0x27, 0xaf, - 0xbd, 0x52, 0xb6, 0xd9, 0xc7, 0x12, 0x70, 0xdd, 0xc6, 0x4b, 0x49, 0x58, 0xfb, 0x2b, 0x01, 0x4a, - 0xd1, 0x37, 0x78, 0xb4, 0x04, 0x55, 0x9f, 0xb8, 0x57, 0x57, 0x7b, 0xad, 0xc3, 0x3d, 0x69, 0x81, - 0x68, 0x1a, 0x07, 0xf2, 0x87, 0x24, 0x21, 0x02, 0x52, 0x0e, 0x1b, 0x84, 0x4a, 0x8c, 0x4c, 0xdd, - 0x69, 0x1f, 0x74, 0xf6, 0x95, 0x9e, 0x22, 0xa5, 0x22, 0x74, 0xfc, 0xa5, 0x29, 0x8d, 0x10, 0x54, - 0xfc, 0xd5, 0xb6, 0xdb, 0x6a, 0x4f, 0x69, 0x48, 0x19, 0x54, 0x83, 0x65, 0x0e, 0xdb, 0x6f, 0x1d, - 0xb4, 0x7a, 0x9a, 0xaa, 0xd4, 0x77, 0x9a, 0x4a, 0x43, 0xca, 0xae, 0x1d, 0xf1, 0x7f, 0x20, 0xe1, - 0xc5, 0x2f, 0x04, 0x15, 0x5f, 0x98, 0x07, 0xad, 0xaf, 0x19, 0x7b, 0x2b, 0x80, 0x1a, 0x47, 0xf5, - 0xfd, 0xc0, 0xe2, 0xea, 0x7b, 0xca, 0x21, 0x31, 0xc5, 0x55, 0x58, 0x99, 0x86, 0xef, 0xf7, 0x14, - 0xf5, 0xb0, 0x4e, 0x0e, 0x71, 0xf3, 0x2f, 0x33, 0x90, 0xe5, 0x05, 0xf3, 0x1e, 0xd4, 0x68, 0x7d, - 0x20, 0xa1, 0xfe, 0x87, 0x66, 0x79, 0xe1, 0x5f, 0x4d, 0xea, 0x79, 0x41, 0x5f, 0x12, 0xc5, 0xd6, - 0x1d, 0x2f, 0xa8, 0x7e, 0xa0, 0xab, 0x9f, 0xfa, 0x93, 0x57, 0xe8, 0xc0, 0x0a, 0x5d, 0xe1, 0xf2, - 0xcb, 0xc7, 0xbb, 0x5f, 0xff, 0x93, 0x57, 0xfc, 0x0a, 0xee, 0xd0, 0x15, 0x93, 0x12, 0x0e, 0x34, - 0x53, 0x1f, 0x40, 0xf2, 0xba, 0x0d, 0x90, 0xc2, 0x75, 0xf9, 0x72, 0xd7, 0xf5, 0x03, 0x24, 0xaf, - 0x52, 0x87, 0x52, 0xf4, 0x96, 0x42, 0x61, 0xf0, 0x9a, 0x70, 0x79, 0xbd, 0x63, 0x09, 0xe6, 0x53, - 0x2e, 0x2d, 0x31, 0x75, 0x4b, 0x25, 0x2f, 0xa1, 0x00, 0x84, 0x5d, 0x4e, 0x28, 0x0c, 0xe0, 0x2f, - 0x35, 0x6a, 0xad, 0xde, 0x4d, 0xc4, 0xf1, 0xb6, 0xa8, 0x2f, 0x00, 0xc2, 0x3e, 0x1f, 0x14, 0x7d, - 0x04, 0x8e, 0x35, 0xff, 0x24, 0x72, 0xb1, 0xbd, 0xfb, 0x5b, 0x0f, 0x06, 0xa6, 0x77, 0x3a, 0x39, - 0x5e, 0xef, 0xdb, 0xa3, 0x27, 0x9c, 0xe0, 0x89, 0xdf, 0x35, 0xef, 0x03, 0xfe, 0x4e, 0x2c, 0xef, - 0x9b, 0xe7, 0xf8, 0x25, 0xeb, 0xf1, 0xf3, 0xec, 0x7f, 0x17, 0x2b, 0x7c, 0xfc, 0xe2, 0x05, 0x05, - 0x1c, 0x67, 0xe9, 0x94, 0xad, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xf3, 0x78, 0xc1, 0x1a, - 0x3a, 0x00, 0x00, + // 4266 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4b, 0x70, 0x1c, 0x49, + 0x56, 0xaa, 0xea, 0xff, 0xeb, 0x5f, 0x29, 0x25, 0x6b, 0xda, 0xf2, 0x7a, 0xec, 0x6d, 0xef, 0x8c, + 0x3d, 0xf2, 0xac, 0x6c, 0x24, 0xaf, 0x3d, 0x6b, 0x98, 0x65, 0x5a, 0xea, 0x92, 0xd5, 0x6b, 0x49, + 0xdd, 0x5b, 0xdd, 0x1a, 0x0f, 0x04, 0x41, 0x45, 0xa9, 0x2b, 0xd5, 0xaa, 0x50, 0x77, 0x55, 0x6f, + 0x55, 0xb5, 0x6c, 0xed, 0x8d, 0x0b, 0x11, 0x10, 0x2c, 0x41, 0x40, 0x70, 0x81, 0x03, 0x17, 0x82, + 0x03, 0xec, 0x85, 0xab, 0x2f, 0xec, 0x7d, 0x0f, 0x44, 0x40, 0x10, 0x9c, 0x08, 0xee, 0x10, 0x6c, + 0x70, 0xe1, 0x4e, 0xe4, 0xa7, 0xaa, 0xb2, 0x4b, 0x25, 0xb9, 0xdb, 0x1a, 0x86, 0xcb, 0x9e, 0xd4, + 0xf9, 0x3e, 0x59, 0x2f, 0xf3, 0xbd, 0x7c, 0xf9, 0xde, 0xcb, 0x27, 0x58, 0x1e, 0x5a, 0x67, 0xf8, + 0xd4, 0xf2, 0x75, 0x3c, 0x70, 0xb1, 0xe7, 0xad, 0x8f, 0x5d, 0xc7, 0x77, 0x50, 0x8e, 0x43, 0x57, + 0x43, 0xf4, 0xc8, 0x31, 0xf1, 0x90, 0xa3, 0x57, 0x97, 0x87, 0xce, 0x60, 0x80, 0xdd, 0x47, 0xce, + 0xd8, 0xb7, 0x1c, 0x9b, 0x43, 0xeb, 0xff, 0x9a, 0x02, 0xd4, 0xf5, 0x0d, 0xd7, 0x57, 0xe9, 0x54, + 0x1a, 0xfe, 0xf1, 0x04, 0x7b, 0x3e, 0xba, 0x05, 0x05, 0xd7, 0x71, 0x46, 0xba, 0x6d, 0x8c, 0x70, + 0x4d, 0xba, 0x2b, 0x3d, 0x28, 0x68, 0x79, 0x02, 0x38, 0x30, 0x46, 0x18, 0x7d, 0x0f, 0xf2, 0x3e, + 0x1e, 0x8d, 0x87, 0x86, 0x8f, 0x6b, 0xf2, 0x5d, 0xe9, 0x41, 0x71, 0xe3, 0x83, 0x75, 0xfe, 0xc9, + 0xf5, 0x1e, 0x47, 0x74, 0x9d, 0x89, 0xdb, 0xc7, 0xbb, 0x0b, 0x5a, 0x48, 0x8a, 0x3e, 0x86, 0xd4, + 0x6b, 0x7c, 0x54, 0x4b, 0x51, 0x0e, 0x14, 0x72, 0xbc, 0xc2, 0x47, 0x21, 0x31, 0x21, 0x40, 0x9f, + 0x42, 0x66, 0x84, 0x4d, 0xcb, 0xa8, 0xa5, 0x29, 0xe5, 0x72, 0x48, 0xb9, 0x4f, 0xa0, 0x21, 0x2d, + 0x23, 0x42, 0x9f, 0x41, 0x76, 0xec, 0x62, 0x0f, 0xfb, 0xb5, 0xcc, 0x5d, 0xe9, 0x41, 0x65, 0xe3, + 0xc3, 0x90, 0x5c, 0xb5, 0xfb, 0x8e, 0x69, 0xd9, 0x83, 0x36, 0x5b, 0x70, 0x87, 0x52, 0xed, 0x4a, + 0x1a, 0xa7, 0x47, 0x4f, 0x21, 0x6f, 0x98, 0x67, 0x86, 0xdd, 0xc7, 0x66, 0x2d, 0x4b, 0x3f, 0x55, + 0xbb, 0x8c, 0x77, 0x57, 0xd2, 0x42, 0x5a, 0xf4, 0x09, 0xe4, 0x9c, 0x89, 0x3f, 0x9e, 0xf8, 0x5e, + 0x2d, 0x77, 0x37, 0xf5, 0xa0, 0xb8, 0x51, 0x0d, 0xd9, 0xda, 0x14, 0xae, 0x05, 0x78, 0xf4, 0x18, + 0x72, 0x9e, 0xef, 0xb8, 0xc6, 0x00, 0xd7, 0xf2, 0xf4, 0x0b, 0x2b, 0x21, 0x69, 0x97, 0xc1, 0xb7, + 0x1d, 0xfb, 0xd8, 0x1a, 0x68, 0x01, 0x19, 0xda, 0x80, 0xfc, 0x6b, 0x7c, 0x74, 0xe2, 0x38, 0xa7, + 0x5e, 0xad, 0x40, 0x67, 0x5f, 0x11, 0x77, 0x8a, 0x20, 0x38, 0x4b, 0x48, 0xb7, 0x95, 0x87, 0xac, + 0x47, 0x77, 0x65, 0x0b, 0x20, 0x8f, 0xb9, 0xe4, 0xf5, 0x3f, 0x96, 0xa0, 0x32, 0xad, 0x0d, 0xb4, + 0x02, 0xd9, 0xa1, 0x71, 0xee, 0x4c, 0x7c, 0xae, 0x52, 0x3e, 0x42, 0xb7, 0x01, 0x8c, 0x89, 0x69, + 0x39, 0xba, 0x63, 0x0f, 0xcf, 0xa9, 0x4a, 0xf3, 0x5a, 0x81, 0x42, 0xda, 0xf6, 0xf0, 0x9c, 0xa0, + 0xcf, 0x2c, 0x13, 0x73, 0x74, 0x8a, 0xa1, 0x29, 0x84, 0xa2, 0x3f, 0x86, 0x6a, 0x7f, 0xe2, 0xf9, + 0xce, 0x48, 0x3f, 0x32, 0x3c, 0xac, 0x4f, 0xdc, 0x21, 0xd5, 0x5c, 0x41, 0x2b, 0x33, 0xf0, 0x96, + 0xe1, 0xe1, 0x43, 0x77, 0x58, 0xff, 0x03, 0x09, 0x0a, 0xa1, 0xb2, 0x91, 0x02, 0x29, 0x42, 0xc9, + 0x04, 0x21, 0x3f, 0xaf, 0x29, 0xc5, 0xa7, 0x80, 0x8c, 0xd7, 0x86, 0xe5, 0xeb, 0x1e, 0xb1, 0x66, + 0xdd, 0xb3, 0x06, 0xb6, 0xc1, 0x04, 0xc9, 0x6b, 0x0a, 0xc5, 0x50, 0x33, 0xef, 0x52, 0x78, 0xfd, + 0x97, 0x12, 0x14, 0x05, 0x73, 0x42, 0xcf, 0xa0, 0xc2, 0x26, 0xf7, 0x5d, 0xa3, 0x7f, 0xaa, 0x5b, + 0x26, 0x13, 0x6c, 0xab, 0xfa, 0xb6, 0x53, 0xa2, 0x88, 0x1e, 0x81, 0xb7, 0x9a, 0xbb, 0x0b, 0x9a, + 0x38, 0x36, 0xd1, 0x2e, 0x2c, 0x8e, 0x0d, 0xd7, 0xb7, 0xfa, 0xd6, 0xd8, 0xb0, 0x7d, 0x9d, 0xe2, + 0xf8, 0xa1, 0xb8, 0x19, 0x2a, 0xae, 0x13, 0x51, 0x7c, 0x49, 0x08, 0x76, 0x17, 0x34, 0x65, 0x1c, + 0x83, 0xa1, 0x35, 0xc8, 0xd0, 0xc5, 0x5e, 0x30, 0xfb, 0x06, 0x81, 0x72, 0xa5, 0x33, 0x12, 0x74, + 0x1f, 0xd2, 0xa6, 0xe1, 0x1b, 0xd4, 0xe4, 0x8b, 0x1b, 0x4b, 0x21, 0x69, 0xd3, 0xf0, 0x0d, 0x4e, + 0x49, 0x09, 0xb6, 0x72, 0x90, 0xa1, 0x22, 0xd5, 0x7f, 0x17, 0x94, 0xb8, 0x14, 0x68, 0x15, 0xf2, + 0x96, 0x89, 0x6d, 0xdf, 0xf2, 0xcf, 0x83, 0x33, 0x1e, 0x8c, 0xd1, 0x3a, 0x2c, 0x8d, 0x5d, 0x7c, + 0x8c, 0x5d, 0xdd, 0xeb, 0xbb, 0x18, 0xdb, 0xba, 0x77, 0x62, 0xb8, 0x98, 0x6b, 0x65, 0x91, 0xa1, + 0xba, 0x14, 0xd3, 0x25, 0x88, 0xfa, 0x73, 0x28, 0x0a, 0x72, 0xa2, 0x87, 0x90, 0x75, 0x9d, 0x89, + 0x8f, 0xbd, 0x9a, 0x44, 0x8d, 0x78, 0x69, 0x7a, 0x35, 0x1a, 0xc1, 0x69, 0x9c, 0xa4, 0xfe, 0xdf, + 0x12, 0x40, 0x04, 0x46, 0xf7, 0x21, 0x1f, 0xd3, 0x02, 0xbc, 0xed, 0xe4, 0xfc, 0x50, 0x01, 0xfc, + 0xa7, 0x89, 0x36, 0x61, 0x59, 0xdc, 0xfb, 0x70, 0x2d, 0x44, 0xc8, 0xc2, 0xee, 0x82, 0xb6, 0x24, + 0x60, 0x5b, 0xc1, 0xc2, 0x7e, 0x08, 0xe2, 0xd6, 0xeb, 0xa7, 0x96, 0x6d, 0x52, 0x63, 0xaa, 0x6c, + 0xdc, 0x4e, 0xd2, 0x57, 0xcb, 0x3e, 0x76, 0xd6, 0x5f, 0x5a, 0xb6, 0xb9, 0xbb, 0xa0, 0x55, 0x05, + 0x46, 0x02, 0x42, 0x8f, 0x20, 0xd7, 0x3f, 0x31, 0x6c, 0x1b, 0x33, 0x43, 0xab, 0x6c, 0xdc, 0x88, + 0x29, 0x8d, 0x21, 0xb5, 0x80, 0x8a, 0xa8, 0x63, 0x64, 0xf8, 0xfd, 0x93, 0x7a, 0x03, 0x20, 0xd2, + 0x15, 0xda, 0x84, 0x82, 0x87, 0x87, 0xb8, 0xef, 0x3b, 0x6e, 0xb0, 0x61, 0x37, 0xa6, 0x74, 0xda, + 0xe5, 0x58, 0x2d, 0xa2, 0xab, 0xff, 0x54, 0x82, 0x92, 0x88, 0xfb, 0x3f, 0xde, 0xb7, 0x15, 0xc8, + 0xf8, 0xce, 0xd8, 0xea, 0xd3, 0xcd, 0x22, 0x54, 0x6c, 0x18, 0x2d, 0xe9, 0x9f, 0x52, 0x50, 0x8d, + 0xb9, 0x4d, 0xb4, 0x0c, 0x99, 0xd7, 0x96, 0xe9, 0x9f, 0x50, 0x79, 0x32, 0x1a, 0x1b, 0x10, 0x37, + 0x74, 0x82, 0xad, 0xc1, 0x89, 0x4f, 0xbf, 0x98, 0xd1, 0xf8, 0x88, 0x50, 0x9b, 0x78, 0xec, 0x9f, + 0xd0, 0x4f, 0x64, 0x34, 0x36, 0x40, 0xdf, 0x82, 0xc2, 0xb1, 0x6b, 0x8c, 0xb0, 0x4b, 0xae, 0x9b, + 0x34, 0xc5, 0x44, 0x00, 0xf4, 0x04, 0x8a, 0xcc, 0x69, 0xf4, 0x1d, 0x13, 0xf7, 0xf9, 0x1d, 0xb0, + 0x14, 0x3f, 0x3b, 0x26, 0xee, 0x6b, 0xcc, 0xb9, 0xd0, 0xdf, 0xe8, 0x1e, 0x94, 0x19, 0xd7, 0x91, + 0xe5, 0xd3, 0x79, 0xb3, 0x74, 0xde, 0x12, 0x05, 0x6e, 0x31, 0x18, 0xba, 0x0f, 0x55, 0x46, 0x74, + 0xec, 0x92, 0x5b, 0xd1, 0xee, 0x9f, 0xd7, 0x72, 0x94, 0xac, 0x42, 0xc1, 0x3b, 0x01, 0x94, 0xc8, + 0xc0, 0x9c, 0x07, 0x93, 0x21, 0x1f, 0x93, 0x81, 0x1e, 0x36, 0x2e, 0xc3, 0x59, 0xf8, 0x9b, 0xc8, + 0xc0, 0xb8, 0x02, 0x19, 0x0a, 0x4c, 0x06, 0x0a, 0x0c, 0x64, 0xf8, 0x14, 0xd0, 0x29, 0x3e, 0xd7, + 0xe9, 0x7a, 0x75, 0xcb, 0xf6, 0xb1, 0x7b, 0x66, 0x0c, 0x6b, 0x70, 0x57, 0x7a, 0x20, 0x69, 0xca, + 0x29, 0x3e, 0xdf, 0x21, 0x88, 0x16, 0x87, 0xa3, 0xfb, 0xc1, 0xb2, 0x7e, 0x3c, 0x31, 0x86, 0x44, + 0xa3, 0x45, 0x32, 0xe5, 0x96, 0x5c, 0x93, 0xf8, 0xd2, 0x7e, 0xc4, 0xe0, 0x84, 0x90, 0x7d, 0x3b, + 0x20, 0x2c, 0x45, 0x84, 0x14, 0xc1, 0x09, 0xeb, 0x7f, 0x24, 0x43, 0x96, 0x5d, 0x6a, 0xe8, 0x13, + 0x48, 0x1f, 0x5b, 0x43, 0x16, 0x0d, 0x88, 0x07, 0x7a, 0xc7, 0x1a, 0x62, 0x46, 0xb2, 0xbb, 0xa0, + 0x51, 0x12, 0xf4, 0x08, 0xb2, 0x9e, 0xef, 0x62, 0x63, 0xc4, 0x3d, 0xe1, 0x0d, 0xe1, 0xd6, 0x23, + 0xe0, 0x90, 0x9c, 0x93, 0xa1, 0xe7, 0x90, 0xf7, 0xf0, 0x60, 0x84, 0x6d, 0xdf, 0xe3, 0xf1, 0xc1, + 0xb7, 0x22, 0x16, 0x86, 0xc0, 0xe6, 0xd4, 0x87, 0x42, 0x7a, 0xb4, 0x0e, 0x59, 0x6b, 0x64, 0x0c, + 0xb0, 0x77, 0xc1, 0x71, 0xb6, 0x08, 0x38, 0xfa, 0x16, 0xa3, 0x12, 0xef, 0xe4, 0xec, 0x4c, 0x77, + 0x32, 0xb9, 0x5f, 0xfb, 0x14, 0x54, 0xff, 0x43, 0x09, 0x20, 0x12, 0x03, 0x7d, 0x0f, 0x0a, 0x64, + 0xbd, 0xba, 0x7f, 0x3e, 0x66, 0xfb, 0x52, 0x89, 0x87, 0x10, 0x4c, 0xea, 0xde, 0xf9, 0x18, 0x6b, + 0xf9, 0x63, 0xfe, 0x8b, 0xf8, 0x5d, 0xf2, 0x7b, 0x6c, 0xf8, 0x27, 0xec, 0xcc, 0x69, 0xe1, 0x18, + 0x7d, 0x02, 0x8a, 0x69, 0x79, 0xc6, 0xd1, 0x10, 0xeb, 0x23, 0xc3, 0xb6, 0x8e, 0xb1, 0xe7, 0xf3, + 0xbb, 0xae, 0xca, 0xe1, 0xfb, 0x1c, 0x5c, 0x7f, 0x05, 0x25, 0x71, 0x3b, 0xd1, 0x26, 0xe4, 0x69, + 0x4c, 0xd7, 0x77, 0x86, 0x5c, 0x98, 0x0f, 0x62, 0xfb, 0xde, 0xe1, 0x68, 0x2d, 0x24, 0x44, 0x08, + 0xd2, 0x13, 0x77, 0xe8, 0xd5, 0xe4, 0xbb, 0xa9, 0x07, 0x05, 0x8d, 0xfe, 0xae, 0xff, 0x75, 0x1a, + 0x96, 0x12, 0x76, 0x9d, 0x68, 0x29, 0xf6, 0x81, 0x0f, 0x93, 0xb5, 0x94, 0xf0, 0x9d, 0xfb, 0x50, + 0x25, 0x6b, 0x24, 0xf1, 0xa4, 0x4e, 0x6e, 0x0f, 0xeb, 0x0d, 0x5f, 0x7a, 0x25, 0x00, 0x77, 0x28, + 0x94, 0x1c, 0x8b, 0xf1, 0xd0, 0x38, 0x1f, 0x5a, 0x9e, 0xcf, 0xa2, 0x4f, 0xea, 0x6f, 0xb4, 0x52, + 0x00, 0xa4, 0x11, 0xe8, 0xa7, 0x80, 0xc8, 0x87, 0xf5, 0x69, 0xca, 0x22, 0xa5, 0x54, 0x08, 0xa6, + 0x23, 0x52, 0x7f, 0x02, 0x0a, 0xb7, 0x16, 0xdd, 0x9c, 0xb8, 0x06, 0x71, 0x4d, 0xd4, 0x56, 0xca, + 0x5a, 0x95, 0xc3, 0x9b, 0x1c, 0x8c, 0x54, 0x41, 0x4c, 0x6f, 0x72, 0x4c, 0xc4, 0x04, 0xba, 0xd2, + 0x4b, 0xec, 0xb1, 0x4b, 0x69, 0xa2, 0x45, 0xb0, 0x71, 0xa2, 0x16, 0xf3, 0x89, 0x5a, 0x44, 0xf7, + 0x40, 0xf6, 0x36, 0xf9, 0x45, 0xbe, 0x18, 0x7d, 0x64, 0xf3, 0x70, 0x3c, 0x74, 0x0c, 0x72, 0xeb, + 0xc8, 0xde, 0x26, 0x09, 0x9d, 0x07, 0xfd, 0x31, 0xb7, 0xd7, 0x28, 0x74, 0x7e, 0xb1, 0xdd, 0x09, + 0xc9, 0x08, 0x01, 0x7a, 0x0c, 0x19, 0xe3, 0x27, 0x13, 0x17, 0x53, 0x47, 0x25, 0xc6, 0xb3, 0x0d, + 0x02, 0xdd, 0x1a, 0x3a, 0x47, 0x21, 0x3d, 0x23, 0x24, 0x47, 0xd5, 0x18, 0x5a, 0xed, 0x6e, 0x97, + 0xba, 0x1f, 0xf1, 0xa8, 0x36, 0x28, 0x38, 0xa4, 0xe7, 0x64, 0xe4, 0x30, 0xb0, 0xe8, 0xb6, 0xfe, + 0x5f, 0x29, 0x28, 0x0a, 0x47, 0x8c, 0x2c, 0xba, 0x6f, 0x8c, 0xfd, 0x89, 0x2b, 0x78, 0x2a, 0x89, + 0x6d, 0x33, 0x87, 0x87, 0x8e, 0x2a, 0xbc, 0x17, 0xe4, 0xe4, 0x7b, 0x21, 0x35, 0x75, 0x2f, 0x24, + 0xd8, 0x4e, 0x3a, 0xd1, 0x76, 0x1a, 0x17, 0xb5, 0x97, 0x89, 0x9d, 0x4a, 0x2a, 0xf0, 0x15, 0x9a, + 0x7b, 0x02, 0x45, 0xea, 0x27, 0xb8, 0x2f, 0xcf, 0xc6, 0x7c, 0x39, 0x65, 0xe7, 0xbe, 0xdc, 0x0a, + 0x7f, 0x27, 0xea, 0x3b, 0x77, 0x95, 0xbe, 0xf3, 0x33, 0xe9, 0xbb, 0x30, 0xb3, 0xbe, 0x61, 0x7e, + 0x7d, 0x17, 0xe7, 0xd5, 0xf7, 0x2f, 0x24, 0x28, 0x4f, 0x79, 0x48, 0xbe, 0x16, 0x69, 0xa6, 0xb5, + 0xc8, 0x33, 0xaf, 0x25, 0x35, 0xff, 0x5a, 0xd2, 0xb3, 0xad, 0x05, 0xa8, 0x03, 0x23, 0x17, 0x9c, + 0x5b, 0xff, 0xcf, 0x34, 0xe4, 0x03, 0x49, 0x51, 0x1d, 0xc0, 0xe8, 0xf7, 0xb1, 0xe7, 0xe9, 0xa7, + 0x98, 0xc7, 0xc2, 0x5b, 0xa9, 0x9f, 0x77, 0x64, 0xad, 0xc0, 0xc0, 0x2f, 0xf1, 0x39, 0xba, 0x05, + 0x59, 0x0f, 0xf7, 0x5d, 0xcc, 0xa2, 0x16, 0x8e, 0xe7, 0x20, 0xf4, 0x00, 0xca, 0x1e, 0xf6, 0x3c, + 0xcb, 0xb1, 0x75, 0xdf, 0x39, 0xc5, 0x36, 0xf3, 0x45, 0x8c, 0xa6, 0xc4, 0x31, 0x3d, 0x82, 0x40, + 0x0f, 0xa1, 0x6a, 0x78, 0xde, 0x64, 0x84, 0x75, 0xd7, 0x19, 0x62, 0xdd, 0x70, 0x6d, 0x7a, 0xf9, + 0x52, 0x5a, 0x49, 0x2b, 0x33, 0x9c, 0xe6, 0x0c, 0x71, 0xc3, 0xb5, 0xd1, 0x8f, 0xe0, 0x03, 0x91, + 0x18, 0xbf, 0xf1, 0xb1, 0x6b, 0x1b, 0x43, 0x12, 0xe1, 0x95, 0x29, 0xd3, 0xea, 0xcf, 0x3b, 0xf2, + 0xdb, 0xce, 0x72, 0xc4, 0xa5, 0x72, 0x92, 0x56, 0x53, 0x4b, 0x82, 0x9a, 0xe4, 0x90, 0xb9, 0x78, + 0x40, 0x5c, 0x20, 0x73, 0xac, 0x7c, 0x44, 0x2e, 0x25, 0x6c, 0x9b, 0x63, 0xc7, 0xb2, 0x7d, 0x7e, + 0xba, 0xc2, 0x31, 0xe1, 0x39, 0x9a, 0xf4, 0x4f, 0x79, 0x8e, 0x5d, 0xd0, 0xf8, 0x08, 0x3d, 0x00, + 0xe5, 0xd8, 0x71, 0xfb, 0x58, 0x27, 0x57, 0x97, 0xee, 0xf9, 0xe7, 0x43, 0x76, 0xa7, 0xe6, 0xb5, + 0x0a, 0x85, 0x77, 0x0c, 0xff, 0xa4, 0x4b, 0xa0, 0xe8, 0x0b, 0xc8, 0x8f, 0xb0, 0x6f, 0xd0, 0xa4, + 0x85, 0x25, 0xcd, 0x77, 0x2e, 0xd8, 0xcb, 0xfa, 0x3e, 0xa7, 0x50, 0x6d, 0xdf, 0x3d, 0x67, 0xfb, + 0x11, 0x72, 0xa1, 0xdb, 0x90, 0xf3, 0x8d, 0xc1, 0xc0, 0xb2, 0x07, 0xf4, 0xf0, 0xf0, 0xfd, 0x0a, + 0x60, 0xe8, 0x09, 0x2c, 0xf5, 0x1d, 0xdb, 0xa7, 0x3e, 0xde, 0xf2, 0xc6, 0x8e, 0x67, 0x51, 0x37, + 0x5f, 0x88, 0x48, 0x11, 0xc7, 0x37, 0x23, 0x34, 0xc9, 0xb9, 0xc6, 0xae, 0xf3, 0xe6, 0x9c, 0x9f, + 0x9f, 0x28, 0x74, 0xe8, 0x10, 0x68, 0x90, 0x73, 0x51, 0x92, 0xd5, 0x5f, 0x87, 0xf2, 0x94, 0x80, + 0x24, 0x83, 0x0d, 0xad, 0x45, 0x23, 0x3f, 0x89, 0x5b, 0x3b, 0x33, 0x86, 0x13, 0xcc, 0xaf, 0x36, + 0x36, 0x78, 0x2e, 0x7f, 0x26, 0xd5, 0xcf, 0xa0, 0x10, 0x1a, 0x3c, 0xfa, 0x08, 0x8a, 0x7d, 0x17, + 0xd3, 0xc0, 0xda, 0x18, 0x7a, 0xa2, 0xb9, 0x89, 0x70, 0x61, 0xd7, 0xe5, 0xa9, 0x5d, 0x0f, 0x85, + 0x4e, 0xbd, 0x53, 0xe8, 0xfa, 0xef, 0x4b, 0x50, 0x8d, 0x9d, 0x1f, 0xf4, 0x31, 0x94, 0x8c, 0x7e, + 0xdf, 0x99, 0xd8, 0xbe, 0x50, 0xde, 0x61, 0x7b, 0x54, 0xe4, 0x08, 0x7a, 0x6d, 0x7e, 0x07, 0x82, + 0x21, 0x3d, 0x15, 0x82, 0xd5, 0x03, 0x87, 0x93, 0x63, 0xf1, 0x11, 0x54, 0xc8, 0xc6, 0x1a, 0x96, + 0x8d, 0x5d, 0xf1, 0xc2, 0x2e, 0x87, 0x50, 0x32, 0x59, 0xfd, 0x2f, 0x25, 0x28, 0x89, 0xa7, 0xf2, + 0xfa, 0x47, 0xee, 0x6b, 0x34, 0xe4, 0xfa, 0xef, 0x40, 0x51, 0xd8, 0xbc, 0x84, 0xda, 0xc4, 0x2a, + 0xe4, 0x27, 0x1e, 0x39, 0x42, 0xa3, 0x40, 0xb9, 0xe1, 0x18, 0xdd, 0x81, 0xfc, 0xd8, 0xf0, 0xbc, + 0xd7, 0x8e, 0xcb, 0x32, 0x49, 0x2e, 0x67, 0x08, 0xac, 0xff, 0x9d, 0x04, 0x8b, 0x7b, 0x96, 0x37, + 0x4f, 0x89, 0xed, 0x01, 0x14, 0x58, 0x6d, 0x8f, 0x1c, 0x75, 0xb6, 0xf8, 0xe2, 0xdb, 0x4e, 0x9e, + 0xc1, 0x5a, 0x4d, 0x2d, 0xf8, 0x45, 0xcf, 0xb3, 0xd1, 0xf7, 0xad, 0x33, 0xcc, 0xc3, 0x44, 0x3e, + 0x42, 0xcf, 0x00, 0xc6, 0xe4, 0x1e, 0x63, 0xee, 0x28, 0x1d, 0xf3, 0xa9, 0xd4, 0x17, 0x75, 0x8c, + 0x81, 0x65, 0xd3, 0xb8, 0x47, 0x2b, 0x10, 0x5a, 0x0a, 0xac, 0xff, 0x9e, 0x04, 0x48, 0x94, 0xd6, + 0x1b, 0x3b, 0xb6, 0x47, 0x82, 0xa8, 0x8c, 0xe5, 0xe3, 0xd1, 0xc5, 0x84, 0x9e, 0xd1, 0x91, 0x3c, + 0x59, 0x63, 0x14, 0xe8, 0x0b, 0xa8, 0xda, 0xf8, 0x8d, 0xaf, 0x0b, 0xdf, 0x97, 0xdf, 0xf1, 0xfd, + 0x32, 0x61, 0xe8, 0x84, 0x32, 0xfc, 0x83, 0x04, 0x4b, 0x87, 0x63, 0xd3, 0xf0, 0xf1, 0xf4, 0x9e, + 0x4d, 0x6d, 0x8b, 0x74, 0xd5, 0xb6, 0x70, 0x15, 0xca, 0x91, 0x0a, 0xa3, 0xe2, 0x57, 0x6a, 0xaa, + 0xf8, 0xf5, 0x31, 0x54, 0x0d, 0xd3, 0xd4, 0x59, 0x26, 0xa2, 0xd3, 0x60, 0x38, 0x4d, 0x83, 0xe1, + 0xb2, 0x61, 0x9a, 0x2c, 0x6e, 0x3e, 0x74, 0x87, 0x1e, 0x89, 0x39, 0x5d, 0x3c, 0x72, 0xce, 0xf0, + 0x14, 0x69, 0x86, 0x92, 0x2a, 0x0c, 0x13, 0x51, 0xd7, 0x3f, 0x87, 0xc5, 0xae, 0xef, 0x8c, 0xdf, + 0x53, 0xfc, 0xfa, 0xbf, 0x03, 0x40, 0xb4, 0xb1, 0x73, 0xac, 0xbb, 0x0e, 0x39, 0x6a, 0x55, 0xa1, + 0xd9, 0x14, 0xde, 0x76, 0xb2, 0x04, 0xd2, 0x6a, 0x6a, 0xec, 0xaf, 0x39, 0x6d, 0x79, 0xe5, 0x98, + 0xe5, 0x3d, 0x87, 0x22, 0x2b, 0x26, 0xb2, 0xac, 0x66, 0x95, 0x06, 0x40, 0x37, 0x63, 0xda, 0x66, + 0x55, 0x33, 0x9a, 0xd6, 0x80, 0x17, 0xfe, 0x46, 0xdf, 0x25, 0x79, 0x9f, 0xe1, 0x4f, 0x3c, 0x5e, + 0x51, 0xb9, 0x11, 0x67, 0xa3, 0x48, 0x8d, 0x13, 0xa1, 0xdb, 0x00, 0xb4, 0x58, 0x87, 0x4d, 0xdd, + 0xf0, 0xa9, 0x0b, 0x4e, 0x69, 0x05, 0x0e, 0x69, 0xf8, 0xe8, 0x26, 0x3d, 0xc8, 0x0c, 0x59, 0xa4, + 0xc8, 0x1c, 0x1d, 0x37, 0x68, 0xc1, 0x72, 0x42, 0xcd, 0x83, 0x22, 0x11, 0xe3, 0xe4, 0x90, 0x06, + 0xc9, 0xcb, 0xb2, 0x6c, 0x43, 0x6a, 0xb7, 0xa9, 0xdd, 0xdd, 0x12, 0xf2, 0xa0, 0x78, 0xa9, 0x9b, + 0x84, 0x07, 0x8c, 0x18, 0x3d, 0x25, 0x1e, 0x85, 0xa4, 0x14, 0xb5, 0x0f, 0x63, 0x39, 0xa8, 0xfa, + 0x66, 0xec, 0xb8, 0xbe, 0x46, 0x91, 0x02, 0x1f, 0xa3, 0x46, 0x7b, 0x50, 0xa1, 0xfb, 0xd9, 0x77, + 0x46, 0xf4, 0x66, 0xc1, 0xfc, 0xb8, 0xdd, 0x0b, 0xf9, 0x35, 0xc7, 0x19, 0x6d, 0x07, 0xd8, 0xf8, + 0xe7, 0xcb, 0xae, 0x88, 0x45, 0xdf, 0x65, 0x65, 0xf2, 0x4a, 0xac, 0x86, 0xf8, 0x0a, 0x1f, 0xc5, + 0x19, 0x69, 0xb5, 0x5c, 0x85, 0xa2, 0x50, 0xae, 0xa9, 0x2d, 0x51, 0xb6, 0x6f, 0x27, 0x95, 0xb2, + 0xe2, 0xec, 0x22, 0x1f, 0x6a, 0x43, 0x95, 0x15, 0x8f, 0xa2, 0x45, 0xb0, 0x9c, 0xe4, 0x3b, 0xd1, + 0x99, 0x25, 0xf8, 0x4b, 0x57, 0x51, 0xf1, 0xa7, 0xd0, 0x68, 0x13, 0x32, 0x14, 0xc2, 0x93, 0x96, + 0x5b, 0xd3, 0xd3, 0xc4, 0xb9, 0x19, 0x2d, 0x7a, 0x0e, 0x15, 0x7e, 0xb8, 0x5c, 0xec, 0x4d, 0x86, + 0xbe, 0x57, 0xab, 0xc6, 0xbc, 0x0d, 0x3b, 0x62, 0xd4, 0xdb, 0x94, 0x19, 0xa9, 0xc6, 0x28, 0xd1, + 0x13, 0x28, 0xd1, 0x64, 0x3c, 0xe0, 0x54, 0x28, 0xe7, 0xe2, 0x54, 0x9d, 0x82, 0xf2, 0x15, 0x09, + 0x59, 0xc0, 0xf5, 0x03, 0x08, 0x72, 0xc0, 0x90, 0x71, 0x31, 0x56, 0x80, 0xe3, 0x09, 0x1f, 0x73, + 0x71, 0x15, 0x4e, 0x1d, 0xf0, 0x7f, 0x06, 0x65, 0x96, 0x2f, 0x04, 0xdc, 0xcb, 0x31, 0x81, 0x69, + 0xc6, 0xc0, 0x78, 0x4b, 0x94, 0x32, 0xe0, 0x5c, 0x86, 0x0c, 0x76, 0x5d, 0xc7, 0x65, 0x31, 0x8a, + 0xc6, 0x06, 0xc4, 0xb2, 0xe9, 0x0f, 0x9a, 0x7f, 0xd4, 0x56, 0x58, 0xb9, 0x8b, 0x42, 0x48, 0xa6, + 0x81, 0x6a, 0x90, 0x33, 0xb1, 0x6f, 0x58, 0x43, 0xaf, 0x76, 0x83, 0xb2, 0x05, 0x43, 0xf4, 0x10, + 0x16, 0x83, 0xd4, 0x43, 0x1f, 0x3a, 0x7d, 0x96, 0xe5, 0x7e, 0xc0, 0x32, 0xe2, 0x00, 0xb1, 0xc7, + 0xe1, 0x68, 0x1d, 0x96, 0x8e, 0x8c, 0xfe, 0xe9, 0x64, 0xac, 0xf3, 0x1a, 0x87, 0x3e, 0xf1, 0xb0, + 0x59, 0xbb, 0xc9, 0xaa, 0xbb, 0x0c, 0xc5, 0x43, 0xfd, 0x43, 0x0f, 0x9b, 0xe8, 0x0e, 0x14, 0x5d, + 0xec, 0xbb, 0xe7, 0x3a, 0xbd, 0xf6, 0x6b, 0xb7, 0xa8, 0x58, 0x40, 0x41, 0xdb, 0x04, 0x42, 0x4e, + 0x1c, 0xaf, 0xf8, 0xe4, 0x62, 0x0f, 0x42, 0x91, 0xc2, 0xc8, 0xa5, 0xb2, 0x25, 0xd7, 0xa4, 0x5d, + 0x29, 0xac, 0xfb, 0x3c, 0xe4, 0x35, 0xa5, 0x78, 0x3a, 0x14, 0xe8, 0x8a, 0x93, 0xb3, 0xaa, 0xd2, + 0x33, 0xa1, 0x48, 0x54, 0x8a, 0xd7, 0x95, 0x04, 0x1d, 0x71, 0xa6, 0x90, 0x78, 0xab, 0x00, 0x39, + 0x97, 0x59, 0x1a, 0xc9, 0x66, 0x98, 0xa2, 0xea, 0x3f, 0x93, 0x01, 0x22, 0xd9, 0x92, 0x9f, 0x23, + 0x04, 0xef, 0x24, 0x5f, 0xe5, 0x9d, 0x52, 0xd3, 0xde, 0x69, 0x15, 0xf2, 0x53, 0x75, 0x86, 0x94, + 0x16, 0x8e, 0xd1, 0x46, 0xe8, 0x22, 0x59, 0x66, 0xba, 0x9a, 0xb0, 0x51, 0xeb, 0x31, 0x3f, 0x19, + 0x5a, 0x4a, 0x56, 0xb4, 0x94, 0x3a, 0x94, 0x87, 0x86, 0x47, 0xcc, 0x96, 0x28, 0xc6, 0x60, 0x09, + 0x67, 0x4a, 0x2b, 0x12, 0xa0, 0x46, 0x60, 0x0d, 0x9f, 0x98, 0x0b, 0x41, 0x5b, 0xd8, 0xa3, 0x5b, + 0x5c, 0xd6, 0x82, 0x61, 0x7d, 0x1d, 0xb2, 0xec, 0x2b, 0x08, 0x20, 0xdb, 0xd8, 0xee, 0xb5, 0xbe, + 0x54, 0x95, 0x05, 0x54, 0x82, 0xfc, 0x4e, 0xeb, 0xa0, 0xd5, 0xdd, 0x55, 0x9b, 0x8a, 0x44, 0x30, + 0x3b, 0x8d, 0xd6, 0x9e, 0xda, 0x54, 0xe4, 0xfa, 0xcf, 0x24, 0xc8, 0x07, 0x5a, 0x09, 0x0a, 0x58, + 0x62, 0xe4, 0x12, 0x8c, 0xbf, 0xa6, 0x6d, 0xcb, 0xc6, 0xb6, 0x0d, 0x41, 0xda, 0xb3, 0x7e, 0x82, + 0xf9, 0x76, 0xd2, 0xdf, 0x84, 0x3e, 0x34, 0x74, 0x16, 0xce, 0x85, 0xe3, 0xfa, 0x3f, 0xcb, 0x50, + 0x12, 0x6d, 0xe2, 0x62, 0x59, 0x49, 0x9a, 0xb9, 0xac, 0x94, 0xbf, 0xa4, 0xac, 0x24, 0xca, 0x2b, + 0x5f, 0x22, 0x6f, 0x4a, 0x90, 0xf7, 0x21, 0x2c, 0x86, 0x13, 0x87, 0x82, 0xb3, 0x08, 0x55, 0x09, + 0x10, 0xe1, 0x09, 0x7d, 0x02, 0x2b, 0xd3, 0xa2, 0x84, 0x1c, 0xcc, 0x5d, 0x2c, 0x8b, 0xe2, 0x84, + 0x5c, 0xf7, 0x48, 0x1a, 0xca, 0xbc, 0x19, 0x3b, 0xa9, 0x19, 0xfa, 0xfd, 0x12, 0x07, 0xb2, 0xb3, + 0x3a, 0xad, 0xa1, 0xec, 0x55, 0x1a, 0xca, 0x4d, 0x69, 0xa8, 0xfe, 0x27, 0x12, 0x40, 0xe4, 0xcf, + 0x66, 0xaf, 0xcb, 0xdc, 0x89, 0x8a, 0x2a, 0x44, 0x28, 0x89, 0xce, 0x1a, 0xd4, 0x4f, 0x2e, 0x8a, + 0x34, 0x87, 0xd1, 0xd4, 0xff, 0x42, 0x86, 0x1b, 0x8d, 0x89, 0xef, 0x5c, 0xb8, 0xe7, 0x84, 0x87, + 0x61, 0x69, 0xa6, 0x87, 0xe1, 0x85, 0xc4, 0x87, 0x61, 0xf9, 0x1d, 0x0f, 0xc3, 0x0b, 0xc2, 0xc3, + 0xf0, 0xe7, 0xfc, 0x06, 0x0a, 0x5e, 0x87, 0x53, 0xf4, 0x2a, 0x58, 0x4d, 0xaa, 0x08, 0xf3, 0x87, + 0x62, 0x7a, 0x15, 0xb5, 0xf9, 0x63, 0xb1, 0x1a, 0x5d, 0x45, 0xc1, 0x0c, 0x69, 0x3a, 0xc3, 0x95, + 0xb5, 0xf0, 0xf0, 0x46, 0xe2, 0xd3, 0x10, 0x6f, 0xc7, 0x9f, 0xf8, 0xeb, 0x7f, 0x2a, 0x43, 0x95, + 0x6c, 0x8e, 0x70, 0xe5, 0x4e, 0x15, 0x9f, 0xa5, 0x19, 0x8a, 0xcf, 0x99, 0xab, 0xca, 0x58, 0xf2, + 0x4c, 0xa5, 0x9f, 0xd4, 0xcc, 0xa5, 0x9f, 0xf4, 0xfc, 0xa5, 0x9f, 0xec, 0xbc, 0x65, 0xac, 0xbf, + 0x4f, 0xc3, 0x52, 0x42, 0x3c, 0x47, 0x62, 0x6c, 0x16, 0xcf, 0x4d, 0xc7, 0xd8, 0x0c, 0x46, 0x62, + 0x6c, 0xfe, 0x8b, 0x24, 0xd0, 0x55, 0xf6, 0xc8, 0xec, 0x1c, 0x1f, 0x7b, 0xd8, 0xd7, 0x47, 0x1e, + 0x37, 0xd9, 0x32, 0x05, 0xb7, 0x29, 0x74, 0xdf, 0x23, 0x1e, 0x1a, 0xdb, 0xa6, 0x40, 0xc5, 0x6c, + 0xb7, 0x88, 0x6d, 0x33, 0xa4, 0x11, 0x7b, 0x29, 0xd2, 0x73, 0xf7, 0x52, 0x64, 0x66, 0xee, 0xa5, + 0xc8, 0xce, 0xd7, 0x4b, 0x91, 0xbb, 0x46, 0x2f, 0x45, 0xfe, 0xfd, 0x7a, 0x29, 0x0a, 0xb3, 0xf7, + 0x52, 0xc0, 0xfc, 0xbd, 0x14, 0xc5, 0x6b, 0xf5, 0x52, 0xfc, 0x4b, 0x16, 0x56, 0x2f, 0x8f, 0xe1, + 0xaf, 0x4e, 0xe5, 0xa3, 0xbc, 0x53, 0xbe, 0xa2, 0xe9, 0x22, 0x15, 0x6f, 0x77, 0x78, 0x06, 0xec, + 0xc9, 0x4e, 0x1f, 0x59, 0x6f, 0x2c, 0x7b, 0x50, 0xab, 0x52, 0x8d, 0xc4, 0xba, 0x02, 0xf6, 0x29, + 0x4e, 0x63, 0x4f, 0xa0, 0x6c, 0x10, 0xeb, 0x93, 0x48, 0xcf, 0xd0, 0xad, 0x91, 0x49, 0xe8, 0xd6, + 0x40, 0x4f, 0x78, 0x68, 0xc6, 0x0c, 0xe7, 0x0a, 0x27, 0x46, 0xc3, 0xad, 0xe0, 0xe5, 0x6f, 0x33, + 0x16, 0x07, 0x26, 0xbf, 0xfc, 0x71, 0x96, 0x20, 0x0a, 0xfc, 0x81, 0x10, 0xd8, 0xc1, 0xbb, 0x5f, + 0xff, 0x38, 0x77, 0xf4, 0x02, 0x18, 0x99, 0x6d, 0xfe, 0x1a, 0x66, 0x5b, 0x98, 0xc3, 0x6c, 0xe3, + 0x9e, 0xbe, 0x38, 0x9f, 0xa7, 0xff, 0x8d, 0x30, 0xcd, 0x09, 0x26, 0x28, 0xc5, 0x73, 0x0e, 0x61, + 0xb7, 0x82, 0x44, 0xe7, 0x8a, 0x7b, 0xa2, 0x3c, 0xff, 0x3d, 0x81, 0xbe, 0x1f, 0x64, 0x2e, 0xc1, + 0x24, 0x15, 0x3a, 0x49, 0xe2, 0xf3, 0x29, 0x4f, 0x5d, 0x02, 0x56, 0xf1, 0x60, 0x29, 0xb3, 0x1f, + 0x2c, 0xf6, 0x21, 0xf1, 0x82, 0xfa, 0x9f, 0x0c, 0x28, 0xf1, 0xc4, 0xf6, 0x1b, 0xea, 0x0c, 0x2a, + 0x25, 0x77, 0x06, 0x85, 0x76, 0x9f, 0x7e, 0x4f, 0xbb, 0xcf, 0xbc, 0x9f, 0xdd, 0x67, 0xaf, 0x65, + 0xf7, 0xdf, 0x94, 0xbb, 0x8e, 0xdb, 0x7d, 0xe1, 0xba, 0x76, 0x0f, 0xd7, 0xb3, 0xfb, 0xe2, 0xd7, + 0x61, 0xf7, 0xe5, 0xf7, 0xb2, 0xfb, 0xca, 0x75, 0xec, 0xfe, 0x6f, 0xd2, 0x50, 0xbb, 0xac, 0x32, + 0x73, 0xf5, 0x6d, 0x22, 0xf6, 0x6c, 0xc9, 0xb1, 0x9e, 0xad, 0x6f, 0x43, 0x69, 0xaa, 0x59, 0x8b, + 0x9d, 0x84, 0xa2, 0x17, 0xb5, 0x69, 0x09, 0x26, 0x93, 0xbe, 0x46, 0x50, 0x9c, 0xb9, 0x46, 0x50, + 0x9c, 0xbd, 0xae, 0xc9, 0xe4, 0xae, 0x67, 0x32, 0xf9, 0xaf, 0xc3, 0x64, 0x0a, 0xef, 0x65, 0x32, + 0x30, 0xa3, 0xc9, 0x08, 0x86, 0xf2, 0xd3, 0x2c, 0xdc, 0xba, 0xa2, 0xee, 0xf6, 0xae, 0x3e, 0x5d, + 0xd6, 0xa9, 0x14, 0x35, 0x35, 0xca, 0x61, 0x53, 0x23, 0x45, 0xf0, 0xa6, 0x46, 0x4d, 0x1c, 0x99, + 0x84, 0x2d, 0xd6, 0x0b, 0x99, 0x4a, 0xec, 0x85, 0x8c, 0x75, 0x42, 0xfe, 0x3f, 0x39, 0xce, 0xfc, + 0xb5, 0x1c, 0x67, 0xf6, 0x1a, 0x8e, 0x33, 0xf7, 0xab, 0x80, 0xe1, 0x7d, 0x4e, 0x41, 0xf5, 0x3a, + 0x8e, 0xf3, 0x97, 0x12, 0xa0, 0x8b, 0x05, 0xe4, 0xab, 0x8f, 0xc1, 0x47, 0x42, 0x5f, 0xa4, 0x1c, + 0xef, 0x8b, 0x8c, 0xba, 0x22, 0x1f, 0x71, 0xfb, 0x4d, 0xc5, 0x0a, 0xef, 0x4d, 0xcb, 0xc5, 0x7d, + 0x3f, 0xa1, 0xcb, 0xed, 0x23, 0x28, 0xbf, 0xc6, 0x47, 0x9e, 0xd3, 0x3f, 0xc5, 0x7e, 0xd4, 0xf5, + 0xbc, 0xbb, 0xa0, 0x95, 0x42, 0x30, 0x09, 0xa4, 0xc5, 0xb5, 0x67, 0xe6, 0x5d, 0x7b, 0xfd, 0xcf, + 0x64, 0x50, 0xe2, 0x12, 0xfc, 0x2a, 0x87, 0xff, 0x85, 0x0c, 0x8b, 0x17, 0x8e, 0xcc, 0x37, 0xd5, + 0x8e, 0x97, 0xbd, 0x6a, 0x37, 0x53, 0x33, 0xed, 0x66, 0x7a, 0xe6, 0xdd, 0xcc, 0xcc, 0xbf, 0x9b, + 0xb9, 0x79, 0x77, 0xf3, 0x55, 0xf0, 0xd8, 0xba, 0x47, 0x33, 0xd3, 0xf9, 0x1f, 0x5b, 0x2f, 0x49, + 0x71, 0xeb, 0x7f, 0x1e, 0x3e, 0xe3, 0x76, 0xf9, 0x53, 0xcd, 0xbc, 0x33, 0xf3, 0xc7, 0x59, 0x26, + 0xa8, 0x2e, 0x74, 0x2a, 0x96, 0x0d, 0xd3, 0x64, 0x6a, 0x8f, 0x3d, 0xce, 0x8a, 0xa4, 0x29, 0xf1, + 0x71, 0x36, 0xa2, 0xae, 0x7f, 0x1f, 0x2a, 0xd3, 0xcf, 0x12, 0xe8, 0x3e, 0xa4, 0x2d, 0xfb, 0xd8, + 0xb9, 0xf0, 0xb8, 0x2d, 0x3c, 0x37, 0x51, 0x82, 0xb5, 0x57, 0x50, 0x12, 0x5b, 0xbb, 0xd1, 0x0a, + 0xa0, 0xc6, 0x61, 0xb3, 0xd5, 0xd6, 0xb7, 0x77, 0x1b, 0x07, 0x07, 0xea, 0x9e, 0xbe, 0xd5, 0xee, + 0xed, 0x2a, 0x0b, 0x17, 0xe1, 0x7b, 0xea, 0x4e, 0x4f, 0x91, 0xd0, 0x07, 0xb0, 0x34, 0x0d, 0xd7, + 0x5a, 0x2f, 0x76, 0x7b, 0x8a, 0xbc, 0xf6, 0x8f, 0x12, 0xdc, 0x48, 0xbc, 0x7d, 0x90, 0x02, 0xa5, + 0xdd, 0x8d, 0xa7, 0x4f, 0xf4, 0x67, 0x1b, 0x8f, 0x3b, 0xfa, 0xe6, 0x63, 0x65, 0x61, 0x1a, 0xf2, + 0xf4, 0xb1, 0x22, 0xa1, 0x45, 0x28, 0x53, 0xc8, 0xaf, 0x3d, 0xfe, 0x8c, 0x11, 0xc9, 0x31, 0xd0, + 0xd3, 0xc7, 0x4a, 0x0a, 0xdd, 0x84, 0x1b, 0x9d, 0xb6, 0xd6, 0xd3, 0x1a, 0xad, 0x9e, 0x3e, 0x35, + 0x65, 0xfa, 0x12, 0xd4, 0xd3, 0xc7, 0x4a, 0x06, 0xad, 0xc2, 0xca, 0x34, 0x2a, 0xfc, 0x48, 0xf6, + 0x32, 0xdc, 0xd3, 0xc7, 0x4a, 0x6e, 0x6d, 0x8b, 0xf7, 0x83, 0x47, 0x87, 0x0e, 0x2d, 0x83, 0xd2, + 0x54, 0x77, 0x1a, 0x87, 0x7b, 0x3d, 0x7d, 0xa7, 0xb5, 0xa7, 0xf6, 0x7e, 0xab, 0xa3, 0x2a, 0x0b, + 0x28, 0x07, 0xa9, 0xfd, 0xce, 0x13, 0x45, 0x22, 0x3f, 0xda, 0x2f, 0x5e, 0x28, 0x32, 0x83, 0x6c, + 0x2a, 0xa9, 0xb5, 0xdd, 0x40, 0x53, 0x41, 0x4b, 0xa9, 0x38, 0x45, 0x47, 0x6b, 0xf7, 0xda, 0xdb, + 0xed, 0x3d, 0x65, 0x01, 0xe5, 0x21, 0xad, 0xf5, 0xf6, 0x3b, 0x6c, 0x8e, 0xae, 0xd6, 0x53, 0x64, + 0x54, 0x86, 0xc2, 0x2b, 0x75, 0xab, 0xdb, 0xde, 0x7e, 0xa9, 0xf6, 0x94, 0xd4, 0xda, 0x01, 0xdc, + 0x48, 0xec, 0x51, 0x45, 0xf7, 0xe0, 0x4e, 0x30, 0x61, 0x57, 0x7d, 0xb1, 0xaf, 0x1e, 0xf4, 0xd4, + 0x26, 0x95, 0x4e, 0x9c, 0x9f, 0xec, 0xf8, 0x5e, 0x37, 0x82, 0x48, 0x6b, 0x8f, 0x62, 0x3d, 0xb2, + 0xbc, 0x7f, 0xb0, 0x00, 0x99, 0xd6, 0x41, 0x53, 0xfd, 0x4a, 0x59, 0x20, 0x02, 0xf4, 0x5a, 0xfb, + 0x6a, 0xb7, 0xd7, 0x20, 0x82, 0xad, 0x1d, 0x43, 0x35, 0xd6, 0x7c, 0x48, 0x8c, 0xa4, 0xb5, 0xdf, + 0x78, 0xa1, 0xea, 0xdd, 0xc3, 0x9d, 0x9d, 0xd6, 0x57, 0x7a, 0xc0, 0xb9, 0x0a, 0x2b, 0x53, 0x70, + 0x61, 0x1a, 0x74, 0x07, 0x6e, 0x4d, 0xe1, 0x0e, 0xda, 0x07, 0xaa, 0xde, 0xfe, 0x52, 0xd5, 0x5e, + 0x69, 0xad, 0x9e, 0xaa, 0xc8, 0x6b, 0x3f, 0x04, 0x25, 0xfe, 0x48, 0x4f, 0x26, 0x54, 0x5f, 0x68, + 0x6a, 0xb7, 0xab, 0x77, 0xdb, 0x87, 0xda, 0xb6, 0xaa, 0x93, 0x9d, 0xd7, 0x5f, 0xa9, 0x5b, 0xec, + 0x63, 0x09, 0xb8, 0x6e, 0xf3, 0xa5, 0x22, 0xad, 0xfd, 0x95, 0x04, 0x25, 0xf1, 0xe9, 0x1e, 0x2d, + 0x41, 0x35, 0x20, 0xee, 0x35, 0xb4, 0x5e, 0xeb, 0xe0, 0x85, 0xb2, 0x40, 0x2c, 0x8d, 0x03, 0xf9, + 0x43, 0x92, 0x24, 0x80, 0xd4, 0x83, 0x26, 0xa1, 0x92, 0x05, 0xd6, 0xed, 0xf6, 0x7e, 0x67, 0x4f, + 0xed, 0xa9, 0x4a, 0x4a, 0xa0, 0xe3, 0x2f, 0x4d, 0x69, 0x84, 0xa0, 0x12, 0xcc, 0xb6, 0xd5, 0xd6, + 0x7a, 0x6a, 0x53, 0xc9, 0xa0, 0x1a, 0x2c, 0x73, 0xd8, 0x5e, 0x6b, 0xbf, 0xd5, 0xd3, 0x35, 0xb5, + 0xb1, 0xbd, 0xab, 0x36, 0x95, 0xec, 0xda, 0x21, 0xff, 0xbf, 0x13, 0x5e, 0xfc, 0x42, 0x50, 0x09, + 0x94, 0xb9, 0xdf, 0xfa, 0x8a, 0x89, 0xb7, 0x02, 0xa8, 0x79, 0xd8, 0xd8, 0x0b, 0x4f, 0x5c, 0xe3, + 0x85, 0x7a, 0x40, 0x8e, 0xe2, 0x2a, 0xac, 0x4c, 0xc3, 0xf7, 0x7a, 0xaa, 0x76, 0xd0, 0x20, 0x9b, + 0xb8, 0xf1, 0x6f, 0x19, 0xc8, 0xf2, 0x82, 0xf9, 0x6f, 0x42, 0x51, 0xe8, 0x1a, 0x40, 0x57, 0xf5, + 0x12, 0xac, 0x26, 0x75, 0xc5, 0xa0, 0x06, 0x94, 0x44, 0xf7, 0x8a, 0xa2, 0xa8, 0x2b, 0xc1, 0xeb, + 0xbe, 0x63, 0x0a, 0x76, 0x18, 0x2e, 0x4c, 0x31, 0xe5, 0x5e, 0x93, 0xa7, 0x50, 0x01, 0xa2, 0xae, + 0x1e, 0x14, 0x45, 0x9e, 0x17, 0x1a, 0x93, 0x56, 0x6f, 0x25, 0xe2, 0x78, 0x1b, 0xd0, 0xe7, 0x00, + 0x51, 0x5f, 0x0b, 0x12, 0x5f, 0x2f, 0x63, 0xcd, 0x2e, 0xc9, 0x52, 0xf4, 0xa0, 0x46, 0xb7, 0x2d, + 0xa1, 0x98, 0x8a, 0x66, 0x69, 0x97, 0x48, 0x9e, 0xf5, 0x0b, 0xe2, 0x25, 0x0c, 0xd7, 0x0f, 0x4b, + 0x49, 0xe8, 0xf2, 0xbe, 0x89, 0xe4, 0x19, 0x3a, 0xb0, 0x42, 0x67, 0xb8, 0xf8, 0x8c, 0xf4, 0xee, + 0x56, 0x8a, 0xe4, 0x19, 0xbf, 0x84, 0x9b, 0x74, 0xc6, 0xa4, 0xec, 0x0d, 0xcd, 0xd4, 0x54, 0x91, + 0x3c, 0x6f, 0x13, 0x94, 0x68, 0xde, 0x0b, 0x36, 0x79, 0x31, 0x36, 0x4e, 0x9c, 0x65, 0x6b, 0xe7, + 0xb7, 0xef, 0x0d, 0x2c, 0xff, 0x64, 0x72, 0xb4, 0xde, 0x77, 0x46, 0x8f, 0x38, 0xc1, 0xa3, 0xa0, + 0x5b, 0x3f, 0x00, 0xfc, 0xad, 0x5c, 0xde, 0xb3, 0xce, 0xf0, 0x4b, 0xd6, 0x5b, 0xe8, 0x3b, 0xff, + 0x21, 0x57, 0xf8, 0xf8, 0xf9, 0x73, 0x0a, 0x38, 0xca, 0x52, 0x96, 0xcd, 0xff, 0x0d, 0x00, 0x00, + 0xff, 0xff, 0x8d, 0x0c, 0x93, 0x1d, 0x92, 0x3a, 0x00, 0x00, } From f736c598bef1ea9d0422a7e4ec77f60290af3fcd Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 1 Jun 2026 17:12:56 -0400 Subject: [PATCH 3/5] update types --- egress/notify_options.go | 8 ++++---- egress/types.go | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/egress/notify_options.go b/egress/notify_options.go index ea63e4c62..6bdfddfab 100644 --- a/egress/notify_options.go +++ b/egress/notify_options.go @@ -31,10 +31,10 @@ func GetEgressNotifyOptions(egressInfo *livekit.EgressInfo) []webhook.NotifyOpti var whs []*livekit.WebhookConfig switch req := egressInfo.Request.(type) { - // case *livekit.EgressInfo_Egress: - // if req.Egress != nil { - // whs = req.Egress.Webhooks - // } + case *livekit.EgressInfo_Egress: + if req.Egress != nil { + whs = req.Egress.Webhooks + } case *livekit.EgressInfo_Replay: if req.Replay != nil { whs = req.Replay.Webhooks diff --git a/egress/types.go b/egress/types.go index fe910fb5f..c239ca0f0 100644 --- a/egress/types.go +++ b/egress/types.go @@ -75,12 +75,12 @@ type UploadRequest interface { func GetTypes(request any) (string, string) { switch req := request.(type) { - // case *livekit.EgressInfo_Egress: - // return getSourceTypeV2(req.Egress), GetOutputTypeV2(req.Egress.Outputs) + case *livekit.EgressInfo_Egress: + return getSourceTypeV2(req.Egress), GetOutputTypeV2(req.Egress.Outputs) case *livekit.EgressInfo_Replay: return getSourceTypeV2(req.Replay), GetOutputTypeV2(req.Replay.Outputs) - + case *livekit.EgressInfo_RoomComposite: return EgressTypeRoomComposite, GetOutputType(req.RoomComposite) From 655d6f11fb80d086775d74cb1a8ab3ac3eeec709 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 1 Jun 2026 19:17:04 -0400 Subject: [PATCH 4/5] undo MediaSource change --- protobufs/livekit_egress.proto | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index 53b81309b..e35e34f17 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -98,11 +98,10 @@ message MediaSource { oneof video { string video_track_id = 1 [(logger.name) = "videoTrackID"]; ParticipantVideo participant_video = 2; - // string layout = 3; } - AudioConfig audio = 4; - DataConfig data = 5; + AudioConfig audio = 3; + DataConfig data = 4; } message ParticipantVideo { From 15e19fcae4744f8de3f1c3b42e5e83a12332db53 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 23:18:01 +0000 Subject: [PATCH 5/5] generated protobuf --- livekit/livekit_egress.pb.go | 10 +- livekit/livekit_egress.twirp.go | 508 ++++++++++++++++---------------- 2 files changed, 259 insertions(+), 259 deletions(-) diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index 6cddefebd..61c041eef 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -928,8 +928,8 @@ type MediaSource struct { // *MediaSource_VideoTrackId // *MediaSource_ParticipantVideo Video isMediaSource_Video `protobuf_oneof:"video"` - Audio *AudioConfig `protobuf:"bytes,4,opt,name=audio,proto3" json:"audio,omitempty"` - Data *DataConfig `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` + Audio *AudioConfig `protobuf:"bytes,3,opt,name=audio,proto3" json:"audio,omitempty"` + Data *DataConfig `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1012,7 +1012,7 @@ type MediaSource_VideoTrackId struct { } type MediaSource_ParticipantVideo struct { - ParticipantVideo *ParticipantVideo `protobuf:"bytes,2,opt,name=participant_video,json=participantVideo,proto3,oneof"` // string layout = 3; + ParticipantVideo *ParticipantVideo `protobuf:"bytes,2,opt,name=participant_video,json=participantVideo,proto3,oneof"` } func (*MediaSource_VideoTrackId) isMediaSource_Video() {} @@ -5378,8 +5378,8 @@ const file_livekit_egress_proto_rawDesc = "" + "\vMediaSource\x127\n" + "\x0evideo_track_id\x18\x01 \x01(\tB\x0f\xbaP\fvideoTrackIDH\x00R\fvideoTrackId\x12H\n" + "\x11participant_video\x18\x02 \x01(\v2\x19.livekit.ParticipantVideoH\x00R\x10participantVideo\x12*\n" + - "\x05audio\x18\x04 \x01(\v2\x14.livekit.AudioConfigR\x05audio\x12'\n" + - "\x04data\x18\x05 \x01(\v2\x13.livekit.DataConfigR\x04dataB\a\n" + + "\x05audio\x18\x03 \x01(\v2\x14.livekit.AudioConfigR\x05audio\x12'\n" + + "\x04data\x18\x04 \x01(\v2\x13.livekit.DataConfigR\x04dataB\a\n" + "\x05video\"^\n" + "\x10ParticipantVideo\x12\x1a\n" + "\bidentity\x18\x01 \x01(\tR\bidentity\x12.\n" + diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index 213f07163..32c179e8e 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -3034,7 +3034,7 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor2 = []byte{ - // 4266 bytes of a gzipped FileDescriptorProto + // 4267 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4b, 0x70, 0x1c, 0x49, 0x56, 0xaa, 0xea, 0xff, 0xeb, 0x5f, 0x29, 0x25, 0x6b, 0xda, 0xf2, 0x7a, 0xec, 0x6d, 0xef, 0x8c, 0x3d, 0xf2, 0xac, 0x6c, 0x24, 0xaf, 0x3d, 0x6b, 0x98, 0x65, 0x5a, 0xea, 0x92, 0xd5, 0x6b, 0x49, @@ -3042,264 +3042,264 @@ var twirpFileDescriptor2 = []byte{ 0x55, 0xb5, 0x6c, 0xed, 0x8d, 0x0b, 0x11, 0x10, 0x2c, 0x41, 0x40, 0x70, 0x81, 0x03, 0x17, 0x82, 0x03, 0xec, 0x85, 0xab, 0x2f, 0xec, 0x7d, 0x0f, 0x44, 0x40, 0x10, 0x9c, 0x08, 0xee, 0x10, 0x6c, 0x70, 0xe1, 0x4e, 0xe4, 0xa7, 0xaa, 0xb2, 0x4b, 0x25, 0xb9, 0xdb, 0x1a, 0x86, 0xcb, 0x9e, 0xd4, - 0xf9, 0x3e, 0x59, 0x2f, 0xf3, 0xbd, 0x7c, 0xf9, 0xde, 0xcb, 0x27, 0x58, 0x1e, 0x5a, 0x67, 0xf8, + 0xf9, 0xde, 0xcb, 0xac, 0x97, 0xf9, 0x3e, 0xf9, 0xde, 0xcb, 0x27, 0x58, 0x1e, 0x5a, 0x67, 0xf8, 0xd4, 0xf2, 0x75, 0x3c, 0x70, 0xb1, 0xe7, 0xad, 0x8f, 0x5d, 0xc7, 0x77, 0x50, 0x8e, 0x43, 0x57, 0x43, 0xf4, 0xc8, 0x31, 0xf1, 0x90, 0xa3, 0x57, 0x97, 0x87, 0xce, 0x60, 0x80, 0xdd, 0x47, 0xce, - 0xd8, 0xb7, 0x1c, 0x9b, 0x43, 0xeb, 0xff, 0x9a, 0x02, 0xd4, 0xf5, 0x0d, 0xd7, 0x57, 0xe9, 0x54, + 0xd8, 0xb7, 0x1c, 0x9b, 0x43, 0xeb, 0xff, 0x9a, 0x02, 0xd4, 0xf5, 0x0d, 0xd7, 0x57, 0xe9, 0x52, 0x1a, 0xfe, 0xf1, 0x04, 0x7b, 0x3e, 0xba, 0x05, 0x05, 0xd7, 0x71, 0x46, 0xba, 0x6d, 0x8c, 0x70, 0x4d, 0xba, 0x2b, 0x3d, 0x28, 0x68, 0x79, 0x02, 0x38, 0x30, 0x46, 0x18, 0x7d, 0x0f, 0xf2, 0x3e, 0x1e, 0x8d, 0x87, 0x86, 0x8f, 0x6b, 0xf2, 0x5d, 0xe9, 0x41, 0x71, 0xe3, 0x83, 0x75, 0xfe, 0xc9, 0xf5, 0x1e, 0x47, 0x74, 0x9d, 0x89, 0xdb, 0xc7, 0xbb, 0x0b, 0x5a, 0x48, 0x8a, 0x3e, 0x86, 0xd4, - 0x6b, 0x7c, 0x54, 0x4b, 0x51, 0x0e, 0x14, 0x72, 0xbc, 0xc2, 0x47, 0x21, 0x31, 0x21, 0x40, 0x9f, - 0x42, 0x66, 0x84, 0x4d, 0xcb, 0xa8, 0xa5, 0x29, 0xe5, 0x72, 0x48, 0xb9, 0x4f, 0xa0, 0x21, 0x2d, - 0x23, 0x42, 0x9f, 0x41, 0x76, 0xec, 0x62, 0x0f, 0xfb, 0xb5, 0xcc, 0x5d, 0xe9, 0x41, 0x65, 0xe3, - 0xc3, 0x90, 0x5c, 0xb5, 0xfb, 0x8e, 0x69, 0xd9, 0x83, 0x36, 0x5b, 0x70, 0x87, 0x52, 0xed, 0x4a, - 0x1a, 0xa7, 0x47, 0x4f, 0x21, 0x6f, 0x98, 0x67, 0x86, 0xdd, 0xc7, 0x66, 0x2d, 0x4b, 0x3f, 0x55, - 0xbb, 0x8c, 0x77, 0x57, 0xd2, 0x42, 0x5a, 0xf4, 0x09, 0xe4, 0x9c, 0x89, 0x3f, 0x9e, 0xf8, 0x5e, - 0x2d, 0x77, 0x37, 0xf5, 0xa0, 0xb8, 0x51, 0x0d, 0xd9, 0xda, 0x14, 0xae, 0x05, 0x78, 0xf4, 0x18, - 0x72, 0x9e, 0xef, 0xb8, 0xc6, 0x00, 0xd7, 0xf2, 0xf4, 0x0b, 0x2b, 0x21, 0x69, 0x97, 0xc1, 0xb7, - 0x1d, 0xfb, 0xd8, 0x1a, 0x68, 0x01, 0x19, 0xda, 0x80, 0xfc, 0x6b, 0x7c, 0x74, 0xe2, 0x38, 0xa7, - 0x5e, 0xad, 0x40, 0x67, 0x5f, 0x11, 0x77, 0x8a, 0x20, 0x38, 0x4b, 0x48, 0xb7, 0x95, 0x87, 0xac, - 0x47, 0x77, 0x65, 0x0b, 0x20, 0x8f, 0xb9, 0xe4, 0xf5, 0x3f, 0x96, 0xa0, 0x32, 0xad, 0x0d, 0xb4, - 0x02, 0xd9, 0xa1, 0x71, 0xee, 0x4c, 0x7c, 0xae, 0x52, 0x3e, 0x42, 0xb7, 0x01, 0x8c, 0x89, 0x69, - 0x39, 0xba, 0x63, 0x0f, 0xcf, 0xa9, 0x4a, 0xf3, 0x5a, 0x81, 0x42, 0xda, 0xf6, 0xf0, 0x9c, 0xa0, - 0xcf, 0x2c, 0x13, 0x73, 0x74, 0x8a, 0xa1, 0x29, 0x84, 0xa2, 0x3f, 0x86, 0x6a, 0x7f, 0xe2, 0xf9, - 0xce, 0x48, 0x3f, 0x32, 0x3c, 0xac, 0x4f, 0xdc, 0x21, 0xd5, 0x5c, 0x41, 0x2b, 0x33, 0xf0, 0x96, - 0xe1, 0xe1, 0x43, 0x77, 0x58, 0xff, 0x03, 0x09, 0x0a, 0xa1, 0xb2, 0x91, 0x02, 0x29, 0x42, 0xc9, - 0x04, 0x21, 0x3f, 0xaf, 0x29, 0xc5, 0xa7, 0x80, 0x8c, 0xd7, 0x86, 0xe5, 0xeb, 0x1e, 0xb1, 0x66, - 0xdd, 0xb3, 0x06, 0xb6, 0xc1, 0x04, 0xc9, 0x6b, 0x0a, 0xc5, 0x50, 0x33, 0xef, 0x52, 0x78, 0xfd, - 0x97, 0x12, 0x14, 0x05, 0x73, 0x42, 0xcf, 0xa0, 0xc2, 0x26, 0xf7, 0x5d, 0xa3, 0x7f, 0xaa, 0x5b, - 0x26, 0x13, 0x6c, 0xab, 0xfa, 0xb6, 0x53, 0xa2, 0x88, 0x1e, 0x81, 0xb7, 0x9a, 0xbb, 0x0b, 0x9a, - 0x38, 0x36, 0xd1, 0x2e, 0x2c, 0x8e, 0x0d, 0xd7, 0xb7, 0xfa, 0xd6, 0xd8, 0xb0, 0x7d, 0x9d, 0xe2, - 0xf8, 0xa1, 0xb8, 0x19, 0x2a, 0xae, 0x13, 0x51, 0x7c, 0x49, 0x08, 0x76, 0x17, 0x34, 0x65, 0x1c, - 0x83, 0xa1, 0x35, 0xc8, 0xd0, 0xc5, 0x5e, 0x30, 0xfb, 0x06, 0x81, 0x72, 0xa5, 0x33, 0x12, 0x74, - 0x1f, 0xd2, 0xa6, 0xe1, 0x1b, 0xd4, 0xe4, 0x8b, 0x1b, 0x4b, 0x21, 0x69, 0xd3, 0xf0, 0x0d, 0x4e, - 0x49, 0x09, 0xb6, 0x72, 0x90, 0xa1, 0x22, 0xd5, 0x7f, 0x17, 0x94, 0xb8, 0x14, 0x68, 0x15, 0xf2, - 0x96, 0x89, 0x6d, 0xdf, 0xf2, 0xcf, 0x83, 0x33, 0x1e, 0x8c, 0xd1, 0x3a, 0x2c, 0x8d, 0x5d, 0x7c, - 0x8c, 0x5d, 0xdd, 0xeb, 0xbb, 0x18, 0xdb, 0xba, 0x77, 0x62, 0xb8, 0x98, 0x6b, 0x65, 0x91, 0xa1, - 0xba, 0x14, 0xd3, 0x25, 0x88, 0xfa, 0x73, 0x28, 0x0a, 0x72, 0xa2, 0x87, 0x90, 0x75, 0x9d, 0x89, - 0x8f, 0xbd, 0x9a, 0x44, 0x8d, 0x78, 0x69, 0x7a, 0x35, 0x1a, 0xc1, 0x69, 0x9c, 0xa4, 0xfe, 0xdf, - 0x12, 0x40, 0x04, 0x46, 0xf7, 0x21, 0x1f, 0xd3, 0x02, 0xbc, 0xed, 0xe4, 0xfc, 0x50, 0x01, 0xfc, - 0xa7, 0x89, 0x36, 0x61, 0x59, 0xdc, 0xfb, 0x70, 0x2d, 0x44, 0xc8, 0xc2, 0xee, 0x82, 0xb6, 0x24, - 0x60, 0x5b, 0xc1, 0xc2, 0x7e, 0x08, 0xe2, 0xd6, 0xeb, 0xa7, 0x96, 0x6d, 0x52, 0x63, 0xaa, 0x6c, - 0xdc, 0x4e, 0xd2, 0x57, 0xcb, 0x3e, 0x76, 0xd6, 0x5f, 0x5a, 0xb6, 0xb9, 0xbb, 0xa0, 0x55, 0x05, - 0x46, 0x02, 0x42, 0x8f, 0x20, 0xd7, 0x3f, 0x31, 0x6c, 0x1b, 0x33, 0x43, 0xab, 0x6c, 0xdc, 0x88, - 0x29, 0x8d, 0x21, 0xb5, 0x80, 0x8a, 0xa8, 0x63, 0x64, 0xf8, 0xfd, 0x93, 0x7a, 0x03, 0x20, 0xd2, - 0x15, 0xda, 0x84, 0x82, 0x87, 0x87, 0xb8, 0xef, 0x3b, 0x6e, 0xb0, 0x61, 0x37, 0xa6, 0x74, 0xda, - 0xe5, 0x58, 0x2d, 0xa2, 0xab, 0xff, 0x54, 0x82, 0x92, 0x88, 0xfb, 0x3f, 0xde, 0xb7, 0x15, 0xc8, - 0xf8, 0xce, 0xd8, 0xea, 0xd3, 0xcd, 0x22, 0x54, 0x6c, 0x18, 0x2d, 0xe9, 0x9f, 0x52, 0x50, 0x8d, - 0xb9, 0x4d, 0xb4, 0x0c, 0x99, 0xd7, 0x96, 0xe9, 0x9f, 0x50, 0x79, 0x32, 0x1a, 0x1b, 0x10, 0x37, - 0x74, 0x82, 0xad, 0xc1, 0x89, 0x4f, 0xbf, 0x98, 0xd1, 0xf8, 0x88, 0x50, 0x9b, 0x78, 0xec, 0x9f, - 0xd0, 0x4f, 0x64, 0x34, 0x36, 0x40, 0xdf, 0x82, 0xc2, 0xb1, 0x6b, 0x8c, 0xb0, 0x4b, 0xae, 0x9b, - 0x34, 0xc5, 0x44, 0x00, 0xf4, 0x04, 0x8a, 0xcc, 0x69, 0xf4, 0x1d, 0x13, 0xf7, 0xf9, 0x1d, 0xb0, - 0x14, 0x3f, 0x3b, 0x26, 0xee, 0x6b, 0xcc, 0xb9, 0xd0, 0xdf, 0xe8, 0x1e, 0x94, 0x19, 0xd7, 0x91, - 0xe5, 0xd3, 0x79, 0xb3, 0x74, 0xde, 0x12, 0x05, 0x6e, 0x31, 0x18, 0xba, 0x0f, 0x55, 0x46, 0x74, - 0xec, 0x92, 0x5b, 0xd1, 0xee, 0x9f, 0xd7, 0x72, 0x94, 0xac, 0x42, 0xc1, 0x3b, 0x01, 0x94, 0xc8, - 0xc0, 0x9c, 0x07, 0x93, 0x21, 0x1f, 0x93, 0x81, 0x1e, 0x36, 0x2e, 0xc3, 0x59, 0xf8, 0x9b, 0xc8, - 0xc0, 0xb8, 0x02, 0x19, 0x0a, 0x4c, 0x06, 0x0a, 0x0c, 0x64, 0xf8, 0x14, 0xd0, 0x29, 0x3e, 0xd7, - 0xe9, 0x7a, 0x75, 0xcb, 0xf6, 0xb1, 0x7b, 0x66, 0x0c, 0x6b, 0x70, 0x57, 0x7a, 0x20, 0x69, 0xca, - 0x29, 0x3e, 0xdf, 0x21, 0x88, 0x16, 0x87, 0xa3, 0xfb, 0xc1, 0xb2, 0x7e, 0x3c, 0x31, 0x86, 0x44, - 0xa3, 0x45, 0x32, 0xe5, 0x96, 0x5c, 0x93, 0xf8, 0xd2, 0x7e, 0xc4, 0xe0, 0x84, 0x90, 0x7d, 0x3b, - 0x20, 0x2c, 0x45, 0x84, 0x14, 0xc1, 0x09, 0xeb, 0x7f, 0x24, 0x43, 0x96, 0x5d, 0x6a, 0xe8, 0x13, - 0x48, 0x1f, 0x5b, 0x43, 0x16, 0x0d, 0x88, 0x07, 0x7a, 0xc7, 0x1a, 0x62, 0x46, 0xb2, 0xbb, 0xa0, - 0x51, 0x12, 0xf4, 0x08, 0xb2, 0x9e, 0xef, 0x62, 0x63, 0xc4, 0x3d, 0xe1, 0x0d, 0xe1, 0xd6, 0x23, - 0xe0, 0x90, 0x9c, 0x93, 0xa1, 0xe7, 0x90, 0xf7, 0xf0, 0x60, 0x84, 0x6d, 0xdf, 0xe3, 0xf1, 0xc1, - 0xb7, 0x22, 0x16, 0x86, 0xc0, 0xe6, 0xd4, 0x87, 0x42, 0x7a, 0xb4, 0x0e, 0x59, 0x6b, 0x64, 0x0c, - 0xb0, 0x77, 0xc1, 0x71, 0xb6, 0x08, 0x38, 0xfa, 0x16, 0xa3, 0x12, 0xef, 0xe4, 0xec, 0x4c, 0x77, - 0x32, 0xb9, 0x5f, 0xfb, 0x14, 0x54, 0xff, 0x43, 0x09, 0x20, 0x12, 0x03, 0x7d, 0x0f, 0x0a, 0x64, - 0xbd, 0xba, 0x7f, 0x3e, 0x66, 0xfb, 0x52, 0x89, 0x87, 0x10, 0x4c, 0xea, 0xde, 0xf9, 0x18, 0x6b, - 0xf9, 0x63, 0xfe, 0x8b, 0xf8, 0x5d, 0xf2, 0x7b, 0x6c, 0xf8, 0x27, 0xec, 0xcc, 0x69, 0xe1, 0x18, - 0x7d, 0x02, 0x8a, 0x69, 0x79, 0xc6, 0xd1, 0x10, 0xeb, 0x23, 0xc3, 0xb6, 0x8e, 0xb1, 0xe7, 0xf3, - 0xbb, 0xae, 0xca, 0xe1, 0xfb, 0x1c, 0x5c, 0x7f, 0x05, 0x25, 0x71, 0x3b, 0xd1, 0x26, 0xe4, 0x69, - 0x4c, 0xd7, 0x77, 0x86, 0x5c, 0x98, 0x0f, 0x62, 0xfb, 0xde, 0xe1, 0x68, 0x2d, 0x24, 0x44, 0x08, - 0xd2, 0x13, 0x77, 0xe8, 0xd5, 0xe4, 0xbb, 0xa9, 0x07, 0x05, 0x8d, 0xfe, 0xae, 0xff, 0x75, 0x1a, - 0x96, 0x12, 0x76, 0x9d, 0x68, 0x29, 0xf6, 0x81, 0x0f, 0x93, 0xb5, 0x94, 0xf0, 0x9d, 0xfb, 0x50, - 0x25, 0x6b, 0x24, 0xf1, 0xa4, 0x4e, 0x6e, 0x0f, 0xeb, 0x0d, 0x5f, 0x7a, 0x25, 0x00, 0x77, 0x28, - 0x94, 0x1c, 0x8b, 0xf1, 0xd0, 0x38, 0x1f, 0x5a, 0x9e, 0xcf, 0xa2, 0x4f, 0xea, 0x6f, 0xb4, 0x52, - 0x00, 0xa4, 0x11, 0xe8, 0xa7, 0x80, 0xc8, 0x87, 0xf5, 0x69, 0xca, 0x22, 0xa5, 0x54, 0x08, 0xa6, - 0x23, 0x52, 0x7f, 0x02, 0x0a, 0xb7, 0x16, 0xdd, 0x9c, 0xb8, 0x06, 0x71, 0x4d, 0xd4, 0x56, 0xca, - 0x5a, 0x95, 0xc3, 0x9b, 0x1c, 0x8c, 0x54, 0x41, 0x4c, 0x6f, 0x72, 0x4c, 0xc4, 0x04, 0xba, 0xd2, - 0x4b, 0xec, 0xb1, 0x4b, 0x69, 0xa2, 0x45, 0xb0, 0x71, 0xa2, 0x16, 0xf3, 0x89, 0x5a, 0x44, 0xf7, - 0x40, 0xf6, 0x36, 0xf9, 0x45, 0xbe, 0x18, 0x7d, 0x64, 0xf3, 0x70, 0x3c, 0x74, 0x0c, 0x72, 0xeb, - 0xc8, 0xde, 0x26, 0x09, 0x9d, 0x07, 0xfd, 0x31, 0xb7, 0xd7, 0x28, 0x74, 0x7e, 0xb1, 0xdd, 0x09, - 0xc9, 0x08, 0x01, 0x7a, 0x0c, 0x19, 0xe3, 0x27, 0x13, 0x17, 0x53, 0x47, 0x25, 0xc6, 0xb3, 0x0d, - 0x02, 0xdd, 0x1a, 0x3a, 0x47, 0x21, 0x3d, 0x23, 0x24, 0x47, 0xd5, 0x18, 0x5a, 0xed, 0x6e, 0x97, - 0xba, 0x1f, 0xf1, 0xa8, 0x36, 0x28, 0x38, 0xa4, 0xe7, 0x64, 0xe4, 0x30, 0xb0, 0xe8, 0xb6, 0xfe, - 0x5f, 0x29, 0x28, 0x0a, 0x47, 0x8c, 0x2c, 0xba, 0x6f, 0x8c, 0xfd, 0x89, 0x2b, 0x78, 0x2a, 0x89, - 0x6d, 0x33, 0x87, 0x87, 0x8e, 0x2a, 0xbc, 0x17, 0xe4, 0xe4, 0x7b, 0x21, 0x35, 0x75, 0x2f, 0x24, - 0xd8, 0x4e, 0x3a, 0xd1, 0x76, 0x1a, 0x17, 0xb5, 0x97, 0x89, 0x9d, 0x4a, 0x2a, 0xf0, 0x15, 0x9a, - 0x7b, 0x02, 0x45, 0xea, 0x27, 0xb8, 0x2f, 0xcf, 0xc6, 0x7c, 0x39, 0x65, 0xe7, 0xbe, 0xdc, 0x0a, - 0x7f, 0x27, 0xea, 0x3b, 0x77, 0x95, 0xbe, 0xf3, 0x33, 0xe9, 0xbb, 0x30, 0xb3, 0xbe, 0x61, 0x7e, - 0x7d, 0x17, 0xe7, 0xd5, 0xf7, 0x2f, 0x24, 0x28, 0x4f, 0x79, 0x48, 0xbe, 0x16, 0x69, 0xa6, 0xb5, - 0xc8, 0x33, 0xaf, 0x25, 0x35, 0xff, 0x5a, 0xd2, 0xb3, 0xad, 0x05, 0xa8, 0x03, 0x23, 0x17, 0x9c, - 0x5b, 0xff, 0xcf, 0x34, 0xe4, 0x03, 0x49, 0x51, 0x1d, 0xc0, 0xe8, 0xf7, 0xb1, 0xe7, 0xe9, 0xa7, - 0x98, 0xc7, 0xc2, 0x5b, 0xa9, 0x9f, 0x77, 0x64, 0xad, 0xc0, 0xc0, 0x2f, 0xf1, 0x39, 0xba, 0x05, - 0x59, 0x0f, 0xf7, 0x5d, 0xcc, 0xa2, 0x16, 0x8e, 0xe7, 0x20, 0xf4, 0x00, 0xca, 0x1e, 0xf6, 0x3c, - 0xcb, 0xb1, 0x75, 0xdf, 0x39, 0xc5, 0x36, 0xf3, 0x45, 0x8c, 0xa6, 0xc4, 0x31, 0x3d, 0x82, 0x40, - 0x0f, 0xa1, 0x6a, 0x78, 0xde, 0x64, 0x84, 0x75, 0xd7, 0x19, 0x62, 0xdd, 0x70, 0x6d, 0x7a, 0xf9, - 0x52, 0x5a, 0x49, 0x2b, 0x33, 0x9c, 0xe6, 0x0c, 0x71, 0xc3, 0xb5, 0xd1, 0x8f, 0xe0, 0x03, 0x91, - 0x18, 0xbf, 0xf1, 0xb1, 0x6b, 0x1b, 0x43, 0x12, 0xe1, 0x95, 0x29, 0xd3, 0xea, 0xcf, 0x3b, 0xf2, - 0xdb, 0xce, 0x72, 0xc4, 0xa5, 0x72, 0x92, 0x56, 0x53, 0x4b, 0x82, 0x9a, 0xe4, 0x90, 0xb9, 0x78, - 0x40, 0x5c, 0x20, 0x73, 0xac, 0x7c, 0x44, 0x2e, 0x25, 0x6c, 0x9b, 0x63, 0xc7, 0xb2, 0x7d, 0x7e, - 0xba, 0xc2, 0x31, 0xe1, 0x39, 0x9a, 0xf4, 0x4f, 0x79, 0x8e, 0x5d, 0xd0, 0xf8, 0x08, 0x3d, 0x00, - 0xe5, 0xd8, 0x71, 0xfb, 0x58, 0x27, 0x57, 0x97, 0xee, 0xf9, 0xe7, 0x43, 0x76, 0xa7, 0xe6, 0xb5, - 0x0a, 0x85, 0x77, 0x0c, 0xff, 0xa4, 0x4b, 0xa0, 0xe8, 0x0b, 0xc8, 0x8f, 0xb0, 0x6f, 0xd0, 0xa4, - 0x85, 0x25, 0xcd, 0x77, 0x2e, 0xd8, 0xcb, 0xfa, 0x3e, 0xa7, 0x50, 0x6d, 0xdf, 0x3d, 0x67, 0xfb, - 0x11, 0x72, 0xa1, 0xdb, 0x90, 0xf3, 0x8d, 0xc1, 0xc0, 0xb2, 0x07, 0xf4, 0xf0, 0xf0, 0xfd, 0x0a, - 0x60, 0xe8, 0x09, 0x2c, 0xf5, 0x1d, 0xdb, 0xa7, 0x3e, 0xde, 0xf2, 0xc6, 0x8e, 0x67, 0x51, 0x37, - 0x5f, 0x88, 0x48, 0x11, 0xc7, 0x37, 0x23, 0x34, 0xc9, 0xb9, 0xc6, 0xae, 0xf3, 0xe6, 0x9c, 0x9f, - 0x9f, 0x28, 0x74, 0xe8, 0x10, 0x68, 0x90, 0x73, 0x51, 0x92, 0xd5, 0x5f, 0x87, 0xf2, 0x94, 0x80, - 0x24, 0x83, 0x0d, 0xad, 0x45, 0x23, 0x3f, 0x89, 0x5b, 0x3b, 0x33, 0x86, 0x13, 0xcc, 0xaf, 0x36, - 0x36, 0x78, 0x2e, 0x7f, 0x26, 0xd5, 0xcf, 0xa0, 0x10, 0x1a, 0x3c, 0xfa, 0x08, 0x8a, 0x7d, 0x17, - 0xd3, 0xc0, 0xda, 0x18, 0x7a, 0xa2, 0xb9, 0x89, 0x70, 0x61, 0xd7, 0xe5, 0xa9, 0x5d, 0x0f, 0x85, - 0x4e, 0xbd, 0x53, 0xe8, 0xfa, 0xef, 0x4b, 0x50, 0x8d, 0x9d, 0x1f, 0xf4, 0x31, 0x94, 0x8c, 0x7e, - 0xdf, 0x99, 0xd8, 0xbe, 0x50, 0xde, 0x61, 0x7b, 0x54, 0xe4, 0x08, 0x7a, 0x6d, 0x7e, 0x07, 0x82, - 0x21, 0x3d, 0x15, 0x82, 0xd5, 0x03, 0x87, 0x93, 0x63, 0xf1, 0x11, 0x54, 0xc8, 0xc6, 0x1a, 0x96, - 0x8d, 0x5d, 0xf1, 0xc2, 0x2e, 0x87, 0x50, 0x32, 0x59, 0xfd, 0x2f, 0x25, 0x28, 0x89, 0xa7, 0xf2, - 0xfa, 0x47, 0xee, 0x6b, 0x34, 0xe4, 0xfa, 0xef, 0x40, 0x51, 0xd8, 0xbc, 0x84, 0xda, 0xc4, 0x2a, - 0xe4, 0x27, 0x1e, 0x39, 0x42, 0xa3, 0x40, 0xb9, 0xe1, 0x18, 0xdd, 0x81, 0xfc, 0xd8, 0xf0, 0xbc, - 0xd7, 0x8e, 0xcb, 0x32, 0x49, 0x2e, 0x67, 0x08, 0xac, 0xff, 0x9d, 0x04, 0x8b, 0x7b, 0x96, 0x37, - 0x4f, 0x89, 0xed, 0x01, 0x14, 0x58, 0x6d, 0x8f, 0x1c, 0x75, 0xb6, 0xf8, 0xe2, 0xdb, 0x4e, 0x9e, - 0xc1, 0x5a, 0x4d, 0x2d, 0xf8, 0x45, 0xcf, 0xb3, 0xd1, 0xf7, 0xad, 0x33, 0xcc, 0xc3, 0x44, 0x3e, - 0x42, 0xcf, 0x00, 0xc6, 0xe4, 0x1e, 0x63, 0xee, 0x28, 0x1d, 0xf3, 0xa9, 0xd4, 0x17, 0x75, 0x8c, - 0x81, 0x65, 0xd3, 0xb8, 0x47, 0x2b, 0x10, 0x5a, 0x0a, 0xac, 0xff, 0x9e, 0x04, 0x48, 0x94, 0xd6, - 0x1b, 0x3b, 0xb6, 0x47, 0x82, 0xa8, 0x8c, 0xe5, 0xe3, 0xd1, 0xc5, 0x84, 0x9e, 0xd1, 0x91, 0x3c, - 0x59, 0x63, 0x14, 0xe8, 0x0b, 0xa8, 0xda, 0xf8, 0x8d, 0xaf, 0x0b, 0xdf, 0x97, 0xdf, 0xf1, 0xfd, - 0x32, 0x61, 0xe8, 0x84, 0x32, 0xfc, 0x83, 0x04, 0x4b, 0x87, 0x63, 0xd3, 0xf0, 0xf1, 0xf4, 0x9e, - 0x4d, 0x6d, 0x8b, 0x74, 0xd5, 0xb6, 0x70, 0x15, 0xca, 0x91, 0x0a, 0xa3, 0xe2, 0x57, 0x6a, 0xaa, - 0xf8, 0xf5, 0x31, 0x54, 0x0d, 0xd3, 0xd4, 0x59, 0x26, 0xa2, 0xd3, 0x60, 0x38, 0x4d, 0x83, 0xe1, - 0xb2, 0x61, 0x9a, 0x2c, 0x6e, 0x3e, 0x74, 0x87, 0x1e, 0x89, 0x39, 0x5d, 0x3c, 0x72, 0xce, 0xf0, - 0x14, 0x69, 0x86, 0x92, 0x2a, 0x0c, 0x13, 0x51, 0xd7, 0x3f, 0x87, 0xc5, 0xae, 0xef, 0x8c, 0xdf, - 0x53, 0xfc, 0xfa, 0xbf, 0x03, 0x40, 0xb4, 0xb1, 0x73, 0xac, 0xbb, 0x0e, 0x39, 0x6a, 0x55, 0xa1, - 0xd9, 0x14, 0xde, 0x76, 0xb2, 0x04, 0xd2, 0x6a, 0x6a, 0xec, 0xaf, 0x39, 0x6d, 0x79, 0xe5, 0x98, - 0xe5, 0x3d, 0x87, 0x22, 0x2b, 0x26, 0xb2, 0xac, 0x66, 0x95, 0x06, 0x40, 0x37, 0x63, 0xda, 0x66, - 0x55, 0x33, 0x9a, 0xd6, 0x80, 0x17, 0xfe, 0x46, 0xdf, 0x25, 0x79, 0x9f, 0xe1, 0x4f, 0x3c, 0x5e, - 0x51, 0xb9, 0x11, 0x67, 0xa3, 0x48, 0x8d, 0x13, 0xa1, 0xdb, 0x00, 0xb4, 0x58, 0x87, 0x4d, 0xdd, - 0xf0, 0xa9, 0x0b, 0x4e, 0x69, 0x05, 0x0e, 0x69, 0xf8, 0xe8, 0x26, 0x3d, 0xc8, 0x0c, 0x59, 0xa4, - 0xc8, 0x1c, 0x1d, 0x37, 0x68, 0xc1, 0x72, 0x42, 0xcd, 0x83, 0x22, 0x11, 0xe3, 0xe4, 0x90, 0x06, - 0xc9, 0xcb, 0xb2, 0x6c, 0x43, 0x6a, 0xb7, 0xa9, 0xdd, 0xdd, 0x12, 0xf2, 0xa0, 0x78, 0xa9, 0x9b, + 0x6b, 0x7c, 0x54, 0x4b, 0xd1, 0x19, 0x28, 0x9c, 0xf1, 0x0a, 0x1f, 0x85, 0xc4, 0x84, 0x00, 0x7d, + 0x0a, 0x99, 0x11, 0x36, 0x2d, 0xa3, 0x96, 0xa6, 0x94, 0xcb, 0x21, 0xe5, 0x3e, 0x81, 0x86, 0xb4, + 0x8c, 0x08, 0x7d, 0x06, 0xd9, 0xb1, 0x8b, 0x3d, 0xec, 0xd7, 0x32, 0x77, 0xa5, 0x07, 0x95, 0x8d, + 0x0f, 0x43, 0x72, 0xd5, 0xee, 0x3b, 0xa6, 0x65, 0x0f, 0xda, 0x6c, 0xc3, 0x1d, 0x4a, 0xb5, 0x2b, + 0x69, 0x9c, 0x1e, 0x3d, 0x85, 0xbc, 0x61, 0x9e, 0x19, 0x76, 0x1f, 0x9b, 0xb5, 0x2c, 0xfd, 0x54, + 0xed, 0xb2, 0xb9, 0xbb, 0x92, 0x16, 0xd2, 0xa2, 0x4f, 0x20, 0xe7, 0x4c, 0xfc, 0xf1, 0xc4, 0xf7, + 0x6a, 0xb9, 0xbb, 0xa9, 0x07, 0xc5, 0x8d, 0x6a, 0x38, 0xad, 0x4d, 0xe1, 0x5a, 0x80, 0x47, 0x8f, + 0x21, 0xe7, 0xf9, 0x8e, 0x6b, 0x0c, 0x70, 0x2d, 0x4f, 0xbf, 0xb0, 0x12, 0x92, 0x76, 0x19, 0x7c, + 0xdb, 0xb1, 0x8f, 0xad, 0x81, 0x16, 0x90, 0xa1, 0x0d, 0xc8, 0xbf, 0xc6, 0x47, 0x27, 0x8e, 0x73, + 0xea, 0xd5, 0x0a, 0x74, 0xf5, 0x15, 0xf1, 0xa4, 0x08, 0x82, 0x4f, 0x09, 0xe9, 0xb6, 0xf2, 0x90, + 0xf5, 0xe8, 0xa9, 0x6c, 0x01, 0xe4, 0x31, 0xe7, 0xbc, 0xfe, 0xc7, 0x12, 0x54, 0xa6, 0xa5, 0x81, + 0x56, 0x20, 0x3b, 0x34, 0xce, 0x9d, 0x89, 0xcf, 0x45, 0xca, 0x47, 0xe8, 0x36, 0x80, 0x31, 0x31, + 0x2d, 0x47, 0x77, 0xec, 0xe1, 0x39, 0x15, 0x69, 0x5e, 0x2b, 0x50, 0x48, 0xdb, 0x1e, 0x9e, 0x13, + 0xf4, 0x99, 0x65, 0x62, 0x8e, 0x4e, 0x31, 0x34, 0x85, 0x50, 0xf4, 0xc7, 0x50, 0xed, 0x4f, 0x3c, + 0xdf, 0x19, 0xe9, 0x47, 0x86, 0x87, 0xf5, 0x89, 0x3b, 0xa4, 0x92, 0x2b, 0x68, 0x65, 0x06, 0xde, + 0x32, 0x3c, 0x7c, 0xe8, 0x0e, 0xeb, 0x7f, 0x20, 0x41, 0x21, 0x14, 0x36, 0x52, 0x20, 0x45, 0x28, + 0x19, 0x23, 0xe4, 0xe7, 0x35, 0xb9, 0xf8, 0x14, 0x90, 0xf1, 0xda, 0xb0, 0x7c, 0xdd, 0x23, 0xda, + 0xac, 0x7b, 0xd6, 0xc0, 0x36, 0x18, 0x23, 0x79, 0x4d, 0xa1, 0x18, 0xaa, 0xe6, 0x5d, 0x0a, 0xaf, + 0xff, 0x52, 0x82, 0xa2, 0xa0, 0x4e, 0xe8, 0x19, 0x54, 0xd8, 0xe2, 0xbe, 0x6b, 0xf4, 0x4f, 0x75, + 0xcb, 0x64, 0x8c, 0x6d, 0x55, 0xdf, 0x76, 0x4a, 0x14, 0xd1, 0x23, 0xf0, 0x56, 0x73, 0x77, 0x41, + 0x13, 0xc7, 0x26, 0xda, 0x85, 0xc5, 0xb1, 0xe1, 0xfa, 0x56, 0xdf, 0x1a, 0x1b, 0xb6, 0xaf, 0x53, + 0x1c, 0x37, 0x8a, 0x9b, 0xa1, 0xe0, 0x3a, 0x11, 0xc5, 0x97, 0x84, 0x60, 0x77, 0x41, 0x53, 0xc6, + 0x31, 0x18, 0x5a, 0x83, 0x0c, 0xdd, 0x2c, 0x37, 0x90, 0x48, 0xed, 0x1b, 0x04, 0xca, 0x85, 0xce, + 0x48, 0xd0, 0x7d, 0x48, 0x9b, 0x86, 0x1f, 0x58, 0xc8, 0x52, 0x48, 0xda, 0x34, 0x7c, 0x83, 0x53, + 0x52, 0x82, 0xad, 0x1c, 0x64, 0x28, 0x4b, 0xf5, 0xdf, 0x05, 0x25, 0xce, 0x05, 0x5a, 0x85, 0xbc, + 0x65, 0x62, 0xdb, 0xb7, 0xfc, 0xf3, 0xc0, 0xc6, 0x83, 0x31, 0x5a, 0x87, 0xa5, 0xb1, 0x8b, 0x8f, + 0xb1, 0xab, 0x7b, 0x7d, 0x17, 0x63, 0x5b, 0xf7, 0x4e, 0x0c, 0x17, 0x73, 0xa9, 0x2c, 0x32, 0x54, + 0x97, 0x62, 0xba, 0x04, 0x51, 0x7f, 0x0e, 0x45, 0x81, 0x4f, 0xf4, 0x10, 0xb2, 0xae, 0x33, 0xf1, + 0xb1, 0x57, 0x93, 0xa8, 0x12, 0x2f, 0x4d, 0xef, 0x46, 0x23, 0x38, 0x8d, 0x93, 0xd4, 0xff, 0x5b, + 0x02, 0x88, 0xc0, 0xe8, 0x3e, 0xe4, 0x63, 0x52, 0x80, 0xb7, 0x9d, 0x9c, 0x1f, 0x0a, 0x80, 0xff, + 0x34, 0xd1, 0x26, 0x2c, 0x8b, 0x67, 0x1f, 0xee, 0x85, 0x30, 0x59, 0xd8, 0x5d, 0xd0, 0x96, 0x04, + 0x6c, 0x2b, 0xd8, 0xd8, 0x0f, 0x41, 0x3c, 0x7a, 0xfd, 0xd4, 0xb2, 0x4d, 0x7a, 0xe2, 0x95, 0x8d, + 0xdb, 0x49, 0xf2, 0x6a, 0xd9, 0xc7, 0xce, 0xfa, 0x4b, 0xcb, 0x36, 0x77, 0x17, 0xb4, 0xaa, 0x30, + 0x91, 0x80, 0xd0, 0x23, 0xc8, 0xf5, 0x4f, 0x0c, 0xdb, 0xc6, 0x4c, 0xd1, 0x2a, 0x1b, 0x37, 0x62, + 0x42, 0x63, 0x48, 0x2d, 0xa0, 0x22, 0xe2, 0x18, 0x19, 0x7e, 0xff, 0xa4, 0xde, 0x00, 0x88, 0x64, + 0x85, 0x36, 0xa1, 0xe0, 0xe1, 0x21, 0xee, 0xfb, 0x8e, 0x1b, 0x1c, 0xd8, 0x8d, 0x29, 0x99, 0x76, + 0x39, 0x56, 0x8b, 0xe8, 0xea, 0x3f, 0x95, 0xa0, 0x24, 0xe2, 0xfe, 0x8f, 0xcf, 0x6d, 0x05, 0x32, + 0xbe, 0x33, 0xb6, 0xfa, 0xf4, 0xb0, 0x08, 0x15, 0x1b, 0x46, 0x5b, 0xfa, 0xa7, 0x14, 0x54, 0x63, + 0x6e, 0x13, 0x2d, 0x43, 0xe6, 0xb5, 0x65, 0xfa, 0x27, 0x94, 0x9f, 0x8c, 0xc6, 0x06, 0xc4, 0x0d, + 0x9d, 0x60, 0x6b, 0x70, 0xe2, 0xd3, 0x2f, 0x66, 0x34, 0x3e, 0x22, 0xd4, 0x26, 0x1e, 0xfb, 0x27, + 0xf4, 0x13, 0x19, 0x8d, 0x0d, 0xd0, 0xb7, 0xa0, 0x70, 0xec, 0x1a, 0x23, 0xec, 0x92, 0xeb, 0x26, + 0x4d, 0x31, 0x11, 0x00, 0x3d, 0x81, 0x22, 0x73, 0x1a, 0x7d, 0xc7, 0xc4, 0x7d, 0x7e, 0x07, 0x2c, + 0xc5, 0x6d, 0xc7, 0xc4, 0x7d, 0x8d, 0x39, 0x17, 0xfa, 0x1b, 0xdd, 0x83, 0x32, 0x9b, 0x75, 0x64, + 0xf9, 0x74, 0xdd, 0x2c, 0x5d, 0xb7, 0x44, 0x81, 0x5b, 0x0c, 0x86, 0xee, 0x43, 0x95, 0x11, 0x1d, + 0xbb, 0xe4, 0x56, 0xb4, 0xfb, 0xe7, 0xb5, 0x1c, 0x25, 0xab, 0x50, 0xf0, 0x4e, 0x00, 0x25, 0x3c, + 0x30, 0xe7, 0xc1, 0x78, 0xc8, 0xc7, 0x78, 0xa0, 0xc6, 0xc6, 0x79, 0x38, 0x0b, 0x7f, 0x13, 0x1e, + 0xd8, 0xac, 0x80, 0x87, 0x02, 0xe3, 0x81, 0x02, 0x03, 0x1e, 0x3e, 0x05, 0x74, 0x8a, 0xcf, 0x75, + 0xba, 0x5f, 0xdd, 0xb2, 0x7d, 0xec, 0x9e, 0x19, 0xc3, 0x1a, 0xdc, 0x95, 0x1e, 0x48, 0x9a, 0x72, + 0x8a, 0xcf, 0x77, 0x08, 0xa2, 0xc5, 0xe1, 0xe8, 0x7e, 0xb0, 0xad, 0x1f, 0x4f, 0x8c, 0x21, 0x91, + 0x68, 0x91, 0x2c, 0xb9, 0x25, 0xd7, 0x24, 0xbe, 0xb5, 0x1f, 0x31, 0x38, 0x21, 0x64, 0xdf, 0x0e, + 0x08, 0x4b, 0x11, 0x21, 0x45, 0x70, 0xc2, 0xfa, 0x1f, 0xc9, 0x90, 0x65, 0x97, 0x1a, 0xfa, 0x04, + 0xd2, 0xc7, 0xd6, 0x90, 0x45, 0x03, 0xa2, 0x41, 0xef, 0x58, 0x43, 0xcc, 0x48, 0x76, 0x17, 0x34, + 0x4a, 0x82, 0x1e, 0x41, 0xd6, 0xf3, 0x5d, 0x6c, 0x8c, 0xb8, 0x27, 0xbc, 0x21, 0xdc, 0x7a, 0x04, + 0x1c, 0x92, 0x73, 0x32, 0xf4, 0x1c, 0xf2, 0x1e, 0x1e, 0x8c, 0xb0, 0xed, 0x7b, 0xdc, 0xfd, 0x7d, + 0x2b, 0x9a, 0xc2, 0x10, 0xd8, 0x9c, 0xfa, 0x50, 0x48, 0x8f, 0xd6, 0x21, 0x6b, 0x8d, 0x8c, 0x01, + 0xf6, 0x2e, 0xc4, 0x0b, 0x2d, 0x02, 0x8e, 0xbe, 0xc5, 0xa8, 0xc4, 0x3b, 0x39, 0x3b, 0xd3, 0x9d, + 0x4c, 0xee, 0xd7, 0x3e, 0x05, 0xd5, 0xff, 0x50, 0x02, 0x88, 0xd8, 0x40, 0xdf, 0x83, 0x02, 0xd9, + 0xaf, 0xee, 0x9f, 0x8f, 0xd9, 0xb9, 0x54, 0xe2, 0x21, 0x04, 0xe3, 0xba, 0x77, 0x3e, 0xc6, 0x5a, + 0xfe, 0x98, 0xff, 0x22, 0x7e, 0x97, 0xfc, 0x1e, 0x1b, 0xfe, 0x09, 0xb3, 0x39, 0x2d, 0x1c, 0xa3, + 0x4f, 0x40, 0x31, 0x2d, 0xcf, 0x38, 0x1a, 0x62, 0x7d, 0x64, 0xd8, 0xd6, 0x31, 0xf6, 0x7c, 0x7e, + 0xd7, 0x55, 0x39, 0x7c, 0x9f, 0x83, 0xeb, 0xaf, 0xa0, 0x24, 0x1e, 0x27, 0xda, 0x84, 0x3c, 0x8d, + 0xe9, 0xfa, 0xce, 0x90, 0x33, 0xf3, 0x41, 0xec, 0xdc, 0x3b, 0x1c, 0xad, 0x85, 0x84, 0x08, 0x41, + 0x7a, 0xe2, 0x0e, 0xbd, 0x9a, 0x7c, 0x37, 0xf5, 0xa0, 0xa0, 0xd1, 0xdf, 0xf5, 0xbf, 0x4e, 0xc3, + 0x52, 0xc2, 0xa9, 0x13, 0x29, 0xc5, 0x3e, 0xf0, 0x61, 0xb2, 0x94, 0x12, 0xbe, 0x73, 0x1f, 0xaa, + 0x64, 0x8f, 0x24, 0x9e, 0xd4, 0xc9, 0xed, 0x61, 0xbd, 0xe1, 0x5b, 0xaf, 0x04, 0xe0, 0x0e, 0x85, + 0x12, 0xb3, 0x18, 0x0f, 0x8d, 0xf3, 0xa1, 0xe5, 0xf9, 0x2c, 0xfa, 0xa4, 0xfe, 0x46, 0x2b, 0x05, + 0x40, 0x1a, 0x81, 0x7e, 0x0a, 0x88, 0x7c, 0x58, 0x9f, 0xa6, 0x2c, 0x52, 0x4a, 0x85, 0x60, 0x3a, + 0x22, 0xf5, 0x27, 0xa0, 0x70, 0x6d, 0xd1, 0xcd, 0x89, 0x6b, 0x10, 0xd7, 0x44, 0x75, 0xa5, 0xac, + 0x55, 0x39, 0xbc, 0xc9, 0xc1, 0x48, 0x15, 0xd8, 0xf4, 0x26, 0xc7, 0x84, 0x4d, 0xa0, 0x3b, 0xbd, + 0x44, 0x1f, 0xbb, 0x94, 0x26, 0xda, 0x04, 0x1b, 0x27, 0x4a, 0x31, 0x9f, 0x28, 0x45, 0x74, 0x0f, + 0x64, 0x6f, 0x93, 0xfa, 0xad, 0xe2, 0xc6, 0x62, 0xf4, 0x91, 0xcd, 0xc3, 0xf1, 0xd0, 0x31, 0xc8, + 0xad, 0x23, 0x7b, 0x9b, 0x24, 0x74, 0x1e, 0xf4, 0xc7, 0x5c, 0x5f, 0xa3, 0xd0, 0xf9, 0xc5, 0x76, + 0x27, 0x24, 0x23, 0x04, 0xe8, 0x31, 0x64, 0x8c, 0x9f, 0x4c, 0x5c, 0x4c, 0x1d, 0x95, 0x18, 0xcf, + 0x36, 0x08, 0x74, 0x6b, 0xe8, 0x1c, 0x85, 0xf4, 0x8c, 0x90, 0x98, 0xaa, 0x31, 0xb4, 0xda, 0xdd, + 0x2e, 0x75, 0x3f, 0xa2, 0xa9, 0x36, 0x28, 0x38, 0xa4, 0xe7, 0x64, 0xc4, 0x18, 0x58, 0x74, 0x5b, + 0xff, 0xaf, 0x14, 0x14, 0x05, 0x13, 0x23, 0x9b, 0xee, 0x1b, 0x63, 0x7f, 0xe2, 0x0a, 0x9e, 0x4a, + 0x62, 0xc7, 0xcc, 0xe1, 0xa1, 0xa3, 0x0a, 0xef, 0x05, 0x39, 0xf9, 0x5e, 0x48, 0x4d, 0xdd, 0x0b, + 0x09, 0xba, 0x93, 0x4e, 0xd4, 0x9d, 0xc6, 0x45, 0xe9, 0x65, 0x62, 0x56, 0x49, 0x19, 0xbe, 0x42, + 0x72, 0x4f, 0xa0, 0x48, 0xfd, 0x04, 0xf7, 0xe5, 0xd9, 0x98, 0x2f, 0xa7, 0xd3, 0xb9, 0x2f, 0xb7, + 0xc2, 0xdf, 0x89, 0xf2, 0xce, 0x5d, 0x25, 0xef, 0xfc, 0x4c, 0xf2, 0x2e, 0xcc, 0x2c, 0x6f, 0x98, + 0x5f, 0xde, 0xc5, 0x79, 0xe5, 0xfd, 0x0b, 0x09, 0xca, 0x53, 0x1e, 0x92, 0xef, 0x45, 0x9a, 0x69, + 0x2f, 0xf2, 0xcc, 0x7b, 0x49, 0xcd, 0xbf, 0x97, 0xf4, 0x6c, 0x7b, 0x01, 0xea, 0xc0, 0xc8, 0x05, + 0xe7, 0xd6, 0xff, 0x33, 0x0d, 0xf9, 0x80, 0x53, 0x54, 0x07, 0x30, 0xfa, 0x7d, 0xec, 0x79, 0xfa, + 0x29, 0xe6, 0xb1, 0xf0, 0x56, 0xea, 0xe7, 0x1d, 0x59, 0x2b, 0x30, 0xf0, 0x4b, 0x7c, 0x8e, 0x6e, + 0x41, 0xd6, 0xc3, 0x7d, 0x17, 0xb3, 0xa8, 0x85, 0xe3, 0x39, 0x08, 0x3d, 0x80, 0xb2, 0x87, 0x3d, + 0xcf, 0x72, 0x6c, 0xdd, 0x77, 0x4e, 0xb1, 0xcd, 0x7c, 0x11, 0xa3, 0x29, 0x71, 0x4c, 0x8f, 0x20, + 0xd0, 0x43, 0xa8, 0x1a, 0x9e, 0x37, 0x19, 0x61, 0xdd, 0x75, 0x86, 0x58, 0x37, 0x5c, 0x9b, 0x5e, + 0xbe, 0x94, 0x56, 0xd2, 0xca, 0x0c, 0xa7, 0x39, 0x43, 0xdc, 0x70, 0x6d, 0xf4, 0x23, 0xf8, 0x40, + 0x24, 0xc6, 0x6f, 0x7c, 0xec, 0xda, 0xc6, 0x90, 0x44, 0x78, 0x65, 0x3a, 0x69, 0xf5, 0xe7, 0x1d, + 0xf9, 0x6d, 0x67, 0x39, 0x9a, 0xa5, 0x72, 0x92, 0x56, 0x53, 0x4b, 0x82, 0x9a, 0xc4, 0xc8, 0x5c, + 0x3c, 0x20, 0x2e, 0x90, 0x39, 0x56, 0x3e, 0x22, 0x97, 0x12, 0xb6, 0xcd, 0xb1, 0x63, 0xd9, 0x3e, + 0xb7, 0xae, 0x70, 0x4c, 0xe6, 0x1c, 0x4d, 0xfa, 0xa7, 0x3c, 0xc7, 0x2e, 0x68, 0x7c, 0x84, 0x1e, + 0x80, 0x72, 0xec, 0xb8, 0x7d, 0xac, 0x93, 0xab, 0x4b, 0xf7, 0xfc, 0xf3, 0x21, 0xbb, 0x53, 0xf3, + 0x5a, 0x85, 0xc2, 0x3b, 0x86, 0x7f, 0xd2, 0x25, 0x50, 0xf4, 0x05, 0xe4, 0x47, 0xd8, 0x37, 0x68, + 0xd2, 0xc2, 0x92, 0xe6, 0x3b, 0x17, 0xf4, 0x65, 0x7d, 0x9f, 0x53, 0xa8, 0xb6, 0xef, 0x9e, 0xb3, + 0xf3, 0x08, 0x67, 0xa1, 0xdb, 0x90, 0xf3, 0x8d, 0xc1, 0xc0, 0xb2, 0x07, 0xd4, 0x78, 0xf8, 0x79, + 0x05, 0x30, 0xf4, 0x04, 0x96, 0xfa, 0x8e, 0xed, 0x53, 0x1f, 0x6f, 0x79, 0x63, 0xc7, 0xb3, 0xa8, + 0x9b, 0x2f, 0x44, 0xa4, 0x88, 0xe3, 0x9b, 0x11, 0x9a, 0xe4, 0x5c, 0x63, 0xd7, 0x79, 0x73, 0xce, + 0xed, 0x27, 0x0a, 0x1d, 0x3a, 0x04, 0x1a, 0xe4, 0x5c, 0x94, 0x64, 0xf5, 0xd7, 0xa1, 0x3c, 0xc5, + 0x20, 0xc9, 0x60, 0x43, 0x6d, 0xd1, 0xc8, 0x4f, 0xe2, 0xd6, 0xce, 0x8c, 0xe1, 0x04, 0xf3, 0xab, + 0x8d, 0x0d, 0x9e, 0xcb, 0x9f, 0x49, 0xf5, 0x33, 0x28, 0x84, 0x0a, 0x8f, 0x3e, 0x82, 0x62, 0xdf, + 0xc5, 0x34, 0xb0, 0x36, 0x86, 0x9e, 0xa8, 0x6e, 0x22, 0x5c, 0x38, 0x75, 0x79, 0xea, 0xd4, 0x43, + 0xa6, 0x53, 0xef, 0x64, 0xba, 0xfe, 0xfb, 0x12, 0x54, 0x63, 0xf6, 0x83, 0x3e, 0x86, 0x92, 0xd1, + 0xef, 0x3b, 0x13, 0xdb, 0x17, 0xca, 0x3b, 0xec, 0x8c, 0x8a, 0x1c, 0x41, 0xaf, 0xcd, 0xef, 0x40, + 0x30, 0xa4, 0x56, 0x21, 0x68, 0x3d, 0x70, 0x38, 0x31, 0x8b, 0x8f, 0xa0, 0x42, 0x0e, 0xd6, 0xb0, + 0x6c, 0xec, 0x8a, 0x17, 0x76, 0x39, 0x84, 0x92, 0xc5, 0xea, 0x7f, 0x29, 0x41, 0x49, 0xb4, 0xca, + 0xeb, 0x9b, 0xdc, 0xd7, 0xa8, 0xc8, 0xf5, 0xdf, 0x81, 0xa2, 0x70, 0x78, 0x09, 0xb5, 0x89, 0x55, + 0xc8, 0x4f, 0x3c, 0x62, 0x42, 0xa3, 0x40, 0xb8, 0xe1, 0x18, 0xdd, 0x81, 0xfc, 0xd8, 0xf0, 0xbc, + 0xd7, 0x8e, 0xcb, 0x32, 0x49, 0xce, 0x67, 0x08, 0xac, 0xff, 0x9d, 0x04, 0x8b, 0x7b, 0x96, 0x37, + 0x4f, 0x89, 0xed, 0x01, 0x14, 0x58, 0x6d, 0x8f, 0x98, 0x3a, 0xdb, 0x7c, 0xf1, 0x6d, 0x27, 0xcf, + 0x60, 0xad, 0xa6, 0x16, 0xfc, 0xa2, 0xf6, 0x6c, 0xf4, 0x7d, 0xeb, 0x0c, 0xf3, 0x30, 0x91, 0x8f, + 0xd0, 0x33, 0x80, 0x31, 0xb9, 0xc7, 0x98, 0x3b, 0x4a, 0xc7, 0x7c, 0x2a, 0xf5, 0x45, 0x1d, 0x63, + 0x60, 0xd9, 0x34, 0xee, 0xd1, 0x0a, 0x84, 0x96, 0x02, 0xeb, 0xbf, 0x27, 0x01, 0x12, 0xb9, 0xf5, + 0xc6, 0x8e, 0xed, 0x91, 0x20, 0x2a, 0x63, 0xf9, 0x78, 0x74, 0x31, 0xa1, 0x67, 0x74, 0x24, 0x4f, + 0xd6, 0x18, 0x05, 0xfa, 0x02, 0xaa, 0x36, 0x7e, 0xe3, 0xeb, 0xc2, 0xf7, 0xe5, 0x77, 0x7c, 0xbf, + 0x4c, 0x26, 0x74, 0x42, 0x1e, 0xfe, 0x41, 0x82, 0xa5, 0xc3, 0xb1, 0x69, 0xf8, 0x78, 0xfa, 0xcc, + 0xa6, 0x8e, 0x45, 0xba, 0xea, 0x58, 0xb8, 0x08, 0xe5, 0x48, 0x84, 0x51, 0xf1, 0x2b, 0x35, 0x55, + 0xfc, 0xfa, 0x18, 0xaa, 0x86, 0x69, 0xea, 0x2c, 0x13, 0xd1, 0x69, 0x30, 0x9c, 0xa6, 0xc1, 0x70, + 0xd9, 0x30, 0x4d, 0x16, 0x37, 0x1f, 0xba, 0x43, 0x8f, 0xc4, 0x9c, 0x2e, 0x1e, 0x39, 0x67, 0x78, + 0x8a, 0x34, 0x43, 0x49, 0x15, 0x86, 0x89, 0xa8, 0xeb, 0x9f, 0xc3, 0x62, 0xd7, 0x77, 0xc6, 0xef, + 0xc9, 0x7e, 0xfd, 0xdf, 0x01, 0x20, 0x3a, 0xd8, 0x39, 0xf6, 0x5d, 0x87, 0x1c, 0xd5, 0xaa, 0x50, + 0x6d, 0x0a, 0x6f, 0x3b, 0x59, 0x02, 0x69, 0x35, 0x35, 0xf6, 0xd7, 0x9c, 0xd6, 0xbc, 0x72, 0x4c, + 0xf3, 0x9e, 0x43, 0x91, 0x15, 0x13, 0x59, 0x56, 0xb3, 0x4a, 0x03, 0xa0, 0x9b, 0x31, 0x69, 0xb3, + 0xaa, 0x19, 0x4d, 0x6b, 0xc0, 0x0b, 0x7f, 0xa3, 0xef, 0x92, 0xbc, 0xcf, 0xf0, 0x27, 0x1e, 0xaf, + 0xa8, 0xdc, 0x88, 0x4f, 0xa3, 0x48, 0x8d, 0x13, 0xa1, 0xdb, 0x00, 0xb4, 0x58, 0x87, 0x4d, 0xdd, + 0xf0, 0xa9, 0x0b, 0x4e, 0x69, 0x05, 0x0e, 0x69, 0xf8, 0xe8, 0x26, 0x35, 0x64, 0x86, 0x2c, 0x52, + 0x64, 0x8e, 0x8e, 0x1b, 0xb4, 0x60, 0x39, 0xa1, 0xea, 0x41, 0x91, 0x88, 0xcd, 0xe4, 0x90, 0x06, + 0xc9, 0xcb, 0xb2, 0xec, 0x40, 0x6a, 0xb7, 0xa9, 0xde, 0xdd, 0x12, 0xf2, 0xa0, 0x78, 0xa9, 0x9b, 0x84, 0x07, 0x8c, 0x18, 0x3d, 0x25, 0x1e, 0x85, 0xa4, 0x14, 0xb5, 0x0f, 0x63, 0x39, 0xa8, 0xfa, - 0x66, 0xec, 0xb8, 0xbe, 0x46, 0x91, 0x02, 0x1f, 0xa3, 0x46, 0x7b, 0x50, 0xa1, 0xfb, 0xd9, 0x77, - 0x46, 0xf4, 0x66, 0xc1, 0xfc, 0xb8, 0xdd, 0x0b, 0xf9, 0x35, 0xc7, 0x19, 0x6d, 0x07, 0xd8, 0xf8, - 0xe7, 0xcb, 0xae, 0x88, 0x45, 0xdf, 0x65, 0x65, 0xf2, 0x4a, 0xac, 0x86, 0xf8, 0x0a, 0x1f, 0xc5, - 0x19, 0x69, 0xb5, 0x5c, 0x85, 0xa2, 0x50, 0xae, 0xa9, 0x2d, 0x51, 0xb6, 0x6f, 0x27, 0x95, 0xb2, - 0xe2, 0xec, 0x22, 0x1f, 0x6a, 0x43, 0x95, 0x15, 0x8f, 0xa2, 0x45, 0xb0, 0x9c, 0xe4, 0x3b, 0xd1, - 0x99, 0x25, 0xf8, 0x4b, 0x57, 0x51, 0xf1, 0xa7, 0xd0, 0x68, 0x13, 0x32, 0x14, 0xc2, 0x93, 0x96, - 0x5b, 0xd3, 0xd3, 0xc4, 0xb9, 0x19, 0x2d, 0x7a, 0x0e, 0x15, 0x7e, 0xb8, 0x5c, 0xec, 0x4d, 0x86, - 0xbe, 0x57, 0xab, 0xc6, 0xbc, 0x0d, 0x3b, 0x62, 0xd4, 0xdb, 0x94, 0x19, 0xa9, 0xc6, 0x28, 0xd1, - 0x13, 0x28, 0xd1, 0x64, 0x3c, 0xe0, 0x54, 0x28, 0xe7, 0xe2, 0x54, 0x9d, 0x82, 0xf2, 0x15, 0x09, - 0x59, 0xc0, 0xf5, 0x03, 0x08, 0x72, 0xc0, 0x90, 0x71, 0x31, 0x56, 0x80, 0xe3, 0x09, 0x1f, 0x73, - 0x71, 0x15, 0x4e, 0x1d, 0xf0, 0x7f, 0x06, 0x65, 0x96, 0x2f, 0x04, 0xdc, 0xcb, 0x31, 0x81, 0x69, - 0xc6, 0xc0, 0x78, 0x4b, 0x94, 0x32, 0xe0, 0x5c, 0x86, 0x0c, 0x76, 0x5d, 0xc7, 0x65, 0x31, 0x8a, - 0xc6, 0x06, 0xc4, 0xb2, 0xe9, 0x0f, 0x9a, 0x7f, 0xd4, 0x56, 0x58, 0xb9, 0x8b, 0x42, 0x48, 0xa6, - 0x81, 0x6a, 0x90, 0x33, 0xb1, 0x6f, 0x58, 0x43, 0xaf, 0x76, 0x83, 0xb2, 0x05, 0x43, 0xf4, 0x10, - 0x16, 0x83, 0xd4, 0x43, 0x1f, 0x3a, 0x7d, 0x96, 0xe5, 0x7e, 0xc0, 0x32, 0xe2, 0x00, 0xb1, 0xc7, - 0xe1, 0x68, 0x1d, 0x96, 0x8e, 0x8c, 0xfe, 0xe9, 0x64, 0xac, 0xf3, 0x1a, 0x87, 0x3e, 0xf1, 0xb0, - 0x59, 0xbb, 0xc9, 0xaa, 0xbb, 0x0c, 0xc5, 0x43, 0xfd, 0x43, 0x0f, 0x9b, 0xe8, 0x0e, 0x14, 0x5d, - 0xec, 0xbb, 0xe7, 0x3a, 0xbd, 0xf6, 0x6b, 0xb7, 0xa8, 0x58, 0x40, 0x41, 0xdb, 0x04, 0x42, 0x4e, - 0x1c, 0xaf, 0xf8, 0xe4, 0x62, 0x0f, 0x42, 0x91, 0xc2, 0xc8, 0xa5, 0xb2, 0x25, 0xd7, 0xa4, 0x5d, - 0x29, 0xac, 0xfb, 0x3c, 0xe4, 0x35, 0xa5, 0x78, 0x3a, 0x14, 0xe8, 0x8a, 0x93, 0xb3, 0xaa, 0xd2, - 0x33, 0xa1, 0x48, 0x54, 0x8a, 0xd7, 0x95, 0x04, 0x1d, 0x71, 0xa6, 0x90, 0x78, 0xab, 0x00, 0x39, - 0x97, 0x59, 0x1a, 0xc9, 0x66, 0x98, 0xa2, 0xea, 0x3f, 0x93, 0x01, 0x22, 0xd9, 0x92, 0x9f, 0x23, - 0x04, 0xef, 0x24, 0x5f, 0xe5, 0x9d, 0x52, 0xd3, 0xde, 0x69, 0x15, 0xf2, 0x53, 0x75, 0x86, 0x94, - 0x16, 0x8e, 0xd1, 0x46, 0xe8, 0x22, 0x59, 0x66, 0xba, 0x9a, 0xb0, 0x51, 0xeb, 0x31, 0x3f, 0x19, - 0x5a, 0x4a, 0x56, 0xb4, 0x94, 0x3a, 0x94, 0x87, 0x86, 0x47, 0xcc, 0x96, 0x28, 0xc6, 0x60, 0x09, - 0x67, 0x4a, 0x2b, 0x12, 0xa0, 0x46, 0x60, 0x0d, 0x9f, 0x98, 0x0b, 0x41, 0x5b, 0xd8, 0xa3, 0x5b, - 0x5c, 0xd6, 0x82, 0x61, 0x7d, 0x1d, 0xb2, 0xec, 0x2b, 0x08, 0x20, 0xdb, 0xd8, 0xee, 0xb5, 0xbe, - 0x54, 0x95, 0x05, 0x54, 0x82, 0xfc, 0x4e, 0xeb, 0xa0, 0xd5, 0xdd, 0x55, 0x9b, 0x8a, 0x44, 0x30, - 0x3b, 0x8d, 0xd6, 0x9e, 0xda, 0x54, 0xe4, 0xfa, 0xcf, 0x24, 0xc8, 0x07, 0x5a, 0x09, 0x0a, 0x58, - 0x62, 0xe4, 0x12, 0x8c, 0xbf, 0xa6, 0x6d, 0xcb, 0xc6, 0xb6, 0x0d, 0x41, 0xda, 0xb3, 0x7e, 0x82, - 0xf9, 0x76, 0xd2, 0xdf, 0x84, 0x3e, 0x34, 0x74, 0x16, 0xce, 0x85, 0xe3, 0xfa, 0x3f, 0xcb, 0x50, - 0x12, 0x6d, 0xe2, 0x62, 0x59, 0x49, 0x9a, 0xb9, 0xac, 0x94, 0xbf, 0xa4, 0xac, 0x24, 0xca, 0x2b, - 0x5f, 0x22, 0x6f, 0x4a, 0x90, 0xf7, 0x21, 0x2c, 0x86, 0x13, 0x87, 0x82, 0xb3, 0x08, 0x55, 0x09, - 0x10, 0xe1, 0x09, 0x7d, 0x02, 0x2b, 0xd3, 0xa2, 0x84, 0x1c, 0xcc, 0x5d, 0x2c, 0x8b, 0xe2, 0x84, - 0x5c, 0xf7, 0x48, 0x1a, 0xca, 0xbc, 0x19, 0x3b, 0xa9, 0x19, 0xfa, 0xfd, 0x12, 0x07, 0xb2, 0xb3, - 0x3a, 0xad, 0xa1, 0xec, 0x55, 0x1a, 0xca, 0x4d, 0x69, 0xa8, 0xfe, 0x27, 0x12, 0x40, 0xe4, 0xcf, - 0x66, 0xaf, 0xcb, 0xdc, 0x89, 0x8a, 0x2a, 0x44, 0x28, 0x89, 0xce, 0x1a, 0xd4, 0x4f, 0x2e, 0x8a, - 0x34, 0x87, 0xd1, 0xd4, 0xff, 0x42, 0x86, 0x1b, 0x8d, 0x89, 0xef, 0x5c, 0xb8, 0xe7, 0x84, 0x87, - 0x61, 0x69, 0xa6, 0x87, 0xe1, 0x85, 0xc4, 0x87, 0x61, 0xf9, 0x1d, 0x0f, 0xc3, 0x0b, 0xc2, 0xc3, - 0xf0, 0xe7, 0xfc, 0x06, 0x0a, 0x5e, 0x87, 0x53, 0xf4, 0x2a, 0x58, 0x4d, 0xaa, 0x08, 0xf3, 0x87, - 0x62, 0x7a, 0x15, 0xb5, 0xf9, 0x63, 0xb1, 0x1a, 0x5d, 0x45, 0xc1, 0x0c, 0x69, 0x3a, 0xc3, 0x95, - 0xb5, 0xf0, 0xf0, 0x46, 0xe2, 0xd3, 0x10, 0x6f, 0xc7, 0x9f, 0xf8, 0xeb, 0x7f, 0x2a, 0x43, 0x95, - 0x6c, 0x8e, 0x70, 0xe5, 0x4e, 0x15, 0x9f, 0xa5, 0x19, 0x8a, 0xcf, 0x99, 0xab, 0xca, 0x58, 0xf2, - 0x4c, 0xa5, 0x9f, 0xd4, 0xcc, 0xa5, 0x9f, 0xf4, 0xfc, 0xa5, 0x9f, 0xec, 0xbc, 0x65, 0xac, 0xbf, - 0x4f, 0xc3, 0x52, 0x42, 0x3c, 0x47, 0x62, 0x6c, 0x16, 0xcf, 0x4d, 0xc7, 0xd8, 0x0c, 0x46, 0x62, - 0x6c, 0xfe, 0x8b, 0x24, 0xd0, 0x55, 0xf6, 0xc8, 0xec, 0x1c, 0x1f, 0x7b, 0xd8, 0xd7, 0x47, 0x1e, - 0x37, 0xd9, 0x32, 0x05, 0xb7, 0x29, 0x74, 0xdf, 0x23, 0x1e, 0x1a, 0xdb, 0xa6, 0x40, 0xc5, 0x6c, - 0xb7, 0x88, 0x6d, 0x33, 0xa4, 0x11, 0x7b, 0x29, 0xd2, 0x73, 0xf7, 0x52, 0x64, 0x66, 0xee, 0xa5, - 0xc8, 0xce, 0xd7, 0x4b, 0x91, 0xbb, 0x46, 0x2f, 0x45, 0xfe, 0xfd, 0x7a, 0x29, 0x0a, 0xb3, 0xf7, - 0x52, 0xc0, 0xfc, 0xbd, 0x14, 0xc5, 0x6b, 0xf5, 0x52, 0xfc, 0x4b, 0x16, 0x56, 0x2f, 0x8f, 0xe1, - 0xaf, 0x4e, 0xe5, 0xa3, 0xbc, 0x53, 0xbe, 0xa2, 0xe9, 0x22, 0x15, 0x6f, 0x77, 0x78, 0x06, 0xec, - 0xc9, 0x4e, 0x1f, 0x59, 0x6f, 0x2c, 0x7b, 0x50, 0xab, 0x52, 0x8d, 0xc4, 0xba, 0x02, 0xf6, 0x29, - 0x4e, 0x63, 0x4f, 0xa0, 0x6c, 0x10, 0xeb, 0x93, 0x48, 0xcf, 0xd0, 0xad, 0x91, 0x49, 0xe8, 0xd6, - 0x40, 0x4f, 0x78, 0x68, 0xc6, 0x0c, 0xe7, 0x0a, 0x27, 0x46, 0xc3, 0xad, 0xe0, 0xe5, 0x6f, 0x33, - 0x16, 0x07, 0x26, 0xbf, 0xfc, 0x71, 0x96, 0x20, 0x0a, 0xfc, 0x81, 0x10, 0xd8, 0xc1, 0xbb, 0x5f, - 0xff, 0x38, 0x77, 0xf4, 0x02, 0x18, 0x99, 0x6d, 0xfe, 0x1a, 0x66, 0x5b, 0x98, 0xc3, 0x6c, 0xe3, - 0x9e, 0xbe, 0x38, 0x9f, 0xa7, 0xff, 0x8d, 0x30, 0xcd, 0x09, 0x26, 0x28, 0xc5, 0x73, 0x0e, 0x61, - 0xb7, 0x82, 0x44, 0xe7, 0x8a, 0x7b, 0xa2, 0x3c, 0xff, 0x3d, 0x81, 0xbe, 0x1f, 0x64, 0x2e, 0xc1, - 0x24, 0x15, 0x3a, 0x49, 0xe2, 0xf3, 0x29, 0x4f, 0x5d, 0x02, 0x56, 0xf1, 0x60, 0x29, 0xb3, 0x1f, - 0x2c, 0xf6, 0x21, 0xf1, 0x82, 0xfa, 0x9f, 0x0c, 0x28, 0xf1, 0xc4, 0xf6, 0x1b, 0xea, 0x0c, 0x2a, - 0x25, 0x77, 0x06, 0x85, 0x76, 0x9f, 0x7e, 0x4f, 0xbb, 0xcf, 0xbc, 0x9f, 0xdd, 0x67, 0xaf, 0x65, - 0xf7, 0xdf, 0x94, 0xbb, 0x8e, 0xdb, 0x7d, 0xe1, 0xba, 0x76, 0x0f, 0xd7, 0xb3, 0xfb, 0xe2, 0xd7, - 0x61, 0xf7, 0xe5, 0xf7, 0xb2, 0xfb, 0xca, 0x75, 0xec, 0xfe, 0x6f, 0xd2, 0x50, 0xbb, 0xac, 0x32, - 0x73, 0xf5, 0x6d, 0x22, 0xf6, 0x6c, 0xc9, 0xb1, 0x9e, 0xad, 0x6f, 0x43, 0x69, 0xaa, 0x59, 0x8b, - 0x9d, 0x84, 0xa2, 0x17, 0xb5, 0x69, 0x09, 0x26, 0x93, 0xbe, 0x46, 0x50, 0x9c, 0xb9, 0x46, 0x50, - 0x9c, 0xbd, 0xae, 0xc9, 0xe4, 0xae, 0x67, 0x32, 0xf9, 0xaf, 0xc3, 0x64, 0x0a, 0xef, 0x65, 0x32, - 0x30, 0xa3, 0xc9, 0x08, 0x86, 0xf2, 0xd3, 0x2c, 0xdc, 0xba, 0xa2, 0xee, 0xf6, 0xae, 0x3e, 0x5d, - 0xd6, 0xa9, 0x14, 0x35, 0x35, 0xca, 0x61, 0x53, 0x23, 0x45, 0xf0, 0xa6, 0x46, 0x4d, 0x1c, 0x99, - 0x84, 0x2d, 0xd6, 0x0b, 0x99, 0x4a, 0xec, 0x85, 0x8c, 0x75, 0x42, 0xfe, 0x3f, 0x39, 0xce, 0xfc, - 0xb5, 0x1c, 0x67, 0xf6, 0x1a, 0x8e, 0x33, 0xf7, 0xab, 0x80, 0xe1, 0x7d, 0x4e, 0x41, 0xf5, 0x3a, - 0x8e, 0xf3, 0x97, 0x12, 0xa0, 0x8b, 0x05, 0xe4, 0xab, 0x8f, 0xc1, 0x47, 0x42, 0x5f, 0xa4, 0x1c, - 0xef, 0x8b, 0x8c, 0xba, 0x22, 0x1f, 0x71, 0xfb, 0x4d, 0xc5, 0x0a, 0xef, 0x4d, 0xcb, 0xc5, 0x7d, - 0x3f, 0xa1, 0xcb, 0xed, 0x23, 0x28, 0xbf, 0xc6, 0x47, 0x9e, 0xd3, 0x3f, 0xc5, 0x7e, 0xd4, 0xf5, - 0xbc, 0xbb, 0xa0, 0x95, 0x42, 0x30, 0x09, 0xa4, 0xc5, 0xb5, 0x67, 0xe6, 0x5d, 0x7b, 0xfd, 0xcf, - 0x64, 0x50, 0xe2, 0x12, 0xfc, 0x2a, 0x87, 0xff, 0x85, 0x0c, 0x8b, 0x17, 0x8e, 0xcc, 0x37, 0xd5, - 0x8e, 0x97, 0xbd, 0x6a, 0x37, 0x53, 0x33, 0xed, 0x66, 0x7a, 0xe6, 0xdd, 0xcc, 0xcc, 0xbf, 0x9b, - 0xb9, 0x79, 0x77, 0xf3, 0x55, 0xf0, 0xd8, 0xba, 0x47, 0x33, 0xd3, 0xf9, 0x1f, 0x5b, 0x2f, 0x49, - 0x71, 0xeb, 0x7f, 0x1e, 0x3e, 0xe3, 0x76, 0xf9, 0x53, 0xcd, 0xbc, 0x33, 0xf3, 0xc7, 0x59, 0x26, - 0xa8, 0x2e, 0x74, 0x2a, 0x96, 0x0d, 0xd3, 0x64, 0x6a, 0x8f, 0x3d, 0xce, 0x8a, 0xa4, 0x29, 0xf1, - 0x71, 0x36, 0xa2, 0xae, 0x7f, 0x1f, 0x2a, 0xd3, 0xcf, 0x12, 0xe8, 0x3e, 0xa4, 0x2d, 0xfb, 0xd8, - 0xb9, 0xf0, 0xb8, 0x2d, 0x3c, 0x37, 0x51, 0x82, 0xb5, 0x57, 0x50, 0x12, 0x5b, 0xbb, 0xd1, 0x0a, - 0xa0, 0xc6, 0x61, 0xb3, 0xd5, 0xd6, 0xb7, 0x77, 0x1b, 0x07, 0x07, 0xea, 0x9e, 0xbe, 0xd5, 0xee, - 0xed, 0x2a, 0x0b, 0x17, 0xe1, 0x7b, 0xea, 0x4e, 0x4f, 0x91, 0xd0, 0x07, 0xb0, 0x34, 0x0d, 0xd7, - 0x5a, 0x2f, 0x76, 0x7b, 0x8a, 0xbc, 0xf6, 0x8f, 0x12, 0xdc, 0x48, 0xbc, 0x7d, 0x90, 0x02, 0xa5, - 0xdd, 0x8d, 0xa7, 0x4f, 0xf4, 0x67, 0x1b, 0x8f, 0x3b, 0xfa, 0xe6, 0x63, 0x65, 0x61, 0x1a, 0xf2, - 0xf4, 0xb1, 0x22, 0xa1, 0x45, 0x28, 0x53, 0xc8, 0xaf, 0x3d, 0xfe, 0x8c, 0x11, 0xc9, 0x31, 0xd0, - 0xd3, 0xc7, 0x4a, 0x0a, 0xdd, 0x84, 0x1b, 0x9d, 0xb6, 0xd6, 0xd3, 0x1a, 0xad, 0x9e, 0x3e, 0x35, - 0x65, 0xfa, 0x12, 0xd4, 0xd3, 0xc7, 0x4a, 0x06, 0xad, 0xc2, 0xca, 0x34, 0x2a, 0xfc, 0x48, 0xf6, - 0x32, 0xdc, 0xd3, 0xc7, 0x4a, 0x6e, 0x6d, 0x8b, 0xf7, 0x83, 0x47, 0x87, 0x0e, 0x2d, 0x83, 0xd2, - 0x54, 0x77, 0x1a, 0x87, 0x7b, 0x3d, 0x7d, 0xa7, 0xb5, 0xa7, 0xf6, 0x7e, 0xab, 0xa3, 0x2a, 0x0b, - 0x28, 0x07, 0xa9, 0xfd, 0xce, 0x13, 0x45, 0x22, 0x3f, 0xda, 0x2f, 0x5e, 0x28, 0x32, 0x83, 0x6c, - 0x2a, 0xa9, 0xb5, 0xdd, 0x40, 0x53, 0x41, 0x4b, 0xa9, 0x38, 0x45, 0x47, 0x6b, 0xf7, 0xda, 0xdb, - 0xed, 0x3d, 0x65, 0x01, 0xe5, 0x21, 0xad, 0xf5, 0xf6, 0x3b, 0x6c, 0x8e, 0xae, 0xd6, 0x53, 0x64, - 0x54, 0x86, 0xc2, 0x2b, 0x75, 0xab, 0xdb, 0xde, 0x7e, 0xa9, 0xf6, 0x94, 0xd4, 0xda, 0x01, 0xdc, - 0x48, 0xec, 0x51, 0x45, 0xf7, 0xe0, 0x4e, 0x30, 0x61, 0x57, 0x7d, 0xb1, 0xaf, 0x1e, 0xf4, 0xd4, - 0x26, 0x95, 0x4e, 0x9c, 0x9f, 0xec, 0xf8, 0x5e, 0x37, 0x82, 0x48, 0x6b, 0x8f, 0x62, 0x3d, 0xb2, - 0xbc, 0x7f, 0xb0, 0x00, 0x99, 0xd6, 0x41, 0x53, 0xfd, 0x4a, 0x59, 0x20, 0x02, 0xf4, 0x5a, 0xfb, - 0x6a, 0xb7, 0xd7, 0x20, 0x82, 0xad, 0x1d, 0x43, 0x35, 0xd6, 0x7c, 0x48, 0x8c, 0xa4, 0xb5, 0xdf, - 0x78, 0xa1, 0xea, 0xdd, 0xc3, 0x9d, 0x9d, 0xd6, 0x57, 0x7a, 0xc0, 0xb9, 0x0a, 0x2b, 0x53, 0x70, - 0x61, 0x1a, 0x74, 0x07, 0x6e, 0x4d, 0xe1, 0x0e, 0xda, 0x07, 0xaa, 0xde, 0xfe, 0x52, 0xd5, 0x5e, - 0x69, 0xad, 0x9e, 0xaa, 0xc8, 0x6b, 0x3f, 0x04, 0x25, 0xfe, 0x48, 0x4f, 0x26, 0x54, 0x5f, 0x68, - 0x6a, 0xb7, 0xab, 0x77, 0xdb, 0x87, 0xda, 0xb6, 0xaa, 0x93, 0x9d, 0xd7, 0x5f, 0xa9, 0x5b, 0xec, - 0x63, 0x09, 0xb8, 0x6e, 0xf3, 0xa5, 0x22, 0xad, 0xfd, 0x95, 0x04, 0x25, 0xf1, 0xe9, 0x1e, 0x2d, - 0x41, 0x35, 0x20, 0xee, 0x35, 0xb4, 0x5e, 0xeb, 0xe0, 0x85, 0xb2, 0x40, 0x2c, 0x8d, 0x03, 0xf9, - 0x43, 0x92, 0x24, 0x80, 0xd4, 0x83, 0x26, 0xa1, 0x92, 0x05, 0xd6, 0xed, 0xf6, 0x7e, 0x67, 0x4f, - 0xed, 0xa9, 0x4a, 0x4a, 0xa0, 0xe3, 0x2f, 0x4d, 0x69, 0x84, 0xa0, 0x12, 0xcc, 0xb6, 0xd5, 0xd6, - 0x7a, 0x6a, 0x53, 0xc9, 0xa0, 0x1a, 0x2c, 0x73, 0xd8, 0x5e, 0x6b, 0xbf, 0xd5, 0xd3, 0x35, 0xb5, - 0xb1, 0xbd, 0xab, 0x36, 0x95, 0xec, 0xda, 0x21, 0xff, 0xbf, 0x13, 0x5e, 0xfc, 0x42, 0x50, 0x09, - 0x94, 0xb9, 0xdf, 0xfa, 0x8a, 0x89, 0xb7, 0x02, 0xa8, 0x79, 0xd8, 0xd8, 0x0b, 0x4f, 0x5c, 0xe3, - 0x85, 0x7a, 0x40, 0x8e, 0xe2, 0x2a, 0xac, 0x4c, 0xc3, 0xf7, 0x7a, 0xaa, 0x76, 0xd0, 0x20, 0x9b, - 0xb8, 0xf1, 0x6f, 0x19, 0xc8, 0xf2, 0x82, 0xf9, 0x6f, 0x42, 0x51, 0xe8, 0x1a, 0x40, 0x57, 0xf5, - 0x12, 0xac, 0x26, 0x75, 0xc5, 0xa0, 0x06, 0x94, 0x44, 0xf7, 0x8a, 0xa2, 0xa8, 0x2b, 0xc1, 0xeb, - 0xbe, 0x63, 0x0a, 0x76, 0x18, 0x2e, 0x4c, 0x31, 0xe5, 0x5e, 0x93, 0xa7, 0x50, 0x01, 0xa2, 0xae, - 0x1e, 0x14, 0x45, 0x9e, 0x17, 0x1a, 0x93, 0x56, 0x6f, 0x25, 0xe2, 0x78, 0x1b, 0xd0, 0xe7, 0x00, - 0x51, 0x5f, 0x0b, 0x12, 0x5f, 0x2f, 0x63, 0xcd, 0x2e, 0xc9, 0x52, 0xf4, 0xa0, 0x46, 0xb7, 0x2d, - 0xa1, 0x98, 0x8a, 0x66, 0x69, 0x97, 0x48, 0x9e, 0xf5, 0x0b, 0xe2, 0x25, 0x0c, 0xd7, 0x0f, 0x4b, - 0x49, 0xe8, 0xf2, 0xbe, 0x89, 0xe4, 0x19, 0x3a, 0xb0, 0x42, 0x67, 0xb8, 0xf8, 0x8c, 0xf4, 0xee, - 0x56, 0x8a, 0xe4, 0x19, 0xbf, 0x84, 0x9b, 0x74, 0xc6, 0xa4, 0xec, 0x0d, 0xcd, 0xd4, 0x54, 0x91, - 0x3c, 0x6f, 0x13, 0x94, 0x68, 0xde, 0x0b, 0x36, 0x79, 0x31, 0x36, 0x4e, 0x9c, 0x65, 0x6b, 0xe7, - 0xb7, 0xef, 0x0d, 0x2c, 0xff, 0x64, 0x72, 0xb4, 0xde, 0x77, 0x46, 0x8f, 0x38, 0xc1, 0xa3, 0xa0, - 0x5b, 0x3f, 0x00, 0xfc, 0xad, 0x5c, 0xde, 0xb3, 0xce, 0xf0, 0x4b, 0xd6, 0x5b, 0xe8, 0x3b, 0xff, - 0x21, 0x57, 0xf8, 0xf8, 0xf9, 0x73, 0x0a, 0x38, 0xca, 0x52, 0x96, 0xcd, 0xff, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0x8d, 0x0c, 0x93, 0x1d, 0x92, 0x3a, 0x00, 0x00, + 0x66, 0xec, 0xb8, 0xbe, 0x46, 0x91, 0xc2, 0x3c, 0x46, 0x8d, 0xf6, 0xa0, 0x42, 0xcf, 0xb3, 0xef, + 0x8c, 0xe8, 0xcd, 0x82, 0xb9, 0xb9, 0xdd, 0x0b, 0xe7, 0x6b, 0x8e, 0x33, 0xda, 0x0e, 0xb0, 0xf1, + 0xcf, 0x97, 0x5d, 0x11, 0x8b, 0xbe, 0xcb, 0xca, 0xe4, 0x95, 0x58, 0x0d, 0xf1, 0x15, 0x3e, 0x8a, + 0x4f, 0xa4, 0xd5, 0x72, 0x15, 0x8a, 0x42, 0xb9, 0xa6, 0xb6, 0x44, 0xa7, 0x7d, 0x3b, 0xa9, 0x94, + 0x15, 0x9f, 0x2e, 0xce, 0x43, 0x6d, 0xa8, 0xb2, 0xe2, 0x51, 0xb4, 0x09, 0x96, 0x93, 0x7c, 0x27, + 0xb2, 0x59, 0x82, 0xbf, 0x74, 0x17, 0x15, 0x7f, 0x0a, 0x8d, 0x36, 0x21, 0x43, 0x21, 0x3c, 0x69, + 0xb9, 0x35, 0xbd, 0x4c, 0x7c, 0x36, 0xa3, 0x45, 0xcf, 0xa1, 0xc2, 0x8d, 0xcb, 0xc5, 0xde, 0x64, + 0xe8, 0x7b, 0xb5, 0x6a, 0xcc, 0xdb, 0x30, 0x13, 0xa3, 0xde, 0xa6, 0xcc, 0x48, 0x35, 0x46, 0x89, + 0x9e, 0x40, 0x89, 0x26, 0xe3, 0xc1, 0x4c, 0x85, 0xce, 0x5c, 0x9c, 0xaa, 0x53, 0xd0, 0x79, 0x45, + 0x42, 0x16, 0xcc, 0xfa, 0x01, 0x04, 0x39, 0x60, 0x38, 0x71, 0x31, 0x56, 0x80, 0xe3, 0x09, 0x1f, + 0x73, 0x71, 0x15, 0x4e, 0x1d, 0xcc, 0xff, 0x0c, 0xca, 0x2c, 0x5f, 0x08, 0x66, 0x2f, 0xc7, 0x18, + 0xa6, 0x19, 0x03, 0x9b, 0x5b, 0xa2, 0x94, 0xc1, 0xcc, 0x65, 0xc8, 0x60, 0xd7, 0x75, 0x5c, 0x16, + 0xa3, 0x68, 0x6c, 0x40, 0x34, 0x9b, 0xfe, 0xa0, 0xf9, 0x47, 0x6d, 0x85, 0x95, 0xbb, 0x28, 0x84, + 0x64, 0x1a, 0xa8, 0x06, 0x39, 0x13, 0xfb, 0x86, 0x35, 0xf4, 0x6a, 0x37, 0xe8, 0xb4, 0x60, 0x88, + 0x1e, 0xc2, 0x62, 0x90, 0x7a, 0xe8, 0x43, 0xa7, 0xcf, 0xb2, 0xdc, 0x0f, 0x58, 0x46, 0x1c, 0x20, + 0xf6, 0x38, 0x1c, 0xad, 0xc3, 0xd2, 0x91, 0xd1, 0x3f, 0x9d, 0x8c, 0x75, 0x5e, 0xe3, 0xd0, 0x27, + 0x1e, 0x36, 0x6b, 0x37, 0x59, 0x75, 0x97, 0xa1, 0x78, 0xa8, 0x7f, 0xe8, 0x61, 0x13, 0xdd, 0x81, + 0xa2, 0x8b, 0x7d, 0xf7, 0x5c, 0xa7, 0xd7, 0x7e, 0xed, 0x16, 0x65, 0x0b, 0x28, 0x68, 0x9b, 0x40, + 0x88, 0xc5, 0xf1, 0x8a, 0x4f, 0x2e, 0xf6, 0x20, 0x14, 0x09, 0x8c, 0x5c, 0x2a, 0x5b, 0x72, 0x4d, + 0xda, 0x95, 0xc2, 0xba, 0xcf, 0x43, 0x5e, 0x53, 0x8a, 0xa7, 0x43, 0x81, 0xac, 0x38, 0x39, 0xab, + 0x2a, 0x3d, 0x13, 0x8a, 0x44, 0xa5, 0x78, 0x5d, 0x49, 0x90, 0x11, 0x9f, 0x14, 0x12, 0x6f, 0x15, + 0x20, 0xe7, 0x32, 0x4d, 0x23, 0xd9, 0x0c, 0x13, 0x54, 0xfd, 0x67, 0x32, 0x40, 0xc4, 0x5b, 0xf2, + 0x73, 0x84, 0xe0, 0x9d, 0xe4, 0xab, 0xbc, 0x53, 0x6a, 0xda, 0x3b, 0xad, 0x42, 0x7e, 0xaa, 0xce, + 0x90, 0xd2, 0xc2, 0x31, 0xda, 0x08, 0x5d, 0x24, 0xcb, 0x4c, 0x57, 0x13, 0x0e, 0x6a, 0x3d, 0xe6, + 0x27, 0x43, 0x4d, 0xc9, 0x8a, 0x9a, 0x52, 0x87, 0xf2, 0xd0, 0xf0, 0x88, 0xda, 0x12, 0xc1, 0x18, + 0x2c, 0xe1, 0x4c, 0x69, 0x45, 0x02, 0xd4, 0x08, 0xac, 0xe1, 0x13, 0x75, 0x21, 0x68, 0x0b, 0x7b, + 0xf4, 0x88, 0xcb, 0x5a, 0x30, 0xac, 0xaf, 0x43, 0x96, 0x7d, 0x05, 0x01, 0x64, 0x1b, 0xdb, 0xbd, + 0xd6, 0x97, 0xaa, 0xb2, 0x80, 0x4a, 0x90, 0xdf, 0x69, 0x1d, 0xb4, 0xba, 0xbb, 0x6a, 0x53, 0x91, + 0x08, 0x66, 0xa7, 0xd1, 0xda, 0x53, 0x9b, 0x8a, 0x5c, 0xff, 0x99, 0x04, 0xf9, 0x40, 0x2a, 0x41, + 0x01, 0x4b, 0x8c, 0x5c, 0x82, 0xf1, 0xd7, 0x74, 0x6c, 0xd9, 0xd8, 0xb1, 0x21, 0x48, 0x7b, 0xd6, + 0x4f, 0x30, 0x3f, 0x4e, 0xfa, 0x9b, 0xd0, 0x87, 0x8a, 0xce, 0xc2, 0xb9, 0x70, 0x5c, 0xff, 0x67, + 0x19, 0x4a, 0xa2, 0x4e, 0x5c, 0x2c, 0x2b, 0x49, 0x33, 0x97, 0x95, 0xf2, 0x97, 0x94, 0x95, 0x44, + 0x7e, 0xe5, 0x4b, 0xf8, 0x4d, 0x09, 0xfc, 0x3e, 0x84, 0xc5, 0x70, 0xe1, 0x90, 0x71, 0x16, 0xa1, + 0x2a, 0x01, 0x22, 0xb4, 0xd0, 0x27, 0xb0, 0x32, 0xcd, 0x4a, 0x38, 0x83, 0xb9, 0x8b, 0x65, 0x91, + 0x9d, 0x70, 0xd6, 0x3d, 0x92, 0x86, 0x32, 0x6f, 0xc6, 0x2c, 0x35, 0x43, 0xbf, 0x5f, 0xe2, 0x40, + 0x66, 0xab, 0xd3, 0x12, 0xca, 0x5e, 0x25, 0xa1, 0xdc, 0x94, 0x84, 0xea, 0x7f, 0x22, 0x01, 0x44, + 0xfe, 0x6c, 0xf6, 0xba, 0xcc, 0x9d, 0xa8, 0xa8, 0x42, 0x98, 0x92, 0xe8, 0xaa, 0x41, 0xfd, 0xe4, + 0x22, 0x4b, 0x73, 0x28, 0x4d, 0xfd, 0x2f, 0x64, 0xb8, 0xd1, 0x98, 0xf8, 0xce, 0x85, 0x7b, 0x4e, + 0x78, 0x18, 0x96, 0x66, 0x7a, 0x18, 0x5e, 0x48, 0x7c, 0x18, 0x96, 0xdf, 0xf1, 0x30, 0xbc, 0x20, + 0x3c, 0x0c, 0x7f, 0xce, 0x6f, 0xa0, 0xe0, 0x75, 0x38, 0x45, 0xaf, 0x82, 0xd5, 0xa4, 0x8a, 0x30, + 0x7f, 0x28, 0xa6, 0x57, 0x51, 0x9b, 0x3f, 0x16, 0xab, 0xd1, 0x55, 0x14, 0xac, 0x90, 0xa6, 0x2b, + 0x5c, 0x59, 0x0b, 0x0f, 0x6f, 0x24, 0xbe, 0x0c, 0xf1, 0x76, 0xfc, 0x89, 0xbf, 0xfe, 0xa7, 0x32, + 0x54, 0xc9, 0xe1, 0x08, 0x57, 0xee, 0x54, 0xf1, 0x59, 0x9a, 0xa1, 0xf8, 0x9c, 0xb9, 0xaa, 0x8c, + 0x25, 0xcf, 0x54, 0xfa, 0x49, 0xcd, 0x5c, 0xfa, 0x49, 0xcf, 0x5f, 0xfa, 0xc9, 0xce, 0x5b, 0xc6, + 0xfa, 0xfb, 0x34, 0x2c, 0x25, 0xc4, 0x73, 0x24, 0xc6, 0x66, 0xf1, 0xdc, 0x74, 0x8c, 0xcd, 0x60, + 0x24, 0xc6, 0xe6, 0xbf, 0x48, 0x02, 0x5d, 0x65, 0x8f, 0xcc, 0xce, 0xf1, 0xb1, 0x87, 0x7d, 0x7d, + 0xe4, 0x71, 0x95, 0x2d, 0x53, 0x70, 0x9b, 0x42, 0xf7, 0x3d, 0xe2, 0xa1, 0xb1, 0x6d, 0x0a, 0x54, + 0x4c, 0x77, 0x8b, 0xd8, 0x36, 0x43, 0x1a, 0xb1, 0x97, 0x22, 0x3d, 0x77, 0x2f, 0x45, 0x66, 0xe6, + 0x5e, 0x8a, 0xec, 0x7c, 0xbd, 0x14, 0xb9, 0x6b, 0xf4, 0x52, 0xe4, 0xdf, 0xaf, 0x97, 0xa2, 0x30, + 0x7b, 0x2f, 0x05, 0xcc, 0xdf, 0x4b, 0x51, 0xbc, 0x56, 0x2f, 0xc5, 0xbf, 0x64, 0x61, 0xf5, 0xf2, + 0x18, 0xfe, 0xea, 0x54, 0x3e, 0xca, 0x3b, 0xe5, 0x2b, 0x9a, 0x2e, 0x52, 0xf1, 0x76, 0x87, 0x67, + 0xc0, 0x9e, 0xec, 0xf4, 0x91, 0xf5, 0xc6, 0xb2, 0x07, 0xb5, 0x2a, 0x95, 0x48, 0xac, 0x2b, 0x60, + 0x9f, 0xe2, 0x34, 0xf6, 0x04, 0xca, 0x06, 0xb1, 0x3e, 0x89, 0xf4, 0x0c, 0xdd, 0x1a, 0x99, 0x84, + 0x6e, 0x0d, 0xf4, 0x84, 0x87, 0x66, 0x4c, 0x71, 0xae, 0x70, 0x62, 0x34, 0xdc, 0x0a, 0x5e, 0xfe, + 0x36, 0x63, 0x71, 0x60, 0xf2, 0xcb, 0x1f, 0x9f, 0x12, 0x44, 0x81, 0x3f, 0x10, 0x02, 0x3b, 0x78, + 0xf7, 0xeb, 0x1f, 0x9f, 0x1d, 0xbd, 0x00, 0x46, 0x6a, 0x9b, 0xbf, 0x86, 0xda, 0x16, 0xe6, 0x50, + 0xdb, 0xb8, 0xa7, 0x2f, 0xce, 0xe7, 0xe9, 0x7f, 0x23, 0x4c, 0x73, 0x82, 0x05, 0x4a, 0xf1, 0x9c, + 0x43, 0x38, 0xad, 0x20, 0xd1, 0xb9, 0xe2, 0x9e, 0x28, 0xcf, 0x7f, 0x4f, 0xa0, 0xef, 0x07, 0x99, + 0x4b, 0xb0, 0x48, 0x85, 0x2e, 0x92, 0xf8, 0x7c, 0xca, 0x53, 0x97, 0x60, 0xaa, 0x68, 0x58, 0xca, + 0xec, 0x86, 0xc5, 0x3e, 0x24, 0x5e, 0x50, 0xff, 0x93, 0x01, 0x25, 0x9e, 0xd8, 0x7e, 0x43, 0x9d, + 0x41, 0xa5, 0xe4, 0xce, 0xa0, 0x50, 0xef, 0xd3, 0xef, 0xa9, 0xf7, 0x99, 0xf7, 0xd3, 0xfb, 0xec, + 0xb5, 0xf4, 0xfe, 0x9b, 0x72, 0xd7, 0x71, 0xbd, 0x2f, 0x5c, 0x57, 0xef, 0xe1, 0x7a, 0x7a, 0x5f, + 0xfc, 0x3a, 0xf4, 0xbe, 0xfc, 0x5e, 0x7a, 0x5f, 0xb9, 0x8e, 0xde, 0xff, 0x4d, 0x1a, 0x6a, 0x97, + 0x55, 0x66, 0xae, 0xbe, 0x4d, 0xc4, 0x9e, 0x2d, 0x39, 0xd6, 0xb3, 0xf5, 0x6d, 0x28, 0x4d, 0x35, + 0x6b, 0x31, 0x4b, 0x28, 0x7a, 0x51, 0x9b, 0x96, 0xa0, 0x32, 0xe9, 0x6b, 0x04, 0xc5, 0x99, 0x6b, + 0x04, 0xc5, 0xd9, 0xeb, 0xaa, 0x4c, 0xee, 0x7a, 0x2a, 0x93, 0xff, 0x3a, 0x54, 0xa6, 0xf0, 0x5e, + 0x2a, 0x03, 0x33, 0xaa, 0x8c, 0xa0, 0x28, 0x3f, 0xcd, 0xc2, 0xad, 0x2b, 0xea, 0x6e, 0xef, 0xea, + 0xd3, 0x65, 0x9d, 0x4a, 0x51, 0x53, 0xa3, 0x1c, 0x36, 0x35, 0x52, 0x04, 0x6f, 0x6a, 0xd4, 0xc4, + 0x91, 0x49, 0xa6, 0xc5, 0x7a, 0x21, 0x53, 0x89, 0xbd, 0x90, 0xb1, 0x4e, 0xc8, 0xff, 0x27, 0xc7, + 0x99, 0xbf, 0x96, 0xe3, 0xcc, 0x5e, 0xc3, 0x71, 0xe6, 0x7e, 0x15, 0x30, 0xbc, 0x8f, 0x15, 0x54, + 0xaf, 0xe3, 0x38, 0x7f, 0x29, 0x01, 0xba, 0x58, 0x40, 0xbe, 0xda, 0x0c, 0x3e, 0x12, 0xfa, 0x22, + 0xe5, 0x78, 0x5f, 0x64, 0xd4, 0x15, 0xf9, 0x88, 0xeb, 0x6f, 0x2a, 0x56, 0x78, 0x6f, 0x5a, 0x2e, + 0xee, 0xfb, 0x09, 0x5d, 0x6e, 0x1f, 0x41, 0xf9, 0x35, 0x3e, 0xf2, 0x9c, 0xfe, 0x29, 0xf6, 0xa3, + 0xae, 0xe7, 0xdd, 0x05, 0xad, 0x14, 0x82, 0x49, 0x20, 0x2d, 0xee, 0x3d, 0x33, 0xef, 0xde, 0xeb, + 0x7f, 0x26, 0x83, 0x12, 0xe7, 0xe0, 0x57, 0x39, 0xfc, 0x2f, 0x64, 0x58, 0xbc, 0x60, 0x32, 0xdf, + 0x54, 0x3b, 0x5e, 0xf6, 0xaa, 0xd3, 0x4c, 0xcd, 0x74, 0x9a, 0xe9, 0x99, 0x4f, 0x33, 0x33, 0xff, + 0x69, 0xe6, 0xe6, 0x3d, 0xcd, 0x57, 0xc1, 0x63, 0xeb, 0x1e, 0xcd, 0x4c, 0xe7, 0x7f, 0x6c, 0xbd, + 0x24, 0xc5, 0xad, 0xff, 0x79, 0xf8, 0x8c, 0xdb, 0xe5, 0x4f, 0x35, 0xf3, 0xae, 0xcc, 0x1f, 0x67, + 0x19, 0xa3, 0xba, 0xd0, 0xa9, 0x58, 0x36, 0x4c, 0x93, 0x89, 0x3d, 0xf6, 0x38, 0x2b, 0x92, 0xa6, + 0xc4, 0xc7, 0xd9, 0x88, 0xba, 0xfe, 0x7d, 0xa8, 0x4c, 0x3f, 0x4b, 0xa0, 0xfb, 0x90, 0xb6, 0xec, + 0x63, 0xe7, 0xc2, 0xe3, 0xb6, 0xf0, 0xdc, 0x44, 0x09, 0xd6, 0x5e, 0x41, 0x49, 0x6c, 0xed, 0x46, + 0x2b, 0x80, 0x1a, 0x87, 0xcd, 0x56, 0x5b, 0xdf, 0xde, 0x6d, 0x1c, 0x1c, 0xa8, 0x7b, 0xfa, 0x56, + 0xbb, 0xb7, 0xab, 0x2c, 0x5c, 0x84, 0xef, 0xa9, 0x3b, 0x3d, 0x45, 0x42, 0x1f, 0xc0, 0xd2, 0x34, + 0x5c, 0x6b, 0xbd, 0xd8, 0xed, 0x29, 0xf2, 0xda, 0x3f, 0x4a, 0x70, 0x23, 0xf1, 0xf6, 0x41, 0x0a, + 0x94, 0x76, 0x37, 0x9e, 0x3e, 0xd1, 0x9f, 0x6d, 0x3c, 0xee, 0xe8, 0x9b, 0x8f, 0x95, 0x85, 0x69, + 0xc8, 0xd3, 0xc7, 0x8a, 0x84, 0x16, 0xa1, 0x4c, 0x21, 0xbf, 0xf6, 0xf8, 0x33, 0x46, 0x24, 0xc7, + 0x40, 0x4f, 0x1f, 0x2b, 0x29, 0x74, 0x13, 0x6e, 0x74, 0xda, 0x5a, 0x4f, 0x6b, 0xb4, 0x7a, 0xfa, + 0xd4, 0x92, 0xe9, 0x4b, 0x50, 0x4f, 0x1f, 0x2b, 0x19, 0xb4, 0x0a, 0x2b, 0xd3, 0xa8, 0xf0, 0x23, + 0xd9, 0xcb, 0x70, 0x4f, 0x1f, 0x2b, 0xb9, 0xb5, 0x2d, 0xde, 0x0f, 0x1e, 0x19, 0x1d, 0x5a, 0x06, + 0xa5, 0xa9, 0xee, 0x34, 0x0e, 0xf7, 0x7a, 0xfa, 0x4e, 0x6b, 0x4f, 0xed, 0xfd, 0x56, 0x47, 0x55, + 0x16, 0x50, 0x0e, 0x52, 0xfb, 0x9d, 0x27, 0x8a, 0x44, 0x7e, 0xb4, 0x5f, 0xbc, 0x50, 0x64, 0x06, + 0xd9, 0x54, 0x52, 0x6b, 0xbb, 0x81, 0xa4, 0x82, 0x96, 0x52, 0x71, 0x89, 0x8e, 0xd6, 0xee, 0xb5, + 0xb7, 0xdb, 0x7b, 0xca, 0x02, 0xca, 0x43, 0x5a, 0xeb, 0xed, 0x77, 0xd8, 0x1a, 0x5d, 0xad, 0xa7, + 0xc8, 0xa8, 0x0c, 0x85, 0x57, 0xea, 0x56, 0xb7, 0xbd, 0xfd, 0x52, 0xed, 0x29, 0xa9, 0xb5, 0x03, + 0xb8, 0x91, 0xd8, 0xa3, 0x8a, 0xee, 0xc1, 0x9d, 0x60, 0xc1, 0xae, 0xfa, 0x62, 0x5f, 0x3d, 0xe8, + 0xa9, 0x4d, 0xca, 0x9d, 0xb8, 0x3e, 0x39, 0xf1, 0xbd, 0x6e, 0x04, 0x91, 0xd6, 0x1e, 0xc5, 0x7a, + 0x64, 0x79, 0xff, 0x60, 0x01, 0x32, 0xad, 0x83, 0xa6, 0xfa, 0x95, 0xb2, 0x40, 0x18, 0xe8, 0xb5, + 0xf6, 0xd5, 0x6e, 0xaf, 0x41, 0x18, 0x5b, 0x3b, 0x86, 0x6a, 0xac, 0xf9, 0x90, 0x28, 0x49, 0x6b, + 0xbf, 0xf1, 0x42, 0xd5, 0xbb, 0x87, 0x3b, 0x3b, 0xad, 0xaf, 0xf4, 0x60, 0xe6, 0x2a, 0xac, 0x4c, + 0xc1, 0x85, 0x65, 0xd0, 0x1d, 0xb8, 0x35, 0x85, 0x3b, 0x68, 0x1f, 0xa8, 0x7a, 0xfb, 0x4b, 0x55, + 0x7b, 0xa5, 0xb5, 0x7a, 0xaa, 0x22, 0xaf, 0xfd, 0x10, 0x94, 0xf8, 0x23, 0x3d, 0x59, 0x50, 0x7d, + 0xa1, 0xa9, 0xdd, 0xae, 0xde, 0x6d, 0x1f, 0x6a, 0xdb, 0xaa, 0x4e, 0x4e, 0x5e, 0x7f, 0xa5, 0x6e, + 0xb1, 0x8f, 0x25, 0xe0, 0xba, 0xcd, 0x97, 0x8a, 0xb4, 0xf6, 0x57, 0x12, 0x94, 0xc4, 0xa7, 0x7b, + 0xb4, 0x04, 0xd5, 0x80, 0xb8, 0xd7, 0xd0, 0x7a, 0xad, 0x83, 0x17, 0xca, 0x02, 0xd1, 0x34, 0x0e, + 0xe4, 0x0f, 0x49, 0x92, 0x00, 0x52, 0x0f, 0x9a, 0x84, 0x4a, 0x16, 0xa6, 0x6e, 0xb7, 0xf7, 0x3b, + 0x7b, 0x6a, 0x4f, 0x55, 0x52, 0x02, 0x1d, 0x7f, 0x69, 0x4a, 0x23, 0x04, 0x95, 0x60, 0xb5, 0xad, + 0xb6, 0xd6, 0x53, 0x9b, 0x4a, 0x06, 0xd5, 0x60, 0x99, 0xc3, 0xf6, 0x5a, 0xfb, 0xad, 0x9e, 0xae, + 0xa9, 0x8d, 0xed, 0x5d, 0xb5, 0xa9, 0x64, 0xd7, 0x0e, 0xf9, 0xff, 0x9d, 0xf0, 0xe2, 0x17, 0x82, + 0x4a, 0x20, 0xcc, 0xfd, 0xd6, 0x57, 0x8c, 0xbd, 0x15, 0x40, 0xcd, 0xc3, 0xc6, 0x5e, 0x68, 0x71, + 0x8d, 0x17, 0xea, 0x01, 0x31, 0xc5, 0x55, 0x58, 0x99, 0x86, 0xef, 0xf5, 0x54, 0xed, 0xa0, 0x41, + 0x0e, 0x71, 0xe3, 0xdf, 0x32, 0x90, 0xe5, 0x05, 0xf3, 0xdf, 0x84, 0xa2, 0xd0, 0x35, 0x80, 0xae, + 0xea, 0x25, 0x58, 0x4d, 0xea, 0x8a, 0x41, 0x0d, 0x28, 0x89, 0xee, 0x15, 0x45, 0x51, 0x57, 0x82, + 0xd7, 0x7d, 0xc7, 0x12, 0xcc, 0x18, 0x2e, 0x2c, 0x31, 0xe5, 0x5e, 0x93, 0x97, 0x50, 0x01, 0xa2, + 0xae, 0x1e, 0x14, 0x45, 0x9e, 0x17, 0x1a, 0x93, 0x56, 0x6f, 0x25, 0xe2, 0x78, 0x1b, 0xd0, 0xe7, + 0x00, 0x51, 0x5f, 0x0b, 0x12, 0x5f, 0x2f, 0x63, 0xcd, 0x2e, 0xc9, 0x5c, 0xf4, 0xa0, 0x46, 0x8f, + 0x2d, 0xa1, 0x98, 0x8a, 0x66, 0x69, 0x97, 0x48, 0x5e, 0xf5, 0x0b, 0xe2, 0x25, 0x0c, 0xd7, 0x0f, + 0x4b, 0x49, 0xe8, 0xf2, 0xbe, 0x89, 0xe4, 0x15, 0x3a, 0xb0, 0x42, 0x57, 0xb8, 0xf8, 0x8c, 0xf4, + 0xee, 0x56, 0x8a, 0xe4, 0x15, 0xbf, 0x84, 0x9b, 0x74, 0xc5, 0xa4, 0xec, 0x0d, 0xcd, 0xd4, 0x54, + 0x91, 0xbc, 0x6e, 0x13, 0x94, 0x68, 0xdd, 0x0b, 0x3a, 0x79, 0x31, 0x36, 0x4e, 0x5c, 0x65, 0x6b, + 0xe7, 0xb7, 0xef, 0x0d, 0x2c, 0xff, 0x64, 0x72, 0xb4, 0xde, 0x77, 0x46, 0x8f, 0x38, 0xc1, 0xa3, + 0xa0, 0x5b, 0x3f, 0x00, 0xfc, 0xad, 0x5c, 0xde, 0xb3, 0xce, 0xf0, 0x4b, 0xd6, 0x5b, 0xe8, 0x3b, + 0xff, 0x21, 0x57, 0xf8, 0xf8, 0xf9, 0x73, 0x0a, 0x38, 0xca, 0xd2, 0x29, 0x9b, 0xff, 0x1b, 0x00, + 0x00, 0xff, 0xff, 0x7c, 0xd5, 0xb3, 0x4e, 0x92, 0x3a, 0x00, 0x00, }