[VOL-4442] grpc streaming connection monitoring
Change-Id: I8a361473a252f6d2b64578a97980b2b7b3618f55
diff --git a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/flows/flow_utils.go b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/flows/flow_utils.go
index 41b615a..1e50a63 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/flows/flow_utils.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/flows/flow_utils.go
@@ -1378,6 +1378,12 @@
return filteredDR
}
+func (dr *DeviceRules) RemoveRule(deviceId string) {
+ dr.rulesLock.RLock()
+ defer dr.rulesLock.RUnlock()
+ delete(dr.Rules, deviceId)
+}
+
func (dr *DeviceRules) AddFlow(deviceId string, flow *ofp.OfpFlowStats) {
dr.rulesLock.Lock()
defer dr.rulesLock.Unlock()
diff --git a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/client.go b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/client.go
index 9b66d85..294983f 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/client.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/client.go
@@ -25,31 +25,26 @@
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
+ "github.com/jhump/protoreflect/dynamic/grpcdynamic"
+ "github.com/jhump/protoreflect/grpcreflect"
"github.com/opencord/voltha-lib-go/v7/pkg/log"
"github.com/opencord/voltha-lib-go/v7/pkg/probe"
+ "github.com/opencord/voltha-protos/v5/go/adapter_service"
"github.com/opencord/voltha-protos/v5/go/common"
"github.com/opencord/voltha-protos/v5/go/core_service"
"github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service"
"github.com/opencord/voltha-protos/v5/go/onu_inter_adapter_service"
"google.golang.org/grpc"
- "google.golang.org/grpc/keepalive"
+ "google.golang.org/grpc/codes"
+ rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
+ "google.golang.org/grpc/status"
)
type event byte
type state byte
-type SetAndTestServiceHandler func(context.Context, *grpc.ClientConn, *common.Connection) interface{}
+type GetServiceClient func(context.Context, *grpc.ClientConn) interface{}
type RestartedHandler func(ctx context.Context, endPoint string) error
-type contextKey string
-
-func (c contextKey) String() string {
- return string(c)
-}
-
-var (
- grpcMonitorContextKey = contextKey("grpc-monitor")
-)
-
const (
grpcBackoffInitialInterval = "GRPC_BACKOFF_INITIAL_INTERVAL"
grpcBackoffMaxInterval = "GRPC_BACKOFF_MAX_INTERVAL"
@@ -65,27 +60,24 @@
)
const (
- connectionErrorSubString = "SubConns are in TransientFailure"
- connectionClosedSubstring = "client connection is closing"
- connectionError = "connection error"
- connectionSystemNotReady = "system is not ready"
-)
-
-const (
eventConnecting = event(iota)
+ eventValidatingConnection
eventConnected
eventDisconnected
eventStopped
eventError
stateConnected = state(iota)
+ stateValidatingConnection
stateConnecting
stateDisconnected
)
type Client struct {
clientEndpoint string
+ clientContextData string
serverEndPoint string
+ remoteServiceName string
connection *grpc.ClientConn
connectionLock sync.RWMutex
stateLock sync.RWMutex
@@ -98,17 +90,26 @@
backoffMaxElapsedTime time.Duration
monitorInterval time.Duration
done bool
+ livenessLock sync.RWMutex
livenessCallback func(timestamp time.Time)
}
type ClientOption func(*Client)
-func NewClient(clientEndpoint, serverEndpoint string, onRestart RestartedHandler, opts ...ClientOption) (*Client, error) {
+func ClientContextData(data string) ClientOption {
+ return func(args *Client) {
+ args.clientContextData = data
+ }
+}
+
+func NewClient(clientEndpoint, serverEndpoint, remoteServiceName string, onRestart RestartedHandler,
+ opts ...ClientOption) (*Client, error) {
c := &Client{
clientEndpoint: clientEndpoint,
serverEndPoint: serverEndpoint,
+ remoteServiceName: remoteServiceName,
onRestart: onRestart,
- events: make(chan event, 1),
+ events: make(chan event, 5),
state: stateDisconnected,
backoffInitialInterval: DefaultBackoffInitialInterval,
backoffMaxInterval: DefaultBackoffMaxInterval,
@@ -143,6 +144,8 @@
return nil, fmt.Errorf("initial retry delay %v is greater than maximum retry delay %v", c.backoffInitialInterval, c.backoffMaxInterval)
}
+ grpc.EnableTracing = true
+
return c, nil
}
@@ -200,8 +203,23 @@
return nil, fmt.Errorf("invalid-service-%s", reflect.TypeOf(c.service))
}
+// GetAdapterServiceClient is a helper function that returns a concrete service instead of the GetClient() API
+// which returns an interface
+func (c *Client) GetAdapterServiceClient() (adapter_service.AdapterServiceClient, error) {
+ c.connectionLock.RLock()
+ defer c.connectionLock.RUnlock()
+ if c.service == nil {
+ return nil, fmt.Errorf("no adapter service connection to %s", c.serverEndPoint)
+ }
+ client, ok := c.service.(adapter_service.AdapterServiceClient)
+ if ok {
+ return client, nil
+ }
+ return nil, fmt.Errorf("invalid-service-%s", reflect.TypeOf(c.service))
+}
+
func (c *Client) Reset(ctx context.Context) {
- logger.Debugw(ctx, "resetting-client-connection", log.Fields{"endpoint": c.serverEndPoint})
+ logger.Debugw(ctx, "resetting-client-connection", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
c.stateLock.Lock()
defer c.stateLock.Unlock()
if c.state == stateConnected {
@@ -210,128 +228,173 @@
}
}
-func (c *Client) clientInterceptor(ctx context.Context, method string, req interface{}, reply interface{},
- cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
- // Nothing to do before intercepting the call
- err := invoker(ctx, method, req, reply, cc, opts...)
- // On connection failure, start the reconnect process depending on the error response
- if err != nil {
- logger.Errorw(ctx, "received-error", log.Fields{"error": err, "context": ctx, "endpoint": c.serverEndPoint})
- if strings.Contains(err.Error(), connectionErrorSubString) ||
- strings.Contains(err.Error(), connectionError) ||
- strings.Contains(err.Error(), connectionSystemNotReady) ||
- isGrpcMonitorKeyPresentInContext(ctx) {
- c.stateLock.Lock()
- if c.state == stateConnected {
- c.state = stateDisconnected
- logger.Warnw(context.Background(), "sending-disconnect-event", log.Fields{"endpoint": c.serverEndPoint, "error": err, "curr-state": stateConnected, "new-state": c.state})
- c.events <- eventDisconnected
- }
- c.stateLock.Unlock()
- } else if strings.Contains(err.Error(), connectionClosedSubstring) {
- logger.Errorw(context.Background(), "invalid-client-connection-closed", log.Fields{"endpoint": c.serverEndPoint, "error": err})
+// executeWithTimeout runs a sending function (sf) along with a receiving one(rf) and returns an error, if any.
+// If the deadline d elapses first, it returns a grpc DeadlineExceeded error instead.
+func (c *Client) executeWithTimeout(sf func(*common.Connection) error, rf func() (interface{}, error), conn *common.Connection, d time.Duration) error {
+ errChan := make(chan error, 1)
+ go func() {
+ err := sf(conn)
+ logger.Debugw(context.Background(), "message-sent", log.Fields{"error": err, "qpi-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ if err == nil {
+ response, err := rf()
+ logger.Debugw(context.Background(), "message-received", log.Fields{"error": err, "qpi-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "health": response})
+ }
+ errChan <- err
+ close(errChan)
+ }()
+ t := time.NewTimer(d)
+ select {
+ case <-t.C:
+ return status.Errorf(codes.DeadlineExceeded, "timeout-on-sending-message")
+ case err := <-errChan:
+ if !t.Stop() {
+ <-t.C
}
return err
}
- // Update activity on success only
- c.updateActivity(ctx)
- return nil
}
-// updateActivity updates the liveness channel
-func (c *Client) updateActivity(ctx context.Context) {
- logger.Debugw(ctx, "update-activity", log.Fields{"api-endpoint": c.serverEndPoint})
+func (c *Client) monitorConnection(ctx context.Context) {
+ logger.Debugw(ctx, "monitor-connection-started", log.Fields{"qpi-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
- // Update liveness only in connected state
- if c.livenessCallback != nil {
- c.stateLock.RLock()
- if c.state == stateConnected {
- c.livenessCallback(time.Now())
+ // If we exit, assume disconnected
+ defer func() {
+ c.stateLock.Lock()
+ if !c.done && (c.state == stateConnected || c.state == stateValidatingConnection) {
+ // Handle only connected state here. We need the validating state to know if we need to backoff before a retry
+ if c.state == stateConnected {
+ c.state = stateDisconnected
+ }
+ logger.Warnw(ctx, "sending-disconnect-event", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "curr-state": stateConnected, "new-state": c.state})
+ c.events <- eventDisconnected
+ } else {
+ logger.Debugw(ctx, "no-state-change-needed", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "state": c.state, "client-done": c.done})
}
- c.stateLock.RUnlock()
+ c.stateLock.Unlock()
+ logger.Debugw(ctx, "monitor-connection-ended", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ }()
+
+ c.connectionLock.RLock()
+ conn := c.connection
+ c.connectionLock.RUnlock()
+ if conn == nil {
+ logger.Errorw(ctx, "connection-nil", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ return
}
-}
-func WithGrpcMonitorContext(ctx context.Context, name string) context.Context {
- ctx = context.WithValue(ctx, grpcMonitorContextKey, name)
- return ctx
-}
-
-func isGrpcMonitorKeyPresentInContext(ctx context.Context) bool {
- if ctx != nil {
- _, present := ctx.Value(grpcMonitorContextKey).(string)
- return present
+ // Get a new client using reflection. The server can implement any grpc service, but it
+ // needs to also implement the "StartKeepAliveStream" API
+ grpcReflectClient := grpcreflect.NewClient(ctx, rpb.NewServerReflectionClient(conn))
+ if grpcReflectClient == nil {
+ logger.Errorw(ctx, "grpc-reflect-client-nil", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ return
}
- return false
-}
-// monitorActivity monitors the activity on the gRPC connection. If there are no activity after a specified
-// timeout, it will send a default API request on that connection. If the connection is good then nothing
-// happens. If it's bad this will trigger reconnection attempts.
-func (c *Client) monitorActivity(ctx context.Context, handler SetAndTestServiceHandler) {
- logger.Infow(ctx, "start-activity-monitor", log.Fields{"endpoint": c.serverEndPoint})
+ // Get the list of services - there should be 2 services: a server reflection and the voltha service we are interested in
+ services, err := grpcReflectClient.ListServices()
+ if err != nil {
+ logger.Errorw(ctx, "list-services-error", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "error": err})
+ return
+ }
- grpcMonitorCheckRunning := false
- var grpcMonitorCheckRunningLock sync.RWMutex
+ // Filter out the service
+ logger.Debugw(ctx, "services", log.Fields{"services": services})
+ serviceOfInterest := ""
+ for _, service := range services {
+ if strings.EqualFold(service, c.remoteServiceName) {
+ serviceOfInterest = service
+ break
+ }
+ }
+ if serviceOfInterest == "" {
+ logger.Errorw(ctx, "no-service-found", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "services": services, "expected-remote-service": c.remoteServiceName})
+ return
+ }
- // Interval to wait for no activity before probing the connection
- timeout := c.monitorInterval
+ // Resolve the service
+ resolvedService, err := grpcReflectClient.ResolveService(serviceOfInterest)
+ if err != nil {
+ logger.Errorw(ctx, "service-error", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "service": resolvedService, "error": err})
+ return
+ }
+
+ // Find the method of interest
+ method := resolvedService.FindMethodByName("GetHealthStatus")
+ if method == nil {
+ logger.Errorw(ctx, "nil-method", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "service": resolvedService})
+ return
+ }
+ logger.Debugw(ctx, "resolved-to-method", log.Fields{"service": resolvedService.GetName(), "method": method.GetName()})
+
+ // Get a dynamic connection
+ dynamicConn := grpcdynamic.NewStub(conn)
+
+ // Get the stream and send this client information
+ streamCtx, streamDone := context.WithCancel(log.WithSpanFromContext(context.Background(), ctx))
+ defer streamDone()
+ stream, err := dynamicConn.InvokeRpcBidiStream(streamCtx, method)
+ if err != nil {
+ logger.Errorw(ctx, "stream-error", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "service": resolvedService, "error": err})
+ return
+ }
+
+ clientInfo := &common.Connection{
+ Endpoint: c.clientEndpoint,
+ ContextInfo: c.clientContextData,
+ KeepAliveInterval: int64(c.monitorInterval),
+ }
+
+ initialConnection := true
loop:
for {
- timeoutTimer := time.NewTimer(timeout)
- select {
+ // Let's send a keep alive message with our info
+ err := c.executeWithTimeout(
+ func(conn *common.Connection) error { return stream.SendMsg(conn) },
+ func() (interface{}, error) { return stream.RecvMsg() },
+ clientInfo,
+ c.monitorInterval)
- case <-ctx.Done():
- // Stop and drain timer
- if !timeoutTimer.Stop() {
- select {
- case <-timeoutTimer.C:
- default:
- }
- }
+ if err != nil {
+ // Any error means the far end is gone
+ logger.Errorw(ctx, "sending-stream-error", log.Fields{"error": err, "api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "context": stream.Context().Err()})
break loop
+ }
+ // Send a connect event
+ if initialConnection {
+ logger.Debugw(ctx, "first-stream-data-sent", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ c.events <- eventConnected
+ initialConnection = false
+ }
+ logger.Debugw(ctx, "stream-data-sent", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ // Update liveness, if configured
+ c.livenessLock.RLock()
+ if c.livenessCallback != nil {
+ go c.livenessCallback(time.Now())
+ }
+ c.livenessLock.RUnlock()
- case <-timeoutTimer.C:
- // Trigger an activity check if the state is connected. If the state is not connected then there is already
- // a backoff retry mechanism in place to retry establishing connection.
- c.stateLock.RLock()
- grpcMonitorCheckRunningLock.RLock()
- runCheck := (c.state == stateConnected) && !grpcMonitorCheckRunning
- grpcMonitorCheckRunningLock.RUnlock()
- c.stateLock.RUnlock()
- if runCheck {
- go func() {
- grpcMonitorCheckRunningLock.Lock()
- if grpcMonitorCheckRunning {
- grpcMonitorCheckRunningLock.Unlock()
- logger.Debugw(ctx, "connection-check-already-in-progress", log.Fields{"api-endpoint": c.serverEndPoint})
- return
- }
- grpcMonitorCheckRunning = true
- grpcMonitorCheckRunningLock.Unlock()
-
- logger.Debugw(ctx, "connection-check-start", log.Fields{"api-endpoint": c.serverEndPoint})
- subCtx, cancel := context.WithTimeout(ctx, c.backoffMaxInterval)
- defer cancel()
- subCtx = WithGrpcMonitorContext(subCtx, "grpc-monitor")
- c.connectionLock.RLock()
- defer c.connectionLock.RUnlock()
- if c.connection != nil {
- response := handler(subCtx, c.connection, &common.Connection{Endpoint: c.clientEndpoint, KeepAliveInterval: int64(c.monitorInterval)})
- logger.Debugw(ctx, "connection-check-response", log.Fields{"api-endpoint": c.serverEndPoint, "up": response != nil})
- }
- grpcMonitorCheckRunningLock.Lock()
- grpcMonitorCheckRunning = false
- grpcMonitorCheckRunningLock.Unlock()
- }()
- }
+ // Wait to send the next keep alive
+ keepAliveTimer := time.NewTimer(time.Duration(clientInfo.KeepAliveInterval))
+ select {
+ case <-ctx.Done():
+ logger.Warnw(ctx, "context-done", log.Fields{"api-endpont": c.serverEndPoint, "client": c.clientEndpoint})
+ break loop
+ case <-stream.Context().Done():
+ logger.Debugw(ctx, "stream-context-done", log.Fields{"api-endpoint": c.serverEndPoint, "stream-info": stream.Context(), "client": c.clientEndpoint})
+ break loop
+ case <-keepAliveTimer.C:
+ continue
}
}
- logger.Infow(ctx, "activity-monitor-stopping", log.Fields{"endpoint": c.serverEndPoint})
+ if stream != nil {
+ if err := stream.CloseSend(); err != nil {
+ logger.Warnw(ctx, "closing-stream-error", log.Fields{"error": err, "api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ }
+ }
}
// Start kicks off the adapter agent by trying to connect to the adapter
-func (c *Client) Start(ctx context.Context, handler SetAndTestServiceHandler) {
+func (c *Client) Start(ctx context.Context, handler GetServiceClient) {
logger.Debugw(ctx, "Starting GRPC - Client", log.Fields{"api-endpoint": c.serverEndPoint})
// If the context contains a k8s probe then register services
@@ -340,8 +403,8 @@
p.RegisterService(ctx, c.serverEndPoint)
}
- // Enable activity check
- go c.monitorActivity(ctx, handler)
+ var monitorConnectionCtx context.Context
+ var monitorConnectionDone func()
initialConnection := true
c.events <- eventConnecting
@@ -351,38 +414,45 @@
for {
select {
case <-ctx.Done():
- logger.Debugw(ctx, "context-closing", log.Fields{"endpoint": c.serverEndPoint})
- break loop
+ logger.Warnw(ctx, "context-closing", log.Fields{"api_endpoint": c.serverEndPoint, "client": c.clientEndpoint, "context": ctx})
+ c.connectionLock.Lock()
+ if !c.done {
+ c.done = true
+ c.events <- eventStopped
+ close(c.events)
+ }
+ c.connectionLock.Unlock()
+ // break loop
case event := <-c.events:
- logger.Debugw(ctx, "received-event", log.Fields{"event": event, "endpoint": c.serverEndPoint})
+ logger.Debugw(ctx, "received-event", log.Fields{"event": event, "api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
c.connectionLock.RLock()
// On a client stopped, just allow the stop event to go through
if c.done && event != eventStopped {
c.connectionLock.RUnlock()
- logger.Debugw(ctx, "ignoring-event-on-client-stop", log.Fields{"event": event, "endpoint": c.serverEndPoint})
+ logger.Debugw(ctx, "ignoring-event-on-client-stop", log.Fields{"event": event, "api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
continue
}
c.connectionLock.RUnlock()
switch event {
case eventConnecting:
c.stateLock.Lock()
- logger.Debugw(ctx, "connection-start", log.Fields{"endpoint": c.serverEndPoint, "attempts": attempt, "curr-state": c.state})
+ logger.Debugw(ctx, "connection-start", log.Fields{"api-endpoint": c.serverEndPoint, "attempts": attempt, "curr-state": c.state, "client": c.clientEndpoint})
if c.state == stateConnected {
c.state = stateDisconnected
}
if c.state != stateConnecting {
c.state = stateConnecting
go func() {
- if err := c.connectToEndpoint(ctx, handler, p); err != nil {
+ if err := c.connectToEndpoint(ctx, p); err != nil {
c.stateLock.Lock()
c.state = stateDisconnected
c.stateLock.Unlock()
- logger.Errorw(ctx, "connection-failed", log.Fields{"endpoint": c.serverEndPoint, "attempt": attempt, "error": err})
+ logger.Errorw(ctx, "connection-failed", log.Fields{"api-endpoint": c.serverEndPoint, "attempt": attempt, "client": c.clientEndpoint, "error": err})
// Retry connection after a delay
if err = backoff.Backoff(ctx); err != nil {
// Context has closed or reached maximum elapsed time, if set
- logger.Errorw(ctx, "retry-aborted", log.Fields{"endpoint": c.serverEndPoint, "error": err})
+ logger.Errorw(ctx, "retry-aborted", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "error": err})
return
}
attempt += 1
@@ -391,29 +461,57 @@
c.events <- eventConnecting
}
c.connectionLock.RUnlock()
- } else {
- backoff.Reset()
}
}()
}
c.stateLock.Unlock()
+ case eventValidatingConnection:
+ logger.Debugw(ctx, "connection-validation", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ c.stateLock.Lock()
+ if c.state != stateConnected {
+ c.state = stateValidatingConnection
+ }
+ c.stateLock.Unlock()
+ monitorConnectionCtx, monitorConnectionDone = context.WithCancel(context.Background())
+ go c.monitorConnection(monitorConnectionCtx)
+
case eventConnected:
attempt = 1
+ backoff.Reset()
c.stateLock.Lock()
- logger.Debugw(ctx, "endpoint-connected", log.Fields{"endpoint": c.serverEndPoint, "curr-state": c.state})
+ logger.Debugw(ctx, "endpoint-connected", log.Fields{"api-endpoint": c.serverEndPoint, "curr-state": c.state, "client": c.clientEndpoint})
if c.state != stateConnected {
+ // Setup the service
+ c.connectionLock.RLock()
+ conn := c.connection
+ c.connectionLock.RUnlock()
+
+ subCtx, cancel := context.WithTimeout(ctx, c.backoffMaxInterval)
+ svc := handler(subCtx, conn)
+ if svc != nil {
+ c.service = svc
+ if p != nil {
+ p.UpdateStatus(ctx, c.serverEndPoint, probe.ServiceStatusRunning)
+ }
+ logger.Infow(ctx, "connected-to-endpoint", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ } else {
+ // Should never happen, but just in case
+ logger.Warnw(ctx, "service-is-nil", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ c.events <- eventDisconnected
+ }
+ cancel()
c.state = stateConnected
if initialConnection {
- logger.Debugw(ctx, "initial-endpoint-connection", log.Fields{"endpoint": c.serverEndPoint})
+ logger.Debugw(ctx, "initial-endpoint-connection", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
initialConnection = false
} else {
- logger.Debugw(ctx, "endpoint-reconnection", log.Fields{"endpoint": c.serverEndPoint})
+ logger.Debugw(ctx, "endpoint-reconnection", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
// Trigger any callback on a restart
go func() {
err := c.onRestart(log.WithSpanFromContext(context.Background(), ctx), c.serverEndPoint)
if err != nil {
- logger.Errorw(ctx, "unable-to-restart-endpoint", log.Fields{"error": err, "endpoint": c.serverEndPoint})
+ logger.Errorw(ctx, "unable-to-restart-endpoint", log.Fields{"error": err, "api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
}
}()
}
@@ -424,32 +522,64 @@
if p != nil {
p.UpdateStatus(ctx, c.serverEndPoint, probe.ServiceStatusNotReady)
}
- c.stateLock.RLock()
- logger.Debugw(ctx, "endpoint-disconnected", log.Fields{"endpoint": c.serverEndPoint, "curr-state": c.state})
- c.stateLock.RUnlock()
+ connectionValidationFail := false
+ c.stateLock.Lock()
+ logger.Debugw(ctx, "endpoint-disconnected", log.Fields{"api-endpoint": c.serverEndPoint, "curr-state": c.state, "client": c.clientEndpoint})
+ if c.state == stateValidatingConnection {
+ connectionValidationFail = true
+ c.state = stateDisconnected
+ }
+ c.stateLock.Unlock()
- // Try to connect again
- c.events <- eventConnecting
+ // Stop the streaming connection
+ if monitorConnectionDone != nil {
+ monitorConnectionDone()
+ monitorConnectionDone = nil
+ }
+
+ if connectionValidationFail {
+ // Retry connection after a delay
+ if err := backoff.Backoff(ctx); err != nil {
+ // Context has closed or reached maximum elapsed time, if set
+ logger.Errorw(ctx, "retry-aborted", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "error": err})
+ return
+ }
+ }
+ c.connectionLock.RLock()
+ if !c.done {
+ c.events <- eventConnecting
+ }
+ c.connectionLock.RUnlock()
case eventStopped:
- logger.Debugw(ctx, "endPoint-stopped", log.Fields{"adapter": c.serverEndPoint})
- go func() {
- if err := c.closeConnection(ctx, p); err != nil {
- logger.Errorw(ctx, "endpoint-closing-connection-failed", log.Fields{"endpoint": c.serverEndPoint, "error": err})
- }
- }()
+ logger.Debugw(ctx, "endpoint-stopped", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+
+ if monitorConnectionDone != nil {
+ monitorConnectionDone()
+ monitorConnectionDone = nil
+ }
+ if err := c.closeConnection(ctx, p); err != nil {
+ logger.Errorw(ctx, "endpoint-closing-connection-failed", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "error": err})
+ }
break loop
case eventError:
- logger.Errorw(ctx, "endpoint-error-event", log.Fields{"endpoint": c.serverEndPoint})
+ logger.Errorw(ctx, "endpoint-error-event", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
default:
- logger.Errorw(ctx, "endpoint-unknown-event", log.Fields{"endpoint": c.serverEndPoint, "error": event})
+ logger.Errorw(ctx, "endpoint-unknown-event", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "error": event})
}
}
}
- logger.Infow(ctx, "endpoint-stopped", log.Fields{"endpoint": c.serverEndPoint})
+
+ // Stop the streaming connection
+ if monitorConnectionDone != nil {
+ logger.Debugw(ctx, "closing-connection-monitoring", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
+ monitorConnectionDone()
+ }
+
+ logger.Infow(ctx, "client-stopped", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
}
-func (c *Client) connectToEndpoint(ctx context.Context, handler SetAndTestServiceHandler, p *probe.Probe) error {
+func (c *Client) connectToEndpoint(ctx context.Context, p *probe.Probe) error {
if p != nil {
p.UpdateStatus(ctx, c.serverEndPoint, probe.ServiceStatusPreparing)
}
@@ -476,52 +606,34 @@
grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(
grpc_opentracing.UnaryClientInterceptor(grpc_opentracing.WithTracer(log.ActiveTracerProxy{})),
)),
- grpc.WithUnaryInterceptor(c.clientInterceptor),
- // Set keealive parameter - use default grpc values
- grpc.WithKeepaliveParams(keepalive.ClientParameters{
- Time: c.monitorInterval,
- Timeout: c.backoffMaxInterval,
- PermitWithoutStream: true,
- }),
)
if err == nil {
- subCtx, cancel := context.WithTimeout(ctx, c.backoffMaxInterval)
- defer cancel()
- svc := handler(subCtx, conn, &common.Connection{Endpoint: c.clientEndpoint, KeepAliveInterval: int64(c.monitorInterval)})
- if svc != nil {
- c.connection = conn
- c.service = svc
- if p != nil {
- p.UpdateStatus(ctx, c.serverEndPoint, probe.ServiceStatusRunning)
- }
- logger.Infow(ctx, "connected-to-endpoint", log.Fields{"endpoint": c.serverEndPoint})
- c.events <- eventConnected
- return nil
- }
+ c.connection = conn
+ c.events <- eventValidatingConnection
+ return nil
+ } else {
+ logger.Warnw(ctx, "no-connection-to-endpoint", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint, "error": err})
}
- logger.Warnw(ctx, "Failed to connect to endpoint",
- log.Fields{
- "endpoint": c.serverEndPoint,
- "error": err,
- })
if p != nil {
p.UpdateStatus(ctx, c.serverEndPoint, probe.ServiceStatusFailed)
}
- return fmt.Errorf("no connection to endpoint %s", c.serverEndPoint)
+ return fmt.Errorf("no connection to api endpoint %s", c.serverEndPoint)
}
func (c *Client) closeConnection(ctx context.Context, p *probe.Probe) error {
if p != nil {
p.UpdateStatus(ctx, c.serverEndPoint, probe.ServiceStatusStopped)
}
+ logger.Infow(ctx, "client-closing-connection", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
c.connectionLock.Lock()
defer c.connectionLock.Unlock()
if c.connection != nil {
err := c.connection.Close()
+ c.service = nil
c.connection = nil
return err
}
@@ -530,6 +642,7 @@
}
func (c *Client) Stop(ctx context.Context) {
+ logger.Infow(ctx, "client-stop-request-event-received", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
c.connectionLock.Lock()
defer c.connectionLock.Unlock()
if !c.done {
@@ -537,7 +650,7 @@
c.events <- eventStopped
close(c.events)
}
- logger.Infow(ctx, "client-stopped", log.Fields{"endpoint": c.serverEndPoint})
+ logger.Infow(ctx, "client-stop-request-event-sent", log.Fields{"api-endpoint": c.serverEndPoint, "client": c.clientEndpoint})
}
// SetService is used for testing only
@@ -548,5 +661,7 @@
}
func (c *Client) SubscribeForLiveness(callback func(timestamp time.Time)) {
+ c.livenessLock.Lock()
+ defer c.livenessLock.Unlock()
c.livenessCallback = callback
}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/mock_core_service.go b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/mock_core_service.go
index 22becce..8365956 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/mock_core_service.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/grpc/mock_core_service.go
@@ -17,18 +17,36 @@
import (
"context"
+ "fmt"
"strconv"
"time"
"github.com/golang/protobuf/ptypes/empty"
+ "github.com/opencord/voltha-lib-go/v7/pkg/log"
"github.com/opencord/voltha-protos/v5/go/common"
ca "github.com/opencord/voltha-protos/v5/go/core_adapter"
+ "github.com/opencord/voltha-protos/v5/go/core_service"
"github.com/opencord/voltha-protos/v5/go/health"
"github.com/opencord/voltha-protos/v5/go/voltha"
)
//MockCoreServiceHandler implements the methods in the core service
-type MockCoreServiceHandler struct{}
+type MockCoreServiceHandler struct {
+ exitChannel chan struct{}
+}
+
+func NewMockCoreServiceHandler() *MockCoreServiceHandler {
+ return &MockCoreServiceHandler{exitChannel: make(chan struct{})}
+}
+
+func (handler *MockCoreServiceHandler) Start() {
+ logger.Debug(context.Background(), "starting-mock-core-service")
+}
+
+func (handler *MockCoreServiceHandler) Stop() {
+ logger.Debug(context.Background(), "stopping-mock-core-service")
+ close(handler.exitChannel)
+}
func (handler *MockCoreServiceHandler) RegisterAdapter(ctx context.Context, reg *ca.AdapterRegistration) (*empty.Empty, error) {
//logger.Debugw(ctx, "registration-received", log.Fields{"input": reg})
@@ -131,6 +149,41 @@
return &empty.Empty{}, nil
}
-func (handler *MockCoreServiceHandler) GetHealthStatus(ctx context.Context, conn *common.Connection) (*health.HealthStatus, error) {
- return &health.HealthStatus{State: health.HealthStatus_HEALTHY}, nil
+func (handler *MockCoreServiceHandler) GetHealthStatus(stream core_service.CoreService_GetHealthStatusServer) error {
+ logger.Debugw(context.Background(), "keep-alive-connection", log.Fields{"stream": stream})
+ if stream == nil {
+ return fmt.Errorf("stream-is-nil %v", stream)
+ }
+ var err error
+ var remoteClient *common.Connection
+ var tempClient *common.Connection
+ ctx := context.Background()
+loop:
+ for {
+ tempClient, err = stream.Recv()
+ if err != nil {
+ logger.Warnw(ctx, "received-stream-error", log.Fields{"remote-client": remoteClient, "error": err})
+ break loop
+ }
+ // Send a response back
+ err = stream.Send(&health.HealthStatus{State: health.HealthStatus_HEALTHY})
+ if err != nil {
+ logger.Warnw(ctx, "sending-stream-error", log.Fields{"remote-client": remoteClient, "error": err})
+ break loop
+ }
+
+ remoteClient = tempClient
+ logger.Debugw(ctx, "received-keep-alive", log.Fields{"remote-client": remoteClient})
+ select {
+ case <-stream.Context().Done():
+ logger.Infow(ctx, "stream-keep-alive-context-done", log.Fields{"remote-client": remoteClient, "error": stream.Context().Err()})
+ break loop
+ case <-handler.exitChannel:
+ logger.Warnw(ctx, "received-stop", log.Fields{"remote-client": remoteClient})
+ break loop
+ default:
+ }
+ }
+ logger.Errorw(context.Background(), "connection-down", log.Fields{"remote-client": remoteClient, "error": err})
+ return err
}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/probe/probe.go b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/probe/probe.go
index 84a2d5f..7ba1a57 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v7/pkg/probe/probe.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v7/pkg/probe/probe.go
@@ -275,6 +275,8 @@
}
func (p *Probe) IsReady() bool {
+ p.mutex.RLock()
+ defer p.mutex.RUnlock()
return p.isReady
}
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/adapter_service/adapter_service.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/adapter_service/adapter_service.pb.go
index e8aa01c..31f5673 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/adapter_service/adapter_service.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/adapter_service/adapter_service.pb.go
@@ -36,60 +36,61 @@
}
var fileDescriptor_038e6ec340f67698 = []byte{
- // 846 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x6f, 0x6f, 0xdb, 0x36,
- 0x10, 0xc6, 0xb1, 0x0d, 0xd8, 0x8b, 0x4b, 0x6c, 0x27, 0x6c, 0x96, 0x0e, 0x0a, 0x56, 0x74, 0xed,
- 0xeb, 0xca, 0x40, 0x8b, 0xb6, 0x1b, 0x8a, 0x01, 0xf3, 0xbf, 0xba, 0xde, 0x5a, 0x38, 0xb0, 0xe6,
- 0x62, 0xd8, 0x9b, 0x80, 0x96, 0xcf, 0x32, 0x51, 0x8a, 0xd4, 0xc8, 0x93, 0xd3, 0x7e, 0x83, 0x7d,
- 0x80, 0x7d, 0xe0, 0x42, 0x12, 0xe5, 0x58, 0xaa, 0xdd, 0xd6, 0x49, 0xde, 0x59, 0xf7, 0xf0, 0xf9,
- 0xf1, 0x78, 0x47, 0x93, 0x84, 0x87, 0x2b, 0x2d, 0x69, 0xc9, 0x2f, 0x12, 0xa3, 0x49, 0xdb, 0x36,
- 0x9f, 0xf3, 0x84, 0xd0, 0x5c, 0x58, 0x34, 0x2b, 0x11, 0xa2, 0x9f, 0x87, 0x59, 0xab, 0x16, 0xf6,
- 0xce, 0x22, 0xad, 0x23, 0x89, 0xed, 0x5c, 0x9e, 0xa5, 0x8b, 0x36, 0xc6, 0x09, 0x7d, 0x28, 0x46,
- 0x7b, 0x5e, 0x15, 0x19, 0xea, 0x38, 0xd6, 0xca, 0x69, 0xf7, 0xeb, 0x9a, 0xc1, 0x0b, 0x07, 0xdf,
- 0xee, 0x9e, 0xe3, 0x55, 0x1e, 0xde, 0xbd, 0xaa, 0x86, 0xef, 0x09, 0x95, 0x15, 0x5a, 0xd9, 0xed,
- 0xde, 0x25, 0x72, 0x49, 0xcb, 0xed, 0x5a, 0xf1, 0xe5, 0xb4, 0x9f, 0xaa, 0x9a, 0x8e, 0x43, 0x71,
- 0x41, 0x68, 0x69, 0xbb, 0x15, 0x57, 0xa8, 0xc8, 0x4d, 0xf9, 0xf8, 0xff, 0x3b, 0xd0, 0xec, 0x14,
- 0x0b, 0x08, 0x8a, 0xe2, 0xb0, 0x17, 0xd0, 0x1a, 0x22, 0xbd, 0xca, 0x27, 0x0f, 0x88, 0x53, 0x6a,
- 0x19, 0xf3, 0x5d, 0x15, 0x7a, 0x5a, 0x29, 0x0c, 0x49, 0x68, 0xe5, 0x9d, 0xf8, 0x2e, 0xbf, 0xca,
- 0xc8, 0xa7, 0x70, 0xd0, 0x99, 0xeb, 0x84, 0xfa, 0xf9, 0xba, 0x59, 0xd3, 0x77, 0x05, 0x28, 0xbe,
- 0xbd, 0x53, 0xbf, 0xa8, 0xbc, 0x5f, 0x56, 0xde, 0x1f, 0x64, 0x95, 0x67, 0xbf, 0x42, 0x6b, 0x82,
- 0xa1, 0x56, 0xa1, 0x90, 0xb8, 0xa7, 0xf5, 0x19, 0x1c, 0xf6, 0x51, 0x22, 0xed, 0xeb, 0x7b, 0x0e,
- 0x8d, 0xbe, 0xb0, 0x7c, 0xb6, 0xf7, 0x84, 0xbf, 0x40, 0x73, 0x82, 0x03, 0x75, 0x0d, 0xe7, 0x33,
- 0x38, 0x9c, 0xe0, 0x4c, 0x6b, 0xda, 0x7f, 0xc6, 0x00, 0xe5, 0xe2, 0x2f, 0xb4, 0xfb, 0x3a, 0xbb,
- 0x70, 0x34, 0x44, 0x1a, 0x2f, 0x92, 0x62, 0xdc, 0x48, 0x2d, 0xf4, 0x27, 0xde, 0x7b, 0x7e, 0x65,
- 0x1b, 0x07, 0x97, 0x82, 0xc2, 0x65, 0x8f, 0x27, 0x7c, 0x26, 0xa4, 0x28, 0x7a, 0xd3, 0x5b, 0x0a,
- 0x39, 0x2f, 0x86, 0xbf, 0xd6, 0x96, 0xbe, 0x7a, 0xfa, 0xc7, 0x00, 0x45, 0xa1, 0xce, 0xb5, 0x21,
- 0x76, 0x58, 0xba, 0xb2, 0xaf, 0x9d, 0x9e, 0x27, 0x70, 0xe0, 0xfa, 0xb2, 0x87, 0xa9, 0x0b, 0xad,
- 0x69, 0x32, 0xe7, 0x84, 0x2f, 0xa5, 0xbe, 0xb4, 0xdd, 0x54, 0xbe, 0x63, 0x77, 0xab, 0xcb, 0xca,
- 0x62, 0xb9, 0xb8, 0x93, 0x31, 0x81, 0x1f, 0x37, 0x18, 0x23, 0x15, 0x1a, 0x8c, 0x51, 0x11, 0x97,
- 0xf2, 0x03, 0xab, 0xd5, 0x68, 0x43, 0xfc, 0x3c, 0xf3, 0x77, 0x68, 0x04, 0xa8, 0xe6, 0xe7, 0x3c,
- 0x7c, 0x87, 0x34, 0x4e, 0xa9, 0x9e, 0xd5, 0x5a, 0xd8, 0x49, 0x18, 0x40, 0xb3, 0xc8, 0xea, 0x3c,
- 0xee, 0x69, 0xb5, 0x10, 0x11, 0x3b, 0xab, 0x21, 0x5c, 0xdc, 0x66, 0xcd, 0xdd, 0x89, 0x09, 0xe0,
- 0xa8, 0xaf, 0x2f, 0x95, 0xd4, 0x7c, 0x3e, 0x56, 0xe9, 0x28, 0xe6, 0x11, 0xb2, 0x07, 0xd5, 0x2e,
- 0xe6, 0xc1, 0x72, 0xd0, 0x04, 0xff, 0x4d, 0xd1, 0x92, 0x77, 0xb6, 0x65, 0xcc, 0x04, 0x6d, 0xa2,
- 0x95, 0x45, 0xf6, 0x1a, 0x8e, 0xb3, 0xdd, 0xe5, 0x78, 0xee, 0x04, 0xf0, 0xb6, 0x3a, 0xbe, 0x82,
- 0x36, 0x86, 0x93, 0xce, 0x4c, 0x9b, 0x35, 0x6f, 0x9a, 0x44, 0x86, 0xcf, 0xf1, 0xfa, 0xc0, 0x47,
- 0x70, 0xb8, 0x91, 0x9e, 0x65, 0x50, 0x9e, 0x62, 0xa3, 0xbe, 0x77, 0x5c, 0x1a, 0xaf, 0xe4, 0x3f,
- 0xe1, 0xa8, 0x13, 0x92, 0x58, 0x71, 0xc2, 0x75, 0x89, 0xae, 0x3d, 0xf7, 0x08, 0x9a, 0x3d, 0x1d,
- 0xc7, 0x82, 0x6e, 0x8e, 0x1a, 0x43, 0xa3, 0xec, 0x4a, 0xd9, 0xb7, 0xea, 0x66, 0xdc, 0xec, 0xdb,
- 0x1b, 0xb4, 0x96, 0x47, 0xe8, 0xfd, 0x50, 0x12, 0x2b, 0xea, 0x83, 0xef, 0xfe, 0xfb, 0xf6, 0x1b,
- 0xf6, 0x37, 0x9c, 0x0e, 0x91, 0x2a, 0x82, 0xeb, 0xdd, 0x4d, 0xc9, 0x53, 0xb8, 0xd3, 0xe3, 0x2a,
- 0x44, 0x59, 0xd1, 0x6e, 0x03, 0x5b, 0x76, 0xc6, 0xed, 0x8c, 0xec, 0x0f, 0x71, 0x63, 0x6c, 0x00,
- 0xc7, 0x13, 0x5c, 0xa1, 0xa1, 0xdb, 0x84, 0xbe, 0x80, 0x46, 0x40, 0xdc, 0xd0, 0x38, 0x0e, 0x45,
- 0x76, 0x60, 0xb3, 0xd3, 0x2a, 0x70, 0xfc, 0xa6, 0x37, 0xca, 0xe2, 0x1e, 0xf3, 0xb3, 0x7b, 0xda,
- 0xcf, 0x7e, 0xaf, 0x5b, 0xfd, 0x07, 0x34, 0x02, 0x11, 0xa7, 0x92, 0x13, 0x76, 0x24, 0x37, 0x71,
- 0x3d, 0x9b, 0x8a, 0x78, 0x95, 0x8d, 0xdb, 0xd6, 0xe3, 0x04, 0x0d, 0xcf, 0xee, 0xe6, 0x8c, 0x97,
- 0x27, 0x92, 0x26, 0x89, 0x41, 0x6b, 0x07, 0xd9, 0x8d, 0xcf, 0x98, 0x9f, 0xdf, 0xfc, 0x7e, 0xfe,
- 0xf5, 0x52, 0x48, 0x42, 0xb3, 0xf3, 0xb8, 0xf8, 0x0d, 0x5a, 0x53, 0x75, 0x7d, 0xfb, 0x2b, 0x38,
- 0x18, 0x22, 0x0d, 0xde, 0xd3, 0x5b, 0x2e, 0x53, 0x64, 0xf7, 0xab, 0xab, 0xd8, 0x90, 0xca, 0x35,
- 0xdc, 0xf5, 0xd7, 0x8f, 0x21, 0x7f, 0x82, 0x94, 0x1a, 0x95, 0xcb, 0x96, 0x0d, 0xe1, 0x20, 0xd8,
- 0x4d, 0x0a, 0x3e, 0x25, 0xed, 0x4a, 0x69, 0x0a, 0xcd, 0x21, 0x52, 0x20, 0x54, 0x24, 0xb1, 0x64,
- 0x5d, 0xcd, 0x59, 0xc4, 0x87, 0x58, 0xb0, 0xca, 0xbf, 0xe5, 0xcf, 0x9f, 0x19, 0xe1, 0x3a, 0x36,
- 0xcd, 0xae, 0xe6, 0x2f, 0x60, 0x83, 0x2f, 0x62, 0x83, 0x1a, 0xb6, 0x4b, 0xf0, 0x50, 0x9b, 0xc8,
- 0xd7, 0x09, 0xaa, 0x50, 0x9b, 0xb9, 0xef, 0x9e, 0x7b, 0xb5, 0x77, 0x6c, 0xf7, 0xe4, 0x6d, 0x1e,
- 0xaf, 0x3e, 0xe0, 0xfe, 0x79, 0x1e, 0x09, 0x5a, 0xa6, 0xb3, 0x6c, 0x5b, 0xb4, 0x4b, 0x82, 0x7b,
- 0x30, 0x3e, 0x2a, 0x9f, 0x8f, 0x4f, 0xdb, 0x91, 0xae, 0xbf, 0x96, 0x67, 0xdf, 0xe7, 0xea, 0x93,
- 0x8f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x51, 0x44, 0xf1, 0x55, 0x0b, 0x00, 0x00,
+ // 853 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdf, 0x6e, 0xdb, 0x36,
+ 0x14, 0xc6, 0x91, 0x0d, 0xd8, 0xc5, 0x49, 0x6c, 0x27, 0x6c, 0x96, 0x0e, 0x0a, 0x56, 0x74, 0xed,
+ 0xcd, 0x6e, 0x2a, 0x0f, 0x2d, 0xda, 0x6e, 0x18, 0x86, 0xcd, 0xff, 0xea, 0x7a, 0x6b, 0xe1, 0xc0,
+ 0x9a, 0x8b, 0x61, 0x37, 0x01, 0x2d, 0x1d, 0xcb, 0x44, 0x29, 0x52, 0x13, 0x8f, 0x9c, 0xf6, 0x0d,
+ 0xf6, 0x08, 0x7b, 0xdc, 0x41, 0x12, 0xe5, 0x58, 0xaa, 0xdd, 0xd6, 0x4e, 0xee, 0xac, 0xf3, 0xf1,
+ 0xfb, 0xf1, 0xf0, 0x1c, 0x9a, 0x24, 0x3c, 0x5c, 0x6a, 0x49, 0x0b, 0x7e, 0x19, 0x27, 0x9a, 0xb4,
+ 0x69, 0xf3, 0x80, 0xc7, 0x84, 0xc9, 0xa5, 0xc1, 0x64, 0x29, 0x7c, 0x74, 0xf3, 0x30, 0x6b, 0xd5,
+ 0xc2, 0xce, 0x79, 0xa8, 0x75, 0x28, 0xb1, 0x9d, 0xcb, 0xb3, 0x74, 0xde, 0xc6, 0x28, 0xa6, 0xf7,
+ 0xc5, 0x68, 0xc7, 0xa9, 0x22, 0x7d, 0x1d, 0x45, 0x5a, 0x59, 0xed, 0x7e, 0x5d, 0x4b, 0xf0, 0xd2,
+ 0xc2, 0x37, 0xbb, 0x03, 0xbc, 0xce, 0xc3, 0xb9, 0x57, 0xd5, 0xf0, 0x1d, 0xa1, 0x32, 0x42, 0x2b,
+ 0xb3, 0xd9, 0xbb, 0x40, 0x2e, 0x69, 0xb1, 0x59, 0x2b, 0xbe, 0xac, 0xf6, 0x6d, 0x55, 0xd3, 0x91,
+ 0x2f, 0x2e, 0x09, 0x0d, 0x6d, 0xb6, 0xe2, 0x12, 0x15, 0xd9, 0x29, 0x1f, 0xff, 0x77, 0x07, 0x9a,
+ 0x9d, 0x62, 0x01, 0x5e, 0x51, 0x1c, 0xf6, 0x2b, 0xb4, 0x86, 0x48, 0x2f, 0xf3, 0xc9, 0x3d, 0xe2,
+ 0x94, 0x1a, 0xc6, 0x5c, 0x5b, 0x85, 0x9e, 0x56, 0x0a, 0x7d, 0x12, 0x5a, 0x39, 0xa7, 0xae, 0xcd,
+ 0x6f, 0x7d, 0xe4, 0xf7, 0x07, 0x3f, 0x1c, 0xb0, 0xa7, 0x70, 0xd8, 0x09, 0x74, 0x4c, 0xfd, 0x7c,
+ 0xed, 0xac, 0xe9, 0xda, 0x22, 0x14, 0xdf, 0xce, 0x99, 0x5b, 0x54, 0xdf, 0x2d, 0xab, 0xef, 0x0e,
+ 0xb2, 0xea, 0xb3, 0x9f, 0xa0, 0x35, 0x41, 0x5f, 0x2b, 0x5f, 0x48, 0xdc, 0xd1, 0xfa, 0x0c, 0x8e,
+ 0xfa, 0x28, 0x91, 0x76, 0xf5, 0x3d, 0x87, 0x46, 0x5f, 0x18, 0x3e, 0xdb, 0x79, 0xc2, 0x1f, 0xa1,
+ 0x39, 0xc1, 0x81, 0xda, 0xc3, 0xf9, 0x0c, 0x8e, 0x26, 0x38, 0xd3, 0x9a, 0x76, 0x9f, 0xd1, 0x43,
+ 0x39, 0xff, 0x13, 0xcd, 0xae, 0xce, 0x2e, 0x1c, 0x0f, 0x91, 0xc6, 0xf3, 0xb8, 0x18, 0x37, 0x52,
+ 0x73, 0xfd, 0x81, 0xf7, 0x9e, 0x5b, 0xd9, 0xca, 0xde, 0x95, 0x20, 0x7f, 0xd1, 0xe3, 0x31, 0x9f,
+ 0x09, 0x29, 0x8a, 0xde, 0xf4, 0x16, 0x42, 0x06, 0xc5, 0xf0, 0x57, 0xda, 0xd0, 0x67, 0x4f, 0xff,
+ 0x18, 0xa0, 0x28, 0xd4, 0x85, 0x4e, 0x88, 0x1d, 0x95, 0xae, 0xec, 0x6b, 0xab, 0xe7, 0x09, 0x1c,
+ 0xda, 0xbe, 0xec, 0x60, 0xea, 0x42, 0x6b, 0x1a, 0x07, 0x9c, 0xf0, 0x85, 0xd4, 0x57, 0xa6, 0x9b,
+ 0xca, 0xb7, 0xec, 0x6e, 0x75, 0x59, 0x59, 0x2c, 0x17, 0xb7, 0x32, 0x26, 0xf0, 0xcd, 0x1a, 0x63,
+ 0xa4, 0xfc, 0x04, 0x23, 0x54, 0xc4, 0xa5, 0x7c, 0xcf, 0x6a, 0x35, 0x5a, 0x13, 0x3f, 0xce, 0xfc,
+ 0x0d, 0x1a, 0x1e, 0xaa, 0xe0, 0x82, 0xfb, 0x6f, 0x91, 0xc6, 0x29, 0xd5, 0xb3, 0x5a, 0x09, 0x5b,
+ 0x09, 0x03, 0x68, 0x16, 0x59, 0x5d, 0x44, 0x3d, 0xad, 0xe6, 0x22, 0x64, 0xe7, 0x35, 0x84, 0x8d,
+ 0x9b, 0xac, 0xb9, 0x5b, 0x31, 0x1e, 0x1c, 0xf7, 0xf5, 0x95, 0x92, 0x9a, 0x07, 0x63, 0x95, 0x8e,
+ 0x22, 0x1e, 0x22, 0x7b, 0x50, 0xed, 0x62, 0x1e, 0x2c, 0x07, 0x4d, 0xf0, 0x9f, 0x14, 0x0d, 0x39,
+ 0xe7, 0x1b, 0xc6, 0x4c, 0xd0, 0xc4, 0x5a, 0x19, 0x64, 0xaf, 0xe0, 0x24, 0xdb, 0x5d, 0x96, 0x67,
+ 0xcf, 0x0b, 0x67, 0xa3, 0xe3, 0x33, 0x68, 0x63, 0x38, 0xed, 0xcc, 0x74, 0xb2, 0xe2, 0x4d, 0xe3,
+ 0x30, 0xe1, 0x01, 0xee, 0x0f, 0x7c, 0x04, 0x47, 0x6b, 0xe9, 0x19, 0x06, 0xe5, 0x49, 0x36, 0xea,
+ 0x3b, 0x27, 0xa5, 0xf1, 0x5a, 0xfe, 0x03, 0x8e, 0x3b, 0x3e, 0x89, 0x25, 0x27, 0x5c, 0x95, 0x68,
+ 0xef, 0xb9, 0x47, 0xd0, 0xec, 0xe9, 0x28, 0x12, 0x74, 0x73, 0xd4, 0x18, 0x1a, 0x65, 0x57, 0xca,
+ 0xbe, 0x55, 0x37, 0xe3, 0x7a, 0xdf, 0x5e, 0xa3, 0x31, 0x3c, 0x44, 0xe7, 0xeb, 0x92, 0x58, 0x51,
+ 0x1f, 0x7c, 0xf9, 0xef, 0x17, 0x07, 0xec, 0x2f, 0x38, 0x1b, 0x22, 0x55, 0x04, 0xdb, 0xbb, 0x9b,
+ 0x92, 0xa7, 0x70, 0xa7, 0xc7, 0x95, 0x8f, 0xb2, 0xa2, 0xdd, 0x06, 0xb6, 0xec, 0x8c, 0xdd, 0x19,
+ 0xd9, 0x1f, 0xe2, 0xc6, 0x58, 0x0f, 0x4e, 0x26, 0xb8, 0xc4, 0x84, 0x6e, 0x13, 0xfa, 0x33, 0x34,
+ 0x3c, 0xe2, 0x09, 0x8d, 0x23, 0x5f, 0x64, 0x07, 0x36, 0x3b, 0xab, 0x02, 0xc7, 0xaf, 0x7b, 0xa3,
+ 0x2c, 0xee, 0x30, 0x37, 0xbb, 0xab, 0xdd, 0xec, 0xf7, 0xaa, 0xd5, 0xbf, 0x43, 0xc3, 0x13, 0x51,
+ 0x2a, 0x39, 0x61, 0x47, 0xf2, 0x24, 0xaa, 0x67, 0x53, 0x11, 0xaf, 0xb3, 0xb1, 0xdb, 0x7a, 0x1c,
+ 0x63, 0xc2, 0xb3, 0xfb, 0x39, 0xe3, 0xe5, 0x89, 0xa4, 0x71, 0x9c, 0xa0, 0x31, 0x83, 0xec, 0xd6,
+ 0x67, 0xcc, 0xcd, 0x6f, 0x7f, 0x37, 0xff, 0x7a, 0x21, 0x24, 0x61, 0xb2, 0xf5, 0xb8, 0xf8, 0x05,
+ 0x5a, 0x53, 0xb5, 0xbf, 0xfd, 0x25, 0x1c, 0x0e, 0x91, 0x06, 0xef, 0xe8, 0x0d, 0x97, 0x29, 0xb2,
+ 0xfb, 0xd5, 0x55, 0xac, 0x49, 0xe5, 0x1a, 0xee, 0xba, 0xab, 0x07, 0x91, 0x3b, 0x41, 0x4a, 0x13,
+ 0x95, 0xcb, 0x86, 0x0d, 0xe1, 0xd0, 0xdb, 0x4e, 0xf2, 0x3e, 0x24, 0x6d, 0x4b, 0x69, 0x0a, 0xcd,
+ 0x21, 0x92, 0x27, 0x54, 0x28, 0xb1, 0x64, 0x5d, 0xcf, 0x59, 0xc4, 0x87, 0x58, 0xb0, 0xca, 0xbf,
+ 0xe5, 0x77, 0x1f, 0x19, 0x61, 0x3b, 0x36, 0xcd, 0xae, 0xe6, 0x4f, 0x60, 0xbd, 0x4f, 0x62, 0xbd,
+ 0x1a, 0xb6, 0x4b, 0xf0, 0x50, 0x27, 0xa1, 0xab, 0x63, 0x54, 0xbe, 0x4e, 0x02, 0xd7, 0x3e, 0xf9,
+ 0x6a, 0x6f, 0xd9, 0xee, 0xe9, 0x9b, 0x3c, 0x5e, 0x7d, 0xc4, 0xfd, 0xfd, 0x3c, 0x14, 0xb4, 0x48,
+ 0x67, 0xd9, 0xb6, 0x68, 0x97, 0x04, 0xfb, 0x68, 0x7c, 0x54, 0x3e, 0x21, 0x9f, 0xb6, 0x43, 0x5d,
+ 0x7f, 0x31, 0xcf, 0xbe, 0xca, 0xd5, 0x27, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x54, 0xa5,
+ 0xf6, 0x59, 0x0b, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -106,7 +107,7 @@
type AdapterServiceClient interface {
// GetHealthStatus is used by an AdapterService client to verify connectivity
// to the gRPC server hosting the AdapterService service
- GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error)
+ GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (AdapterService_GetHealthStatusClient, error)
// Device
AdoptDevice(ctx context.Context, in *voltha.Device, opts ...grpc.CallOption) (*empty.Empty, error)
ReconcileDevice(ctx context.Context, in *voltha.Device, opts ...grpc.CallOption) (*empty.Empty, error)
@@ -161,13 +162,35 @@
return &adapterServiceClient{cc}
}
-func (c *adapterServiceClient) GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error) {
- out := new(health.HealthStatus)
- err := c.cc.Invoke(ctx, "/adapter_service.AdapterService/GetHealthStatus", in, out, opts...)
+func (c *adapterServiceClient) GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (AdapterService_GetHealthStatusClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_AdapterService_serviceDesc.Streams[0], "/adapter_service.AdapterService/GetHealthStatus", opts...)
if err != nil {
return nil, err
}
- return out, nil
+ x := &adapterServiceGetHealthStatusClient{stream}
+ return x, nil
+}
+
+type AdapterService_GetHealthStatusClient interface {
+ Send(*common.Connection) error
+ Recv() (*health.HealthStatus, error)
+ grpc.ClientStream
+}
+
+type adapterServiceGetHealthStatusClient struct {
+ grpc.ClientStream
+}
+
+func (x *adapterServiceGetHealthStatusClient) Send(m *common.Connection) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *adapterServiceGetHealthStatusClient) Recv() (*health.HealthStatus, error) {
+ m := new(health.HealthStatus)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
}
func (c *adapterServiceClient) AdoptDevice(ctx context.Context, in *voltha.Device, opts ...grpc.CallOption) (*empty.Empty, error) {
@@ -485,7 +508,7 @@
type AdapterServiceServer interface {
// GetHealthStatus is used by an AdapterService client to verify connectivity
// to the gRPC server hosting the AdapterService service
- GetHealthStatus(context.Context, *common.Connection) (*health.HealthStatus, error)
+ GetHealthStatus(AdapterService_GetHealthStatusServer) error
// Device
AdoptDevice(context.Context, *voltha.Device) (*empty.Empty, error)
ReconcileDevice(context.Context, *voltha.Device) (*empty.Empty, error)
@@ -536,8 +559,8 @@
type UnimplementedAdapterServiceServer struct {
}
-func (*UnimplementedAdapterServiceServer) GetHealthStatus(ctx context.Context, req *common.Connection) (*health.HealthStatus, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
+func (*UnimplementedAdapterServiceServer) GetHealthStatus(srv AdapterService_GetHealthStatusServer) error {
+ return status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
}
func (*UnimplementedAdapterServiceServer) AdoptDevice(ctx context.Context, req *voltha.Device) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method AdoptDevice not implemented")
@@ -646,22 +669,30 @@
s.RegisterService(&_AdapterService_serviceDesc, srv)
}
-func _AdapterService_GetHealthStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(common.Connection)
- if err := dec(in); err != nil {
+func _AdapterService_GetHealthStatus_Handler(srv interface{}, stream grpc.ServerStream) error {
+ return srv.(AdapterServiceServer).GetHealthStatus(&adapterServiceGetHealthStatusServer{stream})
+}
+
+type AdapterService_GetHealthStatusServer interface {
+ Send(*health.HealthStatus) error
+ Recv() (*common.Connection, error)
+ grpc.ServerStream
+}
+
+type adapterServiceGetHealthStatusServer struct {
+ grpc.ServerStream
+}
+
+func (x *adapterServiceGetHealthStatusServer) Send(m *health.HealthStatus) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func (x *adapterServiceGetHealthStatusServer) Recv() (*common.Connection, error) {
+ m := new(common.Connection)
+ if err := x.ServerStream.RecvMsg(m); err != nil {
return nil, err
}
- if interceptor == nil {
- return srv.(AdapterServiceServer).GetHealthStatus(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/adapter_service.AdapterService/GetHealthStatus",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(AdapterServiceServer).GetHealthStatus(ctx, req.(*common.Connection))
- }
- return interceptor(ctx, in, info, handler)
+ return m, nil
}
func _AdapterService_AdoptDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
@@ -1281,10 +1312,6 @@
HandlerType: (*AdapterServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
- MethodName: "GetHealthStatus",
- Handler: _AdapterService_GetHealthStatus_Handler,
- },
- {
MethodName: "AdoptDevice",
Handler: _AdapterService_AdoptDevice_Handler,
},
@@ -1421,6 +1448,13 @@
Handler: _AdapterService_SetSingleValue_Handler,
},
},
- Streams: []grpc.StreamDesc{},
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "GetHealthStatus",
+ Handler: _AdapterService_GetHealthStatus_Handler,
+ ServerStreams: true,
+ ClientStreams: true,
+ },
+ },
Metadata: "voltha_protos/adapter_service.proto",
}
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/core_service/core_services.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/core_service/core_services.pb.go
index 5816ad2..265d0c8 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/core_service/core_services.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/core_service/core_services.pb.go
@@ -32,46 +32,47 @@
func init() { proto.RegisterFile("voltha_protos/core_services.proto", fileDescriptor_979c43850713f141) }
var fileDescriptor_979c43850713f141 = []byte{
- // 619 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xdf, 0x4f, 0x14, 0x31,
- 0x10, 0x7e, 0x33, 0x3a, 0x1c, 0x1c, 0x94, 0x1f, 0x9a, 0x25, 0x28, 0x3c, 0xf9, 0xa2, 0xdd, 0x44,
- 0x10, 0x13, 0x49, 0x4c, 0x8e, 0x5b, 0x3d, 0x2e, 0x01, 0x43, 0x20, 0x6a, 0xe2, 0x0b, 0x29, 0xbb,
- 0xc3, 0xee, 0x86, 0xbd, 0xf6, 0xd2, 0x96, 0x53, 0xfe, 0x74, 0xdf, 0xcc, 0x6e, 0xbb, 0x97, 0x76,
- 0xb9, 0x46, 0x1e, 0x7c, 0x9d, 0x99, 0xef, 0xfb, 0x66, 0xbe, 0xe9, 0xa4, 0xb0, 0x37, 0x13, 0x95,
- 0x2e, 0xd8, 0xd5, 0x54, 0x0a, 0x2d, 0x54, 0x9c, 0x0a, 0x89, 0x57, 0x0a, 0xe5, 0xac, 0x4c, 0x51,
- 0xd1, 0x26, 0x48, 0x7a, 0x6e, 0x30, 0xda, 0xce, 0x85, 0xc8, 0x2b, 0x8c, 0x9b, 0xdc, 0xf5, 0xdd,
- 0x4d, 0x8c, 0x93, 0xa9, 0xbe, 0x37, 0xa5, 0xd1, 0xee, 0x02, 0x36, 0x96, 0xb1, 0xa9, 0x46, 0x69,
- 0x2b, 0xa2, 0x6e, 0xc5, 0x64, 0x22, 0xf8, 0xe2, 0x5c, 0x86, 0xb5, 0xe0, 0xe2, 0x5c, 0x81, 0xac,
- 0xd2, 0x85, 0xc9, 0xbd, 0xfb, 0xb3, 0x04, 0x4b, 0x43, 0x21, 0xf1, 0xd2, 0xb4, 0x48, 0x8e, 0xa0,
- 0x3f, 0x42, 0x7d, 0xd2, 0x94, 0x5c, 0x6a, 0xa6, 0xef, 0x14, 0x21, 0xd4, 0x2a, 0x0d, 0x05, 0xe7,
- 0x98, 0xea, 0x52, 0xf0, 0x68, 0x83, 0x5a, 0x16, 0xaf, 0xf2, 0x14, 0xfa, 0x17, 0x98, 0x97, 0x4a,
- 0xa3, 0x1c, 0x98, 0xce, 0xc9, 0x1e, 0xf5, 0x06, 0xb1, 0x61, 0x53, 0x25, 0x59, 0xc3, 0xb5, 0x45,
- 0x8d, 0x2d, 0xb4, 0xb5, 0x85, 0x7e, 0xae, 0x6d, 0x21, 0x87, 0xd0, 0x4b, 0x9a, 0x31, 0xbe, 0x4d,
- 0x33, 0xa6, 0x91, 0xac, 0x50, 0x3b, 0x95, 0x89, 0x06, 0x71, 0xfb, 0xb0, 0x74, 0x2e, 0xa4, 0x1e,
- 0x4a, 0x64, 0x1a, 0x33, 0xd2, 0x6b, 0x61, 0x75, 0x30, 0x08, 0x1a, 0xc3, 0x6a, 0x9d, 0x57, 0xf5,
- 0x24, 0xad, 0xe0, 0x8e, 0xdf, 0x7b, 0x9d, 0x6f, 0xd2, 0x5f, 0xca, 0x4a, 0xa3, 0x0c, 0x52, 0x1d,
- 0xc0, 0x4a, 0x82, 0x15, 0x6a, 0x1c, 0x54, 0x55, 0xc3, 0x49, 0xa0, 0x75, 0x70, 0x9c, 0x04, 0x51,
- 0x1f, 0x60, 0x79, 0x84, 0xda, 0x8c, 0x56, 0xa3, 0xc8, 0x8b, 0x87, 0xea, 0x56, 0xd8, 0x9b, 0x88,
- 0xbc, 0x81, 0xfe, 0x69, 0xa9, 0x1c, 0xa4, 0xaf, 0xb7, 0xec, 0x16, 0xd7, 0x2b, 0x5a, 0x33, 0x95,
- 0xee, 0xa0, 0xaf, 0x7c, 0x29, 0xa7, 0xe0, 0x1f, 0xa3, 0x0e, 0x60, 0xc3, 0xea, 0x9e, 0x0d, 0x05,
- 0xbf, 0x29, 0x73, 0x4b, 0xb8, 0x36, 0x17, 0x9d, 0x98, 0xb8, 0x0a, 0x52, 0x24, 0xb0, 0x3e, 0x2c,
- 0xca, 0x2a, 0x33, 0x3c, 0x09, 0x6a, 0x4c, 0xeb, 0xad, 0xed, 0x2c, 0x6a, 0x29, 0x29, 0x55, 0x2a,
- 0x66, 0x28, 0xef, 0xa3, 0xce, 0x5b, 0x20, 0x87, 0xb0, 0xea, 0xb0, 0xa8, 0x53, 0xa1, 0xf4, 0xa3,
- 0x5c, 0xff, 0x08, 0x1b, 0x2e, 0x6e, 0x2e, 0xff, 0x18, 0xec, 0x6b, 0x78, 0x36, 0xdf, 0x98, 0x07,
- 0xe8, 0x36, 0x37, 0x80, 0x95, 0x11, 0x6a, 0x47, 0xa7, 0x6b, 0xb8, 0x93, 0xb2, 0x86, 0x77, 0x29,
- 0x68, 0x73, 0x96, 0x6e, 0xab, 0x9e, 0x62, 0xdf, 0x2f, 0x57, 0xe4, 0x13, 0xf4, 0x2e, 0x91, 0x67,
- 0xe7, 0x2c, 0xbd, 0x45, 0x3d, 0xe6, 0x64, 0xab, 0xf3, 0x98, 0x6c, 0x3c, 0x38, 0xdb, 0x09, 0x10,
- 0x43, 0x75, 0x81, 0x4c, 0x09, 0x6e, 0xd7, 0x1a, 0x2d, 0x5a, 0x8a, 0xa9, 0x08, 0x32, 0x1d, 0x43,
- 0x7f, 0x7e, 0x38, 0x96, 0xe6, 0x79, 0xe0, 0xae, 0x82, 0x1c, 0x47, 0xb0, 0x79, 0x81, 0xa9, 0xe0,
- 0x69, 0x59, 0x61, 0xd0, 0x83, 0x10, 0xf8, 0x0c, 0x5e, 0xfa, 0xd6, 0xfd, 0x28, 0x75, 0x71, 0x2e,
- 0xc5, 0xef, 0xfb, 0x41, 0x96, 0x49, 0x54, 0x8a, 0x6c, 0xfb, 0xee, 0x51, 0x37, 0xf9, 0x60, 0x13,
- 0xfb, 0xf0, 0x74, 0x84, 0xda, 0x1c, 0x53, 0xf8, 0x44, 0x3b, 0x57, 0xf7, 0xd5, 0x3e, 0x72, 0x89,
- 0xfc, 0xbf, 0xdc, 0x5d, 0x02, 0xeb, 0x86, 0x62, 0x3c, 0x61, 0x39, 0x26, 0xe2, 0x17, 0xaf, 0x04,
- 0xcb, 0xc8, 0x66, 0xab, 0xea, 0x85, 0x43, 0x2c, 0xc7, 0xb7, 0xb0, 0x2b, 0x64, 0x4e, 0xc5, 0x14,
- 0x79, 0x2a, 0x64, 0x46, 0xcd, 0x37, 0x41, 0xdd, 0x2f, 0xeb, 0x78, 0xed, 0x7b, 0x13, 0x74, 0xbe,
- 0x88, 0x9f, 0x07, 0x79, 0xa9, 0x8b, 0xbb, 0xeb, 0xda, 0xfa, 0xb8, 0xc5, 0xc6, 0x06, 0xfb, 0xd6,
- 0x7e, 0x31, 0xb3, 0xf7, 0x71, 0x2e, 0xbc, 0x0f, 0xf1, 0xfa, 0x49, 0x93, 0xda, 0xff, 0x1b, 0x00,
- 0x00, 0xff, 0xff, 0xe7, 0xe2, 0x9c, 0x32, 0x35, 0x07, 0x00, 0x00,
+ // 625 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x4f, 0x14, 0x31,
+ 0x14, 0x0f, 0x17, 0xa3, 0x8f, 0x85, 0x85, 0xf2, 0xa1, 0x59, 0x82, 0xc2, 0x49, 0x0f, 0xda, 0x35,
+ 0x82, 0x98, 0x68, 0xa2, 0x59, 0x76, 0x74, 0xd9, 0x64, 0x31, 0x04, 0xa2, 0x26, 0x5e, 0x48, 0x99,
+ 0x79, 0xcc, 0x4c, 0x98, 0x6d, 0x37, 0x6d, 0x59, 0xdd, 0x3f, 0xde, 0xc4, 0xcc, 0xb4, 0xb3, 0x69,
+ 0x87, 0x6d, 0xe4, 0xe0, 0xf5, 0xbd, 0xdf, 0x47, 0xdf, 0xaf, 0x7d, 0x29, 0xec, 0x4f, 0x45, 0xa1,
+ 0x33, 0x76, 0x39, 0x91, 0x42, 0x0b, 0xd5, 0x8d, 0x85, 0xc4, 0x4b, 0x85, 0x72, 0x9a, 0xc7, 0xa8,
+ 0x68, 0x55, 0x24, 0x2d, 0xb7, 0xd8, 0xd9, 0x49, 0x85, 0x48, 0x0b, 0xec, 0x56, 0xbd, 0xab, 0xdb,
+ 0xeb, 0x2e, 0x8e, 0x27, 0x7a, 0x66, 0xa0, 0x9d, 0xbd, 0x05, 0x6a, 0x2c, 0x61, 0x13, 0x8d, 0xd2,
+ 0x22, 0x3a, 0x4d, 0xc4, 0x78, 0x2c, 0xf8, 0xe2, 0x5e, 0x82, 0xa5, 0xe1, 0xe2, 0x5e, 0x86, 0xac,
+ 0xd0, 0x99, 0xe9, 0xbd, 0xf9, 0xb3, 0x0c, 0xcb, 0x7d, 0x21, 0xf1, 0xc2, 0x1c, 0x91, 0x7c, 0x82,
+ 0xf6, 0x00, 0xf5, 0x49, 0x05, 0xb9, 0xd0, 0x4c, 0xdf, 0x2a, 0x42, 0xa8, 0x75, 0xea, 0x0b, 0xce,
+ 0x31, 0xd6, 0xb9, 0xe0, 0x9d, 0x4d, 0x6a, 0x55, 0x5c, 0xe4, 0x8b, 0xa5, 0xd7, 0x4b, 0x64, 0x04,
+ 0xed, 0x73, 0x4c, 0x73, 0xa5, 0x51, 0xf6, 0xcc, 0xe9, 0xc9, 0x3e, 0xf5, 0x86, 0xb1, 0x65, 0x83,
+ 0x92, 0xac, 0xd2, 0xdb, 0xa6, 0x26, 0x1a, 0x5a, 0x47, 0x43, 0x3f, 0x97, 0xd1, 0x90, 0x23, 0x68,
+ 0x45, 0xd5, 0x28, 0xdf, 0x26, 0x09, 0xd3, 0x48, 0x56, 0xa9, 0x9d, 0xcc, 0x54, 0x83, 0xbc, 0x03,
+ 0x58, 0x3e, 0x13, 0x52, 0xf7, 0x25, 0x32, 0x8d, 0x09, 0x69, 0xd5, 0xb4, 0xb2, 0x18, 0x24, 0x0d,
+ 0x61, 0xad, 0xec, 0xab, 0x72, 0x9a, 0xda, 0x70, 0xd7, 0x3f, 0x7b, 0xd9, 0xaf, 0xda, 0x5f, 0xf2,
+ 0x42, 0xa3, 0x0c, 0x4a, 0x1d, 0xc2, 0x6a, 0x84, 0x05, 0x6a, 0xec, 0x15, 0x45, 0xa5, 0x49, 0xa0,
+ 0x4e, 0x71, 0x18, 0x05, 0x59, 0xef, 0x60, 0x65, 0x80, 0xda, 0x8c, 0x56, 0xb2, 0xc8, 0x93, 0xbb,
+ 0xee, 0xd6, 0xd8, 0x9b, 0x88, 0xbc, 0x84, 0xf6, 0x28, 0x57, 0x0e, 0xd3, 0xf7, 0x5b, 0x71, 0xc1,
+ 0x8a, 0x8c, 0x60, 0xdd, 0x20, 0xdd, 0x41, 0x9f, 0xf9, 0x56, 0x0e, 0xe0, 0x1f, 0xa3, 0xf6, 0x60,
+ 0xd3, 0xfa, 0x9e, 0xf6, 0x05, 0xbf, 0xce, 0x53, 0x2b, 0xb8, 0x3e, 0x37, 0x1d, 0x9b, 0xba, 0x0a,
+ 0x4a, 0x44, 0xb0, 0xd1, 0xcf, 0xf2, 0x22, 0x31, 0x3a, 0x11, 0x6a, 0x8c, 0xcb, 0x5b, 0xdb, 0x5d,
+ 0x74, 0xa4, 0x28, 0x57, 0xb1, 0x98, 0xa2, 0x9c, 0x75, 0x1a, 0x6f, 0x81, 0x1c, 0xc1, 0x9a, 0xa3,
+ 0xa2, 0x46, 0x42, 0xe9, 0x7b, 0xa5, 0xfe, 0x1e, 0x36, 0x5d, 0xde, 0xdc, 0xfe, 0x3e, 0xdc, 0xe7,
+ 0xf0, 0x68, 0x7e, 0x63, 0x1e, 0xa1, 0x79, 0xb8, 0x1e, 0xac, 0x0e, 0x50, 0x3b, 0x3e, 0xcd, 0xc0,
+ 0x9d, 0x96, 0x0d, 0xbc, 0x29, 0x41, 0xab, 0xd5, 0x74, 0x8f, 0xea, 0x39, 0xb6, 0x7d, 0xb8, 0x22,
+ 0x1f, 0xa1, 0x75, 0x81, 0x3c, 0x39, 0x63, 0xf1, 0x0d, 0xea, 0x21, 0x27, 0xdb, 0x8d, 0xc7, 0x64,
+ 0xeb, 0xc1, 0xd9, 0x4e, 0x80, 0x18, 0xa9, 0x73, 0x64, 0x4a, 0x70, 0x7b, 0xad, 0x9d, 0x45, 0x97,
+ 0x62, 0x10, 0x41, 0xa5, 0x63, 0x68, 0xcf, 0x17, 0xc7, 0xca, 0x3c, 0x0e, 0xec, 0x55, 0x50, 0xe3,
+ 0x03, 0x6c, 0x9d, 0x63, 0x2c, 0x78, 0x9c, 0x17, 0x18, 0xcc, 0x20, 0x44, 0x3e, 0x85, 0xa7, 0x7e,
+ 0x74, 0x3f, 0x72, 0x9d, 0x9d, 0x49, 0xf1, 0x7b, 0xd6, 0x4b, 0x12, 0x89, 0x4a, 0x91, 0x1d, 0x3f,
+ 0x3d, 0xea, 0x36, 0xef, 0xdc, 0xc4, 0x01, 0x3c, 0x1c, 0xa0, 0x36, 0xcb, 0x14, 0x5e, 0xd1, 0xc6,
+ 0xd6, 0x7d, 0xb5, 0x8f, 0x5c, 0x22, 0xff, 0x2f, 0x7b, 0x17, 0xc1, 0x86, 0x91, 0x18, 0x8e, 0x59,
+ 0x8a, 0x91, 0xf8, 0xc5, 0x0b, 0xc1, 0x12, 0xb2, 0x55, 0xbb, 0x7a, 0xe5, 0x90, 0xca, 0xf1, 0x0d,
+ 0xec, 0x09, 0x99, 0x52, 0x31, 0x41, 0x1e, 0x0b, 0x99, 0x50, 0xf3, 0x55, 0x50, 0xf7, 0xdb, 0x3a,
+ 0x5e, 0xff, 0x5e, 0x15, 0x9d, 0x6f, 0xe2, 0xe7, 0x61, 0x9a, 0xeb, 0xec, 0xf6, 0xaa, 0x8c, 0xbe,
+ 0x5b, 0x73, 0xbb, 0x86, 0xfb, 0xca, 0x7e, 0x33, 0xd3, 0xb7, 0xdd, 0x54, 0x78, 0x9f, 0xe2, 0xd5,
+ 0x83, 0xaa, 0x75, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x44, 0xa5, 0x7d, 0x39, 0x07, 0x00,
+ 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -86,8 +87,9 @@
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type CoreServiceClient interface {
- // in coreProxy interface
- GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error)
+ // GetHealthStatus is used by a CoreService client to verify connectivity
+ // to the gRPC server hosting the CoreService service
+ GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (CoreService_GetHealthStatusClient, error)
RegisterAdapter(ctx context.Context, in *core_adapter.AdapterRegistration, opts ...grpc.CallOption) (*empty.Empty, error)
DeviceUpdate(ctx context.Context, in *voltha.Device, opts ...grpc.CallOption) (*empty.Empty, error)
PortCreated(ctx context.Context, in *voltha.Port, opts ...grpc.CallOption) (*empty.Empty, error)
@@ -122,13 +124,35 @@
return &coreServiceClient{cc}
}
-func (c *coreServiceClient) GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error) {
- out := new(health.HealthStatus)
- err := c.cc.Invoke(ctx, "/core_service.CoreService/GetHealthStatus", in, out, opts...)
+func (c *coreServiceClient) GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (CoreService_GetHealthStatusClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_CoreService_serviceDesc.Streams[0], "/core_service.CoreService/GetHealthStatus", opts...)
if err != nil {
return nil, err
}
- return out, nil
+ x := &coreServiceGetHealthStatusClient{stream}
+ return x, nil
+}
+
+type CoreService_GetHealthStatusClient interface {
+ Send(*common.Connection) error
+ Recv() (*health.HealthStatus, error)
+ grpc.ClientStream
+}
+
+type coreServiceGetHealthStatusClient struct {
+ grpc.ClientStream
+}
+
+func (x *coreServiceGetHealthStatusClient) Send(m *common.Connection) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *coreServiceGetHealthStatusClient) Recv() (*health.HealthStatus, error) {
+ m := new(health.HealthStatus)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
}
func (c *coreServiceClient) RegisterAdapter(ctx context.Context, in *core_adapter.AdapterRegistration, opts ...grpc.CallOption) (*empty.Empty, error) {
@@ -340,8 +364,9 @@
// CoreServiceServer is the server API for CoreService service.
type CoreServiceServer interface {
- // in coreProxy interface
- GetHealthStatus(context.Context, *common.Connection) (*health.HealthStatus, error)
+ // GetHealthStatus is used by a CoreService client to verify connectivity
+ // to the gRPC server hosting the CoreService service
+ GetHealthStatus(CoreService_GetHealthStatusServer) error
RegisterAdapter(context.Context, *core_adapter.AdapterRegistration) (*empty.Empty, error)
DeviceUpdate(context.Context, *voltha.Device) (*empty.Empty, error)
PortCreated(context.Context, *voltha.Port) (*empty.Empty, error)
@@ -372,8 +397,8 @@
type UnimplementedCoreServiceServer struct {
}
-func (*UnimplementedCoreServiceServer) GetHealthStatus(ctx context.Context, req *common.Connection) (*health.HealthStatus, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
+func (*UnimplementedCoreServiceServer) GetHealthStatus(srv CoreService_GetHealthStatusServer) error {
+ return status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
}
func (*UnimplementedCoreServiceServer) RegisterAdapter(ctx context.Context, req *core_adapter.AdapterRegistration) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method RegisterAdapter not implemented")
@@ -449,22 +474,30 @@
s.RegisterService(&_CoreService_serviceDesc, srv)
}
-func _CoreService_GetHealthStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(common.Connection)
- if err := dec(in); err != nil {
+func _CoreService_GetHealthStatus_Handler(srv interface{}, stream grpc.ServerStream) error {
+ return srv.(CoreServiceServer).GetHealthStatus(&coreServiceGetHealthStatusServer{stream})
+}
+
+type CoreService_GetHealthStatusServer interface {
+ Send(*health.HealthStatus) error
+ Recv() (*common.Connection, error)
+ grpc.ServerStream
+}
+
+type coreServiceGetHealthStatusServer struct {
+ grpc.ServerStream
+}
+
+func (x *coreServiceGetHealthStatusServer) Send(m *health.HealthStatus) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func (x *coreServiceGetHealthStatusServer) Recv() (*common.Connection, error) {
+ m := new(common.Connection)
+ if err := x.ServerStream.RecvMsg(m); err != nil {
return nil, err
}
- if interceptor == nil {
- return srv.(CoreServiceServer).GetHealthStatus(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/core_service.CoreService/GetHealthStatus",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(CoreServiceServer).GetHealthStatus(ctx, req.(*common.Connection))
- }
- return interceptor(ctx, in, info, handler)
+ return m, nil
}
func _CoreService_RegisterAdapter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
@@ -886,10 +919,6 @@
HandlerType: (*CoreServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
- MethodName: "GetHealthStatus",
- Handler: _CoreService_GetHealthStatus_Handler,
- },
- {
MethodName: "RegisterAdapter",
Handler: _CoreService_RegisterAdapter_Handler,
},
@@ -982,6 +1011,13 @@
Handler: _CoreService_UpdateImageDownload_Handler,
},
},
- Streams: []grpc.StreamDesc{},
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "GetHealthStatus",
+ Handler: _CoreService_GetHealthStatus_Handler,
+ ServerStreams: true,
+ ClientStreams: true,
+ },
+ },
Metadata: "voltha_protos/core_services.proto",
}
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service/olt_inter_adapter_service.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service/olt_inter_adapter_service.pb.go
index 93dade6..1e5c21c 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service/olt_inter_adapter_service.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service/olt_inter_adapter_service.pb.go
@@ -33,28 +33,29 @@
}
var fileDescriptor_3ddb40a5aae0f6e1 = []byte{
- // 330 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x3f, 0x4f, 0xf3, 0x30,
- 0x10, 0x87, 0xf5, 0xbe, 0x03, 0x83, 0x17, 0xc0, 0x42, 0x95, 0x48, 0x59, 0x18, 0x19, 0xea, 0x20,
- 0x10, 0x13, 0x53, 0xcb, 0x9f, 0xb6, 0x03, 0x6a, 0x45, 0x11, 0x03, 0x4b, 0xe5, 0xba, 0xd7, 0x24,
- 0x92, 0xe3, 0x0b, 0xf6, 0xa5, 0xd0, 0x6f, 0xc1, 0x27, 0xe4, 0xb3, 0xa0, 0xc4, 0xee, 0x90, 0xa8,
- 0x99, 0xa2, 0xe8, 0x9e, 0xdf, 0xe3, 0x3b, 0xdd, 0xb1, 0xc1, 0x16, 0x35, 0xa5, 0x72, 0x59, 0x58,
- 0x24, 0x74, 0x31, 0x6a, 0x5a, 0x66, 0x86, 0xc0, 0x2e, 0xe5, 0x5a, 0x16, 0xd5, 0xd7, 0x81, 0xdd,
- 0x66, 0x0a, 0x44, 0x0d, 0xf0, 0xf3, 0x4e, 0x20, 0x8a, 0x9a, 0x26, 0x85, 0x79, 0x8e, 0xc6, 0xc7,
- 0xa2, 0x7e, 0x82, 0x98, 0x68, 0x88, 0xeb, 0xbf, 0x55, 0xb9, 0x89, 0x21, 0x2f, 0x68, 0x17, 0x8a,
- 0x97, 0xcd, 0x60, 0xc3, 0x1e, 0x90, 0x96, 0x3b, 0x05, 0xa9, 0x29, 0xf5, 0xb5, 0x9b, 0xdf, 0xff,
- 0xac, 0x37, 0xd3, 0x34, 0xad, 0x62, 0x43, 0x9f, 0x5a, 0xf8, 0x96, 0xf8, 0x3d, 0x3b, 0x1e, 0x03,
- 0x4d, 0x6a, 0x7a, 0x41, 0x92, 0x4a, 0xc7, 0xb9, 0x08, 0x8d, 0x3d, 0xa0, 0x31, 0xa0, 0x28, 0x43,
- 0x13, 0x9d, 0x89, 0x20, 0x6c, 0x90, 0xcf, 0xec, 0x64, 0x6e, 0xf1, 0x7b, 0x37, 0xcb, 0x55, 0xf6,
- 0x0a, 0x9f, 0x25, 0x38, 0xe2, 0x91, 0x68, 0x76, 0x57, 0xd5, 0x5e, 0xc0, 0x39, 0x99, 0x40, 0xd4,
- 0x13, 0x7e, 0x48, 0xb1, 0x1f, 0x52, 0x3c, 0x55, 0x43, 0xf2, 0x09, 0x3b, 0x6d, 0x7b, 0x1c, 0xef,
- 0x77, 0x8b, 0x5c, 0xa7, 0xa9, 0x64, 0xbd, 0x31, 0xd0, 0x1b, 0xa8, 0x74, 0x6e, 0x71, 0x93, 0x69,
- 0x98, 0x1a, 0x47, 0xd2, 0x28, 0xe0, 0xd7, 0x2d, 0xdd, 0x01, 0x26, 0x3c, 0xbd, 0xef, 0xf6, 0xaa,
- 0x3b, 0xf1, 0x88, 0x5f, 0x46, 0xa3, 0x5c, 0x07, 0x74, 0xf4, 0xf3, 0x8f, 0x0d, 0xd0, 0x26, 0x02,
- 0x0b, 0x30, 0x0a, 0xed, 0x5a, 0xf8, 0x65, 0x88, 0xce, 0x53, 0x18, 0x5d, 0xbc, 0xd7, 0xc4, 0xe1,
- 0xad, 0x7c, 0x0c, 0x93, 0x8c, 0xd2, 0x72, 0x55, 0x2d, 0x22, 0xde, 0x3b, 0x63, 0xef, 0x1c, 0x84,
- 0x05, 0x6f, 0xef, 0xe2, 0x04, 0xbb, 0x8f, 0x71, 0x75, 0x54, 0x73, 0xb7, 0x7f, 0x01, 0x00, 0x00,
- 0xff, 0xff, 0xac, 0x65, 0xa9, 0x8b, 0xbe, 0x02, 0x00, 0x00,
+ // 337 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x4e, 0xe3, 0x30,
+ 0x10, 0x87, 0xd5, 0x3d, 0xec, 0xc1, 0x97, 0xdd, 0xb5, 0x56, 0x95, 0x48, 0xb9, 0x70, 0x83, 0x43,
+ 0x9d, 0x0a, 0xc4, 0x19, 0xb5, 0xfc, 0x69, 0x7b, 0x40, 0xad, 0x28, 0xe2, 0xc0, 0xa5, 0x72, 0xdd,
+ 0x69, 0x12, 0xc9, 0xf1, 0x04, 0x7b, 0x52, 0xe8, 0x5b, 0xf0, 0x8c, 0x3c, 0x09, 0x4a, 0xec, 0x4a,
+ 0xa4, 0x6a, 0x4e, 0x51, 0x34, 0xdf, 0xef, 0xf3, 0x8c, 0x66, 0x58, 0x7f, 0x8b, 0x9a, 0x52, 0xb9,
+ 0x2c, 0x2c, 0x12, 0xba, 0x18, 0x35, 0x2d, 0x33, 0x43, 0x60, 0x97, 0x72, 0x2d, 0x8b, 0xea, 0xeb,
+ 0xc0, 0x6e, 0x33, 0x05, 0xa2, 0x06, 0xf8, 0x49, 0x2b, 0x10, 0x45, 0x4d, 0x93, 0xc2, 0x3c, 0x47,
+ 0xe3, 0x63, 0x51, 0x2f, 0x41, 0x4c, 0x34, 0xc4, 0xf5, 0xdf, 0xaa, 0xdc, 0xc4, 0x90, 0x17, 0xb4,
+ 0x0b, 0xc5, 0xb3, 0x66, 0xb0, 0x61, 0x0f, 0xc8, 0x81, 0x3b, 0x05, 0xa9, 0x29, 0xf5, 0xb5, 0xcb,
+ 0xaf, 0x5f, 0xac, 0x3b, 0xd3, 0x34, 0xad, 0x62, 0x43, 0x9f, 0x5a, 0xf8, 0x96, 0xf8, 0x0d, 0xfb,
+ 0x33, 0x06, 0x9a, 0xd4, 0xf4, 0x82, 0x24, 0x95, 0x8e, 0x73, 0x11, 0x1a, 0xbb, 0x45, 0x63, 0x40,
+ 0x51, 0x86, 0x26, 0xfa, 0x2f, 0x82, 0xf0, 0x27, 0x79, 0xde, 0x19, 0x74, 0xf8, 0x03, 0xfb, 0x3b,
+ 0xb7, 0xf8, 0xb1, 0x9b, 0xe5, 0x2a, 0x7b, 0x82, 0xb7, 0x12, 0x1c, 0xf1, 0x48, 0x34, 0x3b, 0xac,
+ 0x6a, 0x8f, 0xe0, 0x9c, 0x4c, 0x20, 0xea, 0x0a, 0x3f, 0xa8, 0xd8, 0x0f, 0x2a, 0xee, 0xab, 0x41,
+ 0xf9, 0x84, 0xfd, 0x3b, 0xf4, 0x38, 0xde, 0x6b, 0x17, 0xb9, 0x56, 0x53, 0xc9, 0xba, 0x63, 0xa0,
+ 0x67, 0x50, 0xe9, 0xdc, 0xe2, 0x26, 0xd3, 0x30, 0x35, 0x8e, 0xa4, 0x51, 0xc0, 0x07, 0x07, 0xba,
+ 0x23, 0x4c, 0x78, 0x7a, 0xdf, 0xed, 0x45, 0x7b, 0xe2, 0x0e, 0xdf, 0x8d, 0x46, 0xb9, 0x0e, 0xe8,
+ 0xe8, 0xb3, 0xc3, 0xfa, 0x68, 0x13, 0x81, 0x05, 0x18, 0x85, 0x76, 0x2d, 0xfc, 0x42, 0x44, 0xeb,
+ 0x39, 0x8c, 0x4e, 0x5f, 0x6a, 0xe2, 0xf8, 0x66, 0x5e, 0x87, 0x49, 0x46, 0x69, 0xb9, 0xaa, 0x96,
+ 0x11, 0xef, 0x9d, 0xb1, 0x77, 0xf6, 0xc3, 0x92, 0xb7, 0xd7, 0x71, 0x82, 0xed, 0x07, 0xb9, 0xfa,
+ 0x5d, 0x73, 0x57, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x9f, 0xd5, 0x8e, 0xc2, 0x02, 0x00,
+ 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -69,9 +70,9 @@
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type OltInterAdapterServiceClient interface {
- // GetHealthStatus is used by an OltInterAdapterService client to verify connectivity
- // to the gRPC server hosting the OltInterAdapterService service
- GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error)
+ // GetHealthStatus is used by a OltInterAdapterService client to detect a connection
+ // lost with the gRPC server hosting the OltInterAdapterService service
+ GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (OltInterAdapterService_GetHealthStatusClient, error)
ProxyOmciRequest(ctx context.Context, in *inter_adapter.OmciMessage, opts ...grpc.CallOption) (*empty.Empty, error)
ProxyOmciRequests(ctx context.Context, in *inter_adapter.OmciMessages, opts ...grpc.CallOption) (*empty.Empty, error)
GetTechProfileInstance(ctx context.Context, in *inter_adapter.TechProfileInstanceRequestMessage, opts ...grpc.CallOption) (*inter_adapter.TechProfileDownloadMessage, error)
@@ -85,13 +86,35 @@
return &oltInterAdapterServiceClient{cc}
}
-func (c *oltInterAdapterServiceClient) GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error) {
- out := new(health.HealthStatus)
- err := c.cc.Invoke(ctx, "/olt_inter_adapter_service.OltInterAdapterService/GetHealthStatus", in, out, opts...)
+func (c *oltInterAdapterServiceClient) GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (OltInterAdapterService_GetHealthStatusClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_OltInterAdapterService_serviceDesc.Streams[0], "/olt_inter_adapter_service.OltInterAdapterService/GetHealthStatus", opts...)
if err != nil {
return nil, err
}
- return out, nil
+ x := &oltInterAdapterServiceGetHealthStatusClient{stream}
+ return x, nil
+}
+
+type OltInterAdapterService_GetHealthStatusClient interface {
+ Send(*common.Connection) error
+ Recv() (*health.HealthStatus, error)
+ grpc.ClientStream
+}
+
+type oltInterAdapterServiceGetHealthStatusClient struct {
+ grpc.ClientStream
+}
+
+func (x *oltInterAdapterServiceGetHealthStatusClient) Send(m *common.Connection) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *oltInterAdapterServiceGetHealthStatusClient) Recv() (*health.HealthStatus, error) {
+ m := new(health.HealthStatus)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
}
func (c *oltInterAdapterServiceClient) ProxyOmciRequest(ctx context.Context, in *inter_adapter.OmciMessage, opts ...grpc.CallOption) (*empty.Empty, error) {
@@ -123,9 +146,9 @@
// OltInterAdapterServiceServer is the server API for OltInterAdapterService service.
type OltInterAdapterServiceServer interface {
- // GetHealthStatus is used by an OltInterAdapterService client to verify connectivity
- // to the gRPC server hosting the OltInterAdapterService service
- GetHealthStatus(context.Context, *common.Connection) (*health.HealthStatus, error)
+ // GetHealthStatus is used by a OltInterAdapterService client to detect a connection
+ // lost with the gRPC server hosting the OltInterAdapterService service
+ GetHealthStatus(OltInterAdapterService_GetHealthStatusServer) error
ProxyOmciRequest(context.Context, *inter_adapter.OmciMessage) (*empty.Empty, error)
ProxyOmciRequests(context.Context, *inter_adapter.OmciMessages) (*empty.Empty, error)
GetTechProfileInstance(context.Context, *inter_adapter.TechProfileInstanceRequestMessage) (*inter_adapter.TechProfileDownloadMessage, error)
@@ -135,8 +158,8 @@
type UnimplementedOltInterAdapterServiceServer struct {
}
-func (*UnimplementedOltInterAdapterServiceServer) GetHealthStatus(ctx context.Context, req *common.Connection) (*health.HealthStatus, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
+func (*UnimplementedOltInterAdapterServiceServer) GetHealthStatus(srv OltInterAdapterService_GetHealthStatusServer) error {
+ return status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
}
func (*UnimplementedOltInterAdapterServiceServer) ProxyOmciRequest(ctx context.Context, req *inter_adapter.OmciMessage) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method ProxyOmciRequest not implemented")
@@ -152,22 +175,30 @@
s.RegisterService(&_OltInterAdapterService_serviceDesc, srv)
}
-func _OltInterAdapterService_GetHealthStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(common.Connection)
- if err := dec(in); err != nil {
+func _OltInterAdapterService_GetHealthStatus_Handler(srv interface{}, stream grpc.ServerStream) error {
+ return srv.(OltInterAdapterServiceServer).GetHealthStatus(&oltInterAdapterServiceGetHealthStatusServer{stream})
+}
+
+type OltInterAdapterService_GetHealthStatusServer interface {
+ Send(*health.HealthStatus) error
+ Recv() (*common.Connection, error)
+ grpc.ServerStream
+}
+
+type oltInterAdapterServiceGetHealthStatusServer struct {
+ grpc.ServerStream
+}
+
+func (x *oltInterAdapterServiceGetHealthStatusServer) Send(m *health.HealthStatus) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func (x *oltInterAdapterServiceGetHealthStatusServer) Recv() (*common.Connection, error) {
+ m := new(common.Connection)
+ if err := x.ServerStream.RecvMsg(m); err != nil {
return nil, err
}
- if interceptor == nil {
- return srv.(OltInterAdapterServiceServer).GetHealthStatus(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/olt_inter_adapter_service.OltInterAdapterService/GetHealthStatus",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(OltInterAdapterServiceServer).GetHealthStatus(ctx, req.(*common.Connection))
- }
- return interceptor(ctx, in, info, handler)
+ return m, nil
}
func _OltInterAdapterService_ProxyOmciRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
@@ -229,10 +260,6 @@
HandlerType: (*OltInterAdapterServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
- MethodName: "GetHealthStatus",
- Handler: _OltInterAdapterService_GetHealthStatus_Handler,
- },
- {
MethodName: "ProxyOmciRequest",
Handler: _OltInterAdapterService_ProxyOmciRequest_Handler,
},
@@ -245,6 +272,13 @@
Handler: _OltInterAdapterService_GetTechProfileInstance_Handler,
},
},
- Streams: []grpc.StreamDesc{},
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "GetHealthStatus",
+ Handler: _OltInterAdapterService_GetHealthStatus_Handler,
+ ServerStreams: true,
+ ClientStreams: true,
+ },
+ },
Metadata: "voltha_protos/olt_inter_adapter_service.proto",
}
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/onu_inter_adapter_service/onu_inter_adapter_service.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/onu_inter_adapter_service/onu_inter_adapter_service.pb.go
index a2cf537..9094c10 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/onu_inter_adapter_service/onu_inter_adapter_service.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/onu_inter_adapter_service/onu_inter_adapter_service.pb.go
@@ -33,29 +33,30 @@
}
var fileDescriptor_f951f30caeee9ccd = []byte{
- // 351 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0x4f, 0x4b, 0xf3, 0x40,
- 0x10, 0xc6, 0x79, 0x79, 0xc1, 0xc3, 0x4a, 0x15, 0x56, 0x29, 0x18, 0xbd, 0x14, 0x4f, 0x1e, 0xba,
- 0x01, 0xc5, 0x93, 0xa7, 0xfe, 0x91, 0x56, 0xa8, 0xb4, 0xd0, 0x22, 0xe2, 0xa5, 0x6c, 0x37, 0xd3,
- 0x64, 0x21, 0xd9, 0x09, 0xc9, 0xa4, 0xe2, 0xb7, 0xf0, 0xfb, 0xf9, 0x65, 0x24, 0xd9, 0x14, 0xba,
- 0xb5, 0x25, 0xa7, 0x10, 0x9e, 0xdf, 0xfc, 0x98, 0x81, 0x67, 0x59, 0x77, 0x83, 0x31, 0x45, 0x72,
- 0x99, 0x66, 0x48, 0x98, 0xfb, 0x68, 0x8a, 0xa5, 0x36, 0x04, 0xd9, 0x52, 0x06, 0x32, 0x2d, 0xbf,
- 0x39, 0x64, 0x1b, 0xad, 0x40, 0x54, 0x00, 0xbf, 0x3a, 0x0a, 0x78, 0x9e, 0x6b, 0x52, 0x98, 0x24,
- 0x68, 0xec, 0x98, 0x77, 0x1d, 0x22, 0x86, 0x31, 0xf8, 0xd5, 0xdf, 0xaa, 0x58, 0xfb, 0x90, 0xa4,
- 0xf4, 0x55, 0x87, 0x1d, 0x77, 0xd0, 0xb1, 0xd7, 0xc8, 0x9e, 0x3b, 0x02, 0x19, 0x53, 0x64, 0xb3,
- 0xfb, 0x9f, 0xff, 0xac, 0x3d, 0x35, 0xc5, 0x4b, 0x39, 0xd6, 0xb3, 0x53, 0x73, 0xbb, 0x12, 0x7f,
- 0x62, 0xe7, 0x23, 0xa0, 0x71, 0x45, 0xcf, 0x49, 0x52, 0x91, 0x73, 0x2e, 0xea, 0xc5, 0x06, 0x68,
- 0x0c, 0x28, 0xd2, 0x68, 0xbc, 0x4b, 0x51, 0x0b, 0x1d, 0x72, 0xc2, 0x5a, 0x95, 0x36, 0xd0, 0x4a,
- 0x96, 0x18, 0xbf, 0x15, 0xee, 0x6a, 0x4e, 0xfa, 0x0a, 0x79, 0x2e, 0x43, 0xf0, 0xda, 0xc2, 0x9e,
- 0x2a, 0xb6, 0xa7, 0x8a, 0xe7, 0xf2, 0x54, 0x3e, 0x64, 0x67, 0xd3, 0x44, 0xe9, 0x1d, 0x9d, 0xb7,
- 0xaf, 0x4b, 0x94, 0x6e, 0xb2, 0xbc, 0xb3, 0x8b, 0x21, 0x7e, 0x9a, 0x18, 0x65, 0xb0, 0x00, 0x15,
- 0xcd, 0x32, 0x5c, 0xeb, 0x18, 0xf8, 0xdd, 0x9e, 0x6a, 0x27, 0xdb, 0xe2, 0x4d, 0xe6, 0x09, 0x6b,
- 0x0d, 0x21, 0x06, 0x82, 0x11, 0x24, 0x33, 0xcc, 0xe8, 0xcf, 0xb5, 0x4e, 0xda, 0x64, 0x1b, 0xb3,
- 0x53, 0xcb, 0x2f, 0x06, 0x68, 0x88, 0x77, 0x0e, 0xba, 0x16, 0x0a, 0x4d, 0x93, 0xa9, 0xff, 0xfd,
- 0x8f, 0x75, 0x31, 0x0b, 0x05, 0xa6, 0x60, 0x14, 0x66, 0x81, 0xb0, 0x4d, 0x10, 0x47, 0x7b, 0xd8,
- 0xbf, 0x79, 0xab, 0x88, 0xc3, 0x95, 0xf8, 0xe8, 0x85, 0x9a, 0xa2, 0x62, 0x55, 0xb6, 0xc0, 0xdf,
- 0x3a, 0x7d, 0xeb, 0xec, 0xd6, 0xed, 0xda, 0x3c, 0xfa, 0x21, 0x1e, 0x7f, 0x09, 0xab, 0x93, 0x8a,
- 0x7b, 0xf8, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x10, 0x75, 0x34, 0x3b, 0x03, 0x00, 0x00,
+ // 354 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xcf, 0x4a, 0xc3, 0x40,
+ 0x10, 0xc6, 0x29, 0x82, 0x87, 0x95, 0x2a, 0xac, 0x52, 0x30, 0x7a, 0x29, 0x5e, 0xf4, 0xd0, 0x8d,
+ 0x28, 0x9e, 0xa5, 0x7f, 0xa4, 0x15, 0x2a, 0x2d, 0xb4, 0x88, 0x78, 0x29, 0xdb, 0xcd, 0x34, 0x59,
+ 0x48, 0x76, 0x42, 0x32, 0xa9, 0xf8, 0x16, 0xbe, 0xa1, 0xaf, 0x22, 0xc9, 0xa6, 0xd0, 0xd4, 0x96,
+ 0x9c, 0x42, 0xf8, 0x7e, 0xf3, 0x63, 0x06, 0xbe, 0x65, 0x9d, 0x35, 0x86, 0x14, 0xc8, 0x45, 0x9c,
+ 0x20, 0x61, 0xea, 0xa2, 0xc9, 0x16, 0xda, 0x10, 0x24, 0x0b, 0xe9, 0xc9, 0x38, 0xff, 0xa6, 0x90,
+ 0xac, 0xb5, 0x02, 0x51, 0x00, 0xfc, 0xf2, 0x20, 0xe0, 0x38, 0x55, 0x93, 0xc2, 0x28, 0x42, 0x63,
+ 0xc7, 0x9c, 0x2b, 0x1f, 0xd1, 0x0f, 0xc1, 0x2d, 0xfe, 0x96, 0xd9, 0xca, 0x85, 0x28, 0xa6, 0xef,
+ 0x32, 0x6c, 0x57, 0x07, 0x2b, 0xf6, 0x12, 0xd9, 0x71, 0x07, 0x20, 0x43, 0x0a, 0x6c, 0xf6, 0xf0,
+ 0x7b, 0xc4, 0x5a, 0x13, 0x93, 0xbd, 0xe6, 0x63, 0x5d, 0x3b, 0x35, 0xb3, 0x2b, 0xf1, 0x67, 0x76,
+ 0x36, 0x04, 0x1a, 0x15, 0xf4, 0x8c, 0x24, 0x65, 0x29, 0xe7, 0xa2, 0x5c, 0xac, 0x8f, 0xc6, 0x80,
+ 0x22, 0x8d, 0xc6, 0xb9, 0x10, 0xa5, 0x70, 0x9b, 0xbc, 0x6d, 0xdc, 0x37, 0xf8, 0x98, 0x35, 0x0b,
+ 0xb5, 0xa7, 0x95, 0xcc, 0x51, 0x7e, 0x23, 0xaa, 0xeb, 0x55, 0xd2, 0x37, 0x48, 0x53, 0xe9, 0x83,
+ 0xd3, 0x12, 0xf6, 0x5c, 0xb1, 0x39, 0x57, 0xbc, 0xe4, 0xe7, 0xf2, 0x01, 0x3b, 0x9d, 0x44, 0x4a,
+ 0x6f, 0xe9, 0x9c, 0x5d, 0x5d, 0xa4, 0x74, 0x9d, 0xe5, 0x83, 0x9d, 0x0f, 0xf0, 0xcb, 0x84, 0x28,
+ 0xbd, 0x39, 0xa8, 0x60, 0x9a, 0xe0, 0x4a, 0x87, 0xc0, 0xef, 0x76, 0x54, 0x5b, 0xd9, 0x06, 0xaf,
+ 0x33, 0x8f, 0x59, 0x73, 0x00, 0x21, 0x10, 0x0c, 0x21, 0x9a, 0x62, 0x42, 0xff, 0xae, 0xad, 0xa4,
+ 0x75, 0xb6, 0x11, 0x3b, 0xb1, 0xfc, 0xbc, 0x8f, 0x86, 0x78, 0x7b, 0xaf, 0x6b, 0xae, 0xd0, 0xd4,
+ 0x99, 0x7a, 0x3f, 0x0d, 0xd6, 0xc1, 0xc4, 0x17, 0x18, 0x83, 0x51, 0x98, 0x78, 0xc2, 0xb6, 0x41,
+ 0x1c, 0xec, 0x62, 0xef, 0xfa, 0xbd, 0x20, 0xf6, 0xd7, 0xe2, 0xb3, 0xeb, 0x6b, 0x0a, 0xb2, 0x65,
+ 0xde, 0x04, 0x77, 0xe3, 0x74, 0xad, 0xb3, 0x53, 0x36, 0x6c, 0xfd, 0xe4, 0xfa, 0x78, 0xf8, 0x35,
+ 0x2c, 0x8f, 0x0b, 0xee, 0xf1, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x5f, 0x8c, 0x88, 0x3f, 0x03,
+ 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -70,9 +71,9 @@
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type OnuInterAdapterServiceClient interface {
- // GetHealthStatus is used by an OnuInterAdapterService client to verify connectivity
- // to the gRPC server hosting the OnuInterAdapterService service
- GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error)
+ // GetHealthStatus is used by a OnuInterAdapterService client to detect a connection
+ // lost with the gRPC server hosting the OnuInterAdapterService service
+ GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (OnuInterAdapterService_GetHealthStatusClient, error)
OnuIndication(ctx context.Context, in *inter_adapter.OnuIndicationMessage, opts ...grpc.CallOption) (*empty.Empty, error)
OmciIndication(ctx context.Context, in *inter_adapter.OmciMessage, opts ...grpc.CallOption) (*empty.Empty, error)
DownloadTechProfile(ctx context.Context, in *inter_adapter.TechProfileDownloadMessage, opts ...grpc.CallOption) (*empty.Empty, error)
@@ -88,13 +89,35 @@
return &onuInterAdapterServiceClient{cc}
}
-func (c *onuInterAdapterServiceClient) GetHealthStatus(ctx context.Context, in *common.Connection, opts ...grpc.CallOption) (*health.HealthStatus, error) {
- out := new(health.HealthStatus)
- err := c.cc.Invoke(ctx, "/onu_inter_adapter_service.OnuInterAdapterService/GetHealthStatus", in, out, opts...)
+func (c *onuInterAdapterServiceClient) GetHealthStatus(ctx context.Context, opts ...grpc.CallOption) (OnuInterAdapterService_GetHealthStatusClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_OnuInterAdapterService_serviceDesc.Streams[0], "/onu_inter_adapter_service.OnuInterAdapterService/GetHealthStatus", opts...)
if err != nil {
return nil, err
}
- return out, nil
+ x := &onuInterAdapterServiceGetHealthStatusClient{stream}
+ return x, nil
+}
+
+type OnuInterAdapterService_GetHealthStatusClient interface {
+ Send(*common.Connection) error
+ Recv() (*health.HealthStatus, error)
+ grpc.ClientStream
+}
+
+type onuInterAdapterServiceGetHealthStatusClient struct {
+ grpc.ClientStream
+}
+
+func (x *onuInterAdapterServiceGetHealthStatusClient) Send(m *common.Connection) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *onuInterAdapterServiceGetHealthStatusClient) Recv() (*health.HealthStatus, error) {
+ m := new(health.HealthStatus)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
}
func (c *onuInterAdapterServiceClient) OnuIndication(ctx context.Context, in *inter_adapter.OnuIndicationMessage, opts ...grpc.CallOption) (*empty.Empty, error) {
@@ -144,9 +167,9 @@
// OnuInterAdapterServiceServer is the server API for OnuInterAdapterService service.
type OnuInterAdapterServiceServer interface {
- // GetHealthStatus is used by an OnuInterAdapterService client to verify connectivity
- // to the gRPC server hosting the OnuInterAdapterService service
- GetHealthStatus(context.Context, *common.Connection) (*health.HealthStatus, error)
+ // GetHealthStatus is used by a OnuInterAdapterService client to detect a connection
+ // lost with the gRPC server hosting the OnuInterAdapterService service
+ GetHealthStatus(OnuInterAdapterService_GetHealthStatusServer) error
OnuIndication(context.Context, *inter_adapter.OnuIndicationMessage) (*empty.Empty, error)
OmciIndication(context.Context, *inter_adapter.OmciMessage) (*empty.Empty, error)
DownloadTechProfile(context.Context, *inter_adapter.TechProfileDownloadMessage) (*empty.Empty, error)
@@ -158,8 +181,8 @@
type UnimplementedOnuInterAdapterServiceServer struct {
}
-func (*UnimplementedOnuInterAdapterServiceServer) GetHealthStatus(ctx context.Context, req *common.Connection) (*health.HealthStatus, error) {
- return nil, status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
+func (*UnimplementedOnuInterAdapterServiceServer) GetHealthStatus(srv OnuInterAdapterService_GetHealthStatusServer) error {
+ return status.Errorf(codes.Unimplemented, "method GetHealthStatus not implemented")
}
func (*UnimplementedOnuInterAdapterServiceServer) OnuIndication(ctx context.Context, req *inter_adapter.OnuIndicationMessage) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method OnuIndication not implemented")
@@ -181,22 +204,30 @@
s.RegisterService(&_OnuInterAdapterService_serviceDesc, srv)
}
-func _OnuInterAdapterService_GetHealthStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(common.Connection)
- if err := dec(in); err != nil {
+func _OnuInterAdapterService_GetHealthStatus_Handler(srv interface{}, stream grpc.ServerStream) error {
+ return srv.(OnuInterAdapterServiceServer).GetHealthStatus(&onuInterAdapterServiceGetHealthStatusServer{stream})
+}
+
+type OnuInterAdapterService_GetHealthStatusServer interface {
+ Send(*health.HealthStatus) error
+ Recv() (*common.Connection, error)
+ grpc.ServerStream
+}
+
+type onuInterAdapterServiceGetHealthStatusServer struct {
+ grpc.ServerStream
+}
+
+func (x *onuInterAdapterServiceGetHealthStatusServer) Send(m *health.HealthStatus) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func (x *onuInterAdapterServiceGetHealthStatusServer) Recv() (*common.Connection, error) {
+ m := new(common.Connection)
+ if err := x.ServerStream.RecvMsg(m); err != nil {
return nil, err
}
- if interceptor == nil {
- return srv.(OnuInterAdapterServiceServer).GetHealthStatus(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/onu_inter_adapter_service.OnuInterAdapterService/GetHealthStatus",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(OnuInterAdapterServiceServer).GetHealthStatus(ctx, req.(*common.Connection))
- }
- return interceptor(ctx, in, info, handler)
+ return m, nil
}
func _OnuInterAdapterService_OnuIndication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
@@ -294,10 +325,6 @@
HandlerType: (*OnuInterAdapterServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
- MethodName: "GetHealthStatus",
- Handler: _OnuInterAdapterService_GetHealthStatus_Handler,
- },
- {
MethodName: "OnuIndication",
Handler: _OnuInterAdapterService_OnuIndication_Handler,
},
@@ -318,6 +345,13 @@
Handler: _OnuInterAdapterService_DeleteTCont_Handler,
},
},
- Streams: []grpc.StreamDesc{},
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "GetHealthStatus",
+ Handler: _OnuInterAdapterService_GetHealthStatus_Handler,
+ ServerStreams: true,
+ ClientStreams: true,
+ },
+ },
Metadata: "voltha_protos/onu_inter_adapter_service.proto",
}
diff --git a/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go b/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go
index 4764c92..6dfa875 100644
--- a/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v5/go/openolt/openolt.pb.go
@@ -960,6 +960,7 @@
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
IntfId uint32 `protobuf:"fixed32,2,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
OperState string `protobuf:"bytes,3,opt,name=oper_state,json=operState,proto3" json:"oper_state,omitempty"`
+ Speed uint32 `protobuf:"fixed32,4,opt,name=speed,proto3" json:"speed,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -1011,6 +1012,13 @@
return ""
}
+func (m *IntfOperIndication) GetSpeed() uint32 {
+ if m != nil {
+ return m.Speed
+ }
+ return 0
+}
+
type OmciIndication struct {
IntfId uint32 `protobuf:"fixed32,1,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
OnuId uint32 `protobuf:"fixed32,2,opt,name=onu_id,json=onuId,proto3" json:"onu_id,omitempty"`
@@ -4707,341 +4715,342 @@
func init() { proto.RegisterFile("voltha_protos/openolt.proto", fileDescriptor_c072e7aa0dfd74d5) }
var fileDescriptor_c072e7aa0dfd74d5 = []byte{
- // 5341 bytes of a gzipped FileDescriptorProto
+ // 5350 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7c, 0x4b, 0x70, 0x1b, 0x49,
0x72, 0xb6, 0xc0, 0x07, 0x00, 0x26, 0x1e, 0x04, 0x8b, 0x6f, 0x52, 0x0f, 0xaa, 0x47, 0x33, 0xa3,
- 0x9d, 0xdd, 0x21, 0x45, 0x8e, 0xa8, 0x91, 0xe6, 0xdf, 0x7f, 0x77, 0x28, 0x12, 0x22, 0xf1, 0x0f,
- 0x49, 0xf0, 0x6f, 0x42, 0x92, 0x77, 0x37, 0x26, 0x7a, 0x9b, 0xdd, 0x05, 0xb0, 0x97, 0x8d, 0xae,
- 0x9e, 0xee, 0x02, 0x1f, 0x3e, 0x6e, 0x78, 0xed, 0x8b, 0x6f, 0x1b, 0x76, 0x84, 0x7d, 0x71, 0x38,
- 0x7c, 0xf5, 0xc5, 0x37, 0x47, 0xf8, 0xe8, 0x70, 0xf8, 0xe2, 0x9b, 0xcf, 0xbe, 0x39, 0x7c, 0xf1,
- 0xc9, 0x17, 0x9f, 0x1c, 0x0e, 0x47, 0x65, 0x55, 0xbf, 0x00, 0x90, 0x92, 0xc6, 0x74, 0xf8, 0xa2,
- 0x60, 0x65, 0x7e, 0xf9, 0x65, 0x3d, 0xb2, 0xb2, 0xb2, 0xbb, 0x0b, 0x82, 0xe5, 0x73, 0xe6, 0xf2,
- 0x53, 0xd3, 0xf0, 0x03, 0xc6, 0x59, 0xb8, 0xc6, 0x7c, 0xea, 0x31, 0x97, 0xaf, 0x62, 0x93, 0x14,
- 0x54, 0x73, 0xe9, 0x6e, 0x87, 0xb1, 0x8e, 0x4b, 0xd7, 0x4c, 0xdf, 0x59, 0x33, 0x3d, 0x8f, 0x71,
- 0x93, 0x3b, 0xcc, 0x0b, 0x25, 0x6c, 0x69, 0x25, 0xcb, 0xc1, 0xa9, 0x75, 0x2a, 0xfe, 0x6e, 0x3b,
- 0x2e, 0x55, 0x88, 0xfb, 0x59, 0x04, 0xbd, 0xe4, 0x86, 0xc5, 0xbc, 0xb6, 0xd3, 0xb9, 0x56, 0x4f,
- 0xbd, 0x30, 0xf1, 0xa0, 0xfd, 0xc3, 0x18, 0x40, 0xc3, 0xb3, 0x1d, 0x0b, 0xfd, 0x92, 0x75, 0x28,
- 0x30, 0x97, 0x1b, 0x8e, 0x67, 0x2f, 0xe4, 0x56, 0x72, 0x8f, 0x4b, 0x1b, 0x73, 0xab, 0x51, 0xc7,
- 0x9b, 0x2e, 0x4f, 0x80, 0x7b, 0x77, 0xf4, 0x3c, 0x43, 0x01, 0x79, 0x0a, 0x45, 0xc7, 0xe3, 0x6d,
- 0xb4, 0x19, 0x41, 0x9b, 0xf9, 0xd8, 0xa6, 0xe1, 0xf1, 0x76, 0xc6, 0xa8, 0xe0, 0x48, 0x09, 0xd9,
- 0x82, 0x0a, 0x5a, 0x31, 0x9f, 0x06, 0x68, 0x3a, 0x8a, 0xa6, 0xcb, 0x19, 0xd3, 0xa6, 0x4f, 0x83,
- 0x8c, 0x79, 0xc9, 0x49, 0xa4, 0xe4, 0x27, 0x50, 0x66, 0x5e, 0xcf, 0xb0, 0x9d, 0xd0, 0x42, 0x86,
- 0x31, 0x64, 0x58, 0x4a, 0x3a, 0xec, 0xf5, 0x76, 0x9c, 0xd0, 0xca, 0x10, 0x00, 0x8b, 0x85, 0x38,
- 0x56, 0xaf, 0x87, 0xa6, 0xe3, 0xfd, 0x63, 0xf5, 0x7a, 0x7d, 0x63, 0x45, 0x81, 0x18, 0x2b, 0xeb,
- 0x5a, 0x0e, 0xda, 0xe4, 0xfb, 0xc6, 0xda, 0xec, 0x5a, 0x4e, 0x76, 0xac, 0x4c, 0x4a, 0xc8, 0x53,
- 0x28, 0xf8, 0x67, 0x72, 0x52, 0x0b, 0x68, 0xb4, 0x18, 0x1b, 0x1d, 0x99, 0xd6, 0x19, 0xed, 0x9b,
- 0x57, 0xff, 0x0c, 0xe7, 0xf5, 0x39, 0x80, 0xcf, 0x02, 0x6e, 0x84, 0xdc, 0xe4, 0xe1, 0x42, 0xb1,
- 0xcf, 0xdb, 0x11, 0x0b, 0xf8, 0xb1, 0x08, 0x96, 0x90, 0x3b, 0x56, 0xb8, 0x77, 0x47, 0x9f, 0xf0,
- 0x95, 0x24, 0x14, 0x96, 0x6d, 0x97, 0x5d, 0x28, 0xcb, 0x89, 0x3e, 0xcb, 0x57, 0x2e, 0xbb, 0xc8,
- 0x5a, 0xb6, 0x95, 0x24, 0x24, 0x5f, 0xc2, 0x84, 0xe9, 0x9a, 0x41, 0x17, 0xfb, 0x0a, 0x68, 0xb8,
- 0x10, 0x1b, 0x6e, 0x09, 0x4d, 0xa6, 0xab, 0x45, 0x53, 0x89, 0x5e, 0xe6, 0x61, 0xcc, 0x36, 0xb9,
- 0xa9, 0xfd, 0x6b, 0x05, 0x26, 0xfb, 0x70, 0x62, 0x9e, 0x5d, 0x16, 0x0e, 0x8d, 0xa9, 0x7d, 0x16,
- 0x66, 0xc7, 0xee, 0xa2, 0x80, 0xec, 0x40, 0xd5, 0xbe, 0x72, 0xbc, 0x8e, 0xd1, 0x31, 0x43, 0x3f,
- 0x15, 0x59, 0x77, 0x63, 0xcb, 0x1d, 0xa1, 0xde, 0x35, 0x43, 0x3f, 0x63, 0x5f, 0xb6, 0x53, 0x62,
- 0x11, 0x63, 0x62, 0x81, 0x93, 0x11, 0xf5, 0xc7, 0x58, 0xd3, 0xeb, 0x0d, 0x0e, 0xaa, 0xc4, 0x12,
- 0x29, 0x79, 0x0b, 0x33, 0x82, 0x22, 0xe4, 0x66, 0xc0, 0x7b, 0xbe, 0xd1, 0x36, 0x1d, 0x37, 0x15,
- 0x6b, 0x8f, 0xd2, 0x4c, 0xc7, 0x12, 0xf3, 0xca, 0x74, 0xdc, 0x5e, 0x40, 0x33, 0x94, 0x53, 0x2c,
- 0xa3, 0x16, 0xc4, 0x3f, 0x87, 0x39, 0x24, 0x76, 0x3a, 0x9e, 0xe9, 0x1a, 0x36, 0xed, 0x04, 0xa6,
- 0x4d, 0x53, 0xb1, 0xf8, 0x51, 0x86, 0x1a, 0x51, 0x3b, 0x12, 0x94, 0x61, 0x9e, 0x66, 0x83, 0x5a,
- 0xf2, 0x0b, 0x98, 0xc7, 0x8d, 0x11, 0x38, 0x6d, 0x6e, 0xb0, 0xb6, 0x71, 0xe1, 0x78, 0x36, 0xbb,
- 0x48, 0x05, 0x6d, 0x86, 0x7c, 0x47, 0xc0, 0x9a, 0xed, 0xb7, 0x08, 0x1a, 0x20, 0xef, 0xd7, 0x92,
- 0x16, 0x88, 0xd1, 0x18, 0x2e, 0x0b, 0x43, 0x23, 0xde, 0x0b, 0x32, 0xac, 0x3f, 0x4d, 0xd3, 0xee,
- 0xb3, 0x30, 0x6c, 0xb6, 0xc5, 0xa6, 0xd8, 0x3e, 0x35, 0x3d, 0x8f, 0xba, 0x19, 0xea, 0x2a, 0x53,
- 0x08, 0xb5, 0x45, 0xa2, 0x79, 0xc6, 0xa1, 0x84, 0xc9, 0x3c, 0x17, 0x87, 0xcc, 0xb3, 0xc4, 0x5c,
- 0x3b, 0xcf, 0x89, 0x5a, 0x10, 0x37, 0x65, 0x92, 0xe0, 0xce, 0x85, 0xec, 0xa9, 0xdc, 0x0d, 0x3f,
- 0x4c, 0x13, 0xb6, 0x02, 0xd3, 0x0b, 0xbb, 0x4e, 0x28, 0xd2, 0x62, 0xc3, 0xe3, 0x34, 0x68, 0xd3,
- 0x80, 0x7a, 0x16, 0x7d, 0x6b, 0x06, 0x9e, 0xe3, 0x75, 0x54, 0xd6, 0x68, 0x39, 0x17, 0xd8, 0xd3,
- 0x5f, 0xca, 0xc9, 0x35, 0x2d, 0xee, 0x9c, 0xa3, 0xdf, 0xa4, 0xb3, 0x30, 0x38, 0x0b, 0x5b, 0x31,
- 0x6c, 0x58, 0x7f, 0xc5, 0x98, 0xb3, 0x08, 0xe9, 0x61, 0x41, 0x78, 0xf0, 0x03, 0x66, 0xd1, 0x30,
- 0x14, 0xbb, 0x80, 0x06, 0x01, 0x93, 0x59, 0xb2, 0x84, 0x2e, 0x3e, 0x4e, 0xbb, 0x38, 0x8a, 0x71,
- 0x75, 0x01, 0xcb, 0x38, 0x98, 0x65, 0xc3, 0xf4, 0x84, 0xc2, 0x62, 0xb2, 0x86, 0x6d, 0x23, 0xbc,
- 0xf2, 0xac, 0x64, 0x14, 0x65, 0x74, 0xf1, 0xd9, 0xe0, 0x5a, 0x7e, 0x43, 0xaf, 0x8e, 0xaf, 0x3c,
- 0xeb, 0xba, 0x81, 0x48, 0x50, 0x84, 0x10, 0x6e, 0x5e, 0xc3, 0x2c, 0x26, 0x58, 0xde, 0x33, 0x7c,
- 0xe6, 0xc9, 0x74, 0x84, 0x2e, 0x2a, 0xe8, 0xe2, 0x61, 0x26, 0xdd, 0xf2, 0xde, 0x11, 0xf3, 0x30,
- 0x0b, 0x0d, 0x2c, 0x69, 0x56, 0x47, 0x5c, 0xb8, 0x8b, 0xe1, 0x4d, 0xfb, 0xd6, 0xa0, 0x17, 0xc8,
- 0x0d, 0x54, 0x45, 0xf6, 0x1f, 0x64, 0x62, 0x3c, 0x85, 0x1d, 0xd6, 0x7f, 0x31, 0x1d, 0xc3, 0x31,
- 0xe4, 0xad, 0x1c, 0x44, 0x40, 0xbb, 0x8c, 0x53, 0xc3, 0xa6, 0x6d, 0x6a, 0xc9, 0x54, 0x3e, 0x89,
- 0x6e, 0xb4, 0xb4, 0x1b, 0x1d, 0x41, 0x3b, 0x88, 0xc9, 0xf0, 0x13, 0x36, 0xa0, 0x24, 0xa1, 0x1c,
- 0x06, 0x2e, 0x42, 0x87, 0x76, 0x0d, 0x9b, 0xba, 0x8e, 0x47, 0xe5, 0x70, 0x04, 0x7f, 0x0d, 0xf9,
- 0xd7, 0x07, 0xd7, 0x61, 0xb7, 0x7e, 0xa0, 0xb6, 0xd4, 0x4e, 0x62, 0x92, 0x71, 0xb7, 0xa0, 0x96,
- 0x63, 0x97, 0x76, 0xb3, 0x10, 0x72, 0x0e, 0x2b, 0x18, 0x5b, 0xa7, 0x57, 0xa1, 0x63, 0x99, 0xae,
- 0x41, 0xbf, 0xeb, 0x39, 0x7e, 0x97, 0x7a, 0x3c, 0x15, 0x63, 0x53, 0xe8, 0xf8, 0x47, 0x99, 0x18,
- 0x53, 0xf8, 0x7a, 0x04, 0x1f, 0x0c, 0x35, 0x31, 0x98, 0x6b, 0x61, 0xe4, 0x17, 0x30, 0x9d, 0x8e,
- 0x38, 0xd3, 0x3a, 0x43, 0x57, 0x64, 0x70, 0x37, 0xca, 0x31, 0x6e, 0x59, 0x67, 0x1e, 0xbb, 0x70,
- 0xa9, 0xdd, 0xa1, 0x82, 0x27, 0xe3, 0x69, 0x92, 0xa5, 0x50, 0x82, 0x9c, 0xc1, 0xb2, 0x2c, 0x04,
- 0xda, 0x6d, 0x23, 0xa0, 0xa6, 0x75, 0x6a, 0xd0, 0x4b, 0x8b, 0x52, 0x9b, 0xda, 0xe8, 0x64, 0x1a,
- 0x9d, 0xac, 0x65, 0xeb, 0x82, 0x36, 0x6e, 0x72, 0xee, 0x98, 0xae, 0x2e, 0x2c, 0xea, 0xca, 0x20,
- 0xe3, 0x68, 0x9e, 0x49, 0x64, 0x3f, 0x22, 0x3e, 0xed, 0x56, 0xa1, 0x92, 0xa9, 0x8a, 0xc8, 0x3d,
- 0x00, 0x2c, 0x68, 0x44, 0xa8, 0x53, 0x3c, 0xed, 0x26, 0xf4, 0x09, 0x21, 0x11, 0xc1, 0x4b, 0xb5,
- 0x3d, 0xa8, 0x66, 0x2b, 0x22, 0x32, 0x0f, 0x05, 0x59, 0x3c, 0xc9, 0xb3, 0xb1, 0xa0, 0xe7, 0xb1,
- 0x40, 0xb2, 0xfb, 0x98, 0x46, 0xfa, 0x99, 0x4e, 0x61, 0x6a, 0xa0, 0xbc, 0xb9, 0x9e, 0xec, 0x2b,
- 0xa8, 0x84, 0x34, 0x70, 0x4c, 0xd7, 0xf0, 0x7a, 0xdd, 0x13, 0x1a, 0xa8, 0xd3, 0x74, 0x36, 0x9e,
- 0x92, 0x63, 0xd4, 0x1e, 0xa2, 0x52, 0x2f, 0x87, 0xa9, 0x96, 0xf6, 0xdb, 0x31, 0xa8, 0x64, 0xca,
- 0xa1, 0xeb, 0xdd, 0xcc, 0x42, 0x1e, 0xf7, 0xbb, 0x3c, 0xad, 0x0b, 0xfa, 0xb8, 0xd8, 0xbb, 0xfd,
- 0x43, 0x19, 0xed, 0x1b, 0x0a, 0x79, 0x00, 0x25, 0xd3, 0xee, 0x3a, 0x9e, 0xd2, 0x8f, 0xa3, 0x1e,
- 0x50, 0x24, 0x01, 0x03, 0xbd, 0x1f, 0x7b, 0xef, 0xde, 0x93, 0x7d, 0x28, 0x61, 0x62, 0x0b, 0xa8,
- 0x19, 0x32, 0x0f, 0x8f, 0xbf, 0x6a, 0x36, 0xde, 0x92, 0x81, 0xad, 0x66, 0x53, 0xb1, 0x8e, 0x26,
- 0x3a, 0xb4, 0xe3, 0xbf, 0xb5, 0x3f, 0x18, 0x81, 0x99, 0x61, 0x20, 0xf2, 0x11, 0x3c, 0x68, 0x1e,
- 0xbe, 0x36, 0xb6, 0xb6, 0x5b, 0x8d, 0x37, 0x5b, 0xad, 0x46, 0xf3, 0xd0, 0x78, 0xb5, 0xd5, 0xd8,
- 0x37, 0xf4, 0xfa, 0xd6, 0x71, 0xf3, 0xd0, 0x38, 0x6c, 0x1e, 0xd6, 0x6b, 0x77, 0xc8, 0x27, 0xa0,
- 0xdd, 0x00, 0xd2, 0xb7, 0x0e, 0x77, 0x1b, 0x87, 0xbb, 0xb5, 0x1c, 0x79, 0x06, 0x1b, 0x37, 0xe0,
- 0x8e, 0xb6, 0x8e, 0x8f, 0xdf, 0x36, 0xf5, 0x1d, 0x63, 0xeb, 0x75, 0x6b, 0xaf, 0x7e, 0xd8, 0x6a,
- 0x6c, 0x23, 0xa6, 0x36, 0x42, 0x34, 0xb8, 0x7f, 0x83, 0xdd, 0x7e, 0xf3, 0xb8, 0x36, 0x4a, 0x1e,
- 0xc2, 0xbd, 0x61, 0x18, 0x94, 0xed, 0x6f, 0xe9, 0x07, 0xb5, 0xb1, 0xeb, 0xc6, 0x72, 0xfc, 0xb6,
- 0xd1, 0xda, 0xde, 0x33, 0x9a, 0x6f, 0xea, 0x7a, 0x6d, 0x5c, 0xfb, 0x25, 0x90, 0xc1, 0x02, 0x9d,
- 0x10, 0x18, 0xe3, 0x57, 0x7e, 0x14, 0xf8, 0xf8, 0x77, 0x3a, 0x5a, 0x46, 0x6e, 0x88, 0xf0, 0xfe,
- 0xb0, 0xd0, 0x74, 0xa8, 0x66, 0x2b, 0xea, 0x0f, 0x8e, 0xbb, 0x1a, 0x8c, 0xfa, 0x67, 0x1c, 0x99,
- 0xcb, 0xba, 0xf8, 0x53, 0xfb, 0xb7, 0x1c, 0xd4, 0xfa, 0x2b, 0x6e, 0xb2, 0x0c, 0x13, 0x48, 0x8b,
- 0x3d, 0x97, 0xd1, 0x87, 0x0f, 0x34, 0xad, 0xbe, 0xde, 0x5f, 0xe7, 0xb3, 0x98, 0xf6, 0x39, 0x0b,
- 0xf9, 0x9e, 0xe7, 0x08, 0xf1, 0x84, 0x14, 0xf7, 0x3c, 0x47, 0x8e, 0xb5, 0x43, 0xbb, 0x58, 0xce,
- 0xc7, 0xbd, 0x9c, 0x50, 0x92, 0x86, 0x2d, 0xbc, 0x60, 0xc1, 0xee, 0xc8, 0x12, 0xb5, 0xa0, 0xe7,
- 0x45, 0x53, 0x2a, 0xd0, 0xc8, 0x63, 0x18, 0xba, 0x05, 0x3d, 0x2f, 0x9a, 0x87, 0x8c, 0xcc, 0x41,
- 0xde, 0x62, 0xec, 0xcc, 0xa1, 0x58, 0x7a, 0xe5, 0x75, 0xd5, 0x8a, 0xc6, 0x3c, 0x96, 0x8c, 0xf9,
- 0x11, 0x4c, 0xc8, 0xa2, 0xc6, 0xb4, 0xae, 0x1f, 0x8e, 0xf6, 0x63, 0x98, 0xd8, 0xa3, 0x66, 0xc0,
- 0x4f, 0xa8, 0xc9, 0xc9, 0x1a, 0x4c, 0x9f, 0x46, 0x0d, 0x59, 0x92, 0xf1, 0x5e, 0x40, 0x95, 0x05,
- 0x89, 0x55, 0xc7, 0x91, 0x46, 0xfb, 0xcb, 0x1c, 0x8c, 0x36, 0xbd, 0xde, 0x07, 0xaf, 0xd0, 0xc0,
- 0xce, 0x1e, 0x7d, 0xff, 0x9d, 0x2d, 0x46, 0xea, 0xc8, 0x5c, 0x50, 0xd0, 0xc5, 0x9f, 0xe4, 0x53,
- 0x98, 0x64, 0x5d, 0xcb, 0x32, 0xa8, 0x67, 0x05, 0x57, 0xbe, 0x58, 0x5b, 0x5c, 0xce, 0xa2, 0x5e,
- 0x15, 0xe2, 0x7a, 0x2c, 0xd5, 0xfe, 0x2a, 0x07, 0x04, 0x4f, 0x9a, 0x8e, 0x38, 0xac, 0x76, 0x9c,
- 0x90, 0x9b, 0x9e, 0x45, 0x3f, 0xb8, 0xf7, 0x2f, 0x60, 0xd1, 0x95, 0x14, 0x86, 0x7a, 0x0e, 0x45,
- 0x1e, 0xe3, 0x77, 0x69, 0xc0, 0xd4, 0x3a, 0xce, 0x29, 0x80, 0xcc, 0xd5, 0xa8, 0xfe, 0x39, 0x0d,
- 0x18, 0x79, 0x02, 0x33, 0xc3, 0x4c, 0xd5, 0x68, 0xc8, 0xa0, 0x95, 0xf6, 0x0d, 0x14, 0xc4, 0x76,
- 0x38, 0x08, 0x3b, 0xb7, 0xb0, 0x0f, 0x7e, 0x93, 0x83, 0x09, 0x71, 0xaa, 0xe3, 0x56, 0xf8, 0x60,
- 0xbe, 0x54, 0x50, 0x8e, 0x65, 0x82, 0x32, 0x1b, 0xe5, 0xe3, 0xfd, 0x51, 0x3e, 0xd8, 0x8f, 0x17,
- 0x50, 0x7e, 0xed, 0xbb, 0x8e, 0x77, 0xf6, 0xae, 0x9e, 0x28, 0xd3, 0x91, 0xc4, 0xf4, 0xef, 0x26,
- 0x00, 0x76, 0xe8, 0xb9, 0x63, 0xd1, 0x86, 0xd7, 0xc6, 0xfd, 0x70, 0x4e, 0x3d, 0x9b, 0x05, 0x2a,
- 0xf7, 0xa8, 0x16, 0x99, 0x81, 0xf1, 0x2e, 0xb3, 0xa9, 0xab, 0x4e, 0x50, 0xd9, 0x20, 0x3f, 0x80,
- 0xda, 0xa9, 0x19, 0xd8, 0x17, 0x66, 0x40, 0x8d, 0x73, 0x1a, 0x88, 0xc2, 0x5f, 0x25, 0xa0, 0xc9,
- 0x48, 0xfe, 0x46, 0x8a, 0x05, 0xb4, 0xed, 0x04, 0xdd, 0x0c, 0x74, 0x4c, 0x42, 0x23, 0x79, 0x04,
- 0x5d, 0x86, 0x09, 0x1b, 0x7b, 0x24, 0xfa, 0x5f, 0x93, 0x89, 0x44, 0x0a, 0x1a, 0xb6, 0x58, 0x71,
- 0xa5, 0xcc, 0x46, 0xfc, 0x14, 0xe2, 0x88, 0xd4, 0xa5, 0xc3, 0x9d, 0xac, 0xc3, 0x8c, 0x1f, 0xd0,
- 0x73, 0x87, 0xf5, 0x42, 0xf7, 0xca, 0xb0, 0x98, 0xe7, 0x51, 0x8b, 0x53, 0x59, 0xce, 0x14, 0xf5,
- 0xe9, 0x44, 0xb7, 0x1d, 0xa9, 0x44, 0x0f, 0x44, 0xa1, 0x2d, 0xe6, 0x3b, 0xc4, 0x3a, 0xbe, 0xa0,
- 0x17, 0x7d, 0xe6, 0x1d, 0x89, 0x36, 0xb9, 0x0f, 0xc0, 0xa9, 0x75, 0xea, 0x31, 0x97, 0x75, 0xae,
- 0xa2, 0x63, 0x36, 0x91, 0x90, 0x15, 0xf9, 0xa4, 0xe4, 0xd8, 0xf2, 0x69, 0x57, 0x25, 0x1c, 0xc0,
- 0x35, 0xc7, 0x87, 0x57, 0x72, 0x17, 0x40, 0x21, 0xa8, 0x7a, 0xe6, 0x2b, 0xe8, 0x45, 0xd4, 0xd7,
- 0x3d, 0x9b, 0x3c, 0x82, 0xaa, 0xe9, 0xba, 0xcc, 0x4a, 0x18, 0x64, 0x66, 0x2c, 0xa3, 0x34, 0xe2,
- 0x58, 0x81, 0x72, 0x8c, 0xa2, 0x5e, 0x94, 0x26, 0x41, 0x61, 0x04, 0xcf, 0x63, 0xa8, 0x25, 0x51,
- 0xa4, 0x98, 0x00, 0x51, 0xd5, 0x38, 0x96, 0x24, 0xd7, 0x23, 0xa8, 0xa6, 0x90, 0x54, 0x3d, 0x1e,
- 0x15, 0xf4, 0x72, 0x8c, 0x13, 0x7c, 0x1a, 0x54, 0x54, 0x72, 0x55, 0x64, 0x15, 0x04, 0x95, 0x64,
- 0x8a, 0x95, 0x4c, 0xf7, 0xa1, 0x14, 0x61, 0xa8, 0x7a, 0x82, 0x28, 0xc8, 0xf7, 0x22, 0x92, 0xe3,
- 0x6b, 0xc8, 0x07, 0xa6, 0xd7, 0xa1, 0xe1, 0xc2, 0xe4, 0xca, 0xe8, 0xe3, 0xd2, 0xc6, 0xe3, 0xe4,
- 0x3d, 0x44, 0x1c, 0x83, 0xea, 0x4f, 0x9d, 0x86, 0xac, 0x17, 0x58, 0x54, 0x47, 0xbc, 0xae, 0xec,
- 0x96, 0xfe, 0x68, 0x0c, 0x66, 0x86, 0x01, 0xc8, 0x62, 0xf4, 0xfa, 0xcc, 0x0e, 0x17, 0x72, 0x2b,
- 0xa3, 0x8f, 0x0b, 0xea, 0x1d, 0x99, 0xdd, 0xbf, 0x62, 0x23, 0x03, 0x2b, 0xb6, 0x0d, 0xe3, 0x3e,
- 0x63, 0x6e, 0xb8, 0x30, 0x8a, 0x9d, 0xfa, 0xfc, 0x7d, 0x3b, 0xb5, 0x7a, 0xc4, 0x98, 0xab, 0x4b,
- 0xdb, 0xa5, 0xff, 0x18, 0x81, 0x31, 0xd1, 0x26, 0xff, 0x2f, 0x75, 0x78, 0x57, 0x37, 0x9e, 0x7d,
- 0x10, 0x19, 0xfe, 0x23, 0x0e, 0x4c, 0x75, 0xe8, 0x1f, 0x43, 0x21, 0x3c, 0x35, 0x03, 0xc7, 0xeb,
- 0x60, 0xb7, 0xab, 0x1b, 0x2f, 0x3e, 0x8c, 0xee, 0x58, 0x1a, 0x23, 0x63, 0xc4, 0x24, 0xf6, 0xb2,
- 0x5c, 0x40, 0x99, 0x5b, 0x65, 0x43, 0xa4, 0x06, 0xaa, 0x5e, 0xc8, 0x14, 0x74, 0xf1, 0xa7, 0xb6,
- 0x05, 0xc5, 0xa8, 0x3b, 0x04, 0x20, 0x2f, 0x8a, 0x99, 0xc6, 0x4e, 0xed, 0x0e, 0x29, 0x43, 0x71,
- 0x6b, 0x7f, 0xbf, 0xb9, 0x2d, 0x5a, 0x39, 0x52, 0x05, 0xd8, 0xad, 0x1f, 0x1c, 0x35, 0xf5, 0x96,
- 0x68, 0x8f, 0x90, 0x12, 0x14, 0x5e, 0xed, 0x37, 0xdf, 0x8a, 0xc6, 0xa8, 0x76, 0x0a, 0xa5, 0x54,
- 0x17, 0xc8, 0x1c, 0x90, 0x9d, 0xfa, 0x8e, 0xa8, 0xb4, 0xea, 0x3b, 0xc6, 0x51, 0x5d, 0x37, 0x1a,
- 0x87, 0xad, 0x57, 0xb5, 0x3b, 0xe4, 0x01, 0x2c, 0x1f, 0xef, 0x6d, 0xe9, 0xf5, 0x1d, 0xe3, 0xe5,
- 0xcf, 0x8c, 0xad, 0xfd, 0x7d, 0x94, 0xe3, 0x1f, 0xad, 0xfa, 0xf6, 0x5e, 0x2d, 0x47, 0x56, 0xe0,
- 0xee, 0x10, 0xc0, 0xf1, 0xd6, 0x41, 0x5d, 0x22, 0x46, 0xb4, 0xdf, 0x1b, 0x05, 0xd8, 0x76, 0xcd,
- 0x30, 0x74, 0xda, 0x0e, 0x0d, 0x30, 0xe5, 0x1a, 0xdc, 0x8f, 0x13, 0xe0, 0x38, 0x6b, 0xf9, 0x8e,
- 0x4d, 0xa6, 0x61, 0x9c, 0x19, 0xe7, 0x71, 0x22, 0x1e, 0x63, 0x6f, 0x1c, 0x4c, 0xcf, 0x8e, 0xc4,
- 0xaa, 0x09, 0x71, 0x22, 0xac, 0x83, 0x58, 0x39, 0x25, 0x63, 0x8e, 0xc0, 0xce, 0x43, 0x81, 0x19,
- 0xfe, 0x89, 0xc3, 0x43, 0x95, 0x97, 0xf3, 0xec, 0x48, 0xb4, 0x30, 0xe5, 0x2a, 0x85, 0xaa, 0x30,
- 0x1c, 0xa9, 0x58, 0x84, 0x22, 0xe5, 0xa7, 0xb2, 0x2a, 0x92, 0x5b, 0xbd, 0x40, 0xf9, 0x69, 0x54,
- 0x14, 0xd9, 0x21, 0x37, 0xba, 0xa6, 0x85, 0x5b, 0xbc, 0xac, 0xe7, 0xed, 0x90, 0x1f, 0x98, 0x96,
- 0x50, 0x84, 0x81, 0x85, 0x8a, 0x09, 0xa9, 0x08, 0x03, 0x4b, 0x28, 0x44, 0x90, 0xfb, 0xf2, 0x1d,
- 0xb4, 0xda, 0xcb, 0x05, 0xc7, 0x3f, 0xc2, 0x37, 0xe1, 0xb3, 0x20, 0xac, 0x0d, 0xc7, 0x57, 0x9b,
- 0x77, 0xdc, 0x0e, 0x79, 0xc3, 0x17, 0x62, 0x41, 0xe5, 0xf8, 0x2a, 0x8f, 0x8d, 0x87, 0x81, 0xd5,
- 0xf0, 0x05, 0x91, 0x10, 0x8b, 0xdd, 0xad, 0xf6, 0xb1, 0xf0, 0x28, 0x12, 0x9c, 0x50, 0x09, 0x22,
- 0x54, 0xc9, 0x0d, 0x2c, 0x7a, 0x89, 0xaa, 0x15, 0x28, 0xfb, 0x67, 0xdc, 0xe0, 0x66, 0x47, 0x8e,
- 0x67, 0x52, 0x6e, 0x25, 0xff, 0x8c, 0xb7, 0x4c, 0x5c, 0x61, 0xed, 0x37, 0xa3, 0x30, 0x21, 0x2a,
- 0x7b, 0xe6, 0x6d, 0x77, 0x31, 0x65, 0x98, 0xb6, 0x6d, 0xb0, 0x1e, 0xa7, 0x81, 0xb0, 0xc2, 0xc5,
- 0x28, 0xea, 0x25, 0xd3, 0xb6, 0x9b, 0x42, 0xd6, 0x32, 0x3b, 0x22, 0x4d, 0x05, 0xb4, 0xcb, 0xce,
- 0x69, 0x0a, 0x36, 0x22, 0xcb, 0x0d, 0x29, 0x8f, 0x91, 0x2b, 0x50, 0xe6, 0x81, 0xe9, 0x1b, 0x9c,
- 0x19, 0xa7, 0x2c, 0x94, 0xe1, 0x5b, 0xd4, 0x41, 0xc8, 0x5a, 0x6c, 0x8f, 0x85, 0x9c, 0xfc, 0x08,
- 0x48, 0x40, 0xbb, 0x66, 0x70, 0xa6, 0xb8, 0xe4, 0x7a, 0x8c, 0x21, 0xae, 0x26, 0x35, 0xc8, 0x26,
- 0x57, 0x26, 0x41, 0x3b, 0x9e, 0x17, 0xa3, 0xc7, 0xd3, 0xe8, 0x86, 0x50, 0x48, 0xb4, 0x1a, 0x8b,
- 0x84, 0x8a, 0x4e, 0xe6, 0xe3, 0xb1, 0x20, 0x2a, 0x3b, 0x96, 0x04, 0x56, 0x48, 0x8f, 0x25, 0x46,
- 0xae, 0xc2, 0x34, 0x0f, 0x4c, 0x2f, 0x74, 0x4d, 0x9e, 0x06, 0x17, 0x11, 0x3c, 0x15, 0xab, 0x86,
- 0xe3, 0x93, 0x89, 0x9a, 0xe8, 0xc3, 0x47, 0x73, 0xa5, 0xfd, 0x75, 0x0e, 0xf2, 0x72, 0x1d, 0xc8,
- 0x23, 0x18, 0xb5, 0xba, 0xd1, 0x2b, 0x63, 0x92, 0xbc, 0x85, 0x8e, 0x56, 0x49, 0x17, 0xea, 0xe1,
- 0x3b, 0x23, 0x15, 0xed, 0xa3, 0x99, 0x68, 0x4f, 0xb6, 0xd7, 0x58, 0xdf, 0xf6, 0x92, 0x5b, 0x66,
- 0x3c, 0xbb, 0x65, 0x86, 0xef, 0x8c, 0x64, 0xdf, 0x15, 0x52, 0xfb, 0x4e, 0xfb, 0xfb, 0x3c, 0x8c,
- 0xbd, 0x72, 0xd9, 0x05, 0x1e, 0x84, 0x96, 0x45, 0xc3, 0xd0, 0x48, 0x17, 0x33, 0x93, 0x7a, 0x59,
- 0x4a, 0x1b, 0xc3, 0x8a, 0xab, 0xc9, 0xc1, 0x07, 0x88, 0x92, 0x14, 0xcb, 0x07, 0x88, 0xbe, 0x27,
- 0x84, 0x7c, 0xfc, 0x84, 0xf0, 0x19, 0x4c, 0x85, 0x57, 0xdd, 0x2e, 0xe5, 0x81, 0x63, 0x19, 0x11,
- 0x84, 0x20, 0x64, 0x32, 0x56, 0xbc, 0x92, 0xd8, 0x65, 0xc0, 0x23, 0x4d, 0xee, 0x01, 0x59, 0xc4,
- 0x14, 0x85, 0x00, 0x37, 0xf5, 0x22, 0x14, 0xa3, 0x83, 0x19, 0xb7, 0xe8, 0xa4, 0x5e, 0x50, 0x87,
- 0x32, 0xf9, 0x04, 0x26, 0x3d, 0xca, 0x2f, 0x18, 0x46, 0x9c, 0x1c, 0xd1, 0x38, 0x22, 0x2a, 0x4a,
- 0xdc, 0x88, 0x9f, 0xe8, 0x52, 0xf5, 0x5f, 0x1e, 0x21, 0xa9, 0xfa, 0xef, 0x0b, 0x00, 0x2b, 0xce,
- 0x74, 0xea, 0x95, 0xf1, 0x74, 0xbc, 0xae, 0x49, 0x12, 0xd4, 0x53, 0x30, 0xf2, 0x29, 0xe4, 0x4d,
- 0x5c, 0x71, 0xf5, 0x2a, 0x78, 0xb2, 0x2f, 0x10, 0x74, 0xa5, 0x26, 0x4b, 0x50, 0xf4, 0x03, 0x87,
- 0x05, 0x0e, 0xbf, 0xc2, 0xf0, 0x9a, 0xd4, 0xe3, 0x76, 0xea, 0x69, 0xa9, 0x9c, 0x79, 0x5a, 0x4a,
- 0x55, 0xb2, 0x95, 0x4c, 0x25, 0xbb, 0x08, 0xc5, 0x4e, 0xc0, 0x7a, 0xbe, 0x18, 0x87, 0xca, 0x25,
- 0xd8, 0x96, 0x93, 0x91, 0xfe, 0x0c, 0x27, 0x10, 0x93, 0x88, 0xa8, 0x08, 0xf1, 0x91, 0x94, 0x36,
- 0x6c, 0xf2, 0x31, 0x54, 0x03, 0xea, 0xbb, 0xe2, 0x29, 0x93, 0xe2, 0xc2, 0x60, 0x49, 0x58, 0xd4,
- 0x2b, 0xb1, 0x14, 0x83, 0x65, 0x0f, 0x26, 0x45, 0x8c, 0x89, 0xe4, 0xa0, 0x66, 0x6a, 0x61, 0x0a,
- 0x4f, 0xf3, 0x95, 0xcc, 0x07, 0x9b, 0x55, 0x11, 0x7a, 0x2d, 0xb6, 0x2b, 0x21, 0x75, 0x8f, 0x07,
- 0x57, 0x7a, 0xc5, 0x4f, 0xcb, 0x48, 0x3d, 0xa9, 0x86, 0x38, 0x33, 0x4c, 0x1a, 0x2e, 0x4c, 0x23,
- 0xd1, 0x83, 0x2c, 0x91, 0x82, 0xb7, 0xd8, 0x16, 0x0d, 0x25, 0x4f, 0x54, 0x2e, 0xa1, 0x68, 0xe9,
- 0x6b, 0x20, 0x83, 0xbe, 0xc4, 0x29, 0x7b, 0x46, 0xaf, 0xd4, 0xa1, 0x24, 0xfe, 0x14, 0xa7, 0xf1,
- 0xb9, 0xe9, 0xf6, 0x68, 0xf4, 0x6c, 0x80, 0x8d, 0xaf, 0x46, 0x9e, 0xe7, 0x96, 0x7e, 0x0a, 0x53,
- 0x03, 0x4e, 0xde, 0x45, 0x50, 0x4c, 0x11, 0x68, 0x2d, 0x28, 0x67, 0x2a, 0xe1, 0x65, 0x98, 0x90,
- 0xe5, 0x7c, 0xb4, 0x97, 0xca, 0x7a, 0x51, 0x0a, 0x1a, 0xb6, 0x78, 0xea, 0x53, 0xca, 0xd0, 0xa7,
- 0x96, 0xd3, 0x76, 0x2c, 0xf5, 0x98, 0x50, 0x95, 0xe2, 0x63, 0x25, 0xd5, 0xfe, 0xb3, 0x04, 0xd5,
- 0xec, 0x57, 0xb3, 0xeb, 0x9f, 0x37, 0x16, 0xa1, 0x18, 0x5c, 0x1a, 0x27, 0x57, 0x9c, 0x86, 0xc8,
- 0x96, 0xd7, 0x0b, 0xc1, 0xe5, 0x4b, 0xd1, 0x14, 0x41, 0x1e, 0x5c, 0x1a, 0x3e, 0x3e, 0xb0, 0x84,
- 0x6a, 0x33, 0x4e, 0x04, 0x97, 0xf2, 0x09, 0x26, 0xc4, 0x54, 0x7a, 0x69, 0xf4, 0x2c, 0x53, 0x1c,
- 0x45, 0x0a, 0x34, 0x86, 0xa0, 0x6a, 0x70, 0xf9, 0x5a, 0x88, 0xb3, 0xc8, 0x6e, 0x06, 0x39, 0x1e,
- 0x21, 0x0f, 0x06, 0x91, 0x27, 0x19, 0x64, 0x3e, 0x42, 0xbe, 0x1c, 0x44, 0xca, 0x57, 0xb9, 0x11,
- 0xb2, 0x10, 0x21, 0xf1, 0x65, 0x6c, 0x84, 0x5c, 0x86, 0x89, 0xe0, 0xd2, 0x68, 0x07, 0x66, 0x97,
- 0x86, 0xf8, 0x10, 0x92, 0xd7, 0x8b, 0xc1, 0xe5, 0x2b, 0x6c, 0x8b, 0x13, 0x2b, 0x56, 0x1a, 0xcf,
- 0x9e, 0xaa, 0x7c, 0x02, 0x91, 0xfe, 0xd9, 0x53, 0xf2, 0x29, 0x3a, 0x8a, 0x10, 0x9b, 0xc6, 0xfa,
- 0xc6, 0x97, 0xf8, 0x60, 0x92, 0xd7, 0x2b, 0x31, 0x6a, 0x73, 0x7d, 0xe3, 0x4b, 0xf2, 0x03, 0x98,
- 0x4a, 0x80, 0xeb, 0x1b, 0xcf, 0x8d, 0x8d, 0xcd, 0xcd, 0x85, 0x99, 0xa8, 0x4b, 0x12, 0xb9, 0xbe,
- 0xf1, 0x7c, 0x63, 0x73, 0x33, 0x0b, 0xdd, 0xd8, 0x7c, 0x66, 0x6c, 0xae, 0xaf, 0x2f, 0xcc, 0x66,
- 0xa1, 0x1b, 0x9b, 0xcf, 0x36, 0xd7, 0xd7, 0xc9, 0x0f, 0x81, 0x24, 0xd0, 0xcd, 0xf5, 0x0d, 0x63,
- 0xfd, 0xc9, 0xc6, 0x17, 0x0b, 0x73, 0x32, 0xed, 0x45, 0xd8, 0xcd, 0xf5, 0x0d, 0x21, 0x26, 0x9f,
- 0xc3, 0x74, 0xaa, 0x0b, 0x4f, 0x36, 0x9e, 0x1a, 0xeb, 0x9b, 0xeb, 0xcf, 0x17, 0xe6, 0x11, 0x5d,
- 0x8b, 0x3b, 0xf1, 0x64, 0xe3, 0xa9, 0x90, 0xf7, 0xc1, 0x37, 0xd7, 0x5f, 0x18, 0x1b, 0x4f, 0x9e,
- 0x7e, 0xb9, 0xb0, 0xd0, 0x07, 0xdf, 0x5c, 0x7f, 0x21, 0xe4, 0x59, 0xf8, 0xc6, 0x93, 0xa7, 0xcf,
- 0x8d, 0xa7, 0x4f, 0x5e, 0x6c, 0x2e, 0x2c, 0x66, 0xe1, 0x42, 0x21, 0xe4, 0x59, 0xf8, 0xd3, 0x27,
- 0x2f, 0x9e, 0x19, 0x2f, 0x36, 0xd6, 0x9f, 0x2d, 0x2c, 0x65, 0xe1, 0x42, 0x21, 0xe4, 0x64, 0x0d,
- 0x66, 0x12, 0xf8, 0x8b, 0x8d, 0xf5, 0x2f, 0x8d, 0xf5, 0x67, 0x5f, 0x3c, 0xff, 0x62, 0x61, 0x19,
- 0xf1, 0x53, 0x11, 0x5e, 0x68, 0x50, 0x21, 0x8e, 0xfb, 0xe0, 0xd2, 0xb0, 0x02, 0x4b, 0x46, 0x41,
- 0x88, 0xe9, 0x2b, 0xaf, 0x97, 0x82, 0xcb, 0xed, 0xc0, 0xc2, 0x08, 0xc0, 0xd2, 0x8e, 0x47, 0xd1,
- 0x5d, 0x94, 0xd1, 0xcd, 0x93, 0xe8, 0xe6, 0x49, 0x74, 0x4f, 0xc8, 0xe8, 0xe6, 0xe9, 0xe8, 0xe6,
- 0xfd, 0xd1, 0x0d, 0x72, 0x85, 0xf8, 0x40, 0x74, 0xf3, 0xfe, 0xe8, 0x2e, 0x45, 0xc8, 0x83, 0x41,
- 0x64, 0x36, 0xba, 0xcb, 0x11, 0xf2, 0xe5, 0x20, 0x32, 0x1b, 0xdd, 0x95, 0x08, 0xd9, 0x1f, 0xdd,
- 0x3c, 0x8e, 0xee, 0xbb, 0x32, 0xba, 0x79, 0x2a, 0xba, 0x79, 0x3a, 0xba, 0xef, 0xc9, 0xe8, 0xe6,
- 0x99, 0xe8, 0xe6, 0xfd, 0xd1, 0x7d, 0x5f, 0x46, 0x37, 0xef, 0x8f, 0x6e, 0x3e, 0x10, 0xdd, 0x0f,
- 0xa2, 0x2e, 0xf5, 0x47, 0x37, 0x1f, 0x88, 0xee, 0x95, 0x2c, 0x34, 0x89, 0x6e, 0x3e, 0x18, 0xdd,
- 0x0f, 0x65, 0x74, 0xf3, 0xc1, 0xe8, 0xe6, 0x43, 0xa2, 0x5b, 0x93, 0x01, 0xc5, 0x87, 0x44, 0x37,
- 0x1f, 0x12, 0xdd, 0x1f, 0xf5, 0xc1, 0x53, 0xd1, 0xcd, 0x87, 0x44, 0xf7, 0xa3, 0x2c, 0x3c, 0x1d,
- 0xdd, 0x7c, 0x48, 0x74, 0x7f, 0x9c, 0x85, 0xa7, 0xa3, 0x9b, 0x0f, 0x8b, 0xee, 0x4f, 0x64, 0x74,
- 0xf3, 0x81, 0xe8, 0xbe, 0x07, 0x70, 0xe2, 0xf8, 0x51, 0x68, 0x4f, 0xca, 0xf0, 0x3c, 0x71, 0x7c,
- 0x15, 0xd8, 0x77, 0x61, 0x82, 0x3b, 0x5d, 0x1a, 0x72, 0xb3, 0xeb, 0xe3, 0x71, 0x5b, 0xd0, 0x13,
- 0x81, 0xf6, 0x2f, 0x05, 0xfc, 0x92, 0xf1, 0x3e, 0xf9, 0xff, 0x9a, 0x37, 0x5f, 0x1f, 0x43, 0xd5,
- 0x67, 0xa1, 0xc3, 0x9d, 0x73, 0x2a, 0xbf, 0xae, 0xab, 0xfc, 0x5f, 0x89, 0xa4, 0xf8, 0xb5, 0x5c,
- 0xc0, 0x3c, 0xda, 0x31, 0x53, 0x30, 0x79, 0x02, 0x54, 0x22, 0xa9, 0x84, 0x3d, 0x87, 0x05, 0x9b,
- 0xba, 0x4e, 0xd7, 0x11, 0x55, 0x71, 0xd7, 0x09, 0x43, 0xc3, 0xa6, 0x9c, 0x5a, 0xf1, 0x8b, 0xcb,
- 0xbc, 0x3e, 0x17, 0xeb, 0x0f, 0x9c, 0x30, 0xdc, 0x89, 0xb4, 0x7d, 0xd3, 0x90, 0xef, 0x9f, 0x86,
- 0x65, 0x10, 0x0d, 0xa3, 0xe7, 0x39, 0x71, 0xfa, 0x2f, 0x9e, 0x38, 0xfe, 0x6b, 0xd1, 0x26, 0x1b,
- 0x30, 0xdb, 0xa6, 0x96, 0x61, 0xb1, 0x20, 0xc0, 0x97, 0x46, 0x46, 0x78, 0xd5, 0x3d, 0x61, 0x6e,
- 0x94, 0x09, 0xa6, 0xdb, 0xd4, 0xda, 0x8e, 0x74, 0xc7, 0x52, 0x45, 0x9e, 0xc1, 0xbc, 0xb4, 0xb1,
- 0xe9, 0x05, 0x0b, 0xec, 0x30, 0xb1, 0x56, 0x29, 0x62, 0x16, 0xad, 0x94, 0x36, 0x36, 0x27, 0x3f,
- 0x81, 0xe5, 0xac, 0x5d, 0xcf, 0x53, 0x96, 0xe6, 0x89, 0x4b, 0x55, 0xe6, 0x58, 0x4c, 0xdb, 0xbe,
- 0x4e, 0x03, 0xc8, 0x47, 0x50, 0xc9, 0xd8, 0xab, 0x0c, 0x52, 0x4e, 0x5b, 0x88, 0x47, 0x8c, 0xec,
- 0x80, 0xe4, 0xb8, 0x65, 0x0a, 0x99, 0x4a, 0x0f, 0x47, 0x4e, 0xc0, 0x27, 0x30, 0x79, 0xd9, 0xa1,
- 0x5d, 0xe3, 0x8c, 0x5e, 0x45, 0x33, 0x28, 0x93, 0x48, 0x45, 0x88, 0xbf, 0xa1, 0x57, 0xc9, 0x2c,
- 0x22, 0xce, 0x65, 0x61, 0x94, 0x45, 0x8b, 0x42, 0xb0, 0xcf, 0x42, 0x24, 0x11, 0x55, 0x80, 0xcb,
- 0xcc, 0x6e, 0x28, 0x59, 0x54, 0x34, 0x56, 0x82, 0xcb, 0x23, 0x94, 0x22, 0x8b, 0x3a, 0xa8, 0x14,
- 0xce, 0x63, 0x9e, 0xe1, 0xd8, 0x2e, 0xc5, 0xd0, 0xc4, 0x83, 0x4a, 0x42, 0x0f, 0x99, 0xd7, 0xb0,
- 0x5d, 0x2c, 0x47, 0x83, 0x4b, 0xbc, 0x54, 0xa1, 0x4e, 0xe4, 0x7c, 0x70, 0xd9, 0xec, 0x5a, 0x0e,
- 0x79, 0x0e, 0x8b, 0x4a, 0x11, 0xe5, 0xbd, 0x24, 0xc3, 0xab, 0xc3, 0x79, 0x56, 0x42, 0x55, 0x02,
- 0x8c, 0x72, 0x7d, 0xa6, 0x90, 0x99, 0xbe, 0xa9, 0x90, 0x99, 0xe9, 0x2f, 0x64, 0xd2, 0x87, 0xc4,
- 0xec, 0x4d, 0x87, 0xc4, 0x5c, 0xff, 0x21, 0xf1, 0x10, 0xca, 0x27, 0x34, 0x30, 0x02, 0x2a, 0x4a,
- 0x40, 0x6a, 0xab, 0x83, 0xb6, 0x74, 0x42, 0x03, 0x5d, 0x89, 0xc8, 0x03, 0x28, 0xb9, 0x96, 0xdd,
- 0x89, 0xe6, 0x5f, 0x9e, 0xad, 0x20, 0x44, 0x6a, 0xf2, 0x45, 0xe7, 0x6c, 0x27, 0xd2, 0x2f, 0xaa,
- 0xce, 0xd9, 0xce, 0xb0, 0x8d, 0xbe, 0xd4, 0xbf, 0xd1, 0xff, 0x29, 0x87, 0x15, 0xe8, 0xfb, 0x16,
- 0x7b, 0xef, 0xf8, 0x38, 0xf3, 0x8e, 0x82, 0x2f, 0x3d, 0xc3, 0x63, 0x03, 0x33, 0x9c, 0x9a, 0xa7,
- 0xf1, 0xfe, 0x79, 0x4a, 0xcf, 0x70, 0x3e, 0x3b, 0xc3, 0x37, 0x8f, 0xef, 0x6f, 0x72, 0x50, 0xcd,
- 0xde, 0xe2, 0x4a, 0x3f, 0x1f, 0xe6, 0x32, 0x5f, 0x90, 0xbe, 0x7f, 0x25, 0xfb, 0xfd, 0xab, 0x84,
- 0x9b, 0xd3, 0xf0, 0xd7, 0x50, 0xc9, 0x5c, 0xfb, 0xba, 0x7e, 0x61, 0xe6, 0x20, 0x1f, 0x72, 0x93,
- 0xf7, 0x42, 0xf5, 0xee, 0x53, 0xb5, 0xb4, 0x6f, 0x61, 0x7a, 0xc8, 0xf5, 0xaf, 0x0f, 0xce, 0xe6,
- 0x09, 0xfd, 0x68, 0x86, 0xfe, 0x2f, 0x46, 0xf0, 0xf3, 0x50, 0xff, 0x35, 0xb6, 0xef, 0xf1, 0xd9,
- 0xdb, 0x65, 0xa1, 0x91, 0x71, 0x31, 0xe1, 0xb2, 0xf0, 0x18, 0x05, 0x52, 0x7d, 0x12, 0xa9, 0xc7,
- 0x22, 0xf5, 0x89, 0x52, 0x3f, 0x86, 0x9a, 0xcb, 0x7c, 0x4b, 0x9e, 0x0b, 0x0a, 0x24, 0xdf, 0xd9,
- 0x57, 0x85, 0x5c, 0x9c, 0x07, 0x0a, 0xb9, 0x0e, 0xb3, 0x0a, 0xa9, 0x32, 0x42, 0x04, 0xcf, 0xcb,
- 0x4f, 0x0b, 0x12, 0x2e, 0xf3, 0x81, 0x32, 0x11, 0xdb, 0x8f, 0xb5, 0x9d, 0x08, 0x58, 0x90, 0xaf,
- 0xc3, 0x84, 0x48, 0x01, 0x1e, 0x42, 0x59, 0x64, 0xa6, 0x18, 0x51, 0x44, 0x44, 0x09, 0x65, 0x12,
- 0xa2, 0x51, 0x58, 0xbe, 0xe1, 0xd2, 0xdb, 0xad, 0x2d, 0xc6, 0x9f, 0xe4, 0x60, 0xe9, 0xfa, 0x1b,
- 0x70, 0xb7, 0xe5, 0x86, 0x7c, 0x01, 0x73, 0x8e, 0x77, 0x4e, 0x83, 0x90, 0x1a, 0xe2, 0x69, 0x5c,
- 0xce, 0x63, 0x60, 0xf2, 0xe8, 0x93, 0xdc, 0xb4, 0xd2, 0xbe, 0x74, 0xe4, 0x9d, 0x16, 0xdd, 0xe4,
- 0x54, 0xfb, 0xad, 0xec, 0xdb, 0x35, 0x17, 0xe8, 0x6e, 0xad, 0x6f, 0x33, 0x30, 0x9e, 0x54, 0x11,
- 0x05, 0x5d, 0x36, 0x04, 0xbb, 0x47, 0x2f, 0x0c, 0xfa, 0x5d, 0xf4, 0xd6, 0x2a, 0xef, 0xd1, 0x8b,
- 0xfa, 0x77, 0xb6, 0x76, 0x0a, 0xf7, 0x6f, 0xbe, 0x7e, 0x77, 0x6b, 0x6b, 0xf3, 0xa7, 0x39, 0x19,
- 0x03, 0xd7, 0x5c, 0xc8, 0xfb, 0xdf, 0x5d, 0x9c, 0x5f, 0xe7, 0x40, 0x7b, 0xf7, 0xe5, 0xbe, 0xff,
- 0xd9, 0x45, 0xd2, 0xbe, 0xc3, 0xb5, 0xb8, 0xe1, 0x12, 0xe0, 0x07, 0xfb, 0x7f, 0x90, 0xbd, 0xd0,
- 0x22, 0x5f, 0x6f, 0xa6, 0xef, 0xa8, 0x9c, 0xc1, 0xc3, 0x77, 0xde, 0xd8, 0xbb, 0xb5, 0x08, 0x68,
- 0x01, 0xd1, 0xd5, 0xa1, 0x9c, 0x62, 0x17, 0xc5, 0x51, 0x74, 0x78, 0x1b, 0x16, 0xeb, 0x79, 0x1c,
- 0xbd, 0x88, 0xe2, 0x48, 0x81, 0xb7, 0x85, 0xf0, 0xda, 0xfc, 0xfe, 0xc7, 0x39, 0x58, 0xb8, 0xee,
- 0x4a, 0xe0, 0x07, 0x77, 0x7d, 0x0b, 0x2a, 0x49, 0x67, 0x86, 0x5d, 0x02, 0x1e, 0x1c, 0xc0, 0xde,
- 0x1d, 0xbd, 0x14, 0x24, 0xd2, 0x97, 0x05, 0xfc, 0xf0, 0xc4, 0x43, 0xed, 0x10, 0xee, 0xde, 0x74,
- 0xe1, 0xf2, 0x43, 0xfb, 0xa6, 0xfd, 0x0a, 0x56, 0xde, 0x75, 0x39, 0xf1, 0xd6, 0x96, 0xea, 0x57,
- 0xb0, 0x78, 0xed, 0x0d, 0xc5, 0xef, 0x73, 0xb6, 0xa5, 0xca, 0xb3, 0xd1, 0xbe, 0xf2, 0x4c, 0xfb,
- 0xf3, 0x1c, 0x3c, 0x7e, 0xdf, 0xeb, 0x8a, 0xb7, 0xb6, 0x03, 0x3f, 0x07, 0x92, 0xbe, 0x42, 0xa9,
- 0xfa, 0x26, 0xb7, 0xe3, 0x54, 0x4a, 0xa3, 0xfa, 0xd8, 0x85, 0x8f, 0xde, 0xe3, 0x62, 0xe3, 0xad,
- 0x4d, 0xbf, 0x8b, 0xd9, 0xe8, 0x1d, 0x97, 0x1b, 0x6f, 0xcd, 0xdb, 0x1f, 0xe6, 0xe0, 0x93, 0xf7,
- 0xbb, 0xe6, 0x78, 0x6b, 0xd3, 0xbf, 0x04, 0xc5, 0xbe, 0x6b, 0x2c, 0x71, 0x5b, 0xfb, 0xf7, 0x1c,
- 0x94, 0x76, 0x03, 0xd6, 0xf3, 0x0f, 0x28, 0xbe, 0xd0, 0x7d, 0x08, 0x65, 0x27, 0xba, 0x93, 0x14,
- 0x39, 0xae, 0xe0, 0x8f, 0x3b, 0xa4, 0xac, 0x61, 0x93, 0x06, 0x54, 0x13, 0x08, 0x7e, 0xb0, 0x90,
- 0x1f, 0x92, 0x93, 0xfb, 0xb6, 0x29, 0xc2, 0xd5, 0xf8, 0x86, 0x13, 0x7e, 0x31, 0xae, 0x38, 0xe9,
- 0x26, 0xb9, 0x0f, 0x25, 0xf1, 0x1c, 0x17, 0x15, 0xf8, 0xa3, 0xe8, 0x4c, 0x14, 0xf8, 0x47, 0xb2,
- 0xc0, 0x4f, 0x7f, 0x39, 0x18, 0x43, 0x65, 0xdc, 0xd6, 0xfe, 0x2f, 0x54, 0x32, 0xdc, 0xa4, 0x00,
- 0xa3, 0x47, 0xcd, 0xc3, 0xda, 0x1d, 0x52, 0x83, 0x72, 0xfd, 0xa8, 0x79, 0x68, 0xac, 0xef, 0x1a,
- 0x47, 0x5b, 0xad, 0xbd, 0x5a, 0x8e, 0x4c, 0x41, 0x45, 0x4a, 0x9e, 0x28, 0xd1, 0x88, 0xf6, 0xfb,
- 0x23, 0x30, 0x8e, 0xfd, 0xcc, 0x7c, 0x51, 0x90, 0xc3, 0x8d, 0xbf, 0x28, 0xfc, 0x18, 0x0a, 0x16,
- 0xeb, 0x76, 0x4d, 0xf5, 0x2b, 0x87, 0x81, 0x31, 0xa6, 0x47, 0x1a, 0x6e, 0x4b, 0xa4, 0x1e, 0x99,
- 0x90, 0x55, 0x28, 0x74, 0xa5, 0x4a, 0x5d, 0x03, 0x98, 0x19, 0x36, 0x43, 0x7a, 0x04, 0x4a, 0x7d,
- 0x50, 0x19, 0xbb, 0xf1, 0x83, 0x8a, 0xf6, 0x0d, 0x4c, 0x0f, 0x71, 0x4c, 0x26, 0xa1, 0xb4, 0xb5,
- 0xb3, 0x63, 0x1c, 0xd4, 0x0f, 0x5e, 0xd6, 0xf5, 0xe3, 0xda, 0x1d, 0x42, 0xa0, 0xaa, 0xd7, 0x0f,
- 0x9a, 0x6f, 0xea, 0xb1, 0x2c, 0x27, 0x40, 0xc7, 0xf5, 0x56, 0x2c, 0x18, 0xd1, 0xbe, 0x05, 0x78,
- 0x63, 0xba, 0x3d, 0x7a, 0x64, 0x06, 0x66, 0x97, 0xdc, 0x87, 0x51, 0xe6, 0xf5, 0xd4, 0xa7, 0xbd,
- 0x72, 0xe6, 0x06, 0xb5, 0x50, 0x90, 0xb5, 0xf4, 0xa7, 0x81, 0xea, 0xc6, 0xe2, 0x6a, 0xfc, 0xb3,
- 0xa5, 0x55, 0x64, 0x11, 0x2b, 0xb1, 0x8a, 0x4b, 0x2d, 0x71, 0xda, 0xdf, 0x8e, 0x40, 0xf5, 0x88,
- 0x79, 0xfa, 0xe5, 0x11, 0xbb, 0xa0, 0xc1, 0x8e, 0xc9, 0xcd, 0x5b, 0x8b, 0x6b, 0x3d, 0x7b, 0xe0,
- 0x8e, 0x61, 0x8f, 0xd6, 0x53, 0xbf, 0xc3, 0x49, 0x7b, 0x5d, 0xd5, 0xc3, 0xd0, 0x39, 0xa0, 0x66,
- 0xd8, 0x0b, 0x70, 0x6b, 0x0f, 0xbf, 0x47, 0xaa, 0xde, 0x74, 0xfb, 0xc2, 0xca, 0xe8, 0x52, 0xd3,
- 0x33, 0xec, 0x93, 0x2e, 0x56, 0x71, 0x39, 0xbd, 0x1a, 0x48, 0xb6, 0x03, 0x6a, 0x7a, 0x3b, 0x27,
- 0x5d, 0x91, 0xb6, 0xaf, 0xe5, 0x24, 0x33, 0x50, 0x1b, 0x72, 0xcf, 0xf4, 0x2e, 0x2c, 0x64, 0xa5,
- 0xc6, 0x4e, 0x7d, 0xbf, 0x71, 0xd0, 0x68, 0xd5, 0xf5, 0x5a, 0x8e, 0x2c, 0xc2, 0x6c, 0x9f, 0x76,
- 0x6b, 0x7b, 0xbb, 0x7e, 0x2c, 0x16, 0xa9, 0x00, 0xe3, 0xf5, 0xae, 0xcf, 0xaf, 0x36, 0xfe, 0x6c,
- 0x06, 0x0a, 0x4d, 0x39, 0x40, 0xb2, 0x03, 0xb0, 0xe3, 0x84, 0xe6, 0x89, 0x4b, 0x9b, 0x2e, 0x27,
- 0xd5, 0x78, 0xe0, 0x88, 0x5c, 0xea, 0x6b, 0x6b, 0x73, 0xbf, 0xfe, 0xc7, 0x7f, 0xfe, 0xed, 0x48,
- 0x4d, 0x2b, 0xad, 0x9d, 0xaf, 0xaf, 0x29, 0xbb, 0xaf, 0x72, 0x9f, 0x91, 0x57, 0x50, 0xd2, 0x29,
- 0xf5, 0xde, 0x97, 0x66, 0x1e, 0x69, 0xa6, 0xb4, 0xb2, 0xa0, 0x89, 0x0c, 0x05, 0x4f, 0x1d, 0x4a,
- 0xaa, 0x9a, 0xa2, 0x4d, 0xaf, 0x47, 0x32, 0xb1, 0x33, 0xc0, 0xb2, 0x80, 0x2c, 0x44, 0xab, 0x08,
- 0x96, 0xba, 0x74, 0xee, 0xf5, 0x04, 0xcd, 0x1e, 0x54, 0xe2, 0x53, 0xf7, 0x3d, 0x88, 0x16, 0x91,
- 0x68, 0x5a, 0xab, 0xa6, 0x46, 0xa5, 0x98, 0xb6, 0x61, 0x62, 0x87, 0xba, 0xf4, 0x83, 0xbb, 0x13,
- 0x1b, 0x09, 0x92, 0x06, 0x80, 0xba, 0xdc, 0xd7, 0xec, 0x71, 0x52, 0xcb, 0xfc, 0xa4, 0xec, 0x20,
- 0xec, 0xdc, 0xdc, 0x9f, 0xc4, 0x52, 0x50, 0x35, 0xa1, 0x1c, 0xdf, 0xec, 0x13, 0x64, 0x24, 0x73,
- 0x8d, 0x1f, 0xc5, 0x03, 0x74, 0xcb, 0x48, 0x37, 0xab, 0xd5, 0x90, 0x2e, 0x65, 0x2d, 0x08, 0x7f,
- 0x07, 0x26, 0xd3, 0x77, 0xf4, 0x04, 0x67, 0x72, 0x3f, 0x33, 0xad, 0x19, 0xa0, 0xbd, 0x8f, 0xb4,
- 0x0b, 0xda, 0xb4, 0xa0, 0xed, 0xe3, 0x10, 0xcc, 0x5f, 0x43, 0xe1, 0x95, 0xcb, 0x2e, 0xb6, 0x6c,
- 0x9b, 0x54, 0x32, 0xdf, 0x28, 0x6f, 0x8e, 0x2a, 0x65, 0x23, 0xa3, 0x0a, 0x44, 0x4b, 0xc7, 0x3b,
- 0x0a, 0xef, 0x22, 0xc9, 0x4c, 0x5a, 0x62, 0x26, 0x78, 0x8e, 0xa1, 0x1a, 0xdf, 0x7e, 0xdd, 0x3e,
- 0xa5, 0xd6, 0xd9, 0x40, 0x80, 0x26, 0xd3, 0x18, 0x03, 0xb5, 0x7b, 0x48, 0x38, 0xaf, 0x11, 0x41,
- 0x98, 0xb5, 0x17, 0xa4, 0x07, 0x50, 0x92, 0x31, 0x77, 0xc4, 0xbc, 0x46, 0x3b, 0xb5, 0x10, 0xf1,
- 0x81, 0x32, 0xd0, 0xc5, 0x25, 0x64, 0x9c, 0xd1, 0x26, 0x93, 0x80, 0x45, 0x63, 0xb5, 0xb0, 0x2a,
- 0xf2, 0xde, 0x9f, 0x2f, 0xb3, 0xb0, 0x69, 0x6b, 0x41, 0xa8, 0x43, 0x65, 0x97, 0xf2, 0xd4, 0x1d,
- 0xca, 0xfe, 0x31, 0x4f, 0x0f, 0xb9, 0xb3, 0xa5, 0xdd, 0x45, 0xca, 0x39, 0x6d, 0x4a, 0x50, 0x66,
- 0xec, 0x05, 0xe7, 0x4f, 0x21, 0xaf, 0xd3, 0x13, 0xc6, 0xde, 0xbd, 0xc3, 0x67, 0x91, 0x67, 0x52,
- 0x03, 0xb9, 0xc3, 0x85, 0x8d, 0x20, 0x78, 0x0d, 0x53, 0xdb, 0xcc, 0x75, 0xa9, 0x95, 0x7e, 0x73,
- 0xf7, 0x2e, 0xae, 0x15, 0xe4, 0x5a, 0xd2, 0x66, 0x05, 0xd7, 0x80, 0xb9, 0xa0, 0xfd, 0x19, 0xd4,
- 0x76, 0x29, 0xcf, 0xbe, 0xfc, 0xcf, 0x6e, 0xd6, 0xb9, 0xbe, 0x9f, 0xf2, 0x29, 0x94, 0xf6, 0x00,
- 0xb9, 0x17, 0xb5, 0x19, 0x35, 0xde, 0x8c, 0x56, 0x50, 0x9f, 0xc1, 0xcc, 0x2e, 0xe5, 0x83, 0xaf,
- 0x1b, 0x87, 0x6d, 0xbc, 0xe4, 0xb7, 0xa9, 0x03, 0x78, 0xed, 0x23, 0x74, 0x74, 0x4f, 0x5b, 0x50,
- 0x8e, 0x06, 0x10, 0xc2, 0x59, 0x00, 0xf3, 0xdb, 0x01, 0x35, 0x39, 0x6d, 0x05, 0x66, 0xbb, 0xed,
- 0x58, 0xc7, 0xd6, 0x29, 0xb5, 0x7b, 0xae, 0x38, 0xd7, 0x1f, 0xac, 0x66, 0x7e, 0x1d, 0x3c, 0x00,
- 0x18, 0x98, 0xb5, 0x4f, 0xd0, 0xe1, 0x8a, 0xb6, 0x8c, 0xb3, 0x36, 0x9c, 0x55, 0xf9, 0x94, 0x3b,
- 0xe5, 0xb6, 0x7d, 0x5e, 0xc3, 0x2a, 0x7c, 0xb6, 0x61, 0x3a, 0xd3, 0xa3, 0xff, 0xdf, 0xa3, 0x3d,
- 0x1a, 0x92, 0xe5, 0xa1, 0xfe, 0xa4, 0x72, 0xc0, 0x97, 0x86, 0xbe, 0xee, 0x6a, 0xf3, 0x03, 0xe3,
- 0x93, 0x06, 0xca, 0x4f, 0xa6, 0x17, 0xff, 0x6d, 0x3f, 0x43, 0xd8, 0x84, 0x9f, 0xff, 0x03, 0x35,
- 0xb9, 0x9d, 0x53, 0x85, 0xf7, 0xf5, 0xdb, 0x2d, 0x01, 0x69, 0x77, 0x9e, 0xe4, 0xc8, 0xb7, 0x30,
- 0x7b, 0x44, 0x83, 0x36, 0x0b, 0xba, 0x58, 0x8f, 0x35, 0x7d, 0x1a, 0xf4, 0x33, 0xa0, 0x62, 0xa0,
- 0x67, 0x8f, 0xb0, 0x67, 0xf7, 0xb5, 0x45, 0xd1, 0xb3, 0xa1, 0x14, 0xf2, 0xf0, 0x29, 0xc9, 0xc3,
- 0x48, 0x16, 0xaa, 0xef, 0x22, 0xcd, 0xe4, 0xa8, 0x94, 0xa1, 0xa0, 0x7a, 0x0b, 0xa5, 0x5d, 0xca,
- 0xeb, 0x97, 0x1c, 0xab, 0x34, 0x92, 0x8c, 0x28, 0xa9, 0xfd, 0x96, 0xe6, 0x53, 0xc5, 0x9c, 0x4e,
- 0x79, 0x2f, 0xf0, 0x50, 0x19, 0x66, 0x89, 0x53, 0x34, 0x82, 0xf8, 0x5b, 0xfc, 0xb9, 0x93, 0x7c,
- 0x21, 0x80, 0xef, 0x65, 0x8f, 0x29, 0x27, 0x73, 0xab, 0xea, 0x97, 0xee, 0x59, 0xd5, 0xcd, 0xe9,
- 0x61, 0x80, 0x46, 0xd0, 0xfb, 0xb0, 0xb8, 0x4b, 0xf9, 0xfe, 0xf0, 0xbb, 0xfa, 0xd9, 0x3c, 0xb1,
- 0x9c, 0xfd, 0xad, 0x5a, 0xe6, 0x17, 0x04, 0xda, 0x63, 0xf4, 0xa4, 0x69, 0xf7, 0xd4, 0x10, 0x86,
- 0x33, 0x0a, 0x8f, 0xa7, 0x30, 0x3b, 0x54, 0xff, 0x21, 0xde, 0x32, 0xcb, 0x3b, 0x94, 0x4d, 0x78,
- 0x6a, 0x61, 0x9a, 0x4f, 0xca, 0xd4, 0x3e, 0x0f, 0xf3, 0xd7, 0x54, 0xb2, 0x03, 0x89, 0x3e, 0x51,
- 0x7f, 0x95, 0xfb, 0xec, 0xe5, 0xb7, 0xb0, 0xcc, 0x82, 0x0e, 0xda, 0x5a, 0x2c, 0xb0, 0x57, 0xe5,
- 0xff, 0x32, 0x10, 0x71, 0xbd, 0xac, 0xbc, 0xc1, 0xb6, 0xa8, 0x21, 0x9b, 0xfb, 0xad, 0x9f, 0xaf,
- 0x75, 0x1c, 0x7e, 0xda, 0x3b, 0x59, 0xb5, 0x58, 0x77, 0x2d, 0x32, 0x59, 0x93, 0x26, 0x9f, 0xab,
- 0xff, 0x98, 0xe0, 0x7c, 0x73, 0xad, 0xc3, 0xa2, 0xff, 0x24, 0xe1, 0x24, 0x8f, 0xd2, 0x2f, 0xfe,
- 0x2b, 0x00, 0x00, 0xff, 0xff, 0x29, 0x39, 0x10, 0xaa, 0x44, 0x41, 0x00, 0x00,
+ 0x9d, 0xdd, 0x21, 0x45, 0x8e, 0xa8, 0x91, 0xe6, 0xdf, 0x7f, 0x77, 0x28, 0x12, 0x22, 0xe1, 0x21,
+ 0x09, 0xba, 0x09, 0x49, 0xde, 0xdd, 0x98, 0x68, 0x37, 0xbb, 0x0b, 0x60, 0x2f, 0x1b, 0x5d, 0x3d,
+ 0xdd, 0x05, 0x3e, 0x7c, 0xdc, 0xf0, 0xda, 0x17, 0xdf, 0x36, 0xec, 0x08, 0xfb, 0xe2, 0x70, 0xf8,
+ 0xea, 0x8b, 0x6f, 0x8e, 0xf0, 0xd1, 0xe1, 0xf0, 0xc5, 0x37, 0x9f, 0x7d, 0x73, 0xf8, 0xe2, 0x93,
+ 0x2f, 0x3e, 0x39, 0x1c, 0x8e, 0xca, 0xaa, 0x7e, 0x01, 0x20, 0x25, 0x8d, 0xe9, 0xf0, 0x45, 0xc1,
+ 0xca, 0xfc, 0xf2, 0xcb, 0x7a, 0x64, 0x65, 0x65, 0x77, 0x17, 0x04, 0xcb, 0xe7, 0xcc, 0xe5, 0xa7,
+ 0xa6, 0xe1, 0x07, 0x8c, 0xb3, 0x70, 0x8d, 0xf9, 0xd4, 0x63, 0x2e, 0x5f, 0xc5, 0x26, 0x29, 0xa8,
+ 0xe6, 0xd2, 0xdd, 0x0e, 0x63, 0x1d, 0x97, 0xae, 0x99, 0xbe, 0xb3, 0x66, 0x7a, 0x1e, 0xe3, 0x26,
+ 0x77, 0x98, 0x17, 0x4a, 0xd8, 0xd2, 0x4a, 0x96, 0x83, 0x53, 0xeb, 0x54, 0xfc, 0xdd, 0x76, 0x5c,
+ 0xaa, 0x10, 0xf7, 0xb3, 0x08, 0x7a, 0xc9, 0x0d, 0x8b, 0x79, 0x6d, 0xa7, 0x73, 0xad, 0x9e, 0x7a,
+ 0x61, 0xe2, 0x41, 0xfb, 0xc7, 0x31, 0x80, 0x86, 0x67, 0x3b, 0x16, 0xfa, 0x25, 0xeb, 0x50, 0x60,
+ 0x2e, 0x37, 0x1c, 0xcf, 0x5e, 0xc8, 0xad, 0xe4, 0x1e, 0x97, 0x36, 0xe6, 0x56, 0xa3, 0x8e, 0x37,
+ 0x5d, 0x9e, 0x00, 0xf7, 0xee, 0xe8, 0x79, 0x86, 0x02, 0xf2, 0x14, 0x8a, 0x8e, 0xc7, 0xdb, 0x68,
+ 0x33, 0x82, 0x36, 0xf3, 0xb1, 0x4d, 0xc3, 0xe3, 0xed, 0x8c, 0x51, 0xc1, 0x91, 0x12, 0xb2, 0x05,
+ 0x15, 0xb4, 0x62, 0x3e, 0x0d, 0xd0, 0x74, 0x14, 0x4d, 0x97, 0x33, 0xa6, 0x4d, 0x9f, 0x06, 0x19,
+ 0xf3, 0x92, 0x93, 0x48, 0xc9, 0x4f, 0xa0, 0xcc, 0xbc, 0x9e, 0x61, 0x3b, 0xa1, 0x85, 0x0c, 0x63,
+ 0xc8, 0xb0, 0x94, 0x74, 0xd8, 0xeb, 0xed, 0x38, 0xa1, 0x95, 0x21, 0x00, 0x16, 0x0b, 0x71, 0xac,
+ 0x5e, 0x0f, 0x4d, 0xc7, 0xfb, 0xc7, 0xea, 0xf5, 0xfa, 0xc6, 0x8a, 0x02, 0x31, 0x56, 0xd6, 0xb5,
+ 0x1c, 0xb4, 0xc9, 0xf7, 0x8d, 0xb5, 0xd9, 0xb5, 0x9c, 0xec, 0x58, 0x99, 0x94, 0x90, 0xa7, 0x50,
+ 0xf0, 0xcf, 0xe4, 0xa4, 0x16, 0xd0, 0x68, 0x31, 0x36, 0x3a, 0x32, 0xad, 0x33, 0xda, 0x37, 0xaf,
+ 0xfe, 0x19, 0xce, 0xeb, 0x73, 0x00, 0x9f, 0x05, 0xdc, 0x08, 0xb9, 0xc9, 0xc3, 0x85, 0x62, 0x9f,
+ 0xb7, 0x23, 0x16, 0xf0, 0x63, 0x11, 0x2c, 0x21, 0x77, 0xac, 0x70, 0xef, 0x8e, 0x3e, 0xe1, 0x2b,
+ 0x49, 0x28, 0x2c, 0xdb, 0x2e, 0xbb, 0x50, 0x96, 0x13, 0x7d, 0x96, 0xaf, 0x5c, 0x76, 0x91, 0xb5,
+ 0x6c, 0x2b, 0x49, 0x48, 0xbe, 0x84, 0x09, 0xd3, 0x35, 0x83, 0x2e, 0xf6, 0x15, 0xd0, 0x70, 0x21,
+ 0x36, 0xdc, 0x12, 0x9a, 0x4c, 0x57, 0x8b, 0xa6, 0x12, 0xbd, 0xcc, 0xc3, 0x98, 0x6d, 0x72, 0x53,
+ 0xfb, 0xb7, 0x0a, 0x4c, 0xf6, 0xe1, 0xc4, 0x3c, 0xbb, 0x2c, 0x1c, 0x1a, 0x53, 0xfb, 0x2c, 0xcc,
+ 0x8e, 0xdd, 0x45, 0x01, 0xd9, 0x81, 0xaa, 0x7d, 0xe5, 0x78, 0x1d, 0xa3, 0x63, 0x86, 0x7e, 0x2a,
+ 0xb2, 0xee, 0xc6, 0x96, 0x3b, 0x42, 0xbd, 0x6b, 0x86, 0x7e, 0xc6, 0xbe, 0x6c, 0xa7, 0xc4, 0x22,
+ 0xc6, 0xc4, 0x02, 0x27, 0x23, 0xea, 0x8f, 0xb1, 0xa6, 0xd7, 0x1b, 0x1c, 0x54, 0x89, 0x25, 0x52,
+ 0xf2, 0x16, 0x66, 0x04, 0x45, 0xc8, 0xcd, 0x80, 0xf7, 0x7c, 0xa3, 0x6d, 0x3a, 0x6e, 0x2a, 0xd6,
+ 0x1e, 0xa5, 0x99, 0x8e, 0x25, 0xe6, 0x95, 0xe9, 0xb8, 0xbd, 0x80, 0x66, 0x28, 0xa7, 0x58, 0x46,
+ 0x2d, 0x88, 0x7f, 0x0e, 0x73, 0x48, 0xec, 0x74, 0x3c, 0xd3, 0x35, 0x6c, 0xda, 0x09, 0x4c, 0x9b,
+ 0xa6, 0x62, 0xf1, 0xa3, 0x0c, 0x35, 0xa2, 0x76, 0x24, 0x28, 0xc3, 0x3c, 0xcd, 0x06, 0xb5, 0xe4,
+ 0x17, 0x30, 0x8f, 0x1b, 0x23, 0x70, 0xda, 0xdc, 0x60, 0x6d, 0xe3, 0xc2, 0xf1, 0x6c, 0x76, 0x91,
+ 0x0a, 0xda, 0x0c, 0xf9, 0x8e, 0x80, 0x35, 0xdb, 0x6f, 0x11, 0x34, 0x40, 0xde, 0xaf, 0x25, 0x2d,
+ 0x10, 0xa3, 0x31, 0x5c, 0x16, 0x86, 0x46, 0xbc, 0x17, 0x64, 0x58, 0x7f, 0x9a, 0xa6, 0xdd, 0x67,
+ 0x61, 0xd8, 0x6c, 0x8b, 0x4d, 0xb1, 0x7d, 0x6a, 0x7a, 0x1e, 0x75, 0x33, 0xd4, 0x55, 0xa6, 0x10,
+ 0x6a, 0x8b, 0x44, 0xf3, 0x8c, 0x43, 0x09, 0x93, 0x79, 0x2e, 0x0e, 0x99, 0x67, 0x89, 0xb9, 0x76,
+ 0x9e, 0x13, 0xb5, 0x20, 0x6e, 0xca, 0x24, 0xc1, 0x9d, 0x0b, 0xd9, 0x53, 0xb9, 0x1b, 0x7e, 0x98,
+ 0x26, 0x6c, 0x05, 0xa6, 0x17, 0x76, 0x9d, 0x50, 0xa4, 0xc5, 0x86, 0xc7, 0x69, 0xd0, 0xa6, 0x01,
+ 0xf5, 0x2c, 0xfa, 0xd6, 0x0c, 0x3c, 0xc7, 0xeb, 0xa8, 0xac, 0xd1, 0x72, 0x2e, 0xb0, 0xa7, 0xbf,
+ 0x2b, 0x27, 0xd7, 0xb4, 0xb8, 0x73, 0x8e, 0x7e, 0x93, 0xce, 0xc2, 0xe0, 0x2c, 0x6c, 0xc5, 0xb0,
+ 0x61, 0xfd, 0x15, 0x63, 0xce, 0x22, 0xa4, 0x87, 0x05, 0xe1, 0xc1, 0x0f, 0x98, 0x45, 0xc3, 0x50,
+ 0xec, 0x02, 0x1a, 0x04, 0x4c, 0x66, 0xc9, 0x12, 0xba, 0xf8, 0x38, 0xed, 0xe2, 0x28, 0xc6, 0xd5,
+ 0x05, 0x2c, 0xe3, 0x60, 0x96, 0x0d, 0xd3, 0x13, 0x0a, 0x8b, 0xc9, 0x1a, 0xb6, 0x8d, 0xf0, 0xca,
+ 0xb3, 0x92, 0x51, 0x94, 0xd1, 0xc5, 0x67, 0x83, 0x6b, 0xf9, 0x0d, 0xbd, 0x3a, 0xbe, 0xf2, 0xac,
+ 0xeb, 0x06, 0x22, 0x41, 0x11, 0x42, 0xb8, 0x79, 0x0d, 0xb3, 0x98, 0x60, 0x79, 0xcf, 0xf0, 0x99,
+ 0x27, 0xd3, 0x11, 0xba, 0xa8, 0xa0, 0x8b, 0x87, 0x99, 0x74, 0xcb, 0x7b, 0x47, 0xcc, 0xc3, 0x2c,
+ 0x34, 0xb0, 0xa4, 0x59, 0x1d, 0x71, 0xe1, 0x2e, 0x86, 0x37, 0xed, 0x5b, 0x83, 0x5e, 0x20, 0x37,
+ 0x50, 0x15, 0xd9, 0x7f, 0x90, 0x89, 0xf1, 0x14, 0x76, 0x58, 0xff, 0xc5, 0x74, 0x0c, 0xc7, 0x90,
+ 0xb7, 0x72, 0x10, 0x01, 0xed, 0x32, 0x4e, 0x0d, 0x9b, 0xb6, 0xa9, 0x25, 0x53, 0xf9, 0x24, 0xba,
+ 0xd1, 0xd2, 0x6e, 0x74, 0x04, 0xed, 0x20, 0x26, 0xc3, 0x4f, 0xd8, 0x80, 0x92, 0x84, 0x72, 0x18,
+ 0xb8, 0x08, 0x1d, 0xda, 0x35, 0x6c, 0xea, 0x3a, 0x1e, 0x95, 0xc3, 0x11, 0xfc, 0x35, 0xe4, 0x5f,
+ 0x1f, 0x5c, 0x87, 0xdd, 0xfa, 0x81, 0xda, 0x52, 0x3b, 0x89, 0x49, 0xc6, 0xdd, 0x82, 0x5a, 0x8e,
+ 0x5d, 0xda, 0xcd, 0x42, 0xc8, 0x39, 0xac, 0x60, 0x6c, 0x9d, 0x5e, 0x85, 0x8e, 0x65, 0xba, 0x06,
+ 0xfd, 0xae, 0xe7, 0xf8, 0x5d, 0xea, 0xf1, 0x54, 0x8c, 0x4d, 0xa1, 0xe3, 0x1f, 0x65, 0x62, 0x4c,
+ 0xe1, 0xeb, 0x11, 0x7c, 0x30, 0xd4, 0xc4, 0x60, 0xae, 0x85, 0x91, 0x5f, 0xc0, 0x74, 0x3a, 0xe2,
+ 0x4c, 0xeb, 0x0c, 0x5d, 0x91, 0xc1, 0xdd, 0x28, 0xc7, 0xb8, 0x65, 0x9d, 0x79, 0xec, 0xc2, 0xa5,
+ 0x76, 0x87, 0x0a, 0x9e, 0x8c, 0xa7, 0x49, 0x96, 0x42, 0x09, 0x72, 0x06, 0xcb, 0xb2, 0x10, 0x68,
+ 0xb7, 0x8d, 0x80, 0x9a, 0xd6, 0xa9, 0x41, 0x2f, 0x2d, 0x4a, 0x6d, 0x6a, 0xa3, 0x93, 0x69, 0x74,
+ 0xb2, 0x96, 0xad, 0x0b, 0xda, 0xb8, 0xc9, 0xb9, 0x63, 0xba, 0xba, 0xb0, 0xa8, 0x2b, 0x83, 0x8c,
+ 0xa3, 0x79, 0x26, 0x91, 0xfd, 0x88, 0xf8, 0xb4, 0x5b, 0x85, 0x4a, 0xa6, 0x2a, 0x22, 0xf7, 0x00,
+ 0xb0, 0xa0, 0x11, 0xa1, 0x4e, 0xf1, 0xb4, 0x9b, 0xd0, 0x27, 0x84, 0x44, 0x04, 0x2f, 0xd5, 0xf6,
+ 0xa0, 0x9a, 0xad, 0x88, 0xc8, 0x3c, 0x14, 0x64, 0xf1, 0x24, 0xcf, 0xc6, 0x82, 0x9e, 0xc7, 0x02,
+ 0xc9, 0xee, 0x63, 0x1a, 0xe9, 0x67, 0x3a, 0x85, 0xa9, 0x81, 0xf2, 0xe6, 0x7a, 0xb2, 0xaf, 0xa0,
+ 0x12, 0xd2, 0xc0, 0x31, 0x5d, 0xc3, 0xeb, 0x75, 0x4f, 0x68, 0xa0, 0x4e, 0xd3, 0xd9, 0x78, 0x4a,
+ 0x8e, 0x51, 0x7b, 0x88, 0x4a, 0xbd, 0x1c, 0xa6, 0x5a, 0xda, 0x6f, 0xc6, 0xa0, 0x92, 0x29, 0x87,
+ 0xae, 0x77, 0x33, 0x0b, 0x79, 0xdc, 0xef, 0xf2, 0xb4, 0x2e, 0xe8, 0xe3, 0x62, 0xef, 0xf6, 0x0f,
+ 0x65, 0xb4, 0x6f, 0x28, 0xe4, 0x01, 0x94, 0x4c, 0xbb, 0xeb, 0x78, 0x4a, 0x3f, 0x8e, 0x7a, 0x40,
+ 0x91, 0x04, 0x0c, 0xf4, 0x7e, 0xec, 0xbd, 0x7b, 0x4f, 0xf6, 0xa1, 0x84, 0x89, 0x2d, 0xa0, 0x66,
+ 0xc8, 0x3c, 0x3c, 0xfe, 0xaa, 0xd9, 0x78, 0x4b, 0x06, 0xb6, 0x9a, 0x4d, 0xc5, 0x3a, 0x9a, 0xe8,
+ 0xd0, 0x8e, 0xff, 0xd6, 0xfe, 0x70, 0x04, 0x66, 0x86, 0x81, 0xc8, 0x47, 0xf0, 0xa0, 0x79, 0xf8,
+ 0xda, 0xd8, 0xda, 0x6e, 0x35, 0xde, 0x6c, 0xb5, 0x1a, 0xcd, 0x43, 0xe3, 0xd5, 0x56, 0x63, 0xdf,
+ 0xd0, 0xeb, 0x5b, 0xc7, 0xcd, 0x43, 0xe3, 0xb0, 0x79, 0x58, 0xaf, 0xdd, 0x21, 0x9f, 0x80, 0x76,
+ 0x03, 0x48, 0xdf, 0x3a, 0xdc, 0x6d, 0x1c, 0xee, 0xd6, 0x72, 0xe4, 0x19, 0x6c, 0xdc, 0x80, 0x3b,
+ 0xda, 0x3a, 0x3e, 0x7e, 0xdb, 0xd4, 0x77, 0x8c, 0xad, 0xd7, 0xad, 0xbd, 0xfa, 0x61, 0xab, 0xb1,
+ 0x8d, 0x98, 0xda, 0x08, 0xd1, 0xe0, 0xfe, 0x0d, 0x76, 0xfb, 0xcd, 0xe3, 0xda, 0x28, 0x79, 0x08,
+ 0xf7, 0x86, 0x61, 0x50, 0xb6, 0xbf, 0xa5, 0x1f, 0xd4, 0xc6, 0xae, 0x1b, 0xcb, 0xf1, 0xdb, 0x46,
+ 0x6b, 0x7b, 0xcf, 0x68, 0xbe, 0xa9, 0xeb, 0xb5, 0x71, 0xed, 0x1c, 0xc8, 0x60, 0x81, 0x4e, 0x08,
+ 0x8c, 0xf1, 0x2b, 0x3f, 0x0a, 0x7c, 0xfc, 0x3b, 0x1d, 0x2d, 0x23, 0x37, 0x44, 0xf8, 0x40, 0x58,
+ 0xcc, 0xc0, 0x78, 0xe8, 0x53, 0x2a, 0x4b, 0xad, 0x82, 0x2e, 0x1b, 0x9a, 0x0e, 0xd5, 0x6c, 0x9d,
+ 0xfd, 0xc1, 0xd1, 0x58, 0x83, 0x51, 0xff, 0x8c, 0xa3, 0xbf, 0xb2, 0x2e, 0xfe, 0xd4, 0xfe, 0x3d,
+ 0x07, 0xb5, 0xfe, 0x3a, 0x9c, 0x2c, 0xc3, 0x04, 0xd2, 0xe2, 0x78, 0x64, 0x4c, 0xe2, 0x63, 0x4e,
+ 0xab, 0x6f, 0x4c, 0xd7, 0xf9, 0x2c, 0xa6, 0x7d, 0xce, 0x42, 0xbe, 0xe7, 0x39, 0x42, 0x3c, 0x21,
+ 0xc5, 0x3d, 0xcf, 0x91, 0x33, 0xd0, 0xa1, 0x5d, 0x2c, 0xf2, 0xe3, 0x5e, 0x4e, 0x28, 0x49, 0xc3,
+ 0x16, 0x5e, 0xb0, 0x8c, 0x77, 0x64, 0xe1, 0x5a, 0xd0, 0xf3, 0xa2, 0x29, 0x15, 0x68, 0xe4, 0x31,
+ 0x0c, 0xe8, 0x82, 0x9e, 0x17, 0xcd, 0x43, 0x46, 0xe6, 0x20, 0x6f, 0x31, 0x76, 0xe6, 0x50, 0x2c,
+ 0xc8, 0xf2, 0xba, 0x6a, 0x45, 0x63, 0x1e, 0x4b, 0xc6, 0xfc, 0x08, 0x26, 0x64, 0xa9, 0x63, 0x5a,
+ 0xd7, 0x0f, 0x47, 0xfb, 0x31, 0x4c, 0xec, 0x51, 0x33, 0xe0, 0x27, 0xd4, 0xe4, 0x64, 0x0d, 0xa6,
+ 0x4f, 0xa3, 0x86, 0x2c, 0xd4, 0x78, 0x2f, 0xa0, 0xca, 0x82, 0xc4, 0xaa, 0xe3, 0x48, 0xa3, 0xfd,
+ 0x55, 0x0e, 0x46, 0x9b, 0x5e, 0xef, 0x83, 0x57, 0x68, 0x60, 0xbf, 0x8f, 0xbe, 0xff, 0x7e, 0x17,
+ 0x23, 0x75, 0x02, 0x15, 0x33, 0xe2, 0x4f, 0xf2, 0x29, 0x4c, 0xb2, 0xae, 0x65, 0x19, 0xd4, 0xb3,
+ 0x82, 0x2b, 0x5f, 0xac, 0x2d, 0x2e, 0x67, 0x51, 0xaf, 0x0a, 0x71, 0x3d, 0x96, 0x6a, 0x7f, 0x9d,
+ 0x03, 0x82, 0xe7, 0x4f, 0x47, 0x1c, 0x61, 0x3b, 0x4e, 0xc8, 0x4d, 0xcf, 0xa2, 0x1f, 0xdc, 0xfb,
+ 0x17, 0xb0, 0xe8, 0x4a, 0x0a, 0x43, 0x3d, 0x9d, 0x22, 0x8f, 0xf1, 0x7b, 0x34, 0x60, 0x6a, 0x1d,
+ 0xe7, 0x14, 0x40, 0x66, 0x70, 0x54, 0xff, 0x9c, 0x06, 0x8c, 0x3c, 0x81, 0x99, 0x61, 0xa6, 0x6a,
+ 0x34, 0x64, 0xd0, 0x4a, 0xfb, 0x06, 0x0a, 0x62, 0x3b, 0x1c, 0x84, 0x9d, 0x5b, 0xd8, 0x07, 0xbf,
+ 0xce, 0xc1, 0x84, 0x38, 0xeb, 0x71, 0x2b, 0x7c, 0x30, 0x5f, 0x2a, 0x28, 0xc7, 0x32, 0x41, 0x99,
+ 0x8d, 0xf2, 0xf1, 0xfe, 0x28, 0x1f, 0xec, 0xc7, 0x0b, 0x28, 0xbf, 0xf6, 0x5d, 0xc7, 0x3b, 0x7b,
+ 0x57, 0x4f, 0x94, 0xe9, 0x48, 0x62, 0xfa, 0xf7, 0x13, 0x00, 0x3b, 0xf4, 0xdc, 0xb1, 0x68, 0xc3,
+ 0x6b, 0xe3, 0x7e, 0x38, 0xa7, 0x9e, 0xcd, 0x02, 0x95, 0x91, 0x54, 0x4b, 0xe4, 0x96, 0x2e, 0xb3,
+ 0xa9, 0xab, 0xce, 0x55, 0xd9, 0x20, 0x3f, 0x80, 0xda, 0xa9, 0x19, 0xd8, 0x17, 0x66, 0x40, 0x8d,
+ 0x73, 0x1a, 0x88, 0xc7, 0x01, 0x95, 0x96, 0x26, 0x23, 0xf9, 0x1b, 0x29, 0x16, 0xd0, 0xb6, 0x13,
+ 0x74, 0x33, 0xd0, 0x31, 0x09, 0x8d, 0xe4, 0x11, 0x74, 0x19, 0x26, 0x6c, 0xec, 0x91, 0xe8, 0x7f,
+ 0x4d, 0x26, 0x12, 0x29, 0x68, 0xd8, 0x62, 0xc5, 0x95, 0x32, 0x1b, 0xf1, 0x53, 0x88, 0x23, 0x52,
+ 0x97, 0x0e, 0x77, 0xb2, 0x0e, 0x33, 0x7e, 0x40, 0xcf, 0x1d, 0xd6, 0x0b, 0xdd, 0x2b, 0xc3, 0x62,
+ 0x9e, 0x47, 0x2d, 0x4e, 0x65, 0x91, 0x53, 0xd4, 0xa7, 0x13, 0xdd, 0x76, 0xa4, 0x12, 0x3d, 0x10,
+ 0xe5, 0xb7, 0x98, 0xef, 0x10, 0xab, 0xfb, 0x82, 0x5e, 0xf4, 0x99, 0x77, 0x24, 0xda, 0xe4, 0x3e,
+ 0x00, 0xa7, 0xd6, 0xa9, 0xc7, 0x5c, 0xd6, 0xb9, 0x8a, 0x0e, 0xdf, 0x44, 0x42, 0x56, 0xe4, 0xf3,
+ 0x93, 0x63, 0xcb, 0x67, 0x60, 0x95, 0x70, 0x00, 0xd7, 0x1c, 0x1f, 0x69, 0xc9, 0x5d, 0x00, 0x85,
+ 0xa0, 0xea, 0x49, 0xb0, 0xa0, 0x17, 0x51, 0x5f, 0xf7, 0x6c, 0xf2, 0x08, 0xaa, 0xa6, 0xeb, 0x32,
+ 0x2b, 0x61, 0x90, 0x99, 0xb1, 0x8c, 0xd2, 0x88, 0x63, 0x05, 0xca, 0x31, 0x8a, 0x7a, 0x51, 0x9a,
+ 0x04, 0x85, 0x11, 0x3c, 0x8f, 0xa1, 0x96, 0x44, 0x91, 0x62, 0x02, 0x44, 0x55, 0xe3, 0x58, 0x92,
+ 0x5c, 0x8f, 0xa0, 0x9a, 0x42, 0x52, 0xf5, 0xd0, 0x54, 0xd0, 0xcb, 0x31, 0x4e, 0xf0, 0x69, 0x50,
+ 0x51, 0xc9, 0x55, 0x91, 0x55, 0x10, 0x54, 0x92, 0x29, 0x56, 0x32, 0xdd, 0x87, 0x52, 0x84, 0xa1,
+ 0xea, 0xb9, 0xa2, 0x20, 0xdf, 0x96, 0x48, 0x8e, 0xaf, 0x21, 0x1f, 0x98, 0x5e, 0x87, 0x86, 0x0b,
+ 0x93, 0x2b, 0xa3, 0x8f, 0x4b, 0x1b, 0x8f, 0x93, 0xb7, 0x13, 0x71, 0x0c, 0xaa, 0x3f, 0x75, 0x1a,
+ 0xb2, 0x5e, 0x60, 0x51, 0x1d, 0xf1, 0xba, 0xb2, 0x5b, 0xfa, 0xe3, 0x31, 0x98, 0x19, 0x06, 0x20,
+ 0x8b, 0xd1, 0x4b, 0x35, 0x3b, 0x5c, 0xc8, 0xad, 0x8c, 0x3e, 0x2e, 0xa8, 0x37, 0x67, 0x76, 0xff,
+ 0x8a, 0x8d, 0x0c, 0xac, 0xd8, 0x36, 0x8c, 0xfb, 0x8c, 0xb9, 0xe1, 0xc2, 0x28, 0x76, 0xea, 0xf3,
+ 0xf7, 0xed, 0xd4, 0xea, 0x11, 0x63, 0xae, 0x2e, 0x6d, 0x97, 0xfe, 0x73, 0x04, 0xc6, 0x44, 0x9b,
+ 0xfc, 0x56, 0xea, 0x48, 0xaf, 0x6e, 0x3c, 0xfb, 0x20, 0x32, 0xfc, 0x47, 0x1c, 0x98, 0xaa, 0x14,
+ 0x38, 0x86, 0x42, 0x78, 0x6a, 0x06, 0x8e, 0xd7, 0xc1, 0x6e, 0x57, 0x37, 0x5e, 0x7c, 0x18, 0xdd,
+ 0xb1, 0x34, 0x46, 0xc6, 0x88, 0x09, 0xeb, 0x04, 0x5c, 0xc0, 0x51, 0x55, 0x27, 0xe0, 0xd2, 0xd5,
+ 0x60, 0x94, 0x7a, 0x51, 0xed, 0x20, 0xfe, 0xd4, 0xb6, 0xa0, 0x18, 0x75, 0x87, 0x00, 0xe4, 0x45,
+ 0x89, 0xd3, 0xd8, 0xa9, 0xdd, 0x21, 0x65, 0x28, 0x6e, 0xed, 0xef, 0x37, 0xb7, 0x45, 0x2b, 0x47,
+ 0xaa, 0x00, 0xbb, 0xf5, 0x83, 0xa3, 0xa6, 0xde, 0x12, 0xed, 0x11, 0x52, 0x82, 0xc2, 0xab, 0xfd,
+ 0xe6, 0x5b, 0xd1, 0x18, 0xd5, 0x4e, 0xa1, 0x94, 0xea, 0x02, 0x99, 0x03, 0xb2, 0x53, 0xdf, 0x11,
+ 0xf5, 0x57, 0x7d, 0xc7, 0x38, 0xaa, 0xeb, 0x46, 0xe3, 0xb0, 0xf5, 0xaa, 0x76, 0x87, 0x3c, 0x80,
+ 0xe5, 0xe3, 0xbd, 0x2d, 0xbd, 0xbe, 0x63, 0xbc, 0xfc, 0x99, 0xb1, 0xb5, 0xbf, 0x8f, 0x72, 0xfc,
+ 0xa3, 0x55, 0xdf, 0xde, 0xab, 0xe5, 0xc8, 0x0a, 0xdc, 0x1d, 0x02, 0x38, 0xde, 0x3a, 0xa8, 0x4b,
+ 0xc4, 0x88, 0xf6, 0xfb, 0xa3, 0x00, 0xdb, 0xae, 0x19, 0x86, 0x4e, 0xdb, 0xa1, 0x01, 0xa6, 0x5c,
+ 0x83, 0xfb, 0x71, 0x02, 0x1c, 0x67, 0x2d, 0xdf, 0xb1, 0xc9, 0x34, 0x8c, 0x33, 0xe3, 0x3c, 0x4e,
+ 0xc4, 0x63, 0xec, 0x8d, 0x83, 0xe9, 0xd9, 0x91, 0x58, 0x35, 0x21, 0x4e, 0x84, 0x75, 0x10, 0x2b,
+ 0xa7, 0x64, 0xcc, 0x11, 0xd8, 0x79, 0x28, 0x30, 0xc3, 0x3f, 0x71, 0x78, 0xa8, 0xf2, 0x72, 0x9e,
+ 0x1d, 0x89, 0x16, 0xa6, 0x5c, 0xa5, 0x50, 0x15, 0x86, 0x23, 0x15, 0x8b, 0x50, 0xa4, 0xfc, 0x54,
+ 0x56, 0x45, 0x72, 0xab, 0x17, 0x28, 0x3f, 0x8d, 0x8a, 0x22, 0x3b, 0xe4, 0x46, 0xd7, 0xb4, 0x70,
+ 0x8b, 0x97, 0xf5, 0xbc, 0x1d, 0xf2, 0x03, 0xd3, 0x12, 0x8a, 0x30, 0xb0, 0x50, 0x31, 0x21, 0x15,
+ 0x61, 0x60, 0x09, 0x85, 0x08, 0x72, 0x5f, 0xbe, 0x99, 0x56, 0x7b, 0xb9, 0xe0, 0xf8, 0x47, 0xf8,
+ 0x7e, 0x7c, 0x16, 0x84, 0xb5, 0xe1, 0xf8, 0x6a, 0xf3, 0x8e, 0xdb, 0x21, 0x6f, 0xf8, 0x42, 0x2c,
+ 0xa8, 0x1c, 0x5f, 0xe5, 0xb1, 0xf1, 0x30, 0xb0, 0x1a, 0xbe, 0x20, 0x12, 0x62, 0xb1, 0xbb, 0xd5,
+ 0x3e, 0x16, 0x1e, 0x45, 0x82, 0x13, 0x2a, 0x41, 0x84, 0x2a, 0xb9, 0x81, 0x45, 0x2f, 0x51, 0xb5,
+ 0x02, 0x65, 0xff, 0x8c, 0x1b, 0xdc, 0xec, 0xc8, 0xf1, 0x4c, 0xca, 0xad, 0xe4, 0x9f, 0xf1, 0x96,
+ 0x89, 0x2b, 0xac, 0xfd, 0x7a, 0x14, 0x26, 0x44, 0xbd, 0xcf, 0xbc, 0xed, 0x2e, 0xa6, 0x0c, 0xd3,
+ 0xb6, 0x0d, 0xd6, 0xe3, 0x34, 0x10, 0x56, 0xb8, 0x18, 0x45, 0xbd, 0x64, 0xda, 0x76, 0x53, 0xc8,
+ 0x5a, 0x66, 0x47, 0xa4, 0xa9, 0x80, 0x76, 0xd9, 0x39, 0x4d, 0xc1, 0x46, 0x64, 0xb9, 0x21, 0xe5,
+ 0x31, 0x72, 0x05, 0xca, 0x3c, 0x30, 0x7d, 0x83, 0x33, 0xe3, 0x94, 0x85, 0x32, 0x7c, 0x8b, 0x3a,
+ 0x08, 0x59, 0x8b, 0xed, 0xb1, 0x90, 0x93, 0x1f, 0x01, 0x09, 0x68, 0xd7, 0x0c, 0xce, 0x14, 0x97,
+ 0x5c, 0x8f, 0x31, 0xc4, 0xd5, 0xa4, 0x06, 0xd9, 0xe4, 0xca, 0x24, 0x68, 0xc7, 0xf3, 0x62, 0xf4,
+ 0x78, 0x1a, 0xdd, 0x10, 0x0a, 0x89, 0x56, 0x63, 0x91, 0x50, 0xd1, 0xc9, 0x7c, 0x3c, 0x16, 0x44,
+ 0x65, 0xc7, 0x92, 0xc0, 0x0a, 0xe9, 0xb1, 0xc4, 0xc8, 0x55, 0x98, 0xe6, 0x81, 0xe9, 0x85, 0xae,
+ 0xc9, 0xd3, 0xe0, 0x22, 0x82, 0xa7, 0x62, 0xd5, 0x70, 0x7c, 0x32, 0x51, 0x13, 0x7d, 0xf8, 0x68,
+ 0xae, 0xb4, 0xbf, 0xc9, 0x41, 0x5e, 0xae, 0x03, 0x79, 0x04, 0xa3, 0x56, 0x37, 0x7a, 0x91, 0x4c,
+ 0x92, 0x77, 0xd3, 0xd1, 0x2a, 0xe9, 0x42, 0x3d, 0x7c, 0x67, 0xa4, 0xa2, 0x7d, 0x34, 0x13, 0xed,
+ 0xc9, 0xf6, 0x1a, 0xeb, 0xdb, 0x5e, 0x72, 0xcb, 0x8c, 0x67, 0xb7, 0xcc, 0xf0, 0x9d, 0x91, 0xec,
+ 0xbb, 0x42, 0x6a, 0xdf, 0x69, 0xff, 0x90, 0x87, 0xb1, 0x57, 0x2e, 0xbb, 0xc0, 0x83, 0xd0, 0xb2,
+ 0x68, 0x18, 0x1a, 0xe9, 0x62, 0x66, 0x52, 0x2f, 0x4b, 0x69, 0x63, 0x58, 0x71, 0x35, 0x39, 0xf8,
+ 0x00, 0x51, 0x92, 0x62, 0xf9, 0x00, 0xd1, 0xf7, 0x84, 0x90, 0x8f, 0x9f, 0x10, 0x3e, 0x83, 0xa9,
+ 0xf0, 0xaa, 0xdb, 0xa5, 0x3c, 0x70, 0x2c, 0x23, 0x82, 0x10, 0x84, 0x4c, 0xc6, 0x8a, 0x57, 0x12,
+ 0xbb, 0x0c, 0x78, 0xa4, 0xc9, 0x3d, 0x20, 0x8b, 0x98, 0xa2, 0x10, 0xe0, 0xa6, 0x5e, 0x84, 0x62,
+ 0x74, 0x30, 0xe3, 0x16, 0x9d, 0xd4, 0x0b, 0xea, 0x50, 0x26, 0x9f, 0xc0, 0xa4, 0x47, 0xf9, 0x05,
+ 0xc3, 0x88, 0x93, 0x23, 0x1a, 0x47, 0x44, 0x45, 0x89, 0x1b, 0xf1, 0x73, 0x5e, 0xaa, 0xfe, 0xcb,
+ 0x23, 0x24, 0x55, 0xff, 0x7d, 0x01, 0x60, 0xc5, 0x99, 0x4e, 0xbd, 0x48, 0x9e, 0x8e, 0xd7, 0x35,
+ 0x49, 0x82, 0x7a, 0x0a, 0x46, 0x3e, 0x85, 0xbc, 0x89, 0x2b, 0xae, 0x5e, 0x10, 0x4f, 0xf6, 0x05,
+ 0x82, 0xae, 0xd4, 0x64, 0x09, 0x8a, 0x7e, 0xe0, 0xb0, 0xc0, 0xe1, 0x57, 0x18, 0x5e, 0x93, 0x7a,
+ 0xdc, 0x4e, 0x3d, 0x2d, 0x95, 0x33, 0x4f, 0x4b, 0xa9, 0x4a, 0xb6, 0x92, 0xa9, 0x64, 0x17, 0xa1,
+ 0xd8, 0x09, 0x58, 0xcf, 0x17, 0xe3, 0x50, 0xb9, 0x04, 0xdb, 0x72, 0x32, 0xd2, 0x1f, 0xe7, 0x04,
+ 0x62, 0x12, 0x11, 0x15, 0x21, 0x3e, 0x92, 0xd2, 0x86, 0x4d, 0x3e, 0x86, 0x6a, 0x40, 0x7d, 0x57,
+ 0x3c, 0x65, 0x52, 0x5c, 0x18, 0x2c, 0x09, 0x8b, 0x7a, 0x25, 0x96, 0x62, 0xb0, 0xec, 0xc1, 0xa4,
+ 0x88, 0x31, 0x91, 0x1c, 0xd4, 0x4c, 0x2d, 0x4c, 0xe1, 0x69, 0xbe, 0x92, 0xf9, 0x8c, 0xb3, 0x2a,
+ 0x42, 0xaf, 0xc5, 0x76, 0x25, 0xa4, 0xee, 0xf1, 0xe0, 0x4a, 0xaf, 0xf8, 0x69, 0x19, 0xa9, 0x27,
+ 0xd5, 0x10, 0x67, 0x86, 0x49, 0xc3, 0x85, 0x69, 0x24, 0x7a, 0x90, 0x25, 0x52, 0xf0, 0x16, 0xdb,
+ 0xa2, 0xa1, 0xe4, 0x89, 0xca, 0x25, 0x14, 0x2d, 0x7d, 0x0d, 0x64, 0xd0, 0x97, 0x38, 0x65, 0xcf,
+ 0xe8, 0x95, 0x3a, 0x94, 0xc4, 0x9f, 0xe2, 0x34, 0x3e, 0x37, 0xdd, 0x1e, 0x8d, 0x9e, 0x0d, 0xb0,
+ 0xf1, 0xd5, 0xc8, 0xf3, 0xdc, 0xd2, 0x4f, 0x61, 0x6a, 0xc0, 0xc9, 0xbb, 0x08, 0x8a, 0x29, 0x02,
+ 0xad, 0x05, 0xe5, 0x4c, 0x25, 0xbc, 0x0c, 0x13, 0xb2, 0x9c, 0x8f, 0xf6, 0x52, 0x59, 0x2f, 0x4a,
+ 0x41, 0xc3, 0x16, 0x4f, 0x7d, 0x4a, 0x19, 0xfa, 0xd4, 0x72, 0xda, 0x8e, 0xa5, 0x1e, 0x13, 0xaa,
+ 0x52, 0x7c, 0xac, 0xa4, 0xda, 0x7f, 0x95, 0xa0, 0x9a, 0xfd, 0x96, 0x76, 0xfd, 0xf3, 0xc6, 0x22,
+ 0x14, 0x83, 0x4b, 0xe3, 0xe4, 0x8a, 0xd3, 0x10, 0xd9, 0xf2, 0x7a, 0x21, 0xb8, 0x7c, 0x29, 0x9a,
+ 0x22, 0xc8, 0x83, 0x4b, 0xc3, 0xc7, 0x07, 0x96, 0x50, 0x6d, 0xc6, 0x89, 0xe0, 0x52, 0x3e, 0xc1,
+ 0x84, 0x98, 0x4a, 0x2f, 0x8d, 0x9e, 0x65, 0x8a, 0xa3, 0x48, 0x81, 0xc6, 0x10, 0x54, 0x0d, 0x2e,
+ 0x5f, 0x0b, 0x71, 0x16, 0xd9, 0xcd, 0x20, 0xc7, 0x23, 0xe4, 0xc1, 0x20, 0xf2, 0x24, 0x83, 0xcc,
+ 0x47, 0xc8, 0x97, 0x83, 0x48, 0xf9, 0x82, 0x37, 0x42, 0x16, 0x22, 0x24, 0xbe, 0xa2, 0x8d, 0x90,
+ 0xcb, 0x30, 0x11, 0x5c, 0x1a, 0xed, 0xc0, 0xec, 0xd2, 0x10, 0x1f, 0x42, 0xf2, 0x7a, 0x31, 0xb8,
+ 0x7c, 0x85, 0x6d, 0x71, 0x62, 0xc5, 0x4a, 0xe3, 0xd9, 0x53, 0x95, 0x4f, 0x20, 0xd2, 0x3f, 0x7b,
+ 0x4a, 0x3e, 0x45, 0x47, 0x11, 0x62, 0xd3, 0x58, 0xdf, 0xf8, 0x12, 0x1f, 0x4c, 0xf2, 0x7a, 0x25,
+ 0x46, 0x6d, 0xae, 0x6f, 0x7c, 0x49, 0x7e, 0x00, 0x53, 0x09, 0x70, 0x7d, 0xe3, 0xb9, 0xb1, 0xb1,
+ 0xb9, 0xb9, 0x30, 0x13, 0x75, 0x49, 0x22, 0xd7, 0x37, 0x9e, 0x6f, 0x6c, 0x6e, 0x66, 0xa1, 0x1b,
+ 0x9b, 0xcf, 0x8c, 0xcd, 0xf5, 0xf5, 0x85, 0xd9, 0x2c, 0x74, 0x63, 0xf3, 0xd9, 0xe6, 0xfa, 0x3a,
+ 0xf9, 0x21, 0x90, 0x04, 0xba, 0xb9, 0xbe, 0x61, 0xac, 0x3f, 0xd9, 0xf8, 0x62, 0x61, 0x4e, 0xa6,
+ 0xbd, 0x08, 0xbb, 0xb9, 0xbe, 0x21, 0xc4, 0xe4, 0x73, 0x98, 0x4e, 0x75, 0xe1, 0xc9, 0xc6, 0x53,
+ 0x63, 0x7d, 0x73, 0xfd, 0xf9, 0xc2, 0x3c, 0xa2, 0x6b, 0x71, 0x27, 0x9e, 0x6c, 0x3c, 0x15, 0xf2,
+ 0x3e, 0xf8, 0xe6, 0xfa, 0x0b, 0x63, 0xe3, 0xc9, 0xd3, 0x2f, 0x17, 0x16, 0xfa, 0xe0, 0x9b, 0xeb,
+ 0x2f, 0x84, 0x3c, 0x0b, 0xdf, 0x78, 0xf2, 0xf4, 0xb9, 0xf1, 0xf4, 0xc9, 0x8b, 0xcd, 0x85, 0xc5,
+ 0x2c, 0x5c, 0x28, 0x84, 0x3c, 0x0b, 0x7f, 0xfa, 0xe4, 0xc5, 0x33, 0xe3, 0xc5, 0xc6, 0xfa, 0xb3,
+ 0x85, 0xa5, 0x2c, 0x5c, 0x28, 0x84, 0x9c, 0xac, 0xc1, 0x4c, 0x02, 0x7f, 0xb1, 0xb1, 0xfe, 0xa5,
+ 0xb1, 0xfe, 0xec, 0x8b, 0xe7, 0x5f, 0x2c, 0x2c, 0x23, 0x7e, 0x2a, 0xc2, 0x0b, 0x0d, 0x2a, 0xc4,
+ 0x71, 0x1f, 0x5c, 0x1a, 0x56, 0x60, 0xc9, 0x28, 0x08, 0x31, 0x7d, 0xe5, 0xf5, 0x52, 0x70, 0xb9,
+ 0x1d, 0x58, 0x18, 0x01, 0x58, 0xda, 0xf1, 0x28, 0xba, 0x8b, 0x32, 0xba, 0x79, 0x12, 0xdd, 0x3c,
+ 0x89, 0xee, 0x09, 0x19, 0xdd, 0x3c, 0x1d, 0xdd, 0xbc, 0x3f, 0xba, 0x41, 0xae, 0x10, 0x1f, 0x88,
+ 0x6e, 0xde, 0x1f, 0xdd, 0xa5, 0x08, 0x79, 0x30, 0x88, 0xcc, 0x46, 0x77, 0x39, 0x42, 0xbe, 0x1c,
+ 0x44, 0x66, 0xa3, 0xbb, 0x12, 0x21, 0xfb, 0xa3, 0x9b, 0xc7, 0xd1, 0x7d, 0x57, 0x46, 0x37, 0x4f,
+ 0x45, 0x37, 0x4f, 0x47, 0xf7, 0x3d, 0x19, 0xdd, 0x3c, 0x13, 0xdd, 0xbc, 0x3f, 0xba, 0xef, 0xcb,
+ 0xe8, 0xe6, 0xfd, 0xd1, 0xcd, 0x07, 0xa2, 0xfb, 0x41, 0xd4, 0xa5, 0xfe, 0xe8, 0xe6, 0x03, 0xd1,
+ 0xbd, 0x92, 0x85, 0x26, 0xd1, 0xcd, 0x07, 0xa3, 0xfb, 0xa1, 0x8c, 0x6e, 0x3e, 0x18, 0xdd, 0x7c,
+ 0x48, 0x74, 0x6b, 0x32, 0xa0, 0xf8, 0x90, 0xe8, 0xe6, 0x43, 0xa2, 0xfb, 0xa3, 0x3e, 0x78, 0x2a,
+ 0xba, 0xf9, 0x90, 0xe8, 0x7e, 0x94, 0x85, 0xa7, 0xa3, 0x9b, 0x0f, 0x89, 0xee, 0x8f, 0xb3, 0xf0,
+ 0x74, 0x74, 0xf3, 0x61, 0xd1, 0xfd, 0x89, 0x8c, 0x6e, 0x3e, 0x10, 0xdd, 0xf7, 0x00, 0x4e, 0x1c,
+ 0x3f, 0x0a, 0xed, 0x49, 0x19, 0x9e, 0x27, 0x8e, 0xaf, 0x02, 0xfb, 0x2e, 0x4c, 0x70, 0xa7, 0x4b,
+ 0x43, 0x6e, 0x76, 0x7d, 0x3c, 0x6e, 0x0b, 0x7a, 0x22, 0xd0, 0xfe, 0xb5, 0x80, 0xdf, 0x37, 0xde,
+ 0x27, 0xff, 0x5f, 0xf3, 0xe6, 0xeb, 0x63, 0xa8, 0xfa, 0x2c, 0x74, 0xb8, 0x73, 0x4e, 0xe5, 0x37,
+ 0x77, 0x95, 0xff, 0x2b, 0x91, 0x14, 0xbf, 0xa1, 0x0b, 0x98, 0x47, 0x3b, 0x66, 0x0a, 0x26, 0x4f,
+ 0x80, 0x4a, 0x24, 0x95, 0xb0, 0xe7, 0xb0, 0x60, 0x53, 0xd7, 0xe9, 0x3a, 0xa2, 0x2a, 0xee, 0x3a,
+ 0x61, 0x68, 0xd8, 0x94, 0x53, 0x2b, 0x7e, 0x71, 0x99, 0xd7, 0xe7, 0x62, 0xfd, 0x81, 0x13, 0x86,
+ 0x3b, 0x91, 0xb6, 0x6f, 0x1a, 0xf2, 0xfd, 0xd3, 0xb0, 0x0c, 0xa2, 0x61, 0xf4, 0x3c, 0x27, 0x4e,
+ 0xff, 0xc5, 0x13, 0xc7, 0x7f, 0x2d, 0xda, 0x64, 0x03, 0x66, 0xdb, 0xd4, 0x32, 0x2c, 0x16, 0x04,
+ 0xf8, 0xd2, 0xc8, 0x08, 0xaf, 0xba, 0x27, 0xcc, 0x8d, 0x32, 0xc1, 0x74, 0x9b, 0x5a, 0xdb, 0x91,
+ 0xee, 0x58, 0xaa, 0xc8, 0x33, 0x98, 0x97, 0x36, 0x36, 0xbd, 0x60, 0x81, 0x1d, 0x26, 0xd6, 0x2a,
+ 0x45, 0xcc, 0xa2, 0x95, 0xd2, 0xc6, 0xe6, 0xe4, 0x27, 0xb0, 0x9c, 0xb5, 0xeb, 0x79, 0xca, 0xd2,
+ 0x3c, 0x71, 0xa9, 0xca, 0x1c, 0x8b, 0x69, 0xdb, 0xd7, 0x69, 0x00, 0xf9, 0x08, 0x2a, 0x19, 0x7b,
+ 0x95, 0x41, 0xca, 0x69, 0x0b, 0xf1, 0x88, 0x91, 0x1d, 0x90, 0x1c, 0xb7, 0x4c, 0x21, 0x53, 0xe9,
+ 0xe1, 0xc8, 0x09, 0xf8, 0x04, 0x26, 0x2f, 0x3b, 0xb4, 0x6b, 0x9c, 0xd1, 0xab, 0x68, 0x06, 0x65,
+ 0x12, 0xa9, 0x08, 0xf1, 0x37, 0xf4, 0x2a, 0x99, 0x45, 0xc4, 0xb9, 0x2c, 0x8c, 0xb2, 0x68, 0x51,
+ 0x08, 0xf6, 0x59, 0x88, 0x24, 0xa2, 0x0a, 0x70, 0x99, 0xd9, 0x0d, 0x25, 0x8b, 0x8a, 0xc6, 0x4a,
+ 0x70, 0x79, 0x84, 0x52, 0x64, 0x51, 0x07, 0x95, 0xc2, 0x79, 0xcc, 0x33, 0x1c, 0xdb, 0xa5, 0x18,
+ 0x9a, 0x78, 0x50, 0x49, 0xe8, 0x21, 0xf3, 0x1a, 0xb6, 0x8b, 0xe5, 0x68, 0x70, 0x89, 0x57, 0x2d,
+ 0xd4, 0x89, 0x9c, 0x0f, 0x2e, 0x9b, 0x5d, 0xcb, 0x21, 0xcf, 0x61, 0x51, 0x29, 0xa2, 0xbc, 0x97,
+ 0x64, 0x78, 0x75, 0x38, 0xcf, 0x4a, 0xa8, 0x4a, 0x80, 0x51, 0xae, 0xcf, 0x14, 0x32, 0xd3, 0x37,
+ 0x15, 0x32, 0x33, 0xfd, 0x85, 0x4c, 0xfa, 0x90, 0x98, 0xbd, 0xe9, 0x90, 0x98, 0xeb, 0x3f, 0x24,
+ 0x1e, 0x42, 0xf9, 0x84, 0x06, 0x46, 0x40, 0x45, 0x09, 0x48, 0x6d, 0x75, 0xd0, 0x96, 0x4e, 0x68,
+ 0xa0, 0x2b, 0x11, 0x79, 0x00, 0x25, 0xd7, 0xb2, 0x3b, 0xd1, 0xfc, 0xcb, 0xb3, 0x15, 0x84, 0x48,
+ 0x4d, 0xbe, 0xe8, 0x9c, 0xed, 0x44, 0xfa, 0x45, 0xd5, 0x39, 0xdb, 0x19, 0xb6, 0xd1, 0x97, 0xfa,
+ 0x37, 0xfa, 0x3f, 0xe7, 0xb0, 0x02, 0x7d, 0xdf, 0x62, 0xef, 0x1d, 0x1f, 0x67, 0xde, 0x51, 0xf0,
+ 0xa5, 0x67, 0x78, 0x6c, 0x60, 0x86, 0x53, 0xf3, 0x34, 0xde, 0x3f, 0x4f, 0xe9, 0x19, 0xce, 0x67,
+ 0x67, 0xf8, 0xe6, 0xf1, 0xfd, 0x6d, 0x0e, 0xaa, 0xd9, 0xbb, 0x5d, 0xe9, 0xe7, 0xc3, 0x5c, 0xe6,
+ 0x0b, 0xd2, 0xf7, 0xaf, 0x64, 0xbf, 0x7f, 0x95, 0x70, 0x73, 0x1a, 0xfe, 0x1a, 0x2a, 0x99, 0xcb,
+ 0x60, 0xd7, 0x2f, 0xcc, 0x1c, 0xe4, 0x43, 0x6e, 0xf2, 0x5e, 0xa8, 0xde, 0x7d, 0xaa, 0x96, 0xf6,
+ 0x2d, 0x4c, 0x0f, 0xb9, 0x14, 0xf6, 0xc1, 0xd9, 0x3c, 0xa1, 0x1f, 0xcd, 0xd0, 0xff, 0xe5, 0x08,
+ 0x7e, 0x1e, 0xea, 0xbf, 0xdc, 0xf6, 0x3d, 0x3e, 0x86, 0xbb, 0x2c, 0x34, 0x32, 0x2e, 0x26, 0x5c,
+ 0x16, 0x1e, 0xa3, 0x40, 0xaa, 0x4f, 0x22, 0xf5, 0x58, 0xa4, 0x3e, 0x51, 0xea, 0xc7, 0x50, 0x73,
+ 0x99, 0x6f, 0xc9, 0x73, 0x41, 0x81, 0xe4, 0x3b, 0xfb, 0xaa, 0x90, 0x8b, 0xf3, 0x40, 0x21, 0xd7,
+ 0x61, 0x56, 0x21, 0x55, 0x46, 0x88, 0xe0, 0x79, 0xf9, 0x69, 0x41, 0xc2, 0x65, 0x3e, 0x50, 0x26,
+ 0x62, 0xfb, 0xb1, 0xb6, 0x13, 0x01, 0x0b, 0xf2, 0x75, 0x98, 0x10, 0x29, 0xc0, 0x43, 0x28, 0x8b,
+ 0xcc, 0x14, 0x23, 0x8a, 0x88, 0x28, 0xa1, 0x4c, 0x42, 0x34, 0x0a, 0xcb, 0x37, 0x5c, 0x85, 0xbb,
+ 0xb5, 0xc5, 0xf8, 0xd3, 0x1c, 0x2c, 0x5d, 0x7f, 0x2f, 0xee, 0xb6, 0xdc, 0x90, 0x2f, 0x60, 0xce,
+ 0xf1, 0xce, 0x69, 0x10, 0x52, 0x43, 0x3c, 0x8d, 0xcb, 0x79, 0x0c, 0x4c, 0x1e, 0x7d, 0x92, 0x9b,
+ 0x56, 0xda, 0x97, 0x8e, 0xbc, 0xe9, 0xa2, 0x9b, 0x9c, 0x6a, 0xbf, 0x91, 0x7d, 0xbb, 0xe6, 0x5a,
+ 0xdd, 0xad, 0xf5, 0x6d, 0x06, 0xc6, 0x93, 0x2a, 0xa2, 0xa0, 0xcb, 0x86, 0x60, 0xf7, 0xe8, 0x85,
+ 0x41, 0xbf, 0x8b, 0xde, 0x5a, 0xe5, 0x3d, 0x7a, 0x51, 0xff, 0xce, 0xd6, 0x4e, 0xe1, 0xfe, 0xcd,
+ 0x97, 0xf2, 0x6e, 0x6d, 0x6d, 0xfe, 0x2c, 0x27, 0x63, 0xe0, 0x9a, 0x6b, 0x7a, 0xff, 0xb7, 0x8b,
+ 0xf3, 0xab, 0x1c, 0x68, 0xef, 0xbe, 0xf2, 0xf7, 0xbf, 0xbb, 0x48, 0xda, 0x77, 0xb8, 0x16, 0x37,
+ 0x5c, 0x0d, 0xfc, 0x60, 0xff, 0x0f, 0xb2, 0xd7, 0x5c, 0xe4, 0xeb, 0xcd, 0xf4, 0xcd, 0x95, 0x33,
+ 0x78, 0xf8, 0xce, 0x7b, 0x7c, 0xb7, 0x16, 0x01, 0x2d, 0x20, 0xba, 0x3a, 0x94, 0x53, 0xec, 0xa2,
+ 0x38, 0x8a, 0x0e, 0x6f, 0xc3, 0x62, 0x3d, 0x8f, 0xa3, 0x17, 0x51, 0x1c, 0x29, 0xf0, 0xb6, 0x10,
+ 0x5e, 0x9b, 0xdf, 0xff, 0x24, 0x07, 0x0b, 0xd7, 0x5d, 0x14, 0xfc, 0xe0, 0xae, 0x6f, 0x41, 0x25,
+ 0xe9, 0xcc, 0xb0, 0xab, 0xc1, 0x83, 0x03, 0xd8, 0xbb, 0xa3, 0x97, 0x82, 0x44, 0xfa, 0xb2, 0x80,
+ 0x1f, 0x9e, 0x78, 0xa8, 0x1d, 0xc2, 0xdd, 0x9b, 0xae, 0x61, 0x7e, 0x68, 0xdf, 0xb4, 0x5f, 0xc2,
+ 0xca, 0xbb, 0xae, 0x2c, 0xde, 0xda, 0x52, 0xfd, 0x12, 0x16, 0xaf, 0xbd, 0xb7, 0xf8, 0x7d, 0xce,
+ 0xb6, 0x54, 0x79, 0x36, 0xda, 0x57, 0x9e, 0x69, 0x7f, 0x91, 0x83, 0xc7, 0xef, 0x7b, 0x89, 0xf1,
+ 0xd6, 0x76, 0xe0, 0xe7, 0x40, 0xd2, 0x17, 0x2b, 0x55, 0xdf, 0xe4, 0x76, 0x9c, 0x4a, 0x69, 0x54,
+ 0x1f, 0xbb, 0xf0, 0xd1, 0x7b, 0x5c, 0x77, 0xbc, 0xb5, 0xe9, 0x77, 0x31, 0x1b, 0xbd, 0xe3, 0xca,
+ 0xe3, 0xad, 0x79, 0xfb, 0xa3, 0x1c, 0x7c, 0xf2, 0x7e, 0x97, 0x1f, 0x6f, 0x6d, 0xfa, 0x97, 0xa0,
+ 0xd8, 0x77, 0x8d, 0x25, 0x6e, 0x6b, 0xff, 0x91, 0x83, 0xd2, 0x6e, 0xc0, 0x7a, 0xfe, 0x01, 0xc5,
+ 0x17, 0xba, 0x0f, 0xa1, 0xec, 0x44, 0x77, 0x92, 0x22, 0xc7, 0x15, 0xfc, 0xc9, 0x87, 0x94, 0x35,
+ 0x6c, 0xd2, 0x80, 0x6a, 0x02, 0xc1, 0x0f, 0x16, 0xf2, 0x43, 0x72, 0x72, 0x0b, 0x37, 0x45, 0xb8,
+ 0x1a, 0xdf, 0x70, 0xc2, 0x2f, 0xc6, 0x15, 0x27, 0xdd, 0x24, 0xf7, 0xa1, 0x24, 0x9e, 0xe3, 0xa2,
+ 0x02, 0x7f, 0x14, 0x9d, 0x89, 0x02, 0xff, 0x48, 0x16, 0xf8, 0xe9, 0x2f, 0x07, 0x63, 0xa8, 0x8c,
+ 0xdb, 0xda, 0xff, 0x87, 0x4a, 0x86, 0x9b, 0x14, 0x60, 0xf4, 0xa8, 0x79, 0x58, 0xbb, 0x43, 0x6a,
+ 0x50, 0xae, 0x1f, 0x35, 0x0f, 0x8d, 0xf5, 0x5d, 0xe3, 0x68, 0xab, 0xb5, 0x57, 0xcb, 0x91, 0x29,
+ 0xa8, 0x48, 0xc9, 0x13, 0x25, 0x1a, 0xd1, 0xfe, 0x60, 0x04, 0xc6, 0xb1, 0x9f, 0x99, 0x2f, 0x0a,
+ 0x72, 0xb8, 0xf1, 0x17, 0x85, 0x1f, 0x43, 0xc1, 0x62, 0xdd, 0xae, 0xa9, 0x7e, 0xfb, 0x30, 0x30,
+ 0xc6, 0xf4, 0x48, 0xc3, 0x6d, 0x89, 0xd4, 0x23, 0x13, 0xb2, 0x0a, 0x85, 0xae, 0x54, 0xa9, 0x6b,
+ 0x00, 0x33, 0xc3, 0x66, 0x48, 0x8f, 0x40, 0xa9, 0x0f, 0x2a, 0x63, 0x37, 0x7e, 0x50, 0xd1, 0xbe,
+ 0x81, 0xe9, 0x21, 0x8e, 0xc9, 0x24, 0x94, 0xb6, 0x76, 0x76, 0x8c, 0x83, 0xfa, 0xc1, 0xcb, 0xba,
+ 0x7e, 0x5c, 0xbb, 0x43, 0x08, 0x54, 0xf5, 0xfa, 0x41, 0xf3, 0x4d, 0x3d, 0x96, 0xe5, 0x04, 0xe8,
+ 0xb8, 0xde, 0x8a, 0x05, 0x23, 0xda, 0xb7, 0x00, 0x6f, 0x4c, 0xb7, 0x47, 0x8f, 0xcc, 0xc0, 0xec,
+ 0x92, 0xfb, 0x30, 0xca, 0xbc, 0x9e, 0xfa, 0xb4, 0x57, 0xce, 0xdc, 0xab, 0x16, 0x0a, 0xb2, 0x96,
+ 0xfe, 0x34, 0x50, 0xdd, 0x58, 0x5c, 0x8d, 0x7f, 0xcc, 0xb4, 0x8a, 0x2c, 0x62, 0x25, 0x56, 0x71,
+ 0xa9, 0x25, 0x4e, 0xfb, 0xbb, 0x11, 0xa8, 0x1e, 0x31, 0x4f, 0xbf, 0x3c, 0x62, 0x17, 0x34, 0xd8,
+ 0x31, 0xb9, 0x79, 0x6b, 0x71, 0xad, 0x67, 0x0f, 0xdc, 0x31, 0xec, 0xd1, 0x7a, 0xea, 0xd7, 0x39,
+ 0x69, 0xaf, 0xab, 0x7a, 0x18, 0x3a, 0x07, 0xd4, 0x0c, 0x7b, 0x01, 0x6e, 0xed, 0xe1, 0xb7, 0x4b,
+ 0xd5, 0x9b, 0x6e, 0x5f, 0x58, 0x19, 0x5d, 0x6a, 0x7a, 0x86, 0x7d, 0xd2, 0xc5, 0x2a, 0x2e, 0xa7,
+ 0x57, 0x03, 0xc9, 0x76, 0x40, 0x4d, 0x6f, 0xe7, 0xa4, 0x2b, 0xd2, 0xf6, 0xb5, 0x9c, 0x64, 0x06,
+ 0x6a, 0x43, 0x6e, 0x9f, 0xde, 0x85, 0x85, 0xac, 0xd4, 0xd8, 0xa9, 0xef, 0x37, 0x0e, 0x1a, 0xad,
+ 0xba, 0x5e, 0xcb, 0x91, 0x45, 0x98, 0xed, 0xd3, 0x6e, 0x6d, 0x6f, 0xd7, 0x8f, 0xc5, 0x22, 0x15,
+ 0x60, 0xbc, 0xde, 0xf5, 0xf9, 0xd5, 0xc6, 0x9f, 0xcf, 0x40, 0xa1, 0x29, 0x07, 0x48, 0x76, 0x00,
+ 0x76, 0x9c, 0xd0, 0x3c, 0x71, 0x69, 0xd3, 0xe5, 0xa4, 0x1a, 0x0f, 0x1c, 0x91, 0x4b, 0x7d, 0x6d,
+ 0x6d, 0xee, 0x57, 0xff, 0xf4, 0x2f, 0xbf, 0x19, 0xa9, 0x69, 0xa5, 0xb5, 0xf3, 0xf5, 0x35, 0x65,
+ 0xf7, 0x55, 0xee, 0x33, 0xf2, 0x0a, 0x4a, 0x3a, 0xa5, 0xde, 0xfb, 0xd2, 0xcc, 0x23, 0xcd, 0x94,
+ 0x56, 0x16, 0x34, 0x91, 0xa1, 0xe0, 0xa9, 0x43, 0x49, 0x55, 0x53, 0xb4, 0xe9, 0xf5, 0x48, 0x26,
+ 0x76, 0x06, 0x58, 0x16, 0x90, 0x85, 0x68, 0x15, 0xc1, 0x52, 0x97, 0xce, 0xbd, 0x9e, 0xa0, 0xd9,
+ 0x83, 0x4a, 0x7c, 0xea, 0xbe, 0x07, 0xd1, 0x22, 0x12, 0x4d, 0x6b, 0xd5, 0xd4, 0xa8, 0x14, 0xd3,
+ 0x36, 0x4c, 0xec, 0x50, 0x97, 0x7e, 0x70, 0x77, 0x62, 0x23, 0x41, 0xd2, 0x00, 0x50, 0x97, 0xfb,
+ 0x9a, 0x3d, 0x4e, 0x6a, 0x99, 0x1f, 0x9a, 0x1d, 0x84, 0x9d, 0x9b, 0xfb, 0x93, 0x58, 0x0a, 0xaa,
+ 0x26, 0x94, 0xe3, 0x9b, 0x7d, 0x82, 0x8c, 0x64, 0x2e, 0xf7, 0xa3, 0x78, 0x80, 0x6e, 0x19, 0xe9,
+ 0x66, 0xb5, 0x1a, 0xd2, 0xa5, 0xac, 0x05, 0xe1, 0xef, 0xc0, 0x64, 0xfa, 0x8e, 0x9e, 0xe0, 0x4c,
+ 0xee, 0x67, 0xa6, 0x35, 0x03, 0xb4, 0xf7, 0x91, 0x76, 0x41, 0x9b, 0x16, 0xb4, 0x7d, 0x1c, 0x82,
+ 0xf9, 0x6b, 0x28, 0xbc, 0x72, 0xd9, 0xc5, 0x96, 0x6d, 0x93, 0x4a, 0xe6, 0x1b, 0xe5, 0xcd, 0x51,
+ 0xa5, 0x6c, 0x64, 0x54, 0x81, 0x68, 0xe9, 0x78, 0x47, 0xe1, 0x5d, 0x24, 0x99, 0x49, 0x4b, 0xcc,
+ 0x04, 0xcf, 0x31, 0x54, 0xe3, 0xdb, 0xaf, 0xdb, 0xa7, 0xd4, 0x3a, 0x1b, 0x08, 0xd0, 0x64, 0x1a,
+ 0x63, 0xa0, 0x76, 0x0f, 0x09, 0xe7, 0x35, 0x22, 0x08, 0xb3, 0xf6, 0x82, 0xf4, 0x00, 0x4a, 0x32,
+ 0xe6, 0x8e, 0x98, 0xd7, 0x68, 0xa7, 0x16, 0x22, 0x3e, 0x50, 0x06, 0xba, 0xb8, 0x84, 0x8c, 0x33,
+ 0xda, 0x64, 0x12, 0xb0, 0x68, 0xac, 0x16, 0x56, 0x45, 0xde, 0xfb, 0xf3, 0x65, 0x16, 0x36, 0x6d,
+ 0x2d, 0x08, 0x75, 0xa8, 0xec, 0x52, 0x9e, 0xba, 0x43, 0xd9, 0x3f, 0xe6, 0xe9, 0x21, 0x77, 0xb6,
+ 0xb4, 0xbb, 0x48, 0x39, 0xa7, 0x4d, 0x09, 0xca, 0x8c, 0xbd, 0xe0, 0xfc, 0x29, 0xe4, 0x75, 0x7a,
+ 0xc2, 0xd8, 0xbb, 0x77, 0xf8, 0x2c, 0xf2, 0x4c, 0x6a, 0x20, 0x77, 0xb8, 0xb0, 0x11, 0x04, 0xaf,
+ 0x61, 0x6a, 0x9b, 0xb9, 0x2e, 0xb5, 0xd2, 0x6f, 0xee, 0xde, 0xc5, 0xb5, 0x82, 0x5c, 0x4b, 0xda,
+ 0xac, 0xe0, 0x1a, 0x30, 0x17, 0xb4, 0x3f, 0x83, 0xda, 0x2e, 0xe5, 0xd9, 0x97, 0xff, 0xd9, 0xcd,
+ 0x3a, 0xd7, 0xf7, 0x03, 0x3f, 0x85, 0xd2, 0x1e, 0x20, 0xf7, 0xa2, 0x36, 0xa3, 0xc6, 0x9b, 0xd1,
+ 0x0a, 0xea, 0x33, 0x98, 0xd9, 0xa5, 0x7c, 0xf0, 0x75, 0xe3, 0xb0, 0x8d, 0x97, 0xfc, 0x62, 0x75,
+ 0x00, 0xaf, 0x7d, 0x84, 0x8e, 0xee, 0x69, 0x0b, 0xca, 0xd1, 0x00, 0x42, 0x38, 0x0b, 0x60, 0x7e,
+ 0x3b, 0xa0, 0x26, 0xa7, 0xad, 0xc0, 0x6c, 0xb7, 0x1d, 0xeb, 0xd8, 0x3a, 0xa5, 0x76, 0xcf, 0x15,
+ 0xe7, 0xfa, 0x83, 0xd5, 0xcc, 0x6f, 0x86, 0x07, 0x00, 0x03, 0xb3, 0xf6, 0x09, 0x3a, 0x5c, 0xd1,
+ 0x96, 0x71, 0xd6, 0x86, 0xb3, 0x2a, 0x9f, 0x72, 0xa7, 0xdc, 0xb6, 0xcf, 0x6b, 0x58, 0x85, 0xcf,
+ 0x36, 0x4c, 0x67, 0x7a, 0xf4, 0xdb, 0x3d, 0xda, 0xa3, 0x21, 0x59, 0x1e, 0xea, 0x4f, 0x2a, 0x07,
+ 0x7c, 0x69, 0xe8, 0xeb, 0xae, 0x36, 0x3f, 0x30, 0x3e, 0x69, 0xa0, 0xfc, 0x64, 0x7a, 0xf1, 0x3f,
+ 0xf6, 0x33, 0x84, 0x4d, 0xf8, 0xf9, 0x7f, 0x50, 0x93, 0xdb, 0x39, 0x55, 0x78, 0x5f, 0xbf, 0xdd,
+ 0x12, 0x90, 0x76, 0xe7, 0x49, 0x8e, 0x7c, 0x0b, 0xb3, 0x47, 0x34, 0x68, 0xb3, 0xa0, 0x8b, 0xf5,
+ 0x58, 0xd3, 0xa7, 0x41, 0x3f, 0x03, 0x2a, 0x06, 0x7a, 0xf6, 0x08, 0x7b, 0x76, 0x5f, 0x5b, 0x14,
+ 0x3d, 0x1b, 0x4a, 0x21, 0x0f, 0x9f, 0x92, 0x3c, 0x8c, 0x64, 0xa1, 0xfa, 0x2e, 0xd2, 0x4c, 0x8e,
+ 0x4a, 0x19, 0x0a, 0xaa, 0xb7, 0x50, 0xda, 0xa5, 0xbc, 0x7e, 0xc9, 0xb1, 0x4a, 0x23, 0xc9, 0x88,
+ 0x92, 0xda, 0x6f, 0x69, 0x3e, 0x55, 0xcc, 0xe9, 0x94, 0xf7, 0x02, 0x0f, 0x95, 0x61, 0x96, 0x38,
+ 0x45, 0x23, 0x88, 0xbf, 0xc5, 0x1f, 0x41, 0xc9, 0x17, 0x02, 0xf8, 0x5e, 0xf6, 0x98, 0x72, 0x32,
+ 0xb7, 0xaa, 0x7e, 0xff, 0x9e, 0x55, 0xdd, 0x9c, 0x1e, 0x06, 0x68, 0x04, 0xbd, 0x0f, 0x8b, 0xbb,
+ 0x94, 0xef, 0x0f, 0xbf, 0xab, 0x9f, 0xcd, 0x13, 0xcb, 0xd9, 0x5f, 0xb0, 0x65, 0x7e, 0x41, 0xa0,
+ 0x3d, 0x46, 0x4f, 0x9a, 0x76, 0x4f, 0x0d, 0x61, 0x38, 0xa3, 0xf0, 0x78, 0x0a, 0xb3, 0x43, 0xf5,
+ 0x1f, 0xe2, 0x2d, 0xb3, 0xbc, 0x43, 0xd9, 0x84, 0xa7, 0x16, 0xa6, 0xf9, 0xa4, 0x4c, 0xed, 0xf3,
+ 0x30, 0x7f, 0x4d, 0x25, 0x3b, 0x90, 0xe8, 0x13, 0xf5, 0x57, 0xb9, 0xcf, 0x5e, 0x7e, 0x0b, 0xcb,
+ 0x2c, 0xe8, 0xa0, 0xad, 0xc5, 0x02, 0x7b, 0x55, 0xfe, 0xdf, 0x03, 0x11, 0xd7, 0xcb, 0xca, 0x1b,
+ 0x6c, 0x8b, 0x1a, 0xb2, 0xb9, 0xdf, 0xfa, 0xf9, 0x5a, 0xc7, 0xe1, 0xa7, 0xbd, 0x93, 0x55, 0x8b,
+ 0x75, 0xd7, 0x22, 0x93, 0x35, 0x69, 0xf2, 0xb9, 0xfa, 0xef, 0x0a, 0xce, 0x37, 0xd7, 0x3a, 0x2c,
+ 0xfa, 0xaf, 0x13, 0x4e, 0xf2, 0x28, 0xfd, 0xe2, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb0, 0xed,
+ 0x77, 0x2e, 0x5a, 0x41, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.