Files
protocol/rpc/egress.psrpc.go
David Colburn 976c551920 include egressID with egressReady (#1468)
* include egressID with egressReady

* generated protobuf

* remove empty import

* generated protobuf

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-25 20:58:05 +09:00

511 lines
19 KiB
Go

// Code generated by protoc-gen-psrpc v0.7.0, DO NOT EDIT.
// source: rpc/egress.proto
package rpc
import (
"context"
"github.com/livekit/psrpc"
"github.com/livekit/psrpc/pkg/client"
"github.com/livekit/psrpc/pkg/info"
"github.com/livekit/psrpc/pkg/rand"
"github.com/livekit/psrpc/pkg/server"
"github.com/livekit/psrpc/version"
)
import livekit4 "github.com/livekit/protocol/livekit"
var _ = version.PsrpcVersion_0_7
// ===============================
// EgressInternal Client Interface
// ===============================
type EgressInternalClient interface {
StartEgress(ctx context.Context, topic string, req *StartEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error)
ListActiveEgress(ctx context.Context, topic string, req *ListActiveEgressRequest, opts ...psrpc.RequestOption) (<-chan *psrpc.Response[*ListActiveEgressResponse], error)
// Close immediately, without waiting for pending RPCs
Close()
}
// ===================================
// EgressInternal ServerImpl Interface
// ===================================
type EgressInternalServerImpl interface {
StartEgress(context.Context, *StartEgressRequest) (*livekit4.EgressInfo, error)
StartEgressAffinity(context.Context, *StartEgressRequest) float32
ListActiveEgress(context.Context, *ListActiveEgressRequest) (*ListActiveEgressResponse, error)
}
// ===============================
// EgressInternal Server Interface
// ===============================
type EgressInternalServer interface {
RegisterStartEgressTopic(topic string) error
DeregisterStartEgressTopic(topic string)
RegisterListActiveEgressTopic(topic string) error
DeregisterListActiveEgressTopic(topic string)
// Close and wait for pending RPCs to complete
Shutdown()
// Close immediately, without waiting for pending RPCs
Kill()
}
// =====================
// EgressInternal Client
// =====================
type egressInternalClient struct {
client *client.RPCClient
}
// NewEgressInternalClient creates a psrpc client that implements the EgressInternalClient interface.
func NewEgressInternalClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (EgressInternalClient, error) {
sd := &info.ServiceDefinition{
Name: "EgressInternal",
ID: rand.NewClientID(),
}
sd.RegisterMethod("StartEgress", true, false, true, false)
sd.RegisterMethod("ListActiveEgress", false, true, false, false)
rpcClient, err := client.NewRPCClient(sd, bus, opts...)
if err != nil {
return nil, err
}
return &egressInternalClient{
client: rpcClient,
}, nil
}
func (c *egressInternalClient) StartEgress(ctx context.Context, topic string, req *StartEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) {
return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "StartEgress", []string{topic}, req, opts...)
}
func (c *egressInternalClient) ListActiveEgress(ctx context.Context, topic string, req *ListActiveEgressRequest, opts ...psrpc.RequestOption) (<-chan *psrpc.Response[*ListActiveEgressResponse], error) {
return client.RequestMulti[*ListActiveEgressResponse](ctx, c.client, "ListActiveEgress", []string{topic}, req, opts...)
}
func (s *egressInternalClient) Close() {
s.client.Close()
}
// =====================
// EgressInternal Server
// =====================
type egressInternalServer struct {
svc EgressInternalServerImpl
rpc *server.RPCServer
}
// NewEgressInternalServer builds a RPCServer that will route requests
// to the corresponding method in the provided svc implementation.
func NewEgressInternalServer(svc EgressInternalServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (EgressInternalServer, error) {
sd := &info.ServiceDefinition{
Name: "EgressInternal",
ID: rand.NewServerID(),
}
s := server.NewRPCServer(sd, bus, opts...)
sd.RegisterMethod("StartEgress", true, false, true, false)
sd.RegisterMethod("ListActiveEgress", false, true, false, false)
return &egressInternalServer{
svc: svc,
rpc: s,
}, nil
}
func (s *egressInternalServer) RegisterStartEgressTopic(topic string) error {
return server.RegisterHandler(s.rpc, "StartEgress", []string{topic}, s.svc.StartEgress, s.svc.StartEgressAffinity)
}
func (s *egressInternalServer) DeregisterStartEgressTopic(topic string) {
s.rpc.DeregisterHandler("StartEgress", []string{topic})
}
func (s *egressInternalServer) RegisterListActiveEgressTopic(topic string) error {
return server.RegisterHandler(s.rpc, "ListActiveEgress", []string{topic}, s.svc.ListActiveEgress, nil)
}
func (s *egressInternalServer) DeregisterListActiveEgressTopic(topic string) {
s.rpc.DeregisterHandler("ListActiveEgress", []string{topic})
}
func (s *egressInternalServer) Shutdown() {
s.rpc.Close(false)
}
func (s *egressInternalServer) Kill() {
s.rpc.Close(true)
}
// ===================================
// EgressInternal Unimplemented Server
// ===================================
type UnimplementedEgressInternalServer struct{}
func (UnimplementedEgressInternalServer) StartEgress(context.Context, *StartEgressRequest) (*livekit4.EgressInfo, error) {
return nil, psrpc.ErrUnimplemented
}
func (UnimplementedEgressInternalServer) StartEgressAffinity(context.Context, *StartEgressRequest) float32 {
return -1
}
func (UnimplementedEgressInternalServer) ListActiveEgress(context.Context, *ListActiveEgressRequest) (*ListActiveEgressResponse, error) {
return nil, psrpc.ErrUnimplemented
}
// ==============================
// EgressHandler Client Interface
// ==============================
type EgressHandlerClient interface {
UpdateEgress(ctx context.Context, topic string, req *livekit4.UpdateEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error)
StopEgress(ctx context.Context, topic string, req *livekit4.StopEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error)
// --- Deprecated ---
UpdateStream(ctx context.Context, topic string, req *livekit4.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error)
// Close immediately, without waiting for pending RPCs
Close()
}
// ==================================
// EgressHandler ServerImpl Interface
// ==================================
type EgressHandlerServerImpl interface {
UpdateEgress(context.Context, *livekit4.UpdateEgressRequest) (*livekit4.EgressInfo, error)
StopEgress(context.Context, *livekit4.StopEgressRequest) (*livekit4.EgressInfo, error)
// --- Deprecated ---
UpdateStream(context.Context, *livekit4.UpdateStreamRequest) (*livekit4.EgressInfo, error)
}
// ==============================
// EgressHandler Server Interface
// ==============================
type EgressHandlerServer interface {
RegisterUpdateEgressTopic(topic string) error
DeregisterUpdateEgressTopic(topic string)
RegisterStopEgressTopic(topic string) error
DeregisterStopEgressTopic(topic string)
// --- Deprecated ---
RegisterUpdateStreamTopic(topic string) error
DeregisterUpdateStreamTopic(topic string)
// Close and wait for pending RPCs to complete
Shutdown()
// Close immediately, without waiting for pending RPCs
Kill()
}
// ====================
// EgressHandler Client
// ====================
type egressHandlerClient struct {
client *client.RPCClient
}
// NewEgressHandlerClient creates a psrpc client that implements the EgressHandlerClient interface.
func NewEgressHandlerClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (EgressHandlerClient, error) {
sd := &info.ServiceDefinition{
Name: "EgressHandler",
ID: rand.NewClientID(),
}
sd.RegisterMethod("UpdateEgress", false, false, true, true)
sd.RegisterMethod("StopEgress", false, false, true, true)
sd.RegisterMethod("UpdateStream", false, false, true, true)
rpcClient, err := client.NewRPCClient(sd, bus, opts...)
if err != nil {
return nil, err
}
return &egressHandlerClient{
client: rpcClient,
}, nil
}
func (c *egressHandlerClient) UpdateEgress(ctx context.Context, topic string, req *livekit4.UpdateEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) {
return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "UpdateEgress", []string{topic}, req, opts...)
}
func (c *egressHandlerClient) StopEgress(ctx context.Context, topic string, req *livekit4.StopEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) {
return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "StopEgress", []string{topic}, req, opts...)
}
func (c *egressHandlerClient) UpdateStream(ctx context.Context, topic string, req *livekit4.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) {
return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "UpdateStream", []string{topic}, req, opts...)
}
func (s *egressHandlerClient) Close() {
s.client.Close()
}
// ====================
// EgressHandler Server
// ====================
type egressHandlerServer struct {
svc EgressHandlerServerImpl
rpc *server.RPCServer
}
// NewEgressHandlerServer builds a RPCServer that will route requests
// to the corresponding method in the provided svc implementation.
func NewEgressHandlerServer(svc EgressHandlerServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (EgressHandlerServer, error) {
sd := &info.ServiceDefinition{
Name: "EgressHandler",
ID: rand.NewServerID(),
}
s := server.NewRPCServer(sd, bus, opts...)
sd.RegisterMethod("UpdateEgress", false, false, true, true)
sd.RegisterMethod("StopEgress", false, false, true, true)
sd.RegisterMethod("UpdateStream", false, false, true, true)
return &egressHandlerServer{
svc: svc,
rpc: s,
}, nil
}
func (s *egressHandlerServer) RegisterUpdateEgressTopic(topic string) error {
return server.RegisterHandler(s.rpc, "UpdateEgress", []string{topic}, s.svc.UpdateEgress, nil)
}
func (s *egressHandlerServer) DeregisterUpdateEgressTopic(topic string) {
s.rpc.DeregisterHandler("UpdateEgress", []string{topic})
}
func (s *egressHandlerServer) RegisterStopEgressTopic(topic string) error {
return server.RegisterHandler(s.rpc, "StopEgress", []string{topic}, s.svc.StopEgress, nil)
}
func (s *egressHandlerServer) DeregisterStopEgressTopic(topic string) {
s.rpc.DeregisterHandler("StopEgress", []string{topic})
}
func (s *egressHandlerServer) RegisterUpdateStreamTopic(topic string) error {
return server.RegisterHandler(s.rpc, "UpdateStream", []string{topic}, s.svc.UpdateStream, nil)
}
func (s *egressHandlerServer) DeregisterUpdateStreamTopic(topic string) {
s.rpc.DeregisterHandler("UpdateStream", []string{topic})
}
func (s *egressHandlerServer) Shutdown() {
s.rpc.Close(false)
}
func (s *egressHandlerServer) Kill() {
s.rpc.Close(true)
}
// ==================================
// EgressHandler Unimplemented Server
// ==================================
type UnimplementedEgressHandlerServer struct{}
func (UnimplementedEgressHandlerServer) UpdateEgress(context.Context, *livekit4.UpdateEgressRequest) (*livekit4.EgressInfo, error) {
return nil, psrpc.ErrUnimplemented
}
func (UnimplementedEgressHandlerServer) StopEgress(context.Context, *livekit4.StopEgressRequest) (*livekit4.EgressInfo, error) {
return nil, psrpc.ErrUnimplemented
}
func (UnimplementedEgressHandlerServer) UpdateStream(context.Context, *livekit4.UpdateStreamRequest) (*livekit4.EgressInfo, error) {
return nil, psrpc.ErrUnimplemented
}
// =============================
// ReplayExport Client Interface
// =============================
type ReplayExportClient interface {
EgressReady(ctx context.Context, topic string, req *EgressReadyRequest, opts ...psrpc.RequestOption) (*EgressReadyResponse, error)
// Close immediately, without waiting for pending RPCs
Close()
}
// =================================
// ReplayExport ServerImpl Interface
// =================================
type ReplayExportServerImpl interface {
EgressReady(context.Context, *EgressReadyRequest) (*EgressReadyResponse, error)
}
// =============================
// ReplayExport Server Interface
// =============================
type ReplayExportServer interface {
RegisterEgressReadyTopic(topic string) error
DeregisterEgressReadyTopic(topic string)
// Close and wait for pending RPCs to complete
Shutdown()
// Close immediately, without waiting for pending RPCs
Kill()
}
// ===================
// ReplayExport Client
// ===================
type replayExportClient struct {
client *client.RPCClient
}
// NewReplayExportClient creates a psrpc client that implements the ReplayExportClient interface.
func NewReplayExportClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (ReplayExportClient, error) {
sd := &info.ServiceDefinition{
Name: "ReplayExport",
ID: rand.NewClientID(),
}
sd.RegisterMethod("EgressReady", false, false, false, true)
rpcClient, err := client.NewRPCClient(sd, bus, opts...)
if err != nil {
return nil, err
}
return &replayExportClient{
client: rpcClient,
}, nil
}
func (c *replayExportClient) EgressReady(ctx context.Context, topic string, req *EgressReadyRequest, opts ...psrpc.RequestOption) (*EgressReadyResponse, error) {
return client.RequestSingle[*EgressReadyResponse](ctx, c.client, "EgressReady", []string{topic}, req, opts...)
}
func (s *replayExportClient) Close() {
s.client.Close()
}
// ===================
// ReplayExport Server
// ===================
type replayExportServer struct {
svc ReplayExportServerImpl
rpc *server.RPCServer
}
// NewReplayExportServer builds a RPCServer that will route requests
// to the corresponding method in the provided svc implementation.
func NewReplayExportServer(svc ReplayExportServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (ReplayExportServer, error) {
sd := &info.ServiceDefinition{
Name: "ReplayExport",
ID: rand.NewServerID(),
}
s := server.NewRPCServer(sd, bus, opts...)
sd.RegisterMethod("EgressReady", false, false, false, true)
return &replayExportServer{
svc: svc,
rpc: s,
}, nil
}
func (s *replayExportServer) RegisterEgressReadyTopic(topic string) error {
return server.RegisterHandler(s.rpc, "EgressReady", []string{topic}, s.svc.EgressReady, nil)
}
func (s *replayExportServer) DeregisterEgressReadyTopic(topic string) {
s.rpc.DeregisterHandler("EgressReady", []string{topic})
}
func (s *replayExportServer) Shutdown() {
s.rpc.Close(false)
}
func (s *replayExportServer) Kill() {
s.rpc.Close(true)
}
// =================================
// ReplayExport Unimplemented Server
// =================================
type UnimplementedReplayExportServer struct{}
func (UnimplementedReplayExportServer) EgressReady(context.Context, *EgressReadyRequest) (*EgressReadyResponse, error) {
return nil, psrpc.ErrUnimplemented
}
var psrpcFileDescriptor2 = []byte{
// 732 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xdb, 0x36,
0x14, 0x1e, 0xed, 0x59, 0xb6, 0x8f, 0x7f, 0xe2, 0x31, 0x19, 0xc2, 0x68, 0x09, 0xe2, 0x38, 0xbb,
0xf0, 0x80, 0xcc, 0x0e, 0x1c, 0x6c, 0xc0, 0xae, 0xb6, 0x38, 0x31, 0x16, 0x03, 0x19, 0xd6, 0x2a,
0x0d, 0x0a, 0xb4, 0x05, 0x04, 0x59, 0x62, 0x5d, 0xc1, 0xb2, 0xc8, 0x52, 0x54, 0xd2, 0xbc, 0x41,
0xf3, 0x0a, 0x79, 0x8c, 0x5c, 0xf4, 0x45, 0xfa, 0x1a, 0x7e, 0x88, 0x42, 0x94, 0xac, 0xc8, 0x76,
0x53, 0xa4, 0x57, 0x12, 0xbf, 0xef, 0x7c, 0x1f, 0xcf, 0x39, 0xe4, 0x21, 0x34, 0x04, 0xb7, 0xbb,
0x74, 0x2c, 0x68, 0x10, 0x74, 0xb8, 0x60, 0x92, 0xe1, 0xbc, 0xe0, 0xb6, 0x5e, 0x63, 0x5c, 0xba,
0xcc, 0x4f, 0x30, 0x7d, 0xc3, 0x63, 0xe3, 0x31, 0x15, 0xdd, 0x65, 0xd4, 0xbd, 0xa2, 0x13, 0x57,
0x9a, 0x59, 0x7d, 0xeb, 0x73, 0x01, 0xf0, 0x85, 0xb4, 0x84, 0x1c, 0x28, 0xd4, 0xa0, 0xef, 0x43,
0x1a, 0x48, 0xfc, 0x1b, 0x94, 0xe3, 0x30, 0xd3, 0x75, 0x08, 0x6a, 0xa2, 0x76, 0xb9, 0x5f, 0xbd,
0x9b, 0x1d, 0x94, 0x62, 0x70, 0x78, 0x6a, 0xcc, 0xff, 0x1c, 0xfc, 0x07, 0x68, 0xf1, 0x3f, 0x69,
0x34, 0x51, 0xbb, 0xd2, 0xfb, 0xa5, 0x93, 0x6c, 0xd4, 0x59, 0xf5, 0x3d, 0xfb, 0xc1, 0x48, 0x82,
0xf1, 0x9f, 0xa0, 0x09, 0xca, 0x3d, 0xeb, 0x86, 0xfc, 0xa4, 0x64, 0xdb, 0xa9, 0x6c, 0xf0, 0x81,
0x33, 0x21, 0x0d, 0x45, 0x66, 0x74, 0x71, 0x34, 0x3e, 0x87, 0xba, 0x60, 0x6c, 0x6a, 0xda, 0x6c,
0xca, 0x59, 0xe0, 0x4a, 0x4a, 0x0a, 0x4a, 0xbf, 0x9f, 0xea, 0x0d, 0xc6, 0xa6, 0x27, 0x73, 0x76,
0x79, 0xfb, 0x9a, 0xc8, 0xb2, 0xf8, 0x77, 0xc8, 0x5f, 0xd3, 0x11, 0xa9, 0x28, 0x8b, 0xad, 0xd4,
0xe2, 0x25, 0x1d, 0x2d, 0x0b, 0xa3, 0x38, 0x3c, 0x80, 0x0a, 0xb7, 0x84, 0x74, 0x6d, 0x97, 0x5b,
0xbe, 0x24, 0x35, 0x25, 0xdb, 0x4b, 0x65, 0xcf, 0x1e, 0xb8, 0x65, 0x79, 0x56, 0x87, 0xff, 0x87,
0x35, 0x29, 0x2c, 0x7b, 0x92, 0x29, 0x42, 0x53, 0x56, 0xbf, 0xa6, 0x56, 0x2f, 0x22, 0xfe, 0xd1,
0x2a, 0xea, 0x72, 0x81, 0xc6, 0x47, 0x50, 0x50, 0x08, 0x29, 0x2e, 0x1d, 0x81, 0xb2, 0x59, 0x56,
0xc7, 0xb1, 0x78, 0x1f, 0x8a, 0xaa, 0x93, 0xae, 0x43, 0xf2, 0xea, 0x84, 0xe1, 0x6e, 0x76, 0xa0,
0x45, 0xd0, 0xf0, 0xd4, 0x88, 0xbf, 0x0e, 0xd6, 0xa1, 0x20, 0xd9, 0x84, 0xfa, 0xa4, 0xa4, 0x42,
0x7e, 0xfc, 0x38, 0x3b, 0x40, 0x46, 0x0c, 0xe1, 0x9f, 0x41, 0xbb, 0x0e, 0xcc, 0x50, 0x78, 0xa4,
0x1c, 0x91, 0x46, 0xe1, 0x3a, 0xb8, 0x14, 0x1e, 0x3e, 0x84, 0x0d, 0xdb, 0x63, 0xa1, 0x63, 0x8e,
0x2c, 0x7b, 0x12, 0x72, 0x93, 0xfa, 0xd6, 0xc8, 0xa3, 0x0e, 0x81, 0x26, 0x6a, 0x97, 0x0c, 0xac,
0xb8, 0xbe, 0xa2, 0x06, 0x31, 0x83, 0xf7, 0xa1, 0x46, 0x03, 0xe9, 0x4e, 0x2d, 0x49, 0x1d, 0xd3,
0xe6, 0x21, 0xa9, 0x37, 0x51, 0x1b, 0x19, 0xd5, 0x14, 0x3c, 0xe1, 0x21, 0xde, 0x85, 0x8a, 0xa0,
0x52, 0xdc, 0x98, 0x36, 0x0b, 0x7d, 0x49, 0xd6, 0x9a, 0xa8, 0x5d, 0x30, 0x40, 0x41, 0x27, 0x11,
0xd2, 0x2f, 0x43, 0x51, 0xc4, 0x35, 0xb6, 0xb6, 0x60, 0xf3, 0xdc, 0x0d, 0xe4, 0xb1, 0x2d, 0xdd,
0xab, 0xc5, 0xe6, 0xb5, 0xfe, 0x02, 0xb2, 0x4a, 0x05, 0x9c, 0xf9, 0x01, 0xc5, 0x3b, 0x00, 0xe9,
0xad, 0x0f, 0x08, 0x6a, 0xe6, 0xdb, 0x65, 0xa3, 0x3c, 0xbf, 0xe8, 0x41, 0xeb, 0x6f, 0xc0, 0x73,
0x81, 0xe5, 0xdc, 0x7c, 0xff, 0xa8, 0xb4, 0x9e, 0xc3, 0xfa, 0x82, 0x41, 0xb2, 0xed, 0x16, 0x94,
0x82, 0x68, 0x54, 0x4c, 0x4b, 0x2a, 0x83, 0xbc, 0x51, 0x54, 0xeb, 0x63, 0x19, 0x15, 0xed, 0x84,
0xc2, 0x8a, 0xe6, 0xd8, 0x9c, 0x06, 0x24, 0xa7, 0x58, 0x98, 0x43, 0xff, 0x05, 0xbd, 0x4f, 0x08,
0xea, 0xb1, 0xe7, 0xd0, 0x97, 0x54, 0xf8, 0x96, 0x87, 0xff, 0x85, 0x4a, 0x66, 0xf2, 0xf0, 0x66,
0x47, 0x70, 0xfb, 0x2b, 0xb3, 0xa8, 0xaf, 0x3f, 0x4c, 0x5c, 0x62, 0xf0, 0x96, 0xb5, 0xe0, 0xfe,
0x16, 0x69, 0x0d, 0xf4, 0x0f, 0x3a, 0x44, 0xf8, 0x35, 0x34, 0x96, 0x5b, 0x85, 0xb7, 0x95, 0xdb,
0x23, 0xcd, 0xd5, 0x77, 0x1e, 0x61, 0xe3, 0x42, 0x53, 0xf3, 0x5c, 0x1b, 0xf5, 0x66, 0x08, 0x6a,
0x31, 0x7d, 0x66, 0xf9, 0x8e, 0x47, 0x05, 0x1e, 0x42, 0xf5, 0x92, 0x3b, 0x96, 0x7c, 0xd8, 0x6a,
0x9e, 0x5f, 0x16, 0xfe, 0x66, 0xf6, 0xda, 0xfd, 0x2d, 0xca, 0x35, 0x10, 0x1e, 0x00, 0x5c, 0x48,
0xc6, 0x13, 0x23, 0x3d, 0xf3, 0x22, 0xcd, 0xc1, 0x27, 0xd9, 0xa4, 0x19, 0x5d, 0x48, 0x41, 0xad,
0xe9, 0x4a, 0x46, 0x31, 0xfc, 0x14, 0xab, 0xde, 0x1b, 0xa8, 0xc6, 0x2f, 0x5a, 0xfc, 0xba, 0xe1,
0x73, 0xa8, 0x64, 0xae, 0x42, 0x72, 0x48, 0xab, 0xb7, 0x4b, 0x27, 0xab, 0xc4, 0x62, 0x33, 0xf5,
0x5c, 0x13, 0xf5, 0xf7, 0x5e, 0xed, 0x8e, 0x5d, 0xf9, 0x2e, 0x1c, 0x75, 0x6c, 0x36, 0xed, 0x26,
0x69, 0x74, 0xd5, 0x0b, 0x6f, 0x33, 0xaf, 0x2b, 0xb8, 0x3d, 0xd2, 0xd4, 0xea, 0xe8, 0x4b, 0x00,
0x00, 0x00, 0xff, 0xff, 0xd8, 0x07, 0x36, 0xd7, 0x43, 0x06, 0x00, 0x00,
}