[#138] v2/object: Update to neofs-api jindo release

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2020-09-08 13:39:13 +03:00 committed by Stanislav Bogatyrev
parent c0cc4a4374
commit 581cb2d2ba
6 changed files with 505 additions and 112 deletions

View file

@ -283,6 +283,42 @@ func HeaderFromGRPCMessage(m *object.Header) *Header {
return h return h
} }
func HeaderWithSignatureToGRPCMessage(h *HeaderWithSignature) *object.HeaderWithSignature {
if h == nil {
return nil
}
m := new(object.HeaderWithSignature)
m.SetHeader(
HeaderToGRPCMessage(h.GetHeader()),
)
m.SetSignature(
refs.SignatureToGRPCMessage(h.GetSignature()),
)
return m
}
func HeaderWithSignatureFromGRPCMessage(m *object.HeaderWithSignature) *HeaderWithSignature {
if m == nil {
return nil
}
h := new(HeaderWithSignature)
h.SetHeader(
HeaderFromGRPCMessage(m.GetHeader()),
)
h.SetSignature(
refs.SignatureFromGRPCMessage(m.GetSignature()),
)
return h
}
func ObjectToGRPCMessage(o *Object) *object.Object { func ObjectToGRPCMessage(o *Object) *object.Object {
if o == nil { if o == nil {
return nil return nil
@ -942,8 +978,8 @@ func GetHeaderPartFullToGRPCMessage(r *GetHeaderPartFull) *object.HeadResponse_B
m := new(object.HeadResponse_Body_Header) m := new(object.HeadResponse_Body_Header)
m.SetHeader( m.SetHeaderWithSignature(
HeaderToGRPCMessage(r.GetHeader()), HeaderWithSignatureToGRPCMessage(r.GetHeaderWithSignature()),
) )
return m return m
@ -956,8 +992,8 @@ func GetHeaderPartFullFromGRPCMessage(m *object.HeadResponse_Body_Header) *GetHe
r := new(GetHeaderPartFull) r := new(GetHeaderPartFull)
r.SetHeader( r.SetHeaderWithSignature(
HeaderFromGRPCMessage(m.GetHeader()), HeaderWithSignatureFromGRPCMessage(m.GetHeaderWithSignature()),
) )
return r return r

View file

@ -330,8 +330,8 @@ func (m *HeadResponse_Body_ShortHeader) SetShortHeader(v *ShortHeader) {
} }
} }
// GetHeader returns object header. // GetHeaderWithSignature returns object header.
func (m *HeadResponse_Body_Header) GetHeader() *Header { func (m *HeadResponse_Body_Header) GetHeaderWithSignature() *HeaderWithSignature {
if m != nil { if m != nil {
return m.Header return m.Header
} }
@ -339,13 +339,27 @@ func (m *HeadResponse_Body_Header) GetHeader() *Header {
return nil return nil
} }
// SetHeader sets object header. // SetHeaderWithSignature sets object header.
func (m *HeadResponse_Body_Header) SetHeader(v *Header) { func (m *HeadResponse_Body_Header) SetHeaderWithSignature(v *HeaderWithSignature) {
if m != nil { if m != nil {
m.Header = v m.Header = v
} }
} }
// SetHeader sets object header.
func (m *HeaderWithSignature) SetHeader(v *Header) {
if m != nil {
m.Header = v
}
}
// SetSignature of the header.
func (m *HeaderWithSignature) SetSignature(v *refs.Signature) {
if m != nil {
m.Signature = v
}
}
// SetHeader sets full header of the object. // SetHeader sets full header of the object.
func (m *HeadResponse_Body) SetHeader(v *HeadResponse_Body_Header) { func (m *HeadResponse_Body) SetHeader(v *HeadResponse_Body_Header) {
if m != nil { if m != nil {

View file

@ -1110,6 +1110,67 @@ func (m *HeadRequest_Body) GetRaw() bool {
return false return false
} }
// Tuple of full object header and signature of object ID.
type HeaderWithSignature struct {
// Full object header
Header *Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
// Signed object_id to verify full header's authenticity through following steps:
// 1. Calculate SHA-256 of marshalled Headers structure.
// 2. Check if the resulting hash matched ObjectID
// 3. Check if ObjectID's signature in signature field is correct.
Signature *grpc1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *HeaderWithSignature) Reset() { *m = HeaderWithSignature{} }
func (m *HeaderWithSignature) String() string { return proto.CompactTextString(m) }
func (*HeaderWithSignature) ProtoMessage() {}
func (*HeaderWithSignature) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{7}
}
func (m *HeaderWithSignature) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *HeaderWithSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_HeaderWithSignature.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *HeaderWithSignature) XXX_Merge(src proto.Message) {
xxx_messageInfo_HeaderWithSignature.Merge(m, src)
}
func (m *HeaderWithSignature) XXX_Size() int {
return m.Size()
}
func (m *HeaderWithSignature) XXX_DiscardUnknown() {
xxx_messageInfo_HeaderWithSignature.DiscardUnknown(m)
}
var xxx_messageInfo_HeaderWithSignature proto.InternalMessageInfo
func (m *HeaderWithSignature) GetHeader() *Header {
if m != nil {
return m.Header
}
return nil
}
func (m *HeaderWithSignature) GetSignature() *grpc1.Signature {
if m != nil {
return m.Signature
}
return nil
}
// Head response // Head response
type HeadResponse struct { type HeadResponse struct {
// Body of head object response message. // Body of head object response message.
@ -1130,7 +1191,7 @@ func (m *HeadResponse) Reset() { *m = HeadResponse{} }
func (m *HeadResponse) String() string { return proto.CompactTextString(m) } func (m *HeadResponse) String() string { return proto.CompactTextString(m) }
func (*HeadResponse) ProtoMessage() {} func (*HeadResponse) ProtoMessage() {}
func (*HeadResponse) Descriptor() ([]byte, []int) { func (*HeadResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{7} return fileDescriptor_1d7d92b1e85e5b48, []int{8}
} }
func (m *HeadResponse) XXX_Unmarshal(b []byte) error { func (m *HeadResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1197,7 +1258,7 @@ func (m *HeadResponse_Body) Reset() { *m = HeadResponse_Body{} }
func (m *HeadResponse_Body) String() string { return proto.CompactTextString(m) } func (m *HeadResponse_Body) String() string { return proto.CompactTextString(m) }
func (*HeadResponse_Body) ProtoMessage() {} func (*HeadResponse_Body) ProtoMessage() {}
func (*HeadResponse_Body) Descriptor() ([]byte, []int) { func (*HeadResponse_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{7, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{8, 0}
} }
func (m *HeadResponse_Body) XXX_Unmarshal(b []byte) error { func (m *HeadResponse_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1233,7 +1294,7 @@ type isHeadResponse_Body_Head interface {
} }
type HeadResponse_Body_Header struct { type HeadResponse_Body_Header struct {
Header *Header `protobuf:"bytes,1,opt,name=header,proto3,oneof" json:"header,omitempty"` Header *HeaderWithSignature `protobuf:"bytes,1,opt,name=header,proto3,oneof" json:"header,omitempty"`
} }
type HeadResponse_Body_ShortHeader struct { type HeadResponse_Body_ShortHeader struct {
ShortHeader *ShortHeader `protobuf:"bytes,2,opt,name=short_header,json=shortHeader,proto3,oneof" json:"short_header,omitempty"` ShortHeader *ShortHeader `protobuf:"bytes,2,opt,name=short_header,json=shortHeader,proto3,oneof" json:"short_header,omitempty"`
@ -1249,7 +1310,7 @@ func (m *HeadResponse_Body) GetHead() isHeadResponse_Body_Head {
return nil return nil
} }
func (m *HeadResponse_Body) GetHeader() *Header { func (m *HeadResponse_Body) GetHeader() *HeaderWithSignature {
if x, ok := m.GetHead().(*HeadResponse_Body_Header); ok { if x, ok := m.GetHead().(*HeadResponse_Body_Header); ok {
return x.Header return x.Header
} }
@ -1290,7 +1351,7 @@ func (m *SearchRequest) Reset() { *m = SearchRequest{} }
func (m *SearchRequest) String() string { return proto.CompactTextString(m) } func (m *SearchRequest) String() string { return proto.CompactTextString(m) }
func (*SearchRequest) ProtoMessage() {} func (*SearchRequest) ProtoMessage() {}
func (*SearchRequest) Descriptor() ([]byte, []int) { func (*SearchRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{8} return fileDescriptor_1d7d92b1e85e5b48, []int{9}
} }
func (m *SearchRequest) XXX_Unmarshal(b []byte) error { func (m *SearchRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1357,7 +1418,7 @@ func (m *SearchRequest_Body) Reset() { *m = SearchRequest_Body{} }
func (m *SearchRequest_Body) String() string { return proto.CompactTextString(m) } func (m *SearchRequest_Body) String() string { return proto.CompactTextString(m) }
func (*SearchRequest_Body) ProtoMessage() {} func (*SearchRequest_Body) ProtoMessage() {}
func (*SearchRequest_Body) Descriptor() ([]byte, []int) { func (*SearchRequest_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{8, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{9, 0}
} }
func (m *SearchRequest_Body) XXX_Unmarshal(b []byte) error { func (m *SearchRequest_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1424,7 +1485,7 @@ func (m *SearchRequest_Body_Filter) Reset() { *m = SearchRequest_Body_Fi
func (m *SearchRequest_Body_Filter) String() string { return proto.CompactTextString(m) } func (m *SearchRequest_Body_Filter) String() string { return proto.CompactTextString(m) }
func (*SearchRequest_Body_Filter) ProtoMessage() {} func (*SearchRequest_Body_Filter) ProtoMessage() {}
func (*SearchRequest_Body_Filter) Descriptor() ([]byte, []int) { func (*SearchRequest_Body_Filter) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{8, 0, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{9, 0, 0}
} }
func (m *SearchRequest_Body_Filter) XXX_Unmarshal(b []byte) error { func (m *SearchRequest_Body_Filter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1494,7 +1555,7 @@ func (m *SearchResponse) Reset() { *m = SearchResponse{} }
func (m *SearchResponse) String() string { return proto.CompactTextString(m) } func (m *SearchResponse) String() string { return proto.CompactTextString(m) }
func (*SearchResponse) ProtoMessage() {} func (*SearchResponse) ProtoMessage() {}
func (*SearchResponse) Descriptor() ([]byte, []int) { func (*SearchResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{9} return fileDescriptor_1d7d92b1e85e5b48, []int{10}
} }
func (m *SearchResponse) XXX_Unmarshal(b []byte) error { func (m *SearchResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1557,7 +1618,7 @@ func (m *SearchResponse_Body) Reset() { *m = SearchResponse_Body{} }
func (m *SearchResponse_Body) String() string { return proto.CompactTextString(m) } func (m *SearchResponse_Body) String() string { return proto.CompactTextString(m) }
func (*SearchResponse_Body) ProtoMessage() {} func (*SearchResponse_Body) ProtoMessage() {}
func (*SearchResponse_Body) Descriptor() ([]byte, []int) { func (*SearchResponse_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{9, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{10, 0}
} }
func (m *SearchResponse_Body) XXX_Unmarshal(b []byte) error { func (m *SearchResponse_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1608,7 +1669,7 @@ func (m *Range) Reset() { *m = Range{} }
func (m *Range) String() string { return proto.CompactTextString(m) } func (m *Range) String() string { return proto.CompactTextString(m) }
func (*Range) ProtoMessage() {} func (*Range) ProtoMessage() {}
func (*Range) Descriptor() ([]byte, []int) { func (*Range) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{10} return fileDescriptor_1d7d92b1e85e5b48, []int{11}
} }
func (m *Range) XXX_Unmarshal(b []byte) error { func (m *Range) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1670,7 +1731,7 @@ func (m *GetRangeRequest) Reset() { *m = GetRangeRequest{} }
func (m *GetRangeRequest) String() string { return proto.CompactTextString(m) } func (m *GetRangeRequest) String() string { return proto.CompactTextString(m) }
func (*GetRangeRequest) ProtoMessage() {} func (*GetRangeRequest) ProtoMessage() {}
func (*GetRangeRequest) Descriptor() ([]byte, []int) { func (*GetRangeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{11} return fileDescriptor_1d7d92b1e85e5b48, []int{12}
} }
func (m *GetRangeRequest) XXX_Unmarshal(b []byte) error { func (m *GetRangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1735,7 +1796,7 @@ func (m *GetRangeRequest_Body) Reset() { *m = GetRangeRequest_Body{} }
func (m *GetRangeRequest_Body) String() string { return proto.CompactTextString(m) } func (m *GetRangeRequest_Body) String() string { return proto.CompactTextString(m) }
func (*GetRangeRequest_Body) ProtoMessage() {} func (*GetRangeRequest_Body) ProtoMessage() {}
func (*GetRangeRequest_Body) Descriptor() ([]byte, []int) { func (*GetRangeRequest_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{11, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{12, 0}
} }
func (m *GetRangeRequest_Body) XXX_Unmarshal(b []byte) error { func (m *GetRangeRequest_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1798,7 +1859,7 @@ func (m *GetRangeResponse) Reset() { *m = GetRangeResponse{} }
func (m *GetRangeResponse) String() string { return proto.CompactTextString(m) } func (m *GetRangeResponse) String() string { return proto.CompactTextString(m) }
func (*GetRangeResponse) ProtoMessage() {} func (*GetRangeResponse) ProtoMessage() {}
func (*GetRangeResponse) Descriptor() ([]byte, []int) { func (*GetRangeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{12} return fileDescriptor_1d7d92b1e85e5b48, []int{13}
} }
func (m *GetRangeResponse) XXX_Unmarshal(b []byte) error { func (m *GetRangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1861,7 +1922,7 @@ func (m *GetRangeResponse_Body) Reset() { *m = GetRangeResponse_Body{} }
func (m *GetRangeResponse_Body) String() string { return proto.CompactTextString(m) } func (m *GetRangeResponse_Body) String() string { return proto.CompactTextString(m) }
func (*GetRangeResponse_Body) ProtoMessage() {} func (*GetRangeResponse_Body) ProtoMessage() {}
func (*GetRangeResponse_Body) Descriptor() ([]byte, []int) { func (*GetRangeResponse_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{12, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{13, 0}
} }
func (m *GetRangeResponse_Body) XXX_Unmarshal(b []byte) error { func (m *GetRangeResponse_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1916,7 +1977,7 @@ func (m *GetRangeHashRequest) Reset() { *m = GetRangeHashRequest{} }
func (m *GetRangeHashRequest) String() string { return proto.CompactTextString(m) } func (m *GetRangeHashRequest) String() string { return proto.CompactTextString(m) }
func (*GetRangeHashRequest) ProtoMessage() {} func (*GetRangeHashRequest) ProtoMessage() {}
func (*GetRangeHashRequest) Descriptor() ([]byte, []int) { func (*GetRangeHashRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{13} return fileDescriptor_1d7d92b1e85e5b48, []int{14}
} }
func (m *GetRangeHashRequest) XXX_Unmarshal(b []byte) error { func (m *GetRangeHashRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1985,7 +2046,7 @@ func (m *GetRangeHashRequest_Body) Reset() { *m = GetRangeHashRequest_Bo
func (m *GetRangeHashRequest_Body) String() string { return proto.CompactTextString(m) } func (m *GetRangeHashRequest_Body) String() string { return proto.CompactTextString(m) }
func (*GetRangeHashRequest_Body) ProtoMessage() {} func (*GetRangeHashRequest_Body) ProtoMessage() {}
func (*GetRangeHashRequest_Body) Descriptor() ([]byte, []int) { func (*GetRangeHashRequest_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{13, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{14, 0}
} }
func (m *GetRangeHashRequest_Body) XXX_Unmarshal(b []byte) error { func (m *GetRangeHashRequest_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -2062,7 +2123,7 @@ func (m *GetRangeHashResponse) Reset() { *m = GetRangeHashResponse{} }
func (m *GetRangeHashResponse) String() string { return proto.CompactTextString(m) } func (m *GetRangeHashResponse) String() string { return proto.CompactTextString(m) }
func (*GetRangeHashResponse) ProtoMessage() {} func (*GetRangeHashResponse) ProtoMessage() {}
func (*GetRangeHashResponse) Descriptor() ([]byte, []int) { func (*GetRangeHashResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{14} return fileDescriptor_1d7d92b1e85e5b48, []int{15}
} }
func (m *GetRangeHashResponse) XXX_Unmarshal(b []byte) error { func (m *GetRangeHashResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -2127,7 +2188,7 @@ func (m *GetRangeHashResponse_Body) Reset() { *m = GetRangeHashResponse_
func (m *GetRangeHashResponse_Body) String() string { return proto.CompactTextString(m) } func (m *GetRangeHashResponse_Body) String() string { return proto.CompactTextString(m) }
func (*GetRangeHashResponse_Body) ProtoMessage() {} func (*GetRangeHashResponse_Body) ProtoMessage() {}
func (*GetRangeHashResponse_Body) Descriptor() ([]byte, []int) { func (*GetRangeHashResponse_Body) Descriptor() ([]byte, []int) {
return fileDescriptor_1d7d92b1e85e5b48, []int{14, 0} return fileDescriptor_1d7d92b1e85e5b48, []int{15, 0}
} }
func (m *GetRangeHashResponse_Body) XXX_Unmarshal(b []byte) error { func (m *GetRangeHashResponse_Body) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -2187,6 +2248,7 @@ func init() {
proto.RegisterType((*DeleteResponse_Body)(nil), "neo.fs.v2.object.DeleteResponse.Body") proto.RegisterType((*DeleteResponse_Body)(nil), "neo.fs.v2.object.DeleteResponse.Body")
proto.RegisterType((*HeadRequest)(nil), "neo.fs.v2.object.HeadRequest") proto.RegisterType((*HeadRequest)(nil), "neo.fs.v2.object.HeadRequest")
proto.RegisterType((*HeadRequest_Body)(nil), "neo.fs.v2.object.HeadRequest.Body") proto.RegisterType((*HeadRequest_Body)(nil), "neo.fs.v2.object.HeadRequest.Body")
proto.RegisterType((*HeaderWithSignature)(nil), "neo.fs.v2.object.HeaderWithSignature")
proto.RegisterType((*HeadResponse)(nil), "neo.fs.v2.object.HeadResponse") proto.RegisterType((*HeadResponse)(nil), "neo.fs.v2.object.HeadResponse")
proto.RegisterType((*HeadResponse_Body)(nil), "neo.fs.v2.object.HeadResponse.Body") proto.RegisterType((*HeadResponse_Body)(nil), "neo.fs.v2.object.HeadResponse.Body")
proto.RegisterType((*SearchRequest)(nil), "neo.fs.v2.object.SearchRequest") proto.RegisterType((*SearchRequest)(nil), "neo.fs.v2.object.SearchRequest")
@ -2208,87 +2270,88 @@ func init() {
func init() { proto.RegisterFile("v2/object/grpc/service.proto", fileDescriptor_1d7d92b1e85e5b48) } func init() { proto.RegisterFile("v2/object/grpc/service.proto", fileDescriptor_1d7d92b1e85e5b48) }
var fileDescriptor_1d7d92b1e85e5b48 = []byte{ var fileDescriptor_1d7d92b1e85e5b48 = []byte{
// 1267 bytes of a gzipped FileDescriptorProto // 1290 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xdd, 0x6e, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6f, 0x1b, 0x45,
0x17, 0xcf, 0xae, 0x37, 0x6e, 0x7c, 0x6c, 0xe7, 0x1f, 0x4d, 0xa3, 0xd6, 0x7f, 0xe7, 0x83, 0x74, 0x14, 0xcf, 0xae, 0x37, 0x4e, 0xfc, 0x6c, 0x87, 0x68, 0x12, 0xb5, 0xc6, 0xf9, 0x20, 0xdd, 0x36,
0xdb, 0xa4, 0x11, 0x25, 0xeb, 0x60, 0x54, 0x42, 0x5b, 0x5a, 0xd4, 0x90, 0xa4, 0xb1, 0x4a, 0xda, 0x69, 0x44, 0xc9, 0x3a, 0x18, 0x95, 0xd0, 0x96, 0xb6, 0x6a, 0x48, 0x52, 0x5b, 0x25, 0x6d, 0x58,
0xb0, 0x06, 0x2e, 0x90, 0x90, 0xb5, 0x59, 0x8f, 0xed, 0xa5, 0xf6, 0xae, 0xd9, 0x19, 0x1b, 0xf9, 0xf3, 0x21, 0x21, 0x21, 0x6b, 0xb3, 0x1e, 0x7b, 0x97, 0xda, 0xbb, 0x66, 0x67, 0x6d, 0xe4, 0x1b,
0x05, 0x90, 0x78, 0x02, 0x90, 0x90, 0x10, 0xea, 0x15, 0xea, 0x15, 0xe2, 0x96, 0x17, 0x00, 0x24, 0x57, 0xce, 0x1c, 0x40, 0x42, 0x42, 0xa8, 0x27, 0xd4, 0x13, 0xe2, 0xca, 0x3f, 0x00, 0x48, 0x48,
0x24, 0x78, 0x03, 0x14, 0x6e, 0x91, 0x78, 0x00, 0x84, 0x84, 0xe6, 0x63, 0x6d, 0xaf, 0xbf, 0x95, 0xf0, 0x1f, 0xa0, 0xf0, 0x07, 0x70, 0x46, 0x08, 0x09, 0xcd, 0xc7, 0xc6, 0x5e, 0x7f, 0x2b, 0xb7,
0xbb, 0xe5, 0x6e, 0x66, 0xf6, 0x77, 0xce, 0xce, 0xf9, 0xcd, 0x6f, 0xce, 0x9c, 0x19, 0x58, 0x6d, 0xe5, 0x36, 0x33, 0xfb, 0x7b, 0x6f, 0xe7, 0xfd, 0xde, 0xc7, 0xbc, 0x19, 0x58, 0x6d, 0xe7, 0x73,
0xe7, 0x73, 0xde, 0xd9, 0xc7, 0xd8, 0xa6, 0xb9, 0xaa, 0xdf, 0xb4, 0x73, 0x04, 0xfb, 0x6d, 0xc7, 0xee, 0xe9, 0xc7, 0xd8, 0xf4, 0x73, 0x35, 0xaf, 0x69, 0xe6, 0x08, 0xf6, 0xda, 0xb6, 0x89, 0xb5,
0xc6, 0x46, 0xd3, 0xf7, 0xa8, 0x87, 0x96, 0x5c, 0xec, 0x19, 0x15, 0x62, 0xb4, 0xf3, 0x86, 0x00, 0xa6, 0xe7, 0xfa, 0x2e, 0x5a, 0x74, 0xb0, 0xab, 0x55, 0x89, 0xd6, 0xce, 0x6b, 0x1c, 0x94, 0xcd,
0x65, 0xb3, 0x03, 0x78, 0xda, 0x69, 0x62, 0x22, 0xd0, 0xd9, 0x4c, 0x3b, 0x9f, 0xf3, 0x71, 0x85, 0xf6, 0xe1, 0xfd, 0x4e, 0x13, 0x13, 0x8e, 0xce, 0x66, 0xda, 0xf9, 0x9c, 0x87, 0xab, 0x64, 0xf0,
0x0c, 0x7f, 0x59, 0x69, 0xe7, 0x73, 0x04, 0x13, 0xe2, 0x78, 0xee, 0xd0, 0x47, 0xfd, 0x85, 0x0a, 0xcb, 0x4a, 0x3b, 0x9f, 0x23, 0x98, 0x10, 0xdb, 0x75, 0x06, 0x3e, 0xaa, 0xcf, 0x65, 0x80, 0x87,
0xf0, 0x08, 0x53, 0x13, 0x7f, 0xd2, 0xc2, 0x84, 0xa2, 0xdb, 0xa0, 0x9d, 0x79, 0xe5, 0x4e, 0x46, 0xd8, 0xd7, 0xf1, 0x27, 0x2d, 0x4c, 0x7c, 0x74, 0x13, 0x94, 0x53, 0xb7, 0xd2, 0xc9, 0x48, 0x1b,
0xd9, 0x50, 0xb6, 0x93, 0xf9, 0x6b, 0xc6, 0xe0, 0x14, 0x8c, 0x1e, 0xd6, 0xd8, 0xf7, 0xca, 0x1d, 0xd2, 0x76, 0x32, 0x7f, 0x45, 0xeb, 0xdf, 0x82, 0xd6, 0xc5, 0x6a, 0xfb, 0x6e, 0xa5, 0xa3, 0x33,
0x93, 0xc3, 0xd1, 0x21, 0x24, 0x1b, 0x98, 0x5a, 0xa5, 0x1a, 0xb6, 0xca, 0xd8, 0xcf, 0xa8, 0xdc, 0x38, 0x3a, 0x84, 0x64, 0x03, 0xfb, 0x46, 0xd9, 0xc2, 0x46, 0x05, 0x7b, 0x19, 0x99, 0x49, 0x5f,
0xfa, 0x46, 0x9f, 0xb5, 0xfc, 0xbf, 0x21, 0x6d, 0x4f, 0x30, 0xb5, 0x8e, 0x39, 0xd6, 0x84, 0x46, 0xeb, 0x91, 0x16, 0xff, 0xd7, 0x84, 0xec, 0x31, 0xf6, 0x8d, 0x02, 0xc3, 0xea, 0xd0, 0x38, 0x1f,
0xb7, 0x8d, 0xde, 0x85, 0x74, 0x1b, 0xfb, 0x4e, 0xa5, 0x13, 0x38, 0x8a, 0x71, 0x47, 0xaf, 0x8c, 0xa3, 0x77, 0x20, 0xdd, 0xc6, 0x9e, 0x5d, 0xed, 0x04, 0x8a, 0x62, 0x4c, 0xd1, 0x2b, 0xa3, 0x15,
0x77, 0xf4, 0x01, 0x83, 0x3b, 0xb6, 0x45, 0x1d, 0xcf, 0x95, 0x0e, 0x53, 0xc2, 0x85, 0xe8, 0x65, 0xbd, 0x4f, 0xe1, 0xb6, 0x69, 0xf8, 0xb6, 0xeb, 0x08, 0x85, 0x29, 0xae, 0x82, 0xcf, 0xb2, 0x8f,
0x1f, 0x83, 0xc6, 0xe6, 0x89, 0x5e, 0x85, 0x4b, 0x56, 0xb9, 0xec, 0x63, 0x42, 0x64, 0x6c, 0x57, 0x40, 0xa1, 0xfb, 0x44, 0xaf, 0xc2, 0x9c, 0x51, 0xa9, 0x78, 0x98, 0x10, 0x61, 0xdb, 0xe5, 0x1e,
0xfb, 0x9c, 0x32, 0xde, 0x8c, 0x87, 0xe2, 0xb3, 0x19, 0xe0, 0xd0, 0x12, 0xc4, 0x7c, 0xeb, 0x53, 0xa5, 0x94, 0x37, 0xed, 0x01, 0xff, 0xac, 0x07, 0x38, 0xb4, 0x08, 0x31, 0xcf, 0xf8, 0x94, 0x19,
0x1e, 0xcc, 0x82, 0xc9, 0x9a, 0xfa, 0xdf, 0x31, 0x48, 0x72, 0x02, 0x48, 0xd3, 0x73, 0x09, 0x46, 0x33, 0xaf, 0xd3, 0xa1, 0xfa, 0x4f, 0x0c, 0x92, 0x8c, 0x00, 0xd2, 0x74, 0x1d, 0x82, 0xd1, 0xeb,
0xaf, 0x87, 0xd8, 0xd2, 0xc7, 0xb0, 0x25, 0xc0, 0xfd, 0x74, 0x1d, 0x8d, 0xa2, 0x6b, 0x73, 0x64, 0x21, 0xb6, 0xd4, 0x11, 0x6c, 0x71, 0x70, 0x2f, 0x5d, 0x47, 0xc3, 0xe8, 0xda, 0x1c, 0x6a, 0x25,
0x94, 0xc2, 0x78, 0x0c, 0x5f, 0xe6, 0x68, 0xbe, 0x76, 0x26, 0x78, 0x9a, 0x4a, 0xd8, 0x17, 0xaa, 0x17, 0x1e, 0xc1, 0x97, 0x3e, 0x9c, 0xaf, 0x9d, 0x31, 0x9a, 0x26, 0x12, 0xf6, 0xa5, 0x2c, 0x18,
0x64, 0xec, 0x3e, 0x68, 0x8e, 0xeb, 0x50, 0x19, 0xdc, 0xcd, 0xe9, 0xc1, 0x19, 0x05, 0xd7, 0xa1, 0xbb, 0x0b, 0x8a, 0xed, 0xd8, 0xbe, 0x30, 0xee, 0xfa, 0x64, 0xe3, 0xb4, 0xa2, 0x63, 0xfb, 0x85,
0xc7, 0x73, 0x26, 0x37, 0x43, 0x57, 0x60, 0xde, 0xae, 0xb5, 0xdc, 0x67, 0x3c, 0xba, 0xd4, 0xf1, 0x19, 0x9d, 0x89, 0xa1, 0x4b, 0x30, 0x6b, 0x5a, 0x2d, 0xe7, 0x29, 0xb3, 0x2e, 0x55, 0x98, 0xd1,
0x9c, 0x29, 0xba, 0xd9, 0x6f, 0x15, 0xd0, 0x18, 0x10, 0xdd, 0x86, 0x84, 0x70, 0x54, 0x72, 0xca, 0xf9, 0x34, 0xfb, 0x9d, 0x04, 0x0a, 0x05, 0xa2, 0x9b, 0x90, 0xe0, 0x8a, 0xca, 0x76, 0x45, 0xfc,
0xf2, 0x27, 0x99, 0xc1, 0x35, 0x79, 0xca, 0x01, 0x85, 0x03, 0x73, 0x41, 0x40, 0x0b, 0x65, 0xb4, 0x24, 0xd3, 0xef, 0x93, 0x27, 0x0c, 0x50, 0x3c, 0xd0, 0xe7, 0x39, 0xb4, 0x58, 0x41, 0x7b, 0x90,
0x07, 0x09, 0xe2, 0x54, 0x5d, 0x8b, 0xb6, 0x7c, 0x2c, 0x99, 0xfb, 0xff, 0xa0, 0x59, 0x31, 0x00, 0x20, 0x76, 0xcd, 0x31, 0xfc, 0x96, 0x87, 0x05, 0x73, 0x2f, 0xf6, 0x8b, 0x95, 0x02, 0x80, 0xde,
0x98, 0x3d, 0x2c, 0xda, 0x85, 0x78, 0x88, 0xa5, 0xcc, 0x70, 0x44, 0x92, 0x10, 0x89, 0xdb, 0x4f, 0xc5, 0xa2, 0x5d, 0x88, 0x87, 0x58, 0xca, 0x0c, 0x5a, 0x24, 0x08, 0x11, 0xb8, 0xfd, 0x34, 0x24,
0x43, 0x52, 0xce, 0xb0, 0x69, 0xf9, 0x54, 0xff, 0x4a, 0x03, 0x38, 0x6d, 0xcd, 0xbe, 0x55, 0x7a, 0xc5, 0x0e, 0x9b, 0x86, 0xe7, 0xab, 0x5f, 0x2b, 0x00, 0x27, 0xad, 0xe9, 0x53, 0xa5, 0x8b, 0x8d,
0xd8, 0x68, 0x6c, 0x95, 0x1f, 0x82, 0x95, 0x7f, 0x33, 0xb4, 0xf2, 0x5b, 0x53, 0x23, 0x9b, 0x6d, 0x46, 0xaa, 0xfc, 0x18, 0x78, 0xfe, 0xcd, 0x90, 0xe7, 0xb7, 0x26, 0x5a, 0x36, 0x9d, 0xe3, 0x7f,
0xe1, 0x7f, 0x89, 0xcc, 0xc2, 0xa3, 0xeb, 0x90, 0xb6, 0xbd, 0xa6, 0x83, 0x49, 0xc9, 0x6d, 0x35, 0x8d, 0x8c, 0xe3, 0xd1, 0x55, 0x48, 0x9b, 0x6e, 0xd3, 0xc6, 0xa4, 0xec, 0xb4, 0x1a, 0xa7, 0xd8,
0xce, 0xb0, 0x9f, 0xd1, 0x36, 0x94, 0xed, 0xb4, 0x99, 0x12, 0x83, 0x4f, 0xf8, 0xd8, 0xa0, 0x3a, 0xcb, 0x28, 0x1b, 0xd2, 0x76, 0x5a, 0x4f, 0xf1, 0xc5, 0xc7, 0x6c, 0xad, 0x3f, 0x3a, 0xbe, 0x95,
0xbe, 0x51, 0x21, 0xc9, 0x79, 0x99, 0x35, 0x37, 0xf4, 0x81, 0xa3, 0x92, 0x1b, 0xee, 0x4b, 0x81, 0x21, 0xc9, 0x78, 0x99, 0xb6, 0x36, 0xf4, 0x80, 0xa3, 0x52, 0x1b, 0xee, 0x8a, 0x00, 0xb9, 0x98,
0x5c, 0x6c, 0x05, 0xf5, 0xaf, 0x55, 0x48, 0x1f, 0xe0, 0x3a, 0xa6, 0x38, 0xd8, 0x43, 0x6f, 0x84, 0x07, 0xd5, 0x6f, 0x64, 0x48, 0x1f, 0xe0, 0x3a, 0xf6, 0x71, 0x90, 0x43, 0x6f, 0x84, 0x48, 0xba,
0x48, 0xba, 0x31, 0x4c, 0x52, 0x08, 0x1e, 0x8d, 0x6d, 0x74, 0xe7, 0xc2, 0x27, 0x8e, 0xfe, 0x97, 0x36, 0x48, 0x52, 0x08, 0x1e, 0x8d, 0x34, 0xba, 0x75, 0xe1, 0x13, 0x47, 0xfd, 0x4b, 0x82, 0x85,
0x02, 0x8b, 0x41, 0xc4, 0x52, 0x46, 0x77, 0x42, 0x0c, 0x6d, 0x8e, 0x67, 0x28, 0x5a, 0x4a, 0x8a, 0xc0, 0x62, 0x11, 0x46, 0xb7, 0x42, 0x0c, 0x6d, 0x8e, 0x66, 0x28, 0x5a, 0x91, 0x14, 0xe7, 0x24,
0x0b, 0x92, 0xf4, 0x9f, 0x54, 0x48, 0xb2, 0xa1, 0x40, 0x10, 0x53, 0x77, 0x4d, 0x1f, 0x38, 0x1a, 0xa9, 0x3f, 0xcb, 0x90, 0xa4, 0x4b, 0x41, 0x40, 0x4c, 0xcc, 0x9a, 0x1e, 0x70, 0x34, 0xc2, 0xc1,
0x72, 0xa8, 0x5d, 0xbc, 0x00, 0x59, 0x81, 0x44, 0xc3, 0x72, 0xdc, 0x92, 0xe7, 0xd6, 0x3b, 0xb2, 0xba, 0x78, 0x03, 0xb2, 0x02, 0x89, 0x86, 0x61, 0x3b, 0x65, 0xd7, 0xa9, 0x77, 0x44, 0x1b, 0x32,
0x0c, 0x59, 0x60, 0x03, 0x4f, 0xdd, 0x7a, 0x27, 0xa8, 0x4e, 0x62, 0xbd, 0xea, 0xe4, 0x4f, 0x15, 0x4f, 0x17, 0x9e, 0x38, 0xf5, 0x4e, 0xd0, 0x9d, 0xc4, 0xba, 0xdd, 0xc9, 0x67, 0x12, 0x2c, 0xf1,
0x52, 0x82, 0x1e, 0xa9, 0x9d, 0xbd, 0x10, 0x99, 0xd7, 0xc7, 0x91, 0x19, 0x2d, 0xe5, 0x7c, 0xa6, 0x9f, 0x7e, 0x60, 0xfb, 0x56, 0x69, 0x48, 0xfd, 0x93, 0xa6, 0xac, 0x7f, 0x17, 0x2d, 0xb5, 0xea,
0x48, 0x42, 0xf3, 0xdd, 0xb4, 0xae, 0x4c, 0x4e, 0xeb, 0xc7, 0x73, 0xdd, 0xc4, 0xbe, 0x0f, 0x29, 0xdf, 0x32, 0xa4, 0xb8, 0x87, 0x44, 0xf8, 0xee, 0x85, 0xfc, 0x79, 0x75, 0x94, 0x3f, 0xa3, 0x15,
0x52, 0xf3, 0x7c, 0x1a, 0x8e, 0x6c, 0x6d, 0xd8, 0xb2, 0xc8, 0x50, 0x5d, 0xf3, 0x24, 0xe9, 0x75, 0xbc, 0x5f, 0x48, 0xc2, 0xa7, 0xf7, 0xfb, 0x98, 0xdd, 0x1c, 0xc5, 0x6c, 0xc8, 0x21, 0x85, 0x99,
0xf7, 0xe3, 0xa0, 0x31, 0x6b, 0xfd, 0x9f, 0x18, 0xa4, 0x8b, 0xd8, 0xf2, 0xed, 0xda, 0xcc, 0xd9, 0x73, 0xa2, 0xf7, 0x21, 0x45, 0x2c, 0xd7, 0xf3, 0xc3, 0x66, 0xae, 0x0d, 0xaa, 0x29, 0x51, 0x14,
0x2c, 0x04, 0x8f, 0x86, 0x7c, 0xbb, 0xe5, 0xe0, 0x03, 0x48, 0xd9, 0x9e, 0x4b, 0x2d, 0xc7, 0xc5, 0xd7, 0x55, 0x98, 0xd1, 0x93, 0xa4, 0x3b, 0xdd, 0x8f, 0x83, 0x42, 0xa5, 0xd5, 0x7f, 0x63, 0x90,
0x7e, 0x2f, 0xed, 0xaf, 0x0c, 0x8a, 0xf8, 0xed, 0x00, 0x53, 0x38, 0x30, 0x93, 0x5d, 0x83, 0x42, 0x2e, 0x61, 0xc3, 0x33, 0xad, 0xa9, 0xab, 0x6b, 0x08, 0x1e, 0x8d, 0x74, 0x3a, 0x6f, 0x4f, 0xef,
0x19, 0x65, 0xe0, 0x52, 0x1b, 0xfb, 0xec, 0xdf, 0x3c, 0xbc, 0xb4, 0x19, 0x74, 0xd1, 0x21, 0x5c, 0x41, 0xca, 0x74, 0x1d, 0xdf, 0xb0, 0x1d, 0xec, 0x75, 0x8f, 0xa1, 0x95, 0xfe, 0x30, 0x7d, 0x2b,
0xaa, 0x38, 0x75, 0x8a, 0x7d, 0x92, 0x89, 0x6d, 0xc4, 0xb6, 0x93, 0xf9, 0x5b, 0xb3, 0x30, 0x67, 0xc0, 0x14, 0x0f, 0xf4, 0xe4, 0xb9, 0x40, 0xb1, 0x82, 0x32, 0x30, 0xd7, 0xc6, 0x1e, 0xfd, 0x37,
0x1c, 0x71, 0x1b, 0x33, 0xb0, 0xcd, 0xba, 0x10, 0x17, 0x43, 0xe8, 0x2e, 0x40, 0xc3, 0xa2, 0x76, 0x33, 0x2f, 0xad, 0x07, 0x53, 0x74, 0x08, 0x73, 0x55, 0xbb, 0xee, 0x63, 0x8f, 0x64, 0x62, 0x1b,
0xad, 0xc4, 0x2e, 0x3a, 0x7c, 0xa2, 0x8b, 0xa1, 0x89, 0x4a, 0x9f, 0x27, 0x0c, 0xf3, 0x5e, 0xa7, 0xb1, 0xed, 0x64, 0xfe, 0xc6, 0x34, 0xcc, 0x69, 0x47, 0x4c, 0x46, 0x0f, 0x64, 0xb3, 0x0e, 0xc4,
0x89, 0xcd, 0x44, 0x23, 0x68, 0x22, 0x04, 0x9a, 0x6b, 0x35, 0x44, 0x81, 0x91, 0x30, 0x79, 0x1b, 0xf9, 0x12, 0xba, 0x0d, 0xd0, 0x30, 0x7c, 0xd3, 0x2a, 0xd3, 0x8b, 0x17, 0xdb, 0xe8, 0x42, 0x68,
0x2d, 0xc3, 0x7c, 0xdb, 0xaa, 0xb7, 0x30, 0xa7, 0x33, 0x61, 0x8a, 0x8e, 0xfe, 0x5c, 0x85, 0xc5, 0xa3, 0x42, 0xe7, 0x31, 0xc5, 0xbc, 0xdb, 0x69, 0x62, 0x3d, 0xd1, 0x08, 0x86, 0x08, 0x81, 0xe2,
0x60, 0x5a, 0xb3, 0x26, 0xeb, 0x30, 0x3e, 0x2a, 0x5b, 0xae, 0xef, 0x44, 0x73, 0xca, 0xa5, 0xba, 0x18, 0x0d, 0x9e, 0x85, 0x09, 0x9d, 0x8d, 0xd1, 0x32, 0xcc, 0xb6, 0x8d, 0x7a, 0x0b, 0x33, 0x3a,
0x43, 0x58, 0x69, 0x18, 0x9b, 0x78, 0xe8, 0xc7, 0x9d, 0xf2, 0x3b, 0x0e, 0xa1, 0xfa, 0x1e, 0xcc, 0x13, 0x3a, 0x9f, 0xa8, 0xcf, 0x64, 0x58, 0x08, 0xb6, 0x35, 0xed, 0xe1, 0x11, 0xc6, 0x47, 0x25,
0x9b, 0x96, 0x5b, 0xc5, 0xe8, 0x0a, 0xc4, 0xbd, 0x4a, 0x85, 0x60, 0x51, 0x55, 0x6a, 0xa6, 0xec, 0xff, 0x7a, 0x4e, 0x58, 0xbb, 0x52, 0xae, 0xdb, 0x84, 0xb6, 0xaa, 0xb1, 0xb1, 0x4d, 0x48, 0xdc,
0xb1, 0xf1, 0x3a, 0x76, 0xab, 0xb4, 0xc6, 0x43, 0xd6, 0x4c, 0xd9, 0xd3, 0x7f, 0x53, 0xe1, 0x7f, 0xae, 0xbc, 0x6d, 0x13, 0x5f, 0xdd, 0x83, 0x59, 0xdd, 0x70, 0x6a, 0x18, 0x5d, 0x82, 0xb8, 0x5b,
0xec, 0x82, 0xc1, 0x8c, 0x83, 0xfd, 0x75, 0x37, 0x44, 0xef, 0xd6, 0xe8, 0x1b, 0x49, 0x9f, 0xc1, 0xad, 0x12, 0xcc, 0xbb, 0x5c, 0x45, 0x17, 0x33, 0xba, 0x5e, 0xc7, 0x4e, 0xcd, 0xb7, 0x98, 0xc9,
0x7f, 0xfe, 0x80, 0xd8, 0x81, 0x79, 0x9f, 0xc5, 0x2b, 0xc3, 0xb9, 0x3a, 0xcc, 0x88, 0xa0, 0x43, 0x8a, 0x2e, 0x66, 0xea, 0xef, 0x32, 0xbc, 0x40, 0x2f, 0x3c, 0x54, 0x38, 0xc8, 0xaf, 0xdb, 0x21,
0xa0, 0xf4, 0xcf, 0x55, 0x58, 0xea, 0x51, 0x24, 0x35, 0x7b, 0x2f, 0x44, 0xea, 0xcd, 0x49, 0xa4, 0x7a, 0xb7, 0x86, 0xdf, 0x90, 0x7a, 0x04, 0xfe, 0xf7, 0x07, 0xd6, 0x0e, 0xcc, 0x7a, 0xd4, 0x5e,
0x46, 0x4b, 0xb5, 0xab, 0x92, 0xd7, 0xe5, 0xe0, 0x3e, 0xc2, 0x22, 0x4c, 0xc9, 0xdb, 0x88, 0xfe, 0x61, 0xce, 0xe5, 0x41, 0x46, 0x38, 0x1d, 0x1c, 0xa5, 0x7e, 0x2e, 0xc3, 0x62, 0x97, 0x22, 0x11,
0x3c, 0x06, 0x97, 0x83, 0xc8, 0x8e, 0x2d, 0xd2, 0xcd, 0xe1, 0x0f, 0x42, 0x74, 0xbc, 0x3c, 0x9e, 0xb3, 0x77, 0x42, 0xa4, 0x5e, 0x1f, 0x47, 0x6a, 0xb4, 0xa2, 0x76, 0x55, 0xf0, 0xba, 0x1c, 0xdc,
0x8e, 0x3e, 0xa3, 0x68, 0xe8, 0xec, 0x3b, 0xe5, 0xe2, 0x42, 0xcb, 0x41, 0x9c, 0x4b, 0x88, 0x64, 0x8f, 0xa8, 0x85, 0x29, 0x71, 0x3b, 0x52, 0x9f, 0xc5, 0x60, 0x29, 0xb0, 0xac, 0x60, 0x90, 0xf3,
0x54, 0xbe, 0xf1, 0xc7, 0x2a, 0x4d, 0xc2, 0x58, 0x1a, 0x25, 0x56, 0x9d, 0xf2, 0x69, 0xa7, 0x4c, 0x1a, 0x7e, 0x2f, 0x44, 0xc7, 0xcb, 0xa3, 0xe9, 0xe8, 0x11, 0x8a, 0x46, 0x9c, 0x7d, 0x2f, 0x5d,
0xde, 0x46, 0xbb, 0xa0, 0xf1, 0x84, 0xac, 0xf1, 0x84, 0xbc, 0x3a, 0x74, 0x72, 0xd4, 0xb0, 0xfd, 0x3c, 0xd0, 0x72, 0x10, 0x67, 0x21, 0x44, 0x32, 0x32, 0x4b, 0xfc, 0x91, 0x91, 0x26, 0x60, 0xb4,
0x8c, 0xb4, 0x1a, 0x3c, 0x23, 0x73, 0xa4, 0xfe, 0xb3, 0x0a, 0xcb, 0x61, 0xbe, 0xa5, 0x68, 0xdf, 0x8c, 0x12, 0xa3, 0xee, 0xb3, 0x6d, 0xa7, 0x74, 0x36, 0x46, 0xbb, 0xa0, 0xb0, 0x82, 0xac, 0xb0,
0x0a, 0xad, 0xd2, 0xad, 0x69, 0xab, 0x14, 0x2d, 0xe1, 0xbe, 0x2f, 0xd7, 0x29, 0xe0, 0x4b, 0x99, 0x82, 0xbc, 0x3a, 0x70, 0x72, 0x58, 0xd8, 0x7c, 0x4a, 0x5a, 0x0d, 0x56, 0x91, 0x19, 0x52, 0xfd,
0x95, 0x2f, 0x56, 0x30, 0xd6, 0x2c, 0x52, 0x13, 0x29, 0x9a, 0xad, 0x54, 0xca, 0x5c, 0x60, 0x03, 0x45, 0x86, 0xe5, 0x30, 0xdf, 0x22, 0x68, 0xef, 0x87, 0xbc, 0x74, 0x63, 0x92, 0x97, 0xa2, 0x15,
0x2c, 0x15, 0xe7, 0xbf, 0xd7, 0x20, 0x2d, 0xf2, 0x73, 0x51, 0x3c, 0x33, 0xa2, 0x03, 0x88, 0x3d, 0xb8, 0xef, 0x09, 0x3f, 0x05, 0x7c, 0x49, 0xd3, 0xf2, 0x45, 0x1b, 0x58, 0xcb, 0x20, 0x16, 0x2f,
0xc2, 0x14, 0xad, 0x4e, 0x7a, 0xe5, 0xcb, 0xae, 0x4d, 0x7c, 0xf8, 0xd9, 0x55, 0x98, 0x97, 0xd3, 0xd1, 0xd4, 0x53, 0x29, 0x7d, 0x9e, 0x2e, 0xd0, 0x52, 0x9c, 0xff, 0x41, 0x81, 0x34, 0xaf, 0xcf,
0xd6, 0x48, 0x2f, 0xbd, 0x67, 0x82, 0x51, 0x5e, 0xfa, 0xee, 0xbf, 0xdb, 0x0a, 0x7a, 0x0c, 0x71, 0x25, 0xfe, 0xec, 0x89, 0x0e, 0x20, 0xf6, 0x10, 0xfb, 0x68, 0x75, 0xdc, 0xab, 0x63, 0x76, 0x6d,
0x71, 0x93, 0x41, 0x2f, 0x4d, 0xb9, 0x05, 0x66, 0x37, 0xa6, 0x5d, 0x82, 0xd0, 0x21, 0x68, 0x8c, 0xec, 0x43, 0xd4, 0xae, 0x44, 0xb5, 0x9c, 0xb4, 0x86, 0x6a, 0xe9, 0x3e, 0x5b, 0x0c, 0xd3, 0xd2,
0x4b, 0xb4, 0x36, 0xf1, 0xfe, 0x90, 0x5d, 0x9f, 0x5c, 0x11, 0xa3, 0x13, 0x88, 0x8b, 0x03, 0x7b, 0x73, 0x1f, 0xdf, 0x96, 0xd0, 0x23, 0x88, 0xf3, 0x9b, 0x15, 0x7a, 0x69, 0xc2, 0xad, 0x34, 0xbb,
0xd4, 0x9c, 0x42, 0x15, 0xc9, 0xa8, 0x39, 0x85, 0xcf, 0xfa, 0x5d, 0x05, 0x15, 0x61, 0x21, 0x90, 0x31, 0xe9, 0x52, 0x86, 0x0e, 0x41, 0xa1, 0x5c, 0xa2, 0xb5, 0xb1, 0xf7, 0x99, 0xec, 0xfa, 0xf8,
0x25, 0xba, 0x36, 0xf5, 0xf0, 0xca, 0xea, 0xd3, 0x53, 0xf1, 0xae, 0x82, 0x3e, 0x82, 0x54, 0xbf, 0xf6, 0x18, 0x1d, 0x43, 0x9c, 0x1f, 0xd8, 0xc3, 0xf6, 0x14, 0xea, 0x48, 0x86, 0xed, 0x29, 0x7c,
0xd6, 0xd1, 0xe6, 0x4c, 0x19, 0x2b, 0xbb, 0x35, 0xdb, 0x96, 0xd9, 0x2f, 0xfd, 0x78, 0xbe, 0xae, 0xd6, 0xef, 0x4a, 0xa8, 0x04, 0xf3, 0x41, 0x58, 0xa2, 0x2b, 0x13, 0x0f, 0xaf, 0xac, 0x3a, 0xb9,
0xfc, 0x7a, 0xbe, 0xae, 0xfc, 0x7e, 0xbe, 0xae, 0x7c, 0xf9, 0xc7, 0xfa, 0xdc, 0x87, 0x7b, 0x55, 0x14, 0xef, 0x4a, 0xe8, 0x23, 0x48, 0xf5, 0xc6, 0x3a, 0xda, 0x9c, 0xaa, 0x62, 0x65, 0xb7, 0xa6,
0x87, 0xd6, 0x5a, 0x67, 0x86, 0xed, 0x35, 0x72, 0x2e, 0x69, 0xda, 0xf6, 0x4e, 0x19, 0xb7, 0x73, 0x4b, 0x99, 0xfd, 0xf2, 0x4f, 0x67, 0xeb, 0xd2, 0x6f, 0x67, 0xeb, 0xd2, 0x1f, 0x67, 0xeb, 0xd2,
0x2e, 0xf6, 0x2a, 0x64, 0xc7, 0x6a, 0x3a, 0x3b, 0x55, 0x2f, 0x17, 0x7e, 0xa5, 0xbe, 0x27, 0xda, 0x57, 0x7f, 0xae, 0xcf, 0x7c, 0xb8, 0x57, 0xb3, 0x7d, 0xab, 0x75, 0xaa, 0x99, 0x6e, 0x23, 0xe7,
0x2f, 0xd4, 0xcb, 0x4f, 0xb0, 0x77, 0x54, 0x34, 0x1e, 0x9e, 0x16, 0xd8, 0x5f, 0x85, 0x14, 0xcf, 0x90, 0xa6, 0x69, 0xee, 0x54, 0x70, 0x3b, 0xe7, 0x60, 0xb7, 0x4a, 0x76, 0x8c, 0xa6, 0xbd, 0x53,
0xe2, 0xfc, 0x19, 0xfa, 0xb5, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x71, 0xb6, 0x54, 0x0b, 0x73, 0x73, 0xe1, 0x57, 0xf3, 0x3b, 0x7c, 0xfc, 0x5c, 0x5e, 0x7a, 0x8c, 0xdd, 0xa3, 0x92, 0xf6,
0x17, 0x00, 0x00, 0xe0, 0xa4, 0x48, 0xff, 0xca, 0x43, 0xf1, 0x34, 0xce, 0x9e, 0xc5, 0x5f, 0xfb, 0x2f, 0x00, 0x00,
0xff, 0xff, 0x31, 0xd1, 0xce, 0x46, 0x9b, 0x17, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -3684,6 +3747,57 @@ func (m *HeadRequest_Body) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil return len(dAtA) - i, nil
} }
func (m *HeaderWithSignature) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *HeaderWithSignature) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *HeaderWithSignature) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.XXX_unrecognized != nil {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if m.Signature != nil {
{
size, err := m.Signature.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintService(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
}
if m.Header != nil {
{
size, err := m.Header.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintService(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *HeadResponse) Marshal() (dAtA []byte, err error) { func (m *HeadResponse) Marshal() (dAtA []byte, err error) {
size := m.Size() size := m.Size()
dAtA = make([]byte, size) dAtA = make([]byte, size)
@ -4969,6 +5083,26 @@ func (m *HeadRequest_Body) Size() (n int) {
return n return n
} }
func (m *HeaderWithSignature) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.Header != nil {
l = m.Header.Size()
n += 1 + l + sovService(uint64(l))
}
if m.Signature != nil {
l = m.Signature.Size()
n += 1 + l + sovService(uint64(l))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func (m *HeadResponse) Size() (n int) { func (m *HeadResponse) Size() (n int) {
if m == nil { if m == nil {
return 0 return 0
@ -7547,6 +7681,132 @@ func (m *HeadRequest_Body) Unmarshal(dAtA []byte) error {
} }
return nil return nil
} }
func (m *HeaderWithSignature) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowService
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: HeaderWithSignature: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: HeaderWithSignature: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowService
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthService
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthService
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Header == nil {
m.Header = &Header{}
}
if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Signature", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowService
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthService
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthService
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Signature == nil {
m.Signature = &grpc1.Signature{}
}
if err := m.Signature.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipService(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthService
}
if (iNdEx + skippy) < 0 {
return ErrInvalidLengthService
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *HeadResponse) Unmarshal(dAtA []byte) error { func (m *HeadResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0
@ -7767,7 +8027,7 @@ func (m *HeadResponse_Body) Unmarshal(dAtA []byte) error {
if postIndex > l { if postIndex > l {
return io.ErrUnexpectedEOF return io.ErrUnexpectedEOF
} }
v := &Header{} v := &HeaderWithSignature{}
if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err return err
} }

View file

@ -33,6 +33,9 @@ const (
hdrAttributesField = 10 hdrAttributesField = 10
hdrSplitField = 11 hdrSplitField = 11
hdrWithSigHeaderField = 1
hdrWithSigSignatureField = 2
objIDField = 1 objIDField = 1
objSignatureField = 2 objSignatureField = 2
objHeaderField = 3 objHeaderField = 3
@ -385,6 +388,48 @@ func (h *Header) StableSize() (size int) {
return size return size
} }
func (h *HeaderWithSignature) StableMarshal(buf []byte) ([]byte, error) {
if h == nil {
return []byte{}, nil
}
if buf == nil {
buf = make([]byte, h.StableSize())
}
var (
offset, n int
err error
)
n, err = proto.NestedStructureMarshal(hdrWithSigHeaderField, buf[offset:], h.header)
if err != nil {
return nil, err
}
offset += n
n, err = proto.NestedStructureMarshal(hdrWithSigSignatureField, buf[offset:], h.signature)
if err != nil {
return nil, err
}
offset += n
return buf, nil
}
func (h *HeaderWithSignature) StableSize() (size int) {
if h == nil {
return 0
}
size += proto.NestedStructureSize(hdrVersionField, h.header)
size += proto.NestedStructureSize(hdrContainerIDField, h.signature)
return size
}
func (o *Object) StableMarshal(buf []byte) ([]byte, error) { func (o *Object) StableMarshal(buf []byte) ([]byte, error) {
if o == nil { if o == nil {
return []byte{}, nil return []byte{}, nil

View file

@ -590,8 +590,12 @@ func generateHeadResponseBody(flag bool) *object.HeadResponseBody {
short.SetShortHeader(generateShortHeader("short id")) short.SetShortHeader(generateShortHeader("short id"))
part = short part = short
} else { } else {
hdrWithSig := new(object.HeaderWithSignature)
hdrWithSig.SetHeader(generateHeader(30))
hdrWithSig.SetSignature(generateSignature("sig", "key"))
full := new(object.GetHeaderPartFull) full := new(object.GetHeaderPartFull)
full.SetHeader(generateHeader(30)) full.SetHeaderWithSignature(hdrWithSig)
part = full part = full
} }

View file

@ -57,6 +57,12 @@ type Header struct {
split *SplitHeader split *SplitHeader
} }
type HeaderWithSignature struct {
header *Header
signature *refs.Signature
}
type Object struct { type Object struct {
objectID *refs.ObjectID objectID *refs.ObjectID
@ -136,7 +142,7 @@ type GetHeaderPart interface {
} }
type GetHeaderPartFull struct { type GetHeaderPartFull struct {
hdr *Header hdr *HeaderWithSignature
} }
type GetHeaderPartShort struct { type GetHeaderPartShort struct {
@ -528,6 +534,34 @@ func (h *Header) SetSplit(v *SplitHeader) {
} }
} }
func (h *HeaderWithSignature) GetHeader() *Header {
if h != nil {
return h.header
}
return nil
}
func (h *HeaderWithSignature) SetHeader(v *Header) {
if h != nil {
h.header = v
}
}
func (h *HeaderWithSignature) GetSignature() *refs.Signature {
if h != nil {
return h.signature
}
return nil
}
func (h *HeaderWithSignature) SetSignature(v *refs.Signature) {
if h != nil {
h.signature = v
}
}
func (o *Object) GetObjectID() *refs.ObjectID { func (o *Object) GetObjectID() *refs.ObjectID {
if o != nil { if o != nil {
return o.objectID return o.objectID
@ -1138,7 +1172,7 @@ func (r *HeadRequest) SetVerificationHeader(v *session.RequestVerificationHeader
} }
} }
func (h *GetHeaderPartFull) GetHeader() *Header { func (h *GetHeaderPartFull) GetHeaderWithSignature() *HeaderWithSignature {
if h != nil { if h != nil {
return h.hdr return h.hdr
} }
@ -1146,7 +1180,7 @@ func (h *GetHeaderPartFull) GetHeader() *Header {
return nil return nil
} }
func (h *GetHeaderPartFull) SetHeader(v *Header) { func (h *GetHeaderPartFull) SetHeaderWithSignature(v *HeaderWithSignature) {
if h != nil { if h != nil {
h.hdr = v h.hdr = v
} }