mirror of
https://github.com/status-im/status-go.git
synced 2025-02-08 12:54:37 +00:00
This commit adds a list new table, installations, which is used to keep track of which installation are active for a given identity key. In general, we limit the number of installation that we keep synchronized to 5, to avoid excessive usage of resources. Any installation coming from our own identity, will have to be manually enabled, otherwise we trust the other peer has correctly paired their devices. We use a timestamp to decide which installations to keep synchronized as a logical clock would have make the creation of the bundle more complicated, but this can always be converted to a logical clock at later stages without breaking compatibility.
528 lines
18 KiB
Go
528 lines
18 KiB
Go
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
// source: encryption.proto
|
|
|
|
package chat
|
|
|
|
import (
|
|
fmt "fmt"
|
|
proto "github.com/golang/protobuf/proto"
|
|
math "math"
|
|
)
|
|
|
|
// Reference imports to suppress errors if they are not otherwise used.
|
|
var _ = proto.Marshal
|
|
var _ = fmt.Errorf
|
|
var _ = math.Inf
|
|
|
|
// This is a compile-time assertion to ensure that this generated file
|
|
// is compatible with the proto package it is being compiled against.
|
|
// A compilation error at this line likely means your copy of the
|
|
// proto package needs to be updated.
|
|
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
|
|
|
type SignedPreKey struct {
|
|
SignedPreKey []byte `protobuf:"bytes,1,opt,name=signed_pre_key,json=signedPreKey,proto3" json:"signed_pre_key,omitempty"`
|
|
Version uint32 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *SignedPreKey) Reset() { *m = SignedPreKey{} }
|
|
func (m *SignedPreKey) String() string { return proto.CompactTextString(m) }
|
|
func (*SignedPreKey) ProtoMessage() {}
|
|
func (*SignedPreKey) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{0}
|
|
}
|
|
|
|
func (m *SignedPreKey) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_SignedPreKey.Unmarshal(m, b)
|
|
}
|
|
func (m *SignedPreKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_SignedPreKey.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *SignedPreKey) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_SignedPreKey.Merge(m, src)
|
|
}
|
|
func (m *SignedPreKey) XXX_Size() int {
|
|
return xxx_messageInfo_SignedPreKey.Size(m)
|
|
}
|
|
func (m *SignedPreKey) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_SignedPreKey.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_SignedPreKey proto.InternalMessageInfo
|
|
|
|
func (m *SignedPreKey) GetSignedPreKey() []byte {
|
|
if m != nil {
|
|
return m.SignedPreKey
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *SignedPreKey) GetVersion() uint32 {
|
|
if m != nil {
|
|
return m.Version
|
|
}
|
|
return 0
|
|
}
|
|
|
|
// X3DH prekey bundle
|
|
type Bundle struct {
|
|
// Identity key
|
|
Identity []byte `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"`
|
|
// Installation id
|
|
SignedPreKeys map[string]*SignedPreKey `protobuf:"bytes,2,rep,name=signed_pre_keys,json=signedPreKeys,proto3" json:"signed_pre_keys,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
|
// Prekey signature
|
|
Signature []byte `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"`
|
|
// When the bundle was created locally
|
|
Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *Bundle) Reset() { *m = Bundle{} }
|
|
func (m *Bundle) String() string { return proto.CompactTextString(m) }
|
|
func (*Bundle) ProtoMessage() {}
|
|
func (*Bundle) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{1}
|
|
}
|
|
|
|
func (m *Bundle) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_Bundle.Unmarshal(m, b)
|
|
}
|
|
func (m *Bundle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_Bundle.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *Bundle) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_Bundle.Merge(m, src)
|
|
}
|
|
func (m *Bundle) XXX_Size() int {
|
|
return xxx_messageInfo_Bundle.Size(m)
|
|
}
|
|
func (m *Bundle) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_Bundle.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_Bundle proto.InternalMessageInfo
|
|
|
|
func (m *Bundle) GetIdentity() []byte {
|
|
if m != nil {
|
|
return m.Identity
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *Bundle) GetSignedPreKeys() map[string]*SignedPreKey {
|
|
if m != nil {
|
|
return m.SignedPreKeys
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *Bundle) GetSignature() []byte {
|
|
if m != nil {
|
|
return m.Signature
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *Bundle) GetTimestamp() int64 {
|
|
if m != nil {
|
|
return m.Timestamp
|
|
}
|
|
return 0
|
|
}
|
|
|
|
type BundleContainer struct {
|
|
// X3DH prekey bundle
|
|
Bundle *Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"`
|
|
// Private signed prekey
|
|
PrivateSignedPreKey []byte `protobuf:"bytes,2,opt,name=private_signed_pre_key,json=privateSignedPreKey,proto3" json:"private_signed_pre_key,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *BundleContainer) Reset() { *m = BundleContainer{} }
|
|
func (m *BundleContainer) String() string { return proto.CompactTextString(m) }
|
|
func (*BundleContainer) ProtoMessage() {}
|
|
func (*BundleContainer) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{2}
|
|
}
|
|
|
|
func (m *BundleContainer) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_BundleContainer.Unmarshal(m, b)
|
|
}
|
|
func (m *BundleContainer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_BundleContainer.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *BundleContainer) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_BundleContainer.Merge(m, src)
|
|
}
|
|
func (m *BundleContainer) XXX_Size() int {
|
|
return xxx_messageInfo_BundleContainer.Size(m)
|
|
}
|
|
func (m *BundleContainer) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_BundleContainer.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_BundleContainer proto.InternalMessageInfo
|
|
|
|
func (m *BundleContainer) GetBundle() *Bundle {
|
|
if m != nil {
|
|
return m.Bundle
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *BundleContainer) GetPrivateSignedPreKey() []byte {
|
|
if m != nil {
|
|
return m.PrivateSignedPreKey
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type DRHeader struct {
|
|
// Current ratchet public key
|
|
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
// Number of the message in the sending chain
|
|
N uint32 `protobuf:"varint,2,opt,name=n,proto3" json:"n,omitempty"`
|
|
// Length of the previous sending chain
|
|
Pn uint32 `protobuf:"varint,3,opt,name=pn,proto3" json:"pn,omitempty"`
|
|
// Bundle ID
|
|
Id []byte `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *DRHeader) Reset() { *m = DRHeader{} }
|
|
func (m *DRHeader) String() string { return proto.CompactTextString(m) }
|
|
func (*DRHeader) ProtoMessage() {}
|
|
func (*DRHeader) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{3}
|
|
}
|
|
|
|
func (m *DRHeader) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_DRHeader.Unmarshal(m, b)
|
|
}
|
|
func (m *DRHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_DRHeader.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *DRHeader) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_DRHeader.Merge(m, src)
|
|
}
|
|
func (m *DRHeader) XXX_Size() int {
|
|
return xxx_messageInfo_DRHeader.Size(m)
|
|
}
|
|
func (m *DRHeader) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_DRHeader.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_DRHeader proto.InternalMessageInfo
|
|
|
|
func (m *DRHeader) GetKey() []byte {
|
|
if m != nil {
|
|
return m.Key
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *DRHeader) GetN() uint32 {
|
|
if m != nil {
|
|
return m.N
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (m *DRHeader) GetPn() uint32 {
|
|
if m != nil {
|
|
return m.Pn
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (m *DRHeader) GetId() []byte {
|
|
if m != nil {
|
|
return m.Id
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type DHHeader struct {
|
|
// Compressed ephemeral public key
|
|
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *DHHeader) Reset() { *m = DHHeader{} }
|
|
func (m *DHHeader) String() string { return proto.CompactTextString(m) }
|
|
func (*DHHeader) ProtoMessage() {}
|
|
func (*DHHeader) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{4}
|
|
}
|
|
|
|
func (m *DHHeader) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_DHHeader.Unmarshal(m, b)
|
|
}
|
|
func (m *DHHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_DHHeader.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *DHHeader) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_DHHeader.Merge(m, src)
|
|
}
|
|
func (m *DHHeader) XXX_Size() int {
|
|
return xxx_messageInfo_DHHeader.Size(m)
|
|
}
|
|
func (m *DHHeader) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_DHHeader.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_DHHeader proto.InternalMessageInfo
|
|
|
|
func (m *DHHeader) GetKey() []byte {
|
|
if m != nil {
|
|
return m.Key
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type X3DHHeader struct {
|
|
// Ephemeral key used
|
|
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
// Used bundle's signed prekey
|
|
Id []byte `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *X3DHHeader) Reset() { *m = X3DHHeader{} }
|
|
func (m *X3DHHeader) String() string { return proto.CompactTextString(m) }
|
|
func (*X3DHHeader) ProtoMessage() {}
|
|
func (*X3DHHeader) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{5}
|
|
}
|
|
|
|
func (m *X3DHHeader) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_X3DHHeader.Unmarshal(m, b)
|
|
}
|
|
func (m *X3DHHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_X3DHHeader.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *X3DHHeader) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_X3DHHeader.Merge(m, src)
|
|
}
|
|
func (m *X3DHHeader) XXX_Size() int {
|
|
return xxx_messageInfo_X3DHHeader.Size(m)
|
|
}
|
|
func (m *X3DHHeader) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_X3DHHeader.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_X3DHHeader proto.InternalMessageInfo
|
|
|
|
func (m *X3DHHeader) GetKey() []byte {
|
|
if m != nil {
|
|
return m.Key
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *X3DHHeader) GetId() []byte {
|
|
if m != nil {
|
|
return m.Id
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Direct message value
|
|
type DirectMessageProtocol struct {
|
|
X3DHHeader *X3DHHeader `protobuf:"bytes,1,opt,name=X3DH_header,json=X3DHHeader,proto3" json:"X3DH_header,omitempty"`
|
|
DRHeader *DRHeader `protobuf:"bytes,2,opt,name=DR_header,json=DRHeader,proto3" json:"DR_header,omitempty"`
|
|
DHHeader *DHHeader `protobuf:"bytes,101,opt,name=DH_header,json=DHHeader,proto3" json:"DH_header,omitempty"`
|
|
// Encrypted payload
|
|
Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *DirectMessageProtocol) Reset() { *m = DirectMessageProtocol{} }
|
|
func (m *DirectMessageProtocol) String() string { return proto.CompactTextString(m) }
|
|
func (*DirectMessageProtocol) ProtoMessage() {}
|
|
func (*DirectMessageProtocol) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{6}
|
|
}
|
|
|
|
func (m *DirectMessageProtocol) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_DirectMessageProtocol.Unmarshal(m, b)
|
|
}
|
|
func (m *DirectMessageProtocol) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_DirectMessageProtocol.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *DirectMessageProtocol) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_DirectMessageProtocol.Merge(m, src)
|
|
}
|
|
func (m *DirectMessageProtocol) XXX_Size() int {
|
|
return xxx_messageInfo_DirectMessageProtocol.Size(m)
|
|
}
|
|
func (m *DirectMessageProtocol) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_DirectMessageProtocol.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_DirectMessageProtocol proto.InternalMessageInfo
|
|
|
|
func (m *DirectMessageProtocol) GetX3DHHeader() *X3DHHeader {
|
|
if m != nil {
|
|
return m.X3DHHeader
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *DirectMessageProtocol) GetDRHeader() *DRHeader {
|
|
if m != nil {
|
|
return m.DRHeader
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *DirectMessageProtocol) GetDHHeader() *DHHeader {
|
|
if m != nil {
|
|
return m.DHHeader
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *DirectMessageProtocol) GetPayload() []byte {
|
|
if m != nil {
|
|
return m.Payload
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Top-level protocol message
|
|
type ProtocolMessage struct {
|
|
// An optional bundle is exchanged with each message
|
|
Bundle *Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"`
|
|
// The device id of the sender
|
|
InstallationId string `protobuf:"bytes,2,opt,name=installation_id,json=installationId,proto3" json:"installation_id,omitempty"`
|
|
// One to one message, encrypted, indexed by installation_id
|
|
DirectMessage map[string]*DirectMessageProtocol `protobuf:"bytes,101,rep,name=direct_message,json=directMessage,proto3" json:"direct_message,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
|
// Public chats, not encrypted
|
|
PublicMessage []byte `protobuf:"bytes,102,opt,name=public_message,json=publicMessage,proto3" json:"public_message,omitempty"`
|
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
XXX_unrecognized []byte `json:"-"`
|
|
XXX_sizecache int32 `json:"-"`
|
|
}
|
|
|
|
func (m *ProtocolMessage) Reset() { *m = ProtocolMessage{} }
|
|
func (m *ProtocolMessage) String() string { return proto.CompactTextString(m) }
|
|
func (*ProtocolMessage) ProtoMessage() {}
|
|
func (*ProtocolMessage) Descriptor() ([]byte, []int) {
|
|
return fileDescriptor_8293a649ce9418c6, []int{7}
|
|
}
|
|
|
|
func (m *ProtocolMessage) XXX_Unmarshal(b []byte) error {
|
|
return xxx_messageInfo_ProtocolMessage.Unmarshal(m, b)
|
|
}
|
|
func (m *ProtocolMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
return xxx_messageInfo_ProtocolMessage.Marshal(b, m, deterministic)
|
|
}
|
|
func (m *ProtocolMessage) XXX_Merge(src proto.Message) {
|
|
xxx_messageInfo_ProtocolMessage.Merge(m, src)
|
|
}
|
|
func (m *ProtocolMessage) XXX_Size() int {
|
|
return xxx_messageInfo_ProtocolMessage.Size(m)
|
|
}
|
|
func (m *ProtocolMessage) XXX_DiscardUnknown() {
|
|
xxx_messageInfo_ProtocolMessage.DiscardUnknown(m)
|
|
}
|
|
|
|
var xxx_messageInfo_ProtocolMessage proto.InternalMessageInfo
|
|
|
|
func (m *ProtocolMessage) GetBundle() *Bundle {
|
|
if m != nil {
|
|
return m.Bundle
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *ProtocolMessage) GetInstallationId() string {
|
|
if m != nil {
|
|
return m.InstallationId
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (m *ProtocolMessage) GetDirectMessage() map[string]*DirectMessageProtocol {
|
|
if m != nil {
|
|
return m.DirectMessage
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *ProtocolMessage) GetPublicMessage() []byte {
|
|
if m != nil {
|
|
return m.PublicMessage
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func init() {
|
|
proto.RegisterType((*SignedPreKey)(nil), "chat.SignedPreKey")
|
|
proto.RegisterType((*Bundle)(nil), "chat.Bundle")
|
|
proto.RegisterMapType((map[string]*SignedPreKey)(nil), "chat.Bundle.SignedPreKeysEntry")
|
|
proto.RegisterType((*BundleContainer)(nil), "chat.BundleContainer")
|
|
proto.RegisterType((*DRHeader)(nil), "chat.DRHeader")
|
|
proto.RegisterType((*DHHeader)(nil), "chat.DHHeader")
|
|
proto.RegisterType((*X3DHHeader)(nil), "chat.X3DHHeader")
|
|
proto.RegisterType((*DirectMessageProtocol)(nil), "chat.DirectMessageProtocol")
|
|
proto.RegisterType((*ProtocolMessage)(nil), "chat.ProtocolMessage")
|
|
proto.RegisterMapType((map[string]*DirectMessageProtocol)(nil), "chat.ProtocolMessage.DirectMessageEntry")
|
|
}
|
|
|
|
func init() { proto.RegisterFile("encryption.proto", fileDescriptor_8293a649ce9418c6) }
|
|
|
|
var fileDescriptor_8293a649ce9418c6 = []byte{
|
|
// 535 bytes of a gzipped FileDescriptorProto
|
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x5d, 0x8b, 0xd3, 0x40,
|
|
0x14, 0x25, 0x69, 0xb7, 0xdb, 0xde, 0xa6, 0x69, 0x19, 0x51, 0x42, 0x5d, 0xb0, 0x84, 0x15, 0x03,
|
|
0x42, 0x61, 0x5b, 0x1f, 0xc4, 0x47, 0xad, 0x58, 0x57, 0xd4, 0x65, 0xf4, 0xc1, 0x17, 0x09, 0xd3,
|
|
0xe6, 0xba, 0x3b, 0x98, 0x4e, 0xc2, 0x64, 0x5a, 0xe8, 0x2f, 0xf3, 0xcd, 0xbf, 0xa6, 0x64, 0x26,
|
|
0x69, 0xa7, 0xdd, 0x5d, 0xd8, 0xb7, 0xde, 0x8f, 0x39, 0xe7, 0xdc, 0x73, 0x7b, 0x03, 0x03, 0x14,
|
|
0x4b, 0xb9, 0xcd, 0x15, 0xcf, 0xc4, 0x38, 0x97, 0x99, 0xca, 0x48, 0x73, 0x79, 0xc3, 0x54, 0xf8,
|
|
0x05, 0xbc, 0x6f, 0xfc, 0x5a, 0x60, 0x72, 0x25, 0xf1, 0x13, 0x6e, 0xc9, 0x39, 0xf8, 0x85, 0x8e,
|
|
0xe3, 0x5c, 0x62, 0xfc, 0x1b, 0xb7, 0x81, 0x33, 0x72, 0x22, 0x8f, 0x7a, 0x85, 0xdd, 0x15, 0xc0,
|
|
0xe9, 0x06, 0x65, 0xc1, 0x33, 0x11, 0xb8, 0x23, 0x27, 0xea, 0xd1, 0x3a, 0x0c, 0xff, 0x39, 0xd0,
|
|
0x7a, 0xbb, 0x16, 0x49, 0x8a, 0x64, 0x08, 0x6d, 0x9e, 0xa0, 0x50, 0x5c, 0xd5, 0x20, 0xbb, 0x98,
|
|
0x7c, 0x80, 0xfe, 0x21, 0x4d, 0x11, 0xb8, 0xa3, 0x46, 0xd4, 0x9d, 0x3c, 0x1b, 0x97, 0xb2, 0xc6,
|
|
0x06, 0x62, 0x6c, 0x4b, 0x2b, 0xde, 0x0b, 0x25, 0xb7, 0xb4, 0x67, 0x0b, 0x29, 0xc8, 0x19, 0x74,
|
|
0xca, 0x04, 0x53, 0x6b, 0x89, 0x41, 0x53, 0xb3, 0xec, 0x13, 0x65, 0x55, 0xf1, 0x15, 0x16, 0x8a,
|
|
0xad, 0xf2, 0xe0, 0x64, 0xe4, 0x44, 0x0d, 0xba, 0x4f, 0x0c, 0xbf, 0x03, 0xb9, 0x4d, 0x40, 0x06,
|
|
0xd0, 0xa8, 0xc7, 0xee, 0xd0, 0xf2, 0x27, 0x89, 0xe0, 0x64, 0xc3, 0xd2, 0x35, 0xea, 0x59, 0xbb,
|
|
0x13, 0x62, 0x24, 0xda, 0x4f, 0xa9, 0x69, 0x78, 0xe3, 0xbe, 0x76, 0x42, 0x09, 0x7d, 0xa3, 0xfe,
|
|
0x5d, 0x26, 0x14, 0xe3, 0x02, 0x25, 0x39, 0x87, 0xd6, 0x42, 0xa7, 0x34, 0x6a, 0x77, 0xe2, 0xd9,
|
|
0x43, 0xd2, 0xaa, 0x46, 0xa6, 0xf0, 0x24, 0x97, 0x7c, 0xc3, 0x14, 0xc6, 0x47, 0x2b, 0x70, 0xf5,
|
|
0x5c, 0x8f, 0xaa, 0xaa, 0x4d, 0x7c, 0xd9, 0x6c, 0x37, 0x06, 0xcd, 0xf0, 0x12, 0xda, 0x33, 0x3a,
|
|
0x47, 0x96, 0xa0, 0xb4, 0xf5, 0x7b, 0x46, 0xbf, 0x07, 0x4e, 0xbd, 0x27, 0x47, 0x10, 0x1f, 0xdc,
|
|
0x5c, 0x04, 0x0d, 0x1d, 0xba, 0xb9, 0x8e, 0x79, 0x52, 0x59, 0xe7, 0xf2, 0x24, 0x3c, 0x83, 0xf6,
|
|
0x6c, 0x7e, 0x1f, 0x56, 0xf8, 0x0a, 0xe0, 0xc7, 0xf4, 0xfe, 0xfa, 0x31, 0x5a, 0xa5, 0xef, 0xaf,
|
|
0x03, 0x8f, 0x67, 0x5c, 0xe2, 0x52, 0x7d, 0xc6, 0xa2, 0x60, 0xd7, 0x78, 0x55, 0xfe, 0x05, 0x97,
|
|
0x59, 0x4a, 0x2e, 0xa0, 0x5b, 0xe2, 0xc5, 0x37, 0x1a, 0xb0, 0xf2, 0x67, 0x60, 0xfc, 0xd9, 0x13,
|
|
0x51, 0x9b, 0xf4, 0x25, 0x74, 0x66, 0xb4, 0x7e, 0x60, 0x56, 0xe2, 0x9b, 0x07, 0xb5, 0x07, 0x74,
|
|
0xef, 0x46, 0xd9, 0xbc, 0x43, 0xc7, 0x83, 0xe6, 0xf9, 0xae, 0xb9, 0x46, 0x0e, 0xe0, 0x34, 0x67,
|
|
0xdb, 0x34, 0x63, 0x89, 0xf6, 0xc7, 0xa3, 0x75, 0x18, 0xfe, 0x71, 0xa1, 0x5f, 0x6b, 0xae, 0x46,
|
|
0x78, 0xe0, 0x56, 0x5f, 0x40, 0x9f, 0x8b, 0x42, 0xb1, 0x34, 0x65, 0xe5, 0xf1, 0xc5, 0x3c, 0xd1,
|
|
0x9a, 0x3b, 0xd4, 0xb7, 0xd3, 0x1f, 0x13, 0xf2, 0x15, 0xfc, 0x44, 0x5b, 0x14, 0xaf, 0x0c, 0x41,
|
|
0x80, 0xfa, 0x22, 0x22, 0x03, 0x7b, 0xc4, 0x3e, 0x3e, 0xb0, 0xb3, 0x3a, 0x8d, 0xc4, 0xce, 0x91,
|
|
0xe7, 0xe0, 0xe7, 0xeb, 0x45, 0xca, 0x97, 0x3b, 0xc0, 0x5f, 0x7a, 0xa8, 0x9e, 0xc9, 0x56, 0x6d,
|
|
0xc3, 0x9f, 0x40, 0x6e, 0x63, 0xdd, 0x71, 0x05, 0x17, 0x87, 0x57, 0xf0, 0xb4, 0x72, 0xf1, 0xae,
|
|
0xad, 0x5a, 0xe7, 0xb0, 0x68, 0xe9, 0xaf, 0xcd, 0xf4, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xed,
|
|
0x53, 0xaf, 0x00, 0x81, 0x04, 0x00, 0x00,
|
|
}
|