Use protobuf to decode mqtt msg

This commit is contained in:
2020-01-04 14:36:39 +01:00
parent 310b2850c0
commit c724e9e8af
131 changed files with 6116 additions and 10699 deletions

View File

@@ -6,6 +6,7 @@ package events
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
timestamp "github.com/golang/protobuf/ptypes/timestamp"
math "math"
)
@@ -20,6 +21,34 @@ var _ = math.Inf
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type DriveMode int32
const (
DriveMode_INVALID DriveMode = 0
DriveMode_USER DriveMode = 1
DriveMode_PILOT DriveMode = 2
)
var DriveMode_name = map[int32]string{
0: "INVALID",
1: "USER",
2: "PILOT",
}
var DriveMode_value = map[string]int32{
"INVALID": 0,
"USER": 1,
"PILOT": 2,
}
func (x DriveMode) String() string {
return proto.EnumName(DriveMode_name, int32(x))
}
func (DriveMode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{0}
}
type TypeObject int32
const (
@@ -48,15 +77,16 @@ func (x TypeObject) String() string {
}
func (TypeObject) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{0}
return fileDescriptor_8ec31f2d2a3db598, []int{1}
}
type FrameRef struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
CreatedAt *timestamp.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FrameRef) Reset() { *m = FrameRef{} }
@@ -98,6 +128,13 @@ func (m *FrameRef) GetId() string {
return ""
}
func (m *FrameRef) GetCreatedAt() *timestamp.Timestamp {
if m != nil {
return m.CreatedAt
}
return nil
}
type FrameMessage struct {
Id *FrameRef `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Frame []byte `protobuf:"bytes,2,opt,name=frame,proto3" json:"frame,omitempty"`
@@ -255,6 +292,45 @@ func (m *ThrottleMessage) GetFrameRef() *FrameRef {
return nil
}
type DriveModeMessage struct {
DriveMode DriveMode `protobuf:"varint,1,opt,name=drive_mode,json=driveMode,proto3,enum=robocar.events.DriveMode" json:"drive_mode,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DriveModeMessage) Reset() { *m = DriveModeMessage{} }
func (m *DriveModeMessage) String() string { return proto.CompactTextString(m) }
func (*DriveModeMessage) ProtoMessage() {}
func (*DriveModeMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{4}
}
func (m *DriveModeMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DriveModeMessage.Unmarshal(m, b)
}
func (m *DriveModeMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DriveModeMessage.Marshal(b, m, deterministic)
}
func (m *DriveModeMessage) XXX_Merge(src proto.Message) {
xxx_messageInfo_DriveModeMessage.Merge(m, src)
}
func (m *DriveModeMessage) XXX_Size() int {
return xxx_messageInfo_DriveModeMessage.Size(m)
}
func (m *DriveModeMessage) XXX_DiscardUnknown() {
xxx_messageInfo_DriveModeMessage.DiscardUnknown(m)
}
var xxx_messageInfo_DriveModeMessage proto.InternalMessageInfo
func (m *DriveModeMessage) GetDriveMode() DriveMode {
if m != nil {
return m.DriveMode
}
return DriveMode_INVALID
}
type ObjectsMessage struct {
Objects []*Object `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"`
FrameRef *FrameRef `protobuf:"bytes,2,opt,name=frame_ref,json=frameRef,proto3" json:"frame_ref,omitempty"`
@@ -267,7 +343,7 @@ func (m *ObjectsMessage) Reset() { *m = ObjectsMessage{} }
func (m *ObjectsMessage) String() string { return proto.CompactTextString(m) }
func (*ObjectsMessage) ProtoMessage() {}
func (*ObjectsMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{4}
return fileDescriptor_8ec31f2d2a3db598, []int{5}
}
func (m *ObjectsMessage) XXX_Unmarshal(b []byte) error {
@@ -302,10 +378,11 @@ func (m *ObjectsMessage) GetFrameRef() *FrameRef {
return nil
}
// BoundingBox that contains an object
type Object struct {
Type TypeObject `protobuf:"varint,1,opt,name=type,proto3,enum=robocar.events.TypeObject" json:"type,omitempty"`
LLeft int32 `protobuf:"varint,2,opt,name=lLeft,proto3" json:"lLeft,omitempty"`
Up int32 `protobuf:"varint,3,opt,name=up,proto3" json:"up,omitempty"`
Left int32 `protobuf:"varint,2,opt,name=left,proto3" json:"left,omitempty"`
Top int32 `protobuf:"varint,3,opt,name=top,proto3" json:"top,omitempty"`
Right int32 `protobuf:"varint,4,opt,name=right,proto3" json:"right,omitempty"`
Bottom int32 `protobuf:"varint,5,opt,name=bottom,proto3" json:"bottom,omitempty"`
Confidence float32 `protobuf:"fixed32,6,opt,name=confidence,proto3" json:"confidence,omitempty"`
@@ -318,7 +395,7 @@ func (m *Object) Reset() { *m = Object{} }
func (m *Object) String() string { return proto.CompactTextString(m) }
func (*Object) ProtoMessage() {}
func (*Object) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{5}
return fileDescriptor_8ec31f2d2a3db598, []int{6}
}
func (m *Object) XXX_Unmarshal(b []byte) error {
@@ -346,16 +423,16 @@ func (m *Object) GetType() TypeObject {
return TypeObject_ANY
}
func (m *Object) GetLLeft() int32 {
func (m *Object) GetLeft() int32 {
if m != nil {
return m.LLeft
return m.Left
}
return 0
}
func (m *Object) GetUp() int32 {
func (m *Object) GetTop() int32 {
if m != nil {
return m.Up
return m.Top
}
return 0
}
@@ -381,42 +458,278 @@ func (m *Object) GetConfidence() float32 {
return 0
}
type SwitchRecordMessage struct {
Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SwitchRecordMessage) Reset() { *m = SwitchRecordMessage{} }
func (m *SwitchRecordMessage) String() string { return proto.CompactTextString(m) }
func (*SwitchRecordMessage) ProtoMessage() {}
func (*SwitchRecordMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{7}
}
func (m *SwitchRecordMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SwitchRecordMessage.Unmarshal(m, b)
}
func (m *SwitchRecordMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SwitchRecordMessage.Marshal(b, m, deterministic)
}
func (m *SwitchRecordMessage) XXX_Merge(src proto.Message) {
xxx_messageInfo_SwitchRecordMessage.Merge(m, src)
}
func (m *SwitchRecordMessage) XXX_Size() int {
return xxx_messageInfo_SwitchRecordMessage.Size(m)
}
func (m *SwitchRecordMessage) XXX_DiscardUnknown() {
xxx_messageInfo_SwitchRecordMessage.DiscardUnknown(m)
}
var xxx_messageInfo_SwitchRecordMessage proto.InternalMessageInfo
func (m *SwitchRecordMessage) GetEnabled() bool {
if m != nil {
return m.Enabled
}
return false
}
// Road description
type RoadMessage struct {
Contour []*Point `protobuf:"bytes,1,rep,name=contour,proto3" json:"contour,omitempty"`
Ellipse *Ellipse `protobuf:"bytes,2,opt,name=ellipse,proto3" json:"ellipse,omitempty"`
FrameRef *FrameRef `protobuf:"bytes,3,opt,name=frame_ref,json=frameRef,proto3" json:"frame_ref,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RoadMessage) Reset() { *m = RoadMessage{} }
func (m *RoadMessage) String() string { return proto.CompactTextString(m) }
func (*RoadMessage) ProtoMessage() {}
func (*RoadMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{8}
}
func (m *RoadMessage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RoadMessage.Unmarshal(m, b)
}
func (m *RoadMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RoadMessage.Marshal(b, m, deterministic)
}
func (m *RoadMessage) XXX_Merge(src proto.Message) {
xxx_messageInfo_RoadMessage.Merge(m, src)
}
func (m *RoadMessage) XXX_Size() int {
return xxx_messageInfo_RoadMessage.Size(m)
}
func (m *RoadMessage) XXX_DiscardUnknown() {
xxx_messageInfo_RoadMessage.DiscardUnknown(m)
}
var xxx_messageInfo_RoadMessage proto.InternalMessageInfo
func (m *RoadMessage) GetContour() []*Point {
if m != nil {
return m.Contour
}
return nil
}
func (m *RoadMessage) GetEllipse() *Ellipse {
if m != nil {
return m.Ellipse
}
return nil
}
func (m *RoadMessage) GetFrameRef() *FrameRef {
if m != nil {
return m.FrameRef
}
return nil
}
type Point struct {
X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"`
Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Point) Reset() { *m = Point{} }
func (m *Point) String() string { return proto.CompactTextString(m) }
func (*Point) ProtoMessage() {}
func (*Point) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{9}
}
func (m *Point) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Point.Unmarshal(m, b)
}
func (m *Point) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Point.Marshal(b, m, deterministic)
}
func (m *Point) XXX_Merge(src proto.Message) {
xxx_messageInfo_Point.Merge(m, src)
}
func (m *Point) XXX_Size() int {
return xxx_messageInfo_Point.Size(m)
}
func (m *Point) XXX_DiscardUnknown() {
xxx_messageInfo_Point.DiscardUnknown(m)
}
var xxx_messageInfo_Point proto.InternalMessageInfo
func (m *Point) GetX() int32 {
if m != nil {
return m.X
}
return 0
}
func (m *Point) GetY() int32 {
if m != nil {
return m.Y
}
return 0
}
type Ellipse struct {
Center *Point `protobuf:"bytes,1,opt,name=center,proto3" json:"center,omitempty"`
Width int32 `protobuf:"varint,2,opt,name=width,proto3" json:"width,omitempty"`
Height int32 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"`
Angle float32 `protobuf:"fixed32,4,opt,name=angle,proto3" json:"angle,omitempty"`
Confidence float32 `protobuf:"fixed32,5,opt,name=confidence,proto3" json:"confidence,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Ellipse) Reset() { *m = Ellipse{} }
func (m *Ellipse) String() string { return proto.CompactTextString(m) }
func (*Ellipse) ProtoMessage() {}
func (*Ellipse) Descriptor() ([]byte, []int) {
return fileDescriptor_8ec31f2d2a3db598, []int{10}
}
func (m *Ellipse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Ellipse.Unmarshal(m, b)
}
func (m *Ellipse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Ellipse.Marshal(b, m, deterministic)
}
func (m *Ellipse) XXX_Merge(src proto.Message) {
xxx_messageInfo_Ellipse.Merge(m, src)
}
func (m *Ellipse) XXX_Size() int {
return xxx_messageInfo_Ellipse.Size(m)
}
func (m *Ellipse) XXX_DiscardUnknown() {
xxx_messageInfo_Ellipse.DiscardUnknown(m)
}
var xxx_messageInfo_Ellipse proto.InternalMessageInfo
func (m *Ellipse) GetCenter() *Point {
if m != nil {
return m.Center
}
return nil
}
func (m *Ellipse) GetWidth() int32 {
if m != nil {
return m.Width
}
return 0
}
func (m *Ellipse) GetHeight() int32 {
if m != nil {
return m.Height
}
return 0
}
func (m *Ellipse) GetAngle() float32 {
if m != nil {
return m.Angle
}
return 0
}
func (m *Ellipse) GetConfidence() float32 {
if m != nil {
return m.Confidence
}
return 0
}
func init() {
proto.RegisterEnum("robocar.events.DriveMode", DriveMode_name, DriveMode_value)
proto.RegisterEnum("robocar.events.TypeObject", TypeObject_name, TypeObject_value)
proto.RegisterType((*FrameRef)(nil), "robocar.events.FrameRef")
proto.RegisterType((*FrameMessage)(nil), "robocar.events.FrameMessage")
proto.RegisterType((*SteeringMessage)(nil), "robocar.events.SteeringMessage")
proto.RegisterType((*ThrottleMessage)(nil), "robocar.events.ThrottleMessage")
proto.RegisterType((*DriveModeMessage)(nil), "robocar.events.DriveModeMessage")
proto.RegisterType((*ObjectsMessage)(nil), "robocar.events.ObjectsMessage")
proto.RegisterType((*Object)(nil), "robocar.events.Object")
proto.RegisterType((*SwitchRecordMessage)(nil), "robocar.events.SwitchRecordMessage")
proto.RegisterType((*RoadMessage)(nil), "robocar.events.RoadMessage")
proto.RegisterType((*Point)(nil), "robocar.events.Point")
proto.RegisterType((*Ellipse)(nil), "robocar.events.Ellipse")
}
func init() { proto.RegisterFile("events/events.proto", fileDescriptor_8ec31f2d2a3db598) }
var fileDescriptor_8ec31f2d2a3db598 = []byte{
// 383 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0x4d, 0x6f, 0x9b, 0x40,
0x10, 0x2d, 0xcb, 0x87, 0xf1, 0xd8, 0xa2, 0x68, 0x5b, 0x59, 0xc8, 0x87, 0xca, 0xf2, 0xc9, 0xea,
0x81, 0x56, 0x54, 0xfd, 0x01, 0x76, 0xa5, 0x9e, 0xfc, 0xa5, 0xad, 0x7b, 0x48, 0x2e, 0x11, 0xe0,
0xc5, 0x26, 0xb2, 0x59, 0xb4, 0xac, 0x23, 0xf9, 0x9e, 0x9f, 0x93, 0x1f, 0x19, 0xed, 0x2e, 0x24,
0x36, 0x97, 0xe4, 0x92, 0x13, 0xf3, 0x1e, 0x6f, 0xde, 0xbc, 0x59, 0x58, 0xf8, 0x42, 0x1f, 0x68,
0x21, 0xaa, 0x1f, 0xfa, 0x11, 0x96, 0x9c, 0x09, 0x86, 0x3d, 0xce, 0x12, 0x96, 0xc6, 0x3c, 0xd4,
0xec, 0x38, 0x04, 0xf7, 0x2f, 0x8f, 0x8f, 0x94, 0xd0, 0x0c, 0x63, 0xb0, 0x8a, 0xf8, 0x48, 0x03,
0x63, 0x64, 0x4c, 0xba, 0x44, 0xd5, 0xd8, 0x03, 0x94, 0x6f, 0x03, 0xa4, 0x18, 0x94, 0x6f, 0xc7,
0x4b, 0xe8, 0x2b, 0xfd, 0x82, 0x56, 0x55, 0xbc, 0xa3, 0x78, 0xa2, 0xde, 0xcb, 0x8e, 0x5e, 0x14,
0x84, 0xd7, 0xe6, 0x61, 0xe3, 0x2c, 0x3b, 0xf1, 0x57, 0xb0, 0x33, 0x89, 0x95, 0x59, 0x9f, 0x68,
0x30, 0x7e, 0x34, 0xe0, 0xf3, 0x3f, 0x41, 0x29, 0xcf, 0x8b, 0x5d, 0xe3, 0x39, 0x04, 0xb7, 0xaa,
0x29, 0xe5, 0x8c, 0xc8, 0x0b, 0xc6, 0xdf, 0x00, 0x52, 0x56, 0x64, 0xf9, 0x96, 0x16, 0xa9, 0xb6,
0x42, 0xe4, 0x82, 0xc1, 0xbf, 0xa1, 0xab, 0x8c, 0xef, 0x38, 0xcd, 0x02, 0xf3, 0x8d, 0x58, 0x6e,
0x56, 0x57, 0x2a, 0xc6, 0x66, 0xcf, 0x99, 0x10, 0x07, 0x7a, 0x11, 0x43, 0xd4, 0x54, 0x13, 0xa3,
0xc1, 0x1f, 0x15, 0xe3, 0x0c, 0xde, 0x2a, 0xb9, 0xa7, 0xa9, 0xa8, 0x9a, 0x10, 0x3f, 0xa1, 0xc3,
0x34, 0x13, 0x18, 0x23, 0x73, 0xd2, 0x8b, 0x06, 0x6d, 0x1b, 0xdd, 0x40, 0x1a, 0xd9, 0xf5, 0x68,
0xf4, 0xee, 0xd1, 0x4f, 0x06, 0x38, 0xda, 0x0a, 0x87, 0x60, 0x89, 0x73, 0xa9, 0x97, 0xf6, 0xa2,
0x61, 0xbb, 0x79, 0x73, 0x2e, 0x69, 0x3d, 0x54, 0xe9, 0xe4, 0x97, 0x3d, 0xcc, 0x69, 0x26, 0xd4,
0x34, 0x9b, 0x68, 0x20, 0xff, 0x9c, 0x53, 0xa9, 0x76, 0xb7, 0x09, 0x3a, 0x95, 0x52, 0xc5, 0xf3,
0xdd, 0x5e, 0x04, 0x96, 0x56, 0x29, 0x80, 0x07, 0xe0, 0x24, 0x4c, 0x08, 0x76, 0x0c, 0x6c, 0x45,
0xd7, 0xa8, 0x75, 0xc0, 0x4e, 0xfb, 0x80, 0xbf, 0x47, 0x00, 0xaf, 0x39, 0x70, 0x07, 0xcc, 0xe9,
0xf2, 0xc6, 0xff, 0x24, 0x8b, 0x3f, 0x53, 0xe2, 0x1b, 0xd8, 0x05, 0x6b, 0xf6, 0x7f, 0xb1, 0xf6,
0x91, 0xac, 0xd6, 0xf3, 0xd5, 0xc6, 0x37, 0x67, 0xee, 0xad, 0xa3, 0x57, 0x48, 0x1c, 0x75, 0x19,
0x7e, 0x3d, 0x07, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x83, 0x51, 0xbe, 0x23, 0x03, 0x00, 0x00,
// 649 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0xcb, 0x6e, 0xd3, 0x5c,
0x10, 0xae, 0x9d, 0x38, 0x76, 0x26, 0x55, 0x7e, 0xeb, 0xf4, 0xa7, 0x98, 0x2c, 0xa0, 0x32, 0x9b,
0xa8, 0x52, 0x1d, 0x08, 0x42, 0x82, 0x65, 0x4a, 0x8b, 0x54, 0xa9, 0x97, 0xe8, 0x34, 0x45, 0x82,
0x4d, 0xe4, 0xd8, 0xe3, 0xc4, 0xc8, 0xf1, 0x89, 0xec, 0xd3, 0x4b, 0xf6, 0x3c, 0x06, 0x0f, 0xc0,
0x82, 0x87, 0x44, 0x3e, 0x97, 0xd0, 0x5a, 0xaa, 0x84, 0x90, 0x58, 0x65, 0xbe, 0x39, 0x33, 0xdf,
0x7c, 0x73, 0x89, 0x61, 0x07, 0x6f, 0x30, 0xe7, 0xe5, 0x40, 0xfe, 0x04, 0xab, 0x82, 0x71, 0x46,
0xba, 0x05, 0x9b, 0xb1, 0x28, 0x2c, 0x02, 0xe9, 0xed, 0xbd, 0x98, 0x33, 0x36, 0xcf, 0x70, 0x20,
0x5e, 0x67, 0xd7, 0xc9, 0x80, 0xa7, 0x4b, 0x2c, 0x79, 0xb8, 0x5c, 0xc9, 0x04, 0x3f, 0x05, 0xe7,
0x63, 0x11, 0x2e, 0x91, 0x62, 0x42, 0x08, 0x34, 0xf3, 0x70, 0x89, 0x9e, 0xb1, 0x67, 0xf4, 0xdb,
0x54, 0xd8, 0xa4, 0x0b, 0x66, 0x1a, 0x7b, 0xa6, 0xf0, 0x98, 0x69, 0x4c, 0xde, 0x03, 0x44, 0x05,
0x86, 0x1c, 0xe3, 0x69, 0xc8, 0xbd, 0xc6, 0x9e, 0xd1, 0xef, 0x0c, 0x7b, 0x81, 0xac, 0x12, 0xe8,
0x2a, 0xc1, 0x44, 0x57, 0xa1, 0x6d, 0x15, 0x3d, 0xe2, 0xfe, 0x39, 0x6c, 0x8b, 0x52, 0x67, 0x58,
0x96, 0xe1, 0x1c, 0x49, 0x5f, 0x50, 0x1b, 0x82, 0xc2, 0x0b, 0x1e, 0x0a, 0x0f, 0xb4, 0x28, 0x51,
0xf4, 0x7f, 0xb0, 0x92, 0x0a, 0x0b, 0x1d, 0xdb, 0x54, 0x02, 0xff, 0x9b, 0x01, 0xff, 0x5d, 0x72,
0xc4, 0x22, 0xcd, 0xe7, 0x9a, 0xb3, 0x07, 0x4e, 0xa9, 0x5c, 0x82, 0xd9, 0xa4, 0x1b, 0x4c, 0x9e,
0x03, 0x44, 0x2c, 0x4f, 0xd2, 0x18, 0xf3, 0x48, 0x52, 0x99, 0xf4, 0x9e, 0x87, 0xbc, 0x85, 0xb6,
0x20, 0x9e, 0x16, 0x98, 0xa8, 0xce, 0x1e, 0x97, 0xe5, 0x24, 0xca, 0x12, 0x32, 0x26, 0x8b, 0x82,
0x71, 0x9e, 0xe1, 0x3d, 0x19, 0x5c, 0xb9, 0xb4, 0x0c, 0x8d, 0xff, 0x95, 0x8c, 0x53, 0x70, 0x8f,
0x8a, 0xf4, 0x06, 0xcf, 0x58, 0xbc, 0x91, 0xf1, 0x0e, 0x20, 0xae, 0x7c, 0xd3, 0x25, 0x8b, 0xa5,
0x90, 0xee, 0xf0, 0x59, 0x9d, 0x6b, 0x93, 0x45, 0xdb, 0xb1, 0x36, 0xfd, 0x35, 0x74, 0x2f, 0x66,
0x5f, 0x31, 0xe2, 0xa5, 0xe6, 0x7a, 0x05, 0x36, 0x93, 0x1e, 0xcf, 0xd8, 0x6b, 0xf4, 0x3b, 0xc3,
0xdd, 0x3a, 0x91, 0x4c, 0xa0, 0x3a, 0xec, 0x61, 0x23, 0xe6, 0x1f, 0x37, 0xf2, 0xd3, 0x80, 0x96,
0xa4, 0x22, 0x01, 0x34, 0xf9, 0x7a, 0xa5, 0x95, 0xf7, 0xea, 0xc9, 0x93, 0xf5, 0x0a, 0x55, 0x51,
0x11, 0x57, 0x1d, 0x70, 0x86, 0x09, 0x17, 0xc5, 0x2c, 0x2a, 0x6c, 0xe2, 0x42, 0x83, 0xb3, 0x95,
0x18, 0xa4, 0x45, 0x2b, 0xb3, 0xba, 0xa6, 0x22, 0x9d, 0x2f, 0xb8, 0xd7, 0x14, 0x3e, 0x09, 0xc8,
0x2e, 0xb4, 0x66, 0x8c, 0x73, 0xb6, 0xf4, 0x2c, 0xe1, 0x56, 0xa8, 0xb6, 0xae, 0x56, 0x7d, 0x5d,
0xfe, 0x00, 0x76, 0x2e, 0x6f, 0x53, 0x1e, 0x2d, 0x28, 0x46, 0xac, 0x88, 0xf5, 0xb8, 0x3c, 0xb0,
0x31, 0x0f, 0x67, 0x19, 0xca, 0x0b, 0x77, 0xa8, 0x86, 0xfe, 0x0f, 0x03, 0x3a, 0x94, 0x85, 0x9b,
0xc8, 0x01, 0xd8, 0x11, 0xcb, 0x39, 0xbb, 0x2e, 0xd4, 0x60, 0x9f, 0xd4, 0xfb, 0x1c, 0xb3, 0x34,
0xe7, 0x54, 0x47, 0x91, 0xd7, 0x60, 0x63, 0x96, 0xa5, 0xab, 0x12, 0xd5, 0x54, 0x9f, 0xd6, 0x13,
0x8e, 0xe5, 0x33, 0xd5, 0x71, 0x7f, 0x7b, 0x53, 0x2f, 0xc1, 0x12, 0xb5, 0xc9, 0x36, 0x18, 0x77,
0xa2, 0x0f, 0x8b, 0x1a, 0x77, 0x15, 0x5a, 0xab, 0x19, 0x1b, 0x6b, 0xff, 0xbb, 0x01, 0xb6, 0x2a,
0x48, 0x0e, 0xa0, 0x15, 0x61, 0xce, 0xb1, 0x50, 0x7f, 0xeb, 0x47, 0x5a, 0x51, 0x41, 0xd5, 0x26,
0x6e, 0xd3, 0x98, 0x2f, 0x14, 0x99, 0x04, 0xd5, 0x26, 0x16, 0x28, 0x16, 0x24, 0x97, 0xa6, 0x50,
0x15, 0x1d, 0xe6, 0xf3, 0x0c, 0xc5, 0xde, 0x4c, 0x2a, 0x41, 0x6d, 0x3f, 0x56, 0x7d, 0x3f, 0xfb,
0x07, 0xd0, 0xde, 0x5c, 0x38, 0xe9, 0x80, 0x7d, 0x72, 0xfe, 0x69, 0x74, 0x7a, 0x72, 0xe4, 0x6e,
0x11, 0x07, 0x9a, 0x57, 0x97, 0xc7, 0xd4, 0x35, 0x48, 0x1b, 0xac, 0xf1, 0xc9, 0xe9, 0xc5, 0xc4,
0x35, 0xf7, 0x87, 0x00, 0xbf, 0xcf, 0x8a, 0xd8, 0xd0, 0x18, 0x9d, 0x7f, 0x76, 0xb7, 0x2a, 0xe3,
0xc3, 0xa8, 0x0a, 0x75, 0xa0, 0x79, 0x78, 0x75, 0x36, 0x76, 0xcd, 0xca, 0x1a, 0x57, 0x39, 0x8d,
0x43, 0xe7, 0x4b, 0x4b, 0xb6, 0x37, 0x6b, 0x89, 0x2f, 0xe0, 0x9b, 0x5f, 0x01, 0x00, 0x00, 0xff,
0xff, 0xed, 0xb2, 0x58, 0x43, 0x9c, 0x05, 0x00, 0x00,
}