feat(pairing): sync 1-1 chats and groups on pairing devices (#4102)

Fixes #3547
This commit is contained in:
Jonathan Rainville 2023-10-17 09:24:15 -04:00 committed by GitHub
parent 21ddaa4b9f
commit c8910d69fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 526 additions and 493 deletions

View File

@ -4,5 +4,5 @@
"github.com/ethereum/go-ethereum,github.com/status-im/status-go", "github.com/ethereum/go-ethereum,github.com/status-im/status-go",
"-w" "-w"
], ],
"go.testTags": "gowaku_skip_migrations gowaku_no_rln", "go.testTags": "gowaku_skip_migrations",
} }

View File

@ -275,6 +275,11 @@ func (c *Chat) IsActivePersonalChat() bool {
return c.Active && (c.OneToOne() || c.PrivateGroupChat() || c.Public()) && c.CommunityID == "" return c.Active && (c.OneToOne() || c.PrivateGroupChat() || c.Public()) && c.CommunityID == ""
} }
func (c *Chat) shouldBeSynced() bool {
isPublicChat := !c.Timeline() && !c.ProfileUpdates() && c.Public()
return isPublicChat || c.OneToOne() || c.PrivateGroupChat()
}
func (c *Chat) CommunityChatID() string { func (c *Chat) CommunityChatID() string {
if c.ChatType != ChatTypeCommunityChat { if c.ChatType != ChatTypeCommunityChat {
return c.ID return c.ID

View File

@ -2533,50 +2533,19 @@ func (m *Messenger) SyncDevices(ctx context.Context, ensName, photoPath string,
return err return err
} }
m.allChats.Range(func(chatID string, chat *Chat) (shouldContinue bool) { m.allChats.Range(func(chatID string, chat *Chat) bool {
isPublicChat := !chat.Timeline() && !chat.ProfileUpdates() && chat.Public() if !chat.shouldBeSynced() {
if isPublicChat && chat.Active { return true
err = m.syncPublicChat(ctx, chat, rawMessageHandler)
if err != nil {
return false
}
} }
err = m.syncChat(ctx, chat, rawMessageHandler)
if (isPublicChat || chat.OneToOne() || chat.PrivateGroupChat()) && !chat.Active && chat.DeletedAtClockValue > 0 { return err == nil
pending, err := m.persistence.HasPendingNotificationsForChat(chat.ID)
if err != nil {
return false
}
if !pending {
err = m.syncChatRemoving(ctx, chatID, rawMessageHandler)
if err != nil {
return false
}
}
}
if (isPublicChat || chat.OneToOne() || chat.PrivateGroupChat() || chat.CommunityChat()) && chat.Active {
err := m.syncChatMessagesRead(ctx, chatID, chat.ReadMessagesAtClockValue, rawMessageHandler)
if err != nil {
return false
}
}
if isPublicChat && chat.Active && chat.DeletedAtClockValue > 0 {
err = m.syncClearHistory(ctx, chat, rawMessageHandler)
if err != nil {
return false
}
}
return true
}) })
if err != nil { if err != nil {
return err return err
} }
m.allContacts.Range(func(contactID string, contact *Contact) (shouldContinue bool) { m.allContacts.Range(func(contactID string, contact *Contact) bool {
if contact.ID != myID && if contact.ID != myID &&
(contact.LocalNickname != "" || contact.added() || contact.Blocked) { (contact.LocalNickname != "" || contact.added() || contact.Blocked) {
if err = m.syncContact(ctx, contact, rawMessageHandler); err != nil { if err = m.syncContact(ctx, contact, rawMessageHandler); err != nil {
@ -2815,17 +2784,45 @@ func (m *Messenger) SendPairInstallation(ctx context.Context, rawMessageHandler
return &response, nil return &response, nil
} }
// syncPublicChat sync a public chat with paired devices // syncChat sync a chat with paired devices
func (m *Messenger) syncPublicChat(ctx context.Context, publicChat *Chat, rawMessageHandler RawMessageHandler) error { func (m *Messenger) syncChat(ctx context.Context, chatToSync *Chat, rawMessageHandler RawMessageHandler) error {
var err error var err error
if !m.hasPairedDevices() { if !m.hasPairedDevices() {
return nil return nil
} }
clock, chat := m.getLastClockWithRelatedChat() clock, chat := m.getLastClockWithRelatedChat()
syncMessage := &protobuf.SyncInstallationPublicChat{ syncMessage := &protobuf.SyncChat{
Clock: clock, Clock: clock,
Id: publicChat.ID, Id: chatToSync.ID,
Name: chatToSync.Name,
ChatType: uint32(chatToSync.ChatType),
Active: chatToSync.Active,
}
chatMuteTill, _ := time.Parse(time.RFC3339, chatToSync.MuteTill.Format(time.RFC3339))
if chatToSync.Muted && chatMuteTill.Equal(time.Time{}) {
// Only set Muted if it is "permanently" muted
syncMessage.Muted = true
}
if chatToSync.OneToOne() {
syncMessage.Name = "" // The Name is useless in 1-1 chats
}
if chatToSync.PrivateGroupChat() {
syncMessage.MembershipUpdateEvents = make([]*protobuf.MembershipUpdateEvents, len(chatToSync.MembershipUpdates))
for i, membershipUpdate := range chatToSync.MembershipUpdates {
syncMessage.MembershipUpdateEvents[i] = &protobuf.MembershipUpdateEvents{
Clock: membershipUpdate.ClockValue,
Type: uint32(membershipUpdate.Type),
Members: membershipUpdate.Members,
Name: membershipUpdate.Name,
Signature: membershipUpdate.Signature,
ChatId: membershipUpdate.ChatID,
From: membershipUpdate.From,
RawPayload: membershipUpdate.RawPayload,
Color: membershipUpdate.Color,
Image: membershipUpdate.Image,
}
}
} }
encodedMessage, err := proto.Marshal(syncMessage) encodedMessage, err := proto.Marshal(syncMessage)
if err != nil { if err != nil {
@ -2835,7 +2832,7 @@ func (m *Messenger) syncPublicChat(ctx context.Context, publicChat *Chat, rawMes
rawMessage := common.RawMessage{ rawMessage := common.RawMessage{
LocalChatID: chat.ID, LocalChatID: chat.ID,
Payload: encodedMessage, Payload: encodedMessage,
MessageType: protobuf.ApplicationMetadataMessage_SYNC_INSTALLATION_PUBLIC_CHAT, MessageType: protobuf.ApplicationMetadataMessage_SYNC_CHAT,
ResendAutomatically: true, ResendAutomatically: true,
} }

View File

@ -334,10 +334,10 @@ func (m *Messenger) backupChats(ctx context.Context, clock uint64) []*protobuf.B
return true return true
} }
syncChat := protobuf.SyncChat{ syncChat := protobuf.SyncChat{
Clock: clock,
Id: chatID, Id: chatID,
ChatType: uint32(chat.ChatType), ChatType: uint32(chat.ChatType),
Active: chat.Active, Active: chat.Active,
Clock: uint64(time.Now().Unix()),
} }
chatMuteTill, _ := time.Parse(time.RFC3339, chat.MuteTill.Format(time.RFC3339)) chatMuteTill, _ := time.Parse(time.RFC3339, chat.MuteTill.Format(time.RFC3339))
if chat.Muted && chatMuteTill.Equal(time.Time{}) { if chat.Muted && chatMuteTill.Equal(time.Time{}) {

View File

@ -168,12 +168,9 @@ func (m *Messenger) initChatSyncFields(chat *Chat) error {
func (m *Messenger) createPublicChat(chatID string, response *MessengerResponse) (*MessengerResponse, error) { func (m *Messenger) createPublicChat(chatID string, response *MessengerResponse) (*MessengerResponse, error) {
chat, ok := m.allChats.Load(chatID) chat, ok := m.allChats.Load(chatID)
wasActive := false
if !ok { if !ok {
chat = CreatePublicChat(chatID, m.getTimesource()) chat = CreatePublicChat(chatID, m.getTimesource())
} else {
wasActive = chat.Active
} }
chat.Active = true chat.Active = true
chat.DeletedAtClockValue = 0 chat.DeletedAtClockValue = 0
@ -204,13 +201,6 @@ func (m *Messenger) createPublicChat(chatID string, response *MessengerResponse)
return nil, err return nil, err
} }
// Sync if it was created
if !ok || !wasActive {
if err := m.syncPublicChat(context.Background(), chat, m.dispatchMessage); err != nil {
return nil, err
}
}
err = m.reregisterForPushNotifications() err = m.reregisterForPushNotifications()
if err != nil { if err != nil {
return nil, err return nil, err
@ -487,10 +477,9 @@ func (m *Messenger) saveChat(chat *Chat) error {
chat.Identicon = identicon chat.Identicon = identicon
} }
// Sync chat if it's a new active public chat, but not a timeline chat // Sync chat if it's a new public, 1-1 or group chat, but not a timeline chat
if !ok && chat.Active && chat.Public() && !chat.ProfileUpdates() && !chat.Timeline() { if !ok && chat.shouldBeSynced() {
if err := m.syncChat(context.Background(), chat, m.dispatchMessage); err != nil {
if err := m.syncPublicChat(context.Background(), chat, m.dispatchMessage); err != nil {
return err return err
} }
} }

View File

@ -525,6 +525,7 @@ func (m *Messenger) handleSyncChats(messageState *ReceivedMessageState, chats []
From: membershipUpdate.From, From: membershipUpdate.From,
RawPayload: membershipUpdate.RawPayload, RawPayload: membershipUpdate.RawPayload,
Color: membershipUpdate.Color, Color: membershipUpdate.Color,
Image: membershipUpdate.Image,
} }
} }
group, err := newProtocolGroupFromChat(chat) group, err := newProtocolGroupFromChat(chat)
@ -762,7 +763,7 @@ func (m *Messenger) HandleSyncProfilePictures(state *ReceivedMessageState, messa
return err return err
} }
func (m *Messenger) HandleSyncInstallationPublicChat(state *ReceivedMessageState, message *protobuf.SyncInstallationPublicChat, statusMessage *v1protocol.StatusMessage) error { func (m *Messenger) HandleSyncChat(state *ReceivedMessageState, message *protobuf.SyncChat, statusMessage *v1protocol.StatusMessage) error {
chatID := message.Id chatID := message.Id
existingChat, ok := state.AllChats.Load(chatID) existingChat, ok := state.AllChats.Load(chatID)
if ok && (existingChat.Active || uint32(message.GetClock()/1000) < existingChat.SyncedTo) { if ok && (existingChat.Active || uint32(message.GetClock()/1000) < existingChat.SyncedTo) {
@ -771,18 +772,16 @@ func (m *Messenger) HandleSyncInstallationPublicChat(state *ReceivedMessageState
chat := existingChat chat := existingChat
if !ok { if !ok {
chat = CreatePublicChat(chatID, state.Timesource) chats := make([]*protobuf.SyncChat, 1)
chat.Joined = int64(message.Clock) chats[0] = message
} else { return m.handleSyncChats(state, chats)
existingChat.Joined = int64(message.Clock)
} }
existingChat.Joined = int64(message.Clock)
state.AllChats.Store(chat.ID, chat) state.AllChats.Store(chat.ID, chat)
state.Response.AddChat(chat) state.Response.AddChat(chat)
// We join and re-register as we want to receive mentions from the newly joined public chat
_, err := m.createPublicChat(chat.ID, state.Response) return nil
return err
} }
func (m *Messenger) HandleSyncChatRemoved(state *ReceivedMessageState, message *protobuf.SyncChatRemoved, statusMessage *v1protocol.StatusMessage) error { func (m *Messenger) HandleSyncChatRemoved(state *ReceivedMessageState, message *protobuf.SyncChatRemoved, statusMessage *v1protocol.StatusMessage) error {

View File

@ -55,9 +55,6 @@ func (m *Messenger) dispatchToHandler(messageState *ReceivedMessageState, protoB
case protobuf.ApplicationMetadataMessage_SYNC_INSTALLATION_ACCOUNT: case protobuf.ApplicationMetadataMessage_SYNC_INSTALLATION_ACCOUNT:
return m.handleSyncInstallationAccountProtobuf(messageState, protoBytes, msg, filter) return m.handleSyncInstallationAccountProtobuf(messageState, protoBytes, msg, filter)
case protobuf.ApplicationMetadataMessage_SYNC_INSTALLATION_PUBLIC_CHAT:
return m.handleSyncInstallationPublicChatProtobuf(messageState, protoBytes, msg, filter)
case protobuf.ApplicationMetadataMessage_CONTACT_CODE_ADVERTISEMENT: case protobuf.ApplicationMetadataMessage_CONTACT_CODE_ADVERTISEMENT:
return m.handleContactCodeAdvertisementProtobuf(messageState, protoBytes, msg, filter) return m.handleContactCodeAdvertisementProtobuf(messageState, protoBytes, msg, filter)
@ -229,6 +226,9 @@ func (m *Messenger) dispatchToHandler(messageState *ReceivedMessageState, protoB
case protobuf.ApplicationMetadataMessage_COMMUNITY_SHARD_KEY: case protobuf.ApplicationMetadataMessage_COMMUNITY_SHARD_KEY:
return m.handleCommunityShardKeyProtobuf(messageState, protoBytes, msg, filter) return m.handleCommunityShardKeyProtobuf(messageState, protoBytes, msg, filter)
case protobuf.ApplicationMetadataMessage_SYNC_CHAT:
return m.handleSyncChatProtobuf(messageState, protoBytes, msg, filter)
default: default:
m.logger.Info("protobuf type not found", zap.String("type", string(msg.Type))) m.logger.Info("protobuf type not found", zap.String("type", string(msg.Type)))
return errors.New("protobuf type not found") return errors.New("protobuf type not found")
@ -468,29 +468,6 @@ func (m *Messenger) handleSyncInstallationAccountProtobuf(messageState *Received
} }
func (m *Messenger) handleSyncInstallationPublicChatProtobuf(messageState *ReceivedMessageState, protoBytes []byte, msg *v1protocol.StatusMessage, filter transport.Filter) error {
m.logger.Info("handling SyncInstallationPublicChat")
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
m.logger.Warn("not coming from us, ignoring")
return nil
}
p := &protobuf.SyncInstallationPublicChat{}
err := proto.Unmarshal(protoBytes, p)
if err != nil {
return err
}
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, messageState.CurrentMessageState.Contact.ID, filter.ContentTopic, filter.ChatID, msg.Type, p)
return m.HandleSyncInstallationPublicChat(messageState, p, msg)
}
func (m *Messenger) handleContactCodeAdvertisementProtobuf(messageState *ReceivedMessageState, protoBytes []byte, msg *v1protocol.StatusMessage, filter transport.Filter) error { func (m *Messenger) handleContactCodeAdvertisementProtobuf(messageState *ReceivedMessageState, protoBytes []byte, msg *v1protocol.StatusMessage, filter transport.Filter) error {
m.logger.Info("handling ContactCodeAdvertisement") m.logger.Info("handling ContactCodeAdvertisement")
@ -1629,3 +1606,26 @@ func (m *Messenger) handleCommunityShardKeyProtobuf(messageState *ReceivedMessag
} }
func (m *Messenger) handleSyncChatProtobuf(messageState *ReceivedMessageState, protoBytes []byte, msg *v1protocol.StatusMessage, filter transport.Filter) error {
m.logger.Info("handling SyncChat")
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
m.logger.Warn("not coming from us, ignoring")
return nil
}
p := &protobuf.SyncChat{}
err := proto.Unmarshal(protoBytes, p)
if err != nil {
return err
}
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, messageState.CurrentMessageState.Contact.ID, filter.ContentTopic, filter.ChatID, msg.Type, p)
return m.HandleSyncChat(messageState, p, msg)
}

View File

@ -3,8 +3,12 @@ package protocol
import ( import (
"context" "context"
"errors" "errors"
"image"
"image/png"
"os"
"testing" "testing"
userimage "github.com/status-im/status-go/images"
"github.com/status-im/status-go/services/browsers" "github.com/status-im/status-go/services/browsers"
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
@ -157,6 +161,65 @@ func (s *MessengerInstallationSuite) TestSyncInstallation() {
err = s.m.SaveChat(chat) err = s.m.SaveChat(chat)
s.Require().NoError(err) s.Require().NoError(err)
// Create group chat
response, err := s.m.CreateGroupChatWithMembers(context.Background(), "group", []string{})
s.NoError(err)
s.Require().Len(response.Chats(), 1)
ourGroupChat := response.Chats()[0]
err = s.m.SaveChat(ourGroupChat)
s.NoError(err)
// Generate test image bigger than BannerDim
testImage := image.NewRGBA(image.Rect(0, 0, 20, 10))
tmpTestFilePath := s.T().TempDir() + "/test.png"
file, err := os.Create(tmpTestFilePath)
s.NoError(err)
defer file.Close()
err = png.Encode(file, testImage)
s.Require().NoError(err)
groupImg := userimage.CroppedImage{
ImagePath: tmpTestFilePath,
X: 1,
Y: 1,
Width: 10,
Height: 5,
}
// Add image to chat
response, err = s.m.EditGroupChat(context.Background(), ourGroupChat.ID, "test_admin_group", "#FF00FF", groupImg)
s.Require().NoError(err)
s.Require().Len(response.Chats(), 1)
s.Require().Equal("test_admin_group", response.Chats()[0].Name)
s.Require().Equal("#FF00FF", response.Chats()[0].Color)
ourGroupChat = response.Chats()[0]
// Create second group chat and deactivate it
response, err = s.m.CreateGroupChatWithMembers(context.Background(), "deactivated-group", []string{})
s.NoError(err)
s.Require().Len(response.Chats(), 1)
ourDeactivatedGroupChat := response.Chats()[0]
err = s.m.SaveChat(ourDeactivatedGroupChat)
s.NoError(err)
_, err = s.m.deactivateChat(ourDeactivatedGroupChat.ID, 0, true, true)
s.NoError(err)
// Create Alice for the 1-1 chat
alice := s.newMessenger()
_, err = alice.Start()
s.Require().NoError(err)
defer alice.Shutdown() // nolint: errcheck
// Create 1-1 chat
ourOneOneChat := CreateOneToOneChat("Our 1TO1", &alice.identity.PublicKey, alice.transport)
err = s.m.SaveChat(ourOneOneChat)
s.Require().NoError(err)
// add and deactivate chat // add and deactivate chat
chat2 := CreatePublicChat(removedChatID, s.m.transport) chat2 := CreatePublicChat(removedChatID, s.m.transport)
chat2.DeletedAtClockValue = 1 chat2.DeletedAtClockValue = 1
@ -176,7 +239,7 @@ func (s *MessengerInstallationSuite) TestSyncInstallation() {
DeviceType: "their-device-type", DeviceType: "their-device-type",
}) })
s.Require().NoError(err) s.Require().NoError(err)
response, err := theirMessenger.SendPairInstallation(context.Background(), nil) response, err = theirMessenger.SendPairInstallation(context.Background(), nil)
s.Require().NoError(err) s.Require().NoError(err)
s.Require().NotNil(response) s.Require().NotNil(response)
s.Require().Len(response.Chats(), 1) s.Require().Len(response.Chats(), 1)
@ -220,7 +283,7 @@ func (s *MessengerInstallationSuite) TestSyncInstallation() {
} }
bookmarks = append(bookmarks, response.GetBookmarks()...) bookmarks = append(bookmarks, response.GetBookmarks()...)
if len(allChats) >= 2 && actualContact != nil && len(bookmarks) >= 1 { if len(allChats) >= 5 && actualContact != nil && len(bookmarks) >= 1 {
return nil return nil
} }
@ -231,17 +294,41 @@ func (s *MessengerInstallationSuite) TestSyncInstallation() {
s.Require().NoError(err) s.Require().NoError(err)
var statusChat *Chat var statusChat *Chat
var groupChat *Chat
var removedGroupChat *Chat
var oneToOneChat *Chat
var removedChat *Chat var removedChat *Chat
for _, c := range allChats { for _, c := range allChats {
if c.ID == statusChatID { if c.ID == statusChatID {
statusChat = c statusChat = c
} }
if c.ID == ourGroupChat.ID {
groupChat = c
}
if c.ID == ourDeactivatedGroupChat.ID {
removedGroupChat = c
}
if c.ID == ourOneOneChat.ID {
oneToOneChat = c
}
if c.ID == removedChatID { if c.ID == removedChatID {
removedChat = c removedChat = c
} }
} }
s.Require().NotNil(statusChat) s.Require().NotNil(statusChat)
s.Require().NotNil(groupChat)
s.Require().NotNil(removedGroupChat)
s.Require().NotNil(oneToOneChat)
s.Require().Equal(ourGroupChat.Name, groupChat.Name)
s.Require().True(ourGroupChat.Active)
s.Require().Equal(ourDeactivatedGroupChat.Name, removedGroupChat.Name)
s.Require().False(removedGroupChat.Active)
s.Require().Equal("", oneToOneChat.Name) // We set 1-1 chat names to "" because the name is not good
s.Require().True(oneToOneChat.Active)
s.Require().True(actualContact.added()) s.Require().True(actualContact.added())
s.Require().Equal("Test Nickname", actualContact.LocalNickname) s.Require().Equal("Test Nickname", actualContact.LocalNickname)

View File

@ -75,7 +75,7 @@ func (m *Messenger) scheduleSyncChat(chat *Chat) (bool, error) {
go func() { go func() {
_, err := m.performMailserverRequest(func() (*MessengerResponse, error) { _, err := m.performMailserverRequest(func() (*MessengerResponse, error) {
response, err := m.syncChat(chat.ID) response, err := m.syncChatWithFilters(chat.ID)
if err != nil { if err != nil {
m.logger.Error("failed to sync chat", zap.Error(err)) m.logger.Error("failed to sync chat", zap.Error(err))
@ -234,8 +234,7 @@ func (m *Messenger) topicsForChat(chatID string) (string, []types.TopicType, err
return filters[0].PubsubTopic, contentTopics, nil return filters[0].PubsubTopic, contentTopics, nil
} }
// Assume is a public chat for now func (m *Messenger) syncChatWithFilters(chatID string) (*MessengerResponse, error) {
func (m *Messenger) syncChat(chatID string) (*MessengerResponse, error) {
filters, err := m.filtersForChat(chatID) filters, err := m.filtersForChat(chatID)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -57,15 +57,15 @@ func (m *Messenger) HandleSyncRawMessages(rawMessages []*protobuf.RawMessage) er
m.logger.Warn("failed to HandleContactUpdate when HandleSyncRawMessages", zap.Error(err)) m.logger.Warn("failed to HandleContactUpdate when HandleSyncRawMessages", zap.Error(err))
continue continue
} }
case protobuf.ApplicationMetadataMessage_SYNC_INSTALLATION_PUBLIC_CHAT: case protobuf.ApplicationMetadataMessage_SYNC_CHAT:
var message protobuf.SyncInstallationPublicChat var message protobuf.SyncChat
err := proto.Unmarshal(rawMessage.GetPayload(), &message) err := proto.Unmarshal(rawMessage.GetPayload(), &message)
if err != nil { if err != nil {
return err return err
} }
err = m.HandleSyncInstallationPublicChat(state, &message, nil) err = m.HandleSyncChat(state, &message, nil)
if err != nil { if err != nil {
m.logger.Error("error createPublicChat when HandleSyncRawMessages", zap.Error(err)) m.logger.Error("error createChat when HandleSyncRawMessages", zap.Error(err))
continue continue
} }
case protobuf.ApplicationMetadataMessage_SYNC_CHAT_REMOVED: case protobuf.ApplicationMetadataMessage_SYNC_CHAT_REMOVED:

View File

@ -37,7 +37,6 @@ const (
ApplicationMetadataMessage_DECLINE_REQUEST_TRANSACTION ApplicationMetadataMessage_Type = 11 ApplicationMetadataMessage_DECLINE_REQUEST_TRANSACTION ApplicationMetadataMessage_Type = 11
ApplicationMetadataMessage_SYNC_INSTALLATION_CONTACT_V2 ApplicationMetadataMessage_Type = 12 ApplicationMetadataMessage_SYNC_INSTALLATION_CONTACT_V2 ApplicationMetadataMessage_Type = 12
ApplicationMetadataMessage_SYNC_INSTALLATION_ACCOUNT ApplicationMetadataMessage_Type = 13 ApplicationMetadataMessage_SYNC_INSTALLATION_ACCOUNT ApplicationMetadataMessage_Type = 13
ApplicationMetadataMessage_SYNC_INSTALLATION_PUBLIC_CHAT ApplicationMetadataMessage_Type = 14
ApplicationMetadataMessage_CONTACT_CODE_ADVERTISEMENT ApplicationMetadataMessage_Type = 15 ApplicationMetadataMessage_CONTACT_CODE_ADVERTISEMENT ApplicationMetadataMessage_Type = 15
ApplicationMetadataMessage_PUSH_NOTIFICATION_REGISTRATION ApplicationMetadataMessage_Type = 16 ApplicationMetadataMessage_PUSH_NOTIFICATION_REGISTRATION ApplicationMetadataMessage_Type = 16
ApplicationMetadataMessage_PUSH_NOTIFICATION_REGISTRATION_RESPONSE ApplicationMetadataMessage_Type = 17 ApplicationMetadataMessage_PUSH_NOTIFICATION_REGISTRATION_RESPONSE ApplicationMetadataMessage_Type = 17
@ -96,6 +95,7 @@ const (
ApplicationMetadataMessage_COMMUNITY_EVENTS_MESSAGE_REJECTED ApplicationMetadataMessage_Type = 71 ApplicationMetadataMessage_COMMUNITY_EVENTS_MESSAGE_REJECTED ApplicationMetadataMessage_Type = 71
ApplicationMetadataMessage_COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE ApplicationMetadataMessage_Type = 72 ApplicationMetadataMessage_COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE ApplicationMetadataMessage_Type = 72
ApplicationMetadataMessage_COMMUNITY_SHARD_KEY ApplicationMetadataMessage_Type = 73 ApplicationMetadataMessage_COMMUNITY_SHARD_KEY ApplicationMetadataMessage_Type = 73
ApplicationMetadataMessage_SYNC_CHAT ApplicationMetadataMessage_Type = 74
) )
var ApplicationMetadataMessage_Type_name = map[int32]string{ var ApplicationMetadataMessage_Type_name = map[int32]string{
@ -113,7 +113,6 @@ var ApplicationMetadataMessage_Type_name = map[int32]string{
11: "DECLINE_REQUEST_TRANSACTION", 11: "DECLINE_REQUEST_TRANSACTION",
12: "SYNC_INSTALLATION_CONTACT_V2", 12: "SYNC_INSTALLATION_CONTACT_V2",
13: "SYNC_INSTALLATION_ACCOUNT", 13: "SYNC_INSTALLATION_ACCOUNT",
14: "SYNC_INSTALLATION_PUBLIC_CHAT",
15: "CONTACT_CODE_ADVERTISEMENT", 15: "CONTACT_CODE_ADVERTISEMENT",
16: "PUSH_NOTIFICATION_REGISTRATION", 16: "PUSH_NOTIFICATION_REGISTRATION",
17: "PUSH_NOTIFICATION_REGISTRATION_RESPONSE", 17: "PUSH_NOTIFICATION_REGISTRATION_RESPONSE",
@ -172,6 +171,7 @@ var ApplicationMetadataMessage_Type_name = map[int32]string{
71: "COMMUNITY_EVENTS_MESSAGE_REJECTED", 71: "COMMUNITY_EVENTS_MESSAGE_REJECTED",
72: "COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE", 72: "COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE",
73: "COMMUNITY_SHARD_KEY", 73: "COMMUNITY_SHARD_KEY",
74: "SYNC_CHAT",
} }
var ApplicationMetadataMessage_Type_value = map[string]int32{ var ApplicationMetadataMessage_Type_value = map[string]int32{
@ -189,7 +189,6 @@ var ApplicationMetadataMessage_Type_value = map[string]int32{
"DECLINE_REQUEST_TRANSACTION": 11, "DECLINE_REQUEST_TRANSACTION": 11,
"SYNC_INSTALLATION_CONTACT_V2": 12, "SYNC_INSTALLATION_CONTACT_V2": 12,
"SYNC_INSTALLATION_ACCOUNT": 13, "SYNC_INSTALLATION_ACCOUNT": 13,
"SYNC_INSTALLATION_PUBLIC_CHAT": 14,
"CONTACT_CODE_ADVERTISEMENT": 15, "CONTACT_CODE_ADVERTISEMENT": 15,
"PUSH_NOTIFICATION_REGISTRATION": 16, "PUSH_NOTIFICATION_REGISTRATION": 16,
"PUSH_NOTIFICATION_REGISTRATION_RESPONSE": 17, "PUSH_NOTIFICATION_REGISTRATION_RESPONSE": 17,
@ -248,6 +247,7 @@ var ApplicationMetadataMessage_Type_value = map[string]int32{
"COMMUNITY_EVENTS_MESSAGE_REJECTED": 71, "COMMUNITY_EVENTS_MESSAGE_REJECTED": 71,
"COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE": 72, "COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE": 72,
"COMMUNITY_SHARD_KEY": 73, "COMMUNITY_SHARD_KEY": 73,
"SYNC_CHAT": 74,
} }
func (x ApplicationMetadataMessage_Type) String() string { func (x ApplicationMetadataMessage_Type) String() string {
@ -326,73 +326,73 @@ func init() {
} }
var fileDescriptor_ad09a6406fcf24c7 = []byte{ var fileDescriptor_ad09a6406fcf24c7 = []byte{
// 1077 bytes of a gzipped FileDescriptorProto // 1088 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x56, 0x5b, 0x53, 0x1b, 0x37, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x56, 0xeb, 0x52, 0x5b, 0x37,
0x14, 0x2e, 0x84, 0x02, 0x11, 0x97, 0x08, 0x85, 0x8b, 0x01, 0x73, 0x73, 0x08, 0x21, 0x49, 0xeb, 0x17, 0xfd, 0x48, 0xf8, 0xb8, 0x88, 0x4b, 0x84, 0xc2, 0xc5, 0x80, 0xb9, 0x39, 0x84, 0x10, 0xd2,
0xb4, 0xa4, 0xed, 0xb4, 0x4d, 0xd3, 0x56, 0x96, 0x0e, 0xb6, 0xf0, 0xae, 0xb4, 0x91, 0xb4, 0xee, 0x3a, 0x2d, 0x69, 0x3b, 0x6d, 0xd3, 0xb4, 0x95, 0xa5, 0x8d, 0x2d, 0x7c, 0x8e, 0x74, 0x22, 0xe9,
0x38, 0x2f, 0x1a, 0xa7, 0x71, 0x33, 0xcc, 0x24, 0xc1, 0x13, 0x9c, 0x07, 0x9e, 0xfb, 0x2b, 0xfa, 0xb8, 0xe3, 0xfc, 0xd1, 0x38, 0x8d, 0x9b, 0x61, 0x26, 0x09, 0x9e, 0xe0, 0xfc, 0xe0, 0x3d, 0xfa,
0x6f, 0x3b, 0xda, 0xab, 0x01, 0x13, 0x9e, 0x60, 0x75, 0x3e, 0x1d, 0xe9, 0x7c, 0xe7, 0x3b, 0x9f, 0x14, 0x7d, 0xca, 0x8e, 0xce, 0xd5, 0x80, 0x29, 0xbf, 0xe0, 0x68, 0x2f, 0x6d, 0x69, 0xaf, 0xbd,
0x8c, 0x6a, 0xbd, 0xc1, 0xe0, 0xfd, 0xe9, 0xdf, 0xbd, 0xe1, 0xe9, 0xd9, 0x47, 0xf7, 0xa1, 0x3f, 0xf6, 0x92, 0x51, 0xad, 0x37, 0x18, 0x7c, 0x38, 0xfb, 0xb3, 0x37, 0x3c, 0x3b, 0xff, 0xe4, 0x3e,
0xec, 0xbd, 0xed, 0x0d, 0x7b, 0xee, 0x43, 0xff, 0xfc, 0xbc, 0xf7, 0xae, 0x5f, 0x1f, 0x7c, 0x3a, 0xf6, 0x87, 0xbd, 0x77, 0xbd, 0x61, 0xcf, 0x7d, 0xec, 0x5f, 0x5c, 0xf4, 0xde, 0xf7, 0xeb, 0x83,
0x1b, 0x9e, 0x91, 0xd9, 0xe4, 0xcf, 0x9b, 0xcf, 0xff, 0xd4, 0xfe, 0x23, 0x68, 0x83, 0x96, 0x1b, 0xcf, 0xe7, 0xc3, 0x73, 0x32, 0x93, 0xfc, 0x79, 0xfb, 0xe5, 0xaf, 0xda, 0x3f, 0x04, 0x6d, 0xd0,
0xc2, 0x0c, 0x1f, 0xa6, 0x70, 0x52, 0x45, 0x77, 0xcf, 0x4f, 0xdf, 0x7d, 0xec, 0x0d, 0x3f, 0x7f, 0x72, 0x43, 0x98, 0xe1, 0xc3, 0x14, 0x4e, 0xaa, 0x68, 0xf6, 0xe2, 0xec, 0xfd, 0xa7, 0xde, 0xf0,
0xea, 0x57, 0x26, 0x76, 0x27, 0x0e, 0xe7, 0x75, 0xb9, 0x40, 0x2a, 0x68, 0x66, 0xd0, 0xbb, 0x78, 0xcb, 0xe7, 0x7e, 0x65, 0x62, 0x77, 0xe2, 0x70, 0x5e, 0x97, 0x0b, 0xa4, 0x82, 0xa6, 0x07, 0xbd,
0x7f, 0xd6, 0x7b, 0x5b, 0x99, 0x4c, 0x62, 0xf9, 0x27, 0x79, 0x89, 0xa6, 0x86, 0x17, 0x83, 0x7e, 0xcb, 0x0f, 0xe7, 0xbd, 0x77, 0x95, 0x7b, 0x49, 0x2c, 0xff, 0x24, 0xaf, 0xd0, 0xe4, 0xf0, 0x72,
0xe5, 0xce, 0xee, 0xc4, 0xe1, 0xe2, 0xd1, 0xe3, 0x7a, 0x7e, 0x5e, 0xfd, 0xe6, 0xb3, 0xea, 0xf6, 0xd0, 0xaf, 0xdc, 0xdf, 0x9d, 0x38, 0x5c, 0x3c, 0x7e, 0x5a, 0xcf, 0xcf, 0xab, 0xdf, 0x7e, 0x56,
0x62, 0xd0, 0xd7, 0xc9, 0xb6, 0xda, 0xbf, 0x4b, 0x68, 0xca, 0x7f, 0x92, 0x39, 0x34, 0x13, 0xcb, 0xdd, 0x5e, 0x0e, 0xfa, 0x3a, 0xd9, 0x56, 0xfb, 0x7b, 0x09, 0x4d, 0xfa, 0x4f, 0x32, 0x87, 0xa6,
0xb6, 0x54, 0x7f, 0x49, 0xfc, 0x15, 0xc1, 0x68, 0x9e, 0xb5, 0xa8, 0x75, 0x21, 0x18, 0x43, 0x9b, 0x63, 0xd9, 0x96, 0xea, 0x0f, 0x89, 0xff, 0x47, 0x30, 0x9a, 0x67, 0x2d, 0x6a, 0x5d, 0x08, 0xc6,
0x80, 0x27, 0x08, 0x41, 0x8b, 0x4c, 0x49, 0x4b, 0x99, 0x75, 0x71, 0xc4, 0xa9, 0x05, 0x3c, 0x49, 0xd0, 0x26, 0xe0, 0x09, 0x42, 0xd0, 0x22, 0x53, 0xd2, 0x52, 0x66, 0x5d, 0x1c, 0x71, 0x6a, 0x01,
0xb6, 0xd0, 0x7a, 0x08, 0x61, 0x03, 0xb4, 0x69, 0x89, 0x28, 0x5b, 0x2e, 0xb6, 0xdc, 0x21, 0x1b, 0xdf, 0x23, 0x5b, 0x68, 0x3d, 0x84, 0xb0, 0x01, 0xda, 0xb4, 0x44, 0x94, 0x2d, 0x17, 0x5b, 0xee,
0x68, 0xd5, 0x74, 0x25, 0x73, 0x11, 0x15, 0xda, 0x09, 0x69, 0x2c, 0x0d, 0x02, 0x6a, 0x85, 0x92, 0x93, 0x0d, 0xb4, 0x6a, 0xba, 0x92, 0xb9, 0x88, 0x0a, 0xed, 0x84, 0x34, 0x96, 0x06, 0x01, 0xb5,
0x78, 0x8a, 0xec, 0xa3, 0x2a, 0x87, 0x48, 0x03, 0xa3, 0x16, 0xb8, 0x4b, 0x60, 0x97, 0x10, 0x5f, 0x42, 0x49, 0x3c, 0x49, 0xf6, 0x51, 0x95, 0x43, 0xa4, 0x81, 0x51, 0x0b, 0xdc, 0x25, 0xb0, 0x2b,
0x6f, 0x4c, 0xce, 0x4e, 0x90, 0x07, 0x68, 0x47, 0xc3, 0xab, 0x18, 0x8c, 0x75, 0x94, 0x73, 0x0d, 0x88, 0xff, 0x6f, 0xdc, 0x9b, 0x99, 0x20, 0x8f, 0xd0, 0x8e, 0x86, 0xd7, 0x31, 0x18, 0xeb, 0x28,
0xc6, 0xb8, 0x63, 0xa5, 0x9d, 0xd5, 0x54, 0x1a, 0xca, 0x12, 0xe0, 0x34, 0x79, 0x82, 0x0e, 0x28, 0xe7, 0x1a, 0x8c, 0x71, 0x27, 0x4a, 0x3b, 0xab, 0xa9, 0x34, 0x94, 0x25, 0xc0, 0x29, 0x72, 0x84,
0x63, 0x10, 0x59, 0x77, 0x1b, 0x76, 0x86, 0x3c, 0x45, 0x8f, 0x38, 0xb0, 0x40, 0x48, 0xb8, 0x15, 0x0e, 0x28, 0x63, 0x10, 0x59, 0x77, 0x17, 0x76, 0x9a, 0x3c, 0x43, 0x4f, 0x38, 0xb0, 0x40, 0x48,
0x3c, 0x4b, 0xd6, 0xd0, 0xfd, 0x1c, 0x34, 0x1a, 0xb8, 0x4b, 0x96, 0x11, 0x36, 0x20, 0xf9, 0xa5, 0xb8, 0x13, 0x3c, 0x43, 0xd6, 0xd0, 0xc3, 0x1c, 0x34, 0x1a, 0x98, 0x25, 0xcb, 0x08, 0x1b, 0x90,
0x55, 0x44, 0x76, 0xd0, 0xe6, 0xd5, 0xdc, 0xa3, 0x80, 0x39, 0xb2, 0x8b, 0xaa, 0xd7, 0x0a, 0x75, 0xfc, 0xca, 0x2a, 0x22, 0x3b, 0x68, 0xf3, 0x7a, 0xee, 0x51, 0xc0, 0x1c, 0xd9, 0x45, 0xd5, 0x1b,
0x39, 0xa9, 0x9d, 0x23, 0x3c, 0xef, 0x09, 0xbd, 0x8e, 0xa0, 0x8c, 0xa9, 0x58, 0x5a, 0xbc, 0x40, 0x85, 0xba, 0x9c, 0xd4, 0xce, 0x31, 0x9e, 0xf7, 0x84, 0xde, 0x44, 0x50, 0xc6, 0x54, 0x2c, 0x2d,
0xf6, 0xd0, 0xd6, 0xf5, 0x70, 0x14, 0x37, 0x02, 0xc1, 0x9c, 0x6f, 0x17, 0x5e, 0x24, 0xdb, 0x68, 0x5e, 0x20, 0xdb, 0x68, 0x23, 0x87, 0x33, 0xc5, 0xc1, 0x51, 0xde, 0x01, 0x6d, 0x85, 0x81, 0x10,
0x23, 0xcf, 0xc8, 0x14, 0x07, 0x47, 0x79, 0x07, 0xb4, 0x15, 0x06, 0x42, 0x90, 0x16, 0xdf, 0x23, 0xa4, 0xc5, 0x0f, 0x48, 0x0d, 0x6d, 0x47, 0xb1, 0x69, 0x39, 0xa9, 0xac, 0x38, 0x11, 0x2c, 0xdd,
0x35, 0xb4, 0x1d, 0xc5, 0xa6, 0xe5, 0xa4, 0xb2, 0xe2, 0x58, 0xb0, 0x34, 0x85, 0x86, 0xa6, 0x30, 0xae, 0xa1, 0x29, 0x8c, 0xd5, 0x29, 0xad, 0xd8, 0x33, 0xf0, 0xdf, 0x18, 0xa7, 0xc1, 0x44, 0x4a,
0x56, 0xa7, 0xcc, 0x63, 0x4f, 0xd2, 0x97, 0x31, 0x4e, 0x83, 0x89, 0x94, 0x34, 0x80, 0x97, 0xc8, 0x1a, 0xc0, 0x4b, 0x64, 0x13, 0xad, 0xdd, 0x04, 0xbf, 0x8e, 0x41, 0x77, 0x31, 0x21, 0xfb, 0x68,
0x26, 0x5a, 0xbb, 0x0e, 0x7e, 0x15, 0x83, 0xee, 0x62, 0x42, 0xf6, 0xd1, 0xee, 0x0d, 0xc1, 0x32, 0xf7, 0x96, 0x60, 0x99, 0xe2, 0xa1, 0x2f, 0x69, 0xdc, 0x79, 0x09, 0x3f, 0x78, 0xd9, 0x97, 0x34,
0xc5, 0x7d, 0x5f, 0xf5, 0xb8, 0xf3, 0x12, 0x0a, 0xf1, 0xb2, 0x2f, 0x69, 0x5c, 0x38, 0xdb, 0xbe, 0x2e, 0x9c, 0x6d, 0x5f, 0xf1, 0xb2, 0x83, 0x50, 0x9d, 0x0a, 0xa7, 0x21, 0xe3, 0x71, 0x95, 0xac,
0xe2, 0x95, 0x09, 0xa1, 0x3a, 0x11, 0x4e, 0x43, 0x46, 0xf5, 0x2a, 0x59, 0x47, 0x2b, 0x4d, 0xad, 0xa3, 0x95, 0xa6, 0x56, 0x71, 0xe4, 0x12, 0x89, 0x0a, 0xd9, 0x11, 0x36, 0xad, 0x6e, 0x8d, 0x2c,
0xe2, 0x28, 0xa1, 0xc5, 0x09, 0xd9, 0x11, 0x36, 0xad, 0x6e, 0x8d, 0x2c, 0xa1, 0x85, 0x74, 0x91, 0xa1, 0x85, 0x74, 0x91, 0x83, 0xb4, 0xc2, 0x76, 0x71, 0xc5, 0xa3, 0x99, 0x0a, 0xc3, 0x58, 0x0a,
0x83, 0xb4, 0xc2, 0x76, 0x71, 0xc5, 0xa3, 0x99, 0x0a, 0xc3, 0x58, 0x0a, 0xdb, 0x75, 0x1c, 0x0c, 0xdb, 0x75, 0x1c, 0x0c, 0xd3, 0x22, 0x4a, 0xd0, 0xeb, 0xa4, 0x8a, 0x96, 0xcb, 0xd0, 0x48, 0x9e,
0xd3, 0x22, 0x4a, 0xd0, 0xeb, 0xa4, 0x8a, 0x96, 0xcb, 0xd0, 0x48, 0x9e, 0x8d, 0x44, 0x9f, 0x5b, 0x8d, 0x44, 0x7c, 0x5b, 0x68, 0xbd, 0x8c, 0x16, 0x1d, 0x55, 0xee, 0x54, 0x09, 0x89, 0x37, 0xc9,
0x68, 0xbd, 0x8c, 0x16, 0x4d, 0x57, 0xee, 0x44, 0x09, 0x89, 0x37, 0xc9, 0x3d, 0x34, 0x17, 0x09, 0x03, 0x34, 0x17, 0x09, 0x59, 0xc8, 0xbd, 0xea, 0x67, 0x06, 0xb8, 0x28, 0x67, 0x66, 0xcb, 0xdf,
0x59, 0x4c, 0x44, 0xd5, 0x8f, 0x15, 0x70, 0x51, 0x8e, 0xd5, 0x96, 0xbf, 0x8d, 0xb1, 0xd4, 0xc6, 0xc6, 0x58, 0x6a, 0x63, 0x93, 0x8f, 0xcc, 0xb6, 0xaf, 0x87, 0x43, 0x00, 0x23, 0x73, 0xb2, 0xe3,
0x26, 0x9f, 0xaa, 0x6d, 0x5f, 0x0f, 0x87, 0x00, 0x46, 0x46, 0x69, 0xc7, 0x6b, 0x6b, 0x9c, 0x74, 0x85, 0x33, 0x4e, 0x17, 0xd9, 0xd1, 0x78, 0xd7, 0x0f, 0x12, 0x95, 0x4a, 0x76, 0x43, 0x15, 0x1b,
0xb2, 0xa3, 0xf1, 0xae, 0x9f, 0x35, 0x2a, 0x95, 0xec, 0x86, 0x2a, 0x36, 0x2e, 0x04, 0xab, 0x05, 0x17, 0x82, 0xd5, 0x82, 0xb9, 0x06, 0xb5, 0xac, 0x85, 0xf7, 0xc8, 0x0a, 0x5a, 0x4a, 0x36, 0x27,
0x73, 0x0d, 0x6a, 0x59, 0x0b, 0xef, 0x91, 0x15, 0xb4, 0x94, 0x6c, 0x4e, 0xca, 0xd6, 0x10, 0xaa, 0x65, 0x6b, 0x08, 0x55, 0x07, 0x38, 0xae, 0xf9, 0xce, 0x95, 0xcb, 0xd9, 0x51, 0xc6, 0x93, 0xc8,
0x0e, 0x70, 0x5c, 0xf3, 0x9d, 0x2b, 0x97, 0xb3, 0xa3, 0x8c, 0x27, 0x91, 0xe3, 0x07, 0x04, 0xa1, 0xf1, 0x23, 0x82, 0xd0, 0x54, 0x83, 0xb2, 0x76, 0x1c, 0xe1, 0xfd, 0x42, 0x72, 0x9e, 0xdd, 0x8e,
0xe9, 0x06, 0x65, 0xed, 0x38, 0xc2, 0xfb, 0x85, 0x2a, 0x3d, 0xbb, 0x1d, 0x5f, 0x29, 0x03, 0x69, 0xaf, 0x94, 0x81, 0xb4, 0xa0, 0x53, 0xe8, 0x63, 0xb2, 0x87, 0xb6, 0xc6, 0x86, 0xd3, 0x89, 0x03,
0x41, 0xa7, 0xd0, 0x87, 0x85, 0x2a, 0xaf, 0x86, 0xd3, 0xa1, 0x04, 0x8e, 0x0f, 0xbc, 0xea, 0xc6, 0x8e, 0x0f, 0xbc, 0xea, 0xc6, 0x42, 0xb8, 0x30, 0xa1, 0x30, 0x06, 0x38, 0x7e, 0x92, 0x30, 0xe1,
0x42, 0xb8, 0x30, 0xa1, 0x30, 0x06, 0x38, 0x7e, 0x94, 0x30, 0xe1, 0x31, 0x0d, 0xa5, 0xda, 0x21, 0x31, 0x0d, 0xa5, 0xda, 0x21, 0xd5, 0x6d, 0x7c, 0x48, 0x56, 0x11, 0x49, 0x6f, 0x18, 0x00, 0xd5,
0xd5, 0x6d, 0x7c, 0x48, 0x56, 0x11, 0x49, 0x6f, 0x18, 0x00, 0xd5, 0xae, 0x25, 0x8c, 0x55, 0xba, 0xae, 0x25, 0x8c, 0x55, 0xba, 0x8b, 0x9f, 0x7a, 0x1a, 0x93, 0x75, 0x03, 0xd6, 0x0a, 0xd9, 0xc4,
0x8b, 0x1f, 0x7b, 0x1a, 0x93, 0x75, 0x03, 0xd6, 0x0a, 0xd9, 0xc4, 0x4f, 0xc8, 0x21, 0xda, 0x2f, 0x47, 0xe4, 0x10, 0xed, 0x97, 0x8d, 0xc8, 0x6a, 0x71, 0x54, 0xb3, 0x96, 0xe8, 0x80, 0x0b, 0x69,
0x1b, 0x91, 0xd5, 0xe2, 0xa8, 0x66, 0x2d, 0xd1, 0x01, 0x17, 0xd2, 0xa6, 0x04, 0x1b, 0x08, 0xd9, 0x53, 0x82, 0x0d, 0x84, 0x6c, 0xe3, 0x67, 0xbe, 0xd7, 0xa9, 0xe3, 0x68, 0x75, 0x22, 0x02, 0x70,
0xc6, 0x4f, 0x7d, 0xaf, 0x53, 0x53, 0xd2, 0xea, 0x58, 0x04, 0xe0, 0x22, 0xc1, 0x6c, 0xac, 0xc1, 0x91, 0x60, 0x36, 0xd6, 0x60, 0xf0, 0x57, 0x45, 0xda, 0x7c, 0x9a, 0xbe, 0x4e, 0x58, 0x4d, 0x7d,
0xe0, 0x6f, 0x8a, 0xb4, 0xf9, 0xc0, 0x7d, 0x9b, 0xb0, 0x9a, 0x5a, 0x4b, 0x3e, 0x54, 0xb9, 0x2c, 0x23, 0x1f, 0xaa, 0x5c, 0x96, 0x75, 0x4f, 0x9f, 0x06, 0xab, 0xd3, 0x49, 0xbb, 0x1a, 0x7c, 0x4e,
0xeb, 0x9e, 0x3e, 0x0d, 0x56, 0xa7, 0x93, 0x76, 0x39, 0xf8, 0x8c, 0x1c, 0xa0, 0xda, 0x8d, 0xc2, 0x0e, 0x50, 0xed, 0x56, 0x61, 0x94, 0xda, 0xfd, 0xa6, 0xec, 0x41, 0x01, 0xce, 0x6a, 0x32, 0xf8,
0x28, 0xb5, 0xfb, 0x5d, 0xd9, 0x83, 0x02, 0x9c, 0xd5, 0x64, 0xf0, 0xf7, 0xde, 0x2f, 0xf2, 0xad, 0x5b, 0x6f, 0x06, 0xf9, 0xd6, 0xc2, 0x02, 0x40, 0x17, 0x33, 0x80, 0x8f, 0xbd, 0x2c, 0xae, 0xdd,
0x85, 0x4b, 0x80, 0x2e, 0x66, 0x00, 0x1f, 0x79, 0x59, 0x5c, 0xb9, 0xdf, 0x25, 0xc0, 0x73, 0x9f, 0xef, 0x0a, 0xe0, 0x85, 0x4f, 0x91, 0x1b, 0xce, 0x58, 0xc4, 0x77, 0x85, 0x38, 0xac, 0x8e, 0x8d,
0x22, 0xf7, 0xa4, 0xb1, 0x88, 0x1f, 0x0a, 0x71, 0x58, 0x1d, 0x1b, 0x6f, 0xc5, 0xb1, 0x01, 0x8d, 0xf7, 0xd9, 0xd8, 0x80, 0xc6, 0xdf, 0x17, 0x3d, 0x1f, 0x45, 0x17, 0xf5, 0xfd, 0x50, 0xf4, 0xfc,
0x7f, 0x2c, 0x7a, 0x3e, 0x8a, 0x2e, 0xea, 0xfb, 0xa9, 0xe8, 0xf9, 0x95, 0xca, 0x1d, 0x07, 0x26, 0x5a, 0xe5, 0x8e, 0x03, 0x13, 0xc6, 0x27, 0xfe, 0x31, 0x75, 0xa2, 0x31, 0x14, 0x04, 0x40, 0x3b,
0x8c, 0x4f, 0xfc, 0x73, 0xea, 0x44, 0x63, 0x28, 0x08, 0x80, 0x76, 0x00, 0xff, 0xe2, 0xe3, 0x49, 0x80, 0x7f, 0xf2, 0xf1, 0x24, 0x45, 0xa6, 0x75, 0xef, 0xad, 0x61, 0x29, 0xf9, 0x9f, 0x8b, 0xe6,
0x8a, 0x4c, 0xeb, 0xde, 0x7e, 0xc3, 0x52, 0xf2, 0xbf, 0x16, 0xcd, 0x37, 0xb4, 0x03, 0x3c, 0x77, 0x1b, 0xda, 0x01, 0x9e, 0x5b, 0x30, 0x7e, 0xe9, 0x3d, 0xa5, 0xcc, 0xcb, 0xa8, 0x64, 0x10, 0xdc,
0x69, 0xfc, 0xc2, 0x7b, 0x4a, 0x99, 0x97, 0x51, 0xc9, 0x20, 0xb8, 0x36, 0x7a, 0xbf, 0x79, 0x66, 0x18, 0xbd, 0x5f, 0x3c, 0x33, 0x59, 0x6c, 0x6c, 0xdd, 0xaf, 0x8a, 0x66, 0xb7, 0xa1, 0xeb, 0x1f,
0xb2, 0xd8, 0xd8, 0xba, 0x5f, 0x16, 0xcd, 0x6e, 0x43, 0xd7, 0xbf, 0x4f, 0xf8, 0xf7, 0x82, 0x09, 0x1f, 0xfc, 0x6b, 0xc1, 0x84, 0x51, 0x4c, 0xd0, 0xc0, 0x79, 0xbd, 0x18, 0xfc, 0x1b, 0xa9, 0xa2,
0xa3, 0x98, 0xa0, 0x81, 0xf3, 0x7a, 0x31, 0xf8, 0x0f, 0x52, 0x45, 0x95, 0x64, 0x19, 0xa4, 0x49, 0x4a, 0xb2, 0x0c, 0xd2, 0x24, 0xe4, 0x48, 0x1a, 0x82, 0xe3, 0x60, 0xa9, 0x08, 0xf0, 0xef, 0xbe,
0xc8, 0x91, 0x34, 0x04, 0xc7, 0xc1, 0x52, 0x11, 0xe0, 0x3f, 0x7d, 0xa3, 0xc7, 0x2a, 0x7b, 0xd4, 0xd1, 0x63, 0x95, 0x3d, 0x6a, 0x56, 0x06, 0x53, 0xef, 0xa9, 0x77, 0xe2, 0x9c, 0x77, 0x02, 0xc0,
0xac, 0x0c, 0xa6, 0xde, 0x53, 0x6f, 0xc5, 0x39, 0xef, 0x04, 0x80, 0x1b, 0xfe, 0xc8, 0xb2, 0x44, 0x0d, 0x7f, 0x64, 0x59, 0x22, 0x74, 0x40, 0x5a, 0x53, 0x10, 0xc3, 0xfc, 0x8b, 0x37, 0x12, 0xf5,
0xe8, 0x80, 0xb4, 0xa6, 0x20, 0x86, 0xf9, 0x47, 0x71, 0x24, 0xea, 0xed, 0xc4, 0xb4, 0xa8, 0x2e, 0x76, 0x62, 0x5a, 0x54, 0x97, 0x1c, 0x81, 0xc1, 0xdc, 0xb3, 0x34, 0xaa, 0x65, 0xc7, 0x62, 0x63,
0x39, 0x02, 0x83, 0xb9, 0x67, 0x69, 0x54, 0xcb, 0x8e, 0xc5, 0xc6, 0xaa, 0x50, 0xbc, 0xce, 0x9d, 0x55, 0x28, 0xde, 0xe4, 0xce, 0x11, 0x28, 0x8d, 0xa1, 0x90, 0x5f, 0x86, 0x32, 0x2e, 0x52, 0x46,
0x23, 0x50, 0x1a, 0x43, 0x21, 0xbf, 0x0c, 0x65, 0x5c, 0xa4, 0x8c, 0x48, 0xaf, 0x7c, 0x4c, 0x1e, 0xa4, 0x57, 0x3e, 0x21, 0x8f, 0xd1, 0xde, 0x6d, 0xb7, 0x70, 0x1a, 0x4e, 0x81, 0xf9, 0xd9, 0x6e,
0xa2, 0xbd, 0x9b, 0x6e, 0xe1, 0x34, 0x9c, 0x00, 0xf3, 0xb3, 0xdd, 0xf4, 0xcf, 0x6f, 0x09, 0x8b, 0xfa, 0xb7, 0xb5, 0x84, 0x45, 0x5a, 0x74, 0x44, 0x00, 0xcd, 0x4c, 0x48, 0xe9, 0xab, 0x9d, 0x5f,
0xb4, 0xe8, 0x88, 0x00, 0x9a, 0x99, 0x90, 0xd2, 0x87, 0x3d, 0xbf, 0x7a, 0xcb, 0xbf, 0xa8, 0x23, 0xbd, 0xe5, 0x9f, 0xcb, 0x11, 0xa5, 0xb7, 0xa8, 0xe6, 0x9e, 0x7f, 0x2c, 0xc8, 0x02, 0x9a, 0x2d,
0x4a, 0x6f, 0x51, 0xcd, 0x3d, 0xff, 0x58, 0x34, 0x16, 0x5e, 0xcf, 0xd5, 0x9f, 0xbd, 0xc8, 0x7f, 0xbc, 0x08, 0x9f, 0xd6, 0x26, 0x67, 0x16, 0xf1, 0xe2, 0xd1, 0xd6, 0x4d, 0xcb, 0x8b, 0xe2, 0x46,
0xba, 0xbc, 0x99, 0x4e, 0xfe, 0x7b, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xc9, 0x3a, 0x20, 0x52, 0x58, 0x63, 0xe1, 0xcd, 0x5c, 0xfd, 0xf9, 0xcb, 0xfc, 0xb7, 0xcc, 0xdb, 0xa9, 0xe4,
0x61, 0x61, 0x09, 0x00, 0x00, 0xbf, 0x17, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x6d, 0x24, 0xd2, 0x72, 0x09, 0x00, 0x00,
} }

View File

@ -13,6 +13,8 @@ message ApplicationMetadataMessage {
Type type = 3; Type type = 3;
enum Type { enum Type {
reserved 14;
reserved "SYNC_INSTALLATION_PUBLIC_CHAT";
UNKNOWN = 0; UNKNOWN = 0;
CHAT_MESSAGE = 1; CHAT_MESSAGE = 1;
CONTACT_UPDATE = 2; CONTACT_UPDATE = 2;
@ -27,7 +29,6 @@ message ApplicationMetadataMessage {
DECLINE_REQUEST_TRANSACTION = 11; DECLINE_REQUEST_TRANSACTION = 11;
SYNC_INSTALLATION_CONTACT_V2 = 12; SYNC_INSTALLATION_CONTACT_V2 = 12;
SYNC_INSTALLATION_ACCOUNT = 13; SYNC_INSTALLATION_ACCOUNT = 13;
SYNC_INSTALLATION_PUBLIC_CHAT = 14;
CONTACT_CODE_ADVERTISEMENT = 15; CONTACT_CODE_ADVERTISEMENT = 15;
PUSH_NOTIFICATION_REGISTRATION = 16; PUSH_NOTIFICATION_REGISTRATION = 16;
PUSH_NOTIFICATION_REGISTRATION_RESPONSE = 17; PUSH_NOTIFICATION_REGISTRATION_RESPONSE = 17;
@ -86,5 +87,6 @@ message ApplicationMetadataMessage {
COMMUNITY_EVENTS_MESSAGE_REJECTED = 71; COMMUNITY_EVENTS_MESSAGE_REJECTED = 71;
COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE = 72; COMMUNITY_PRIVILEGED_USER_SYNC_MESSAGE = 72;
COMMUNITY_SHARD_KEY = 73; COMMUNITY_SHARD_KEY = 73;
SYNC_CHAT = 74;
} }
} }

View File

@ -69,7 +69,7 @@ func (x SyncActivityCenterNotification_NotificationType) String() string {
} }
func (SyncActivityCenterNotification_NotificationType) EnumDescriptor() ([]byte, []int) { func (SyncActivityCenterNotification_NotificationType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20, 0} return fileDescriptor_d61ab7221f0b5518, []int{19, 0}
} }
type SyncActivityCenterNotification_MembershipStatus int32 type SyncActivityCenterNotification_MembershipStatus int32
@ -100,7 +100,7 @@ func (x SyncActivityCenterNotification_MembershipStatus) String() string {
} }
func (SyncActivityCenterNotification_MembershipStatus) EnumDescriptor() ([]byte, []int) { func (SyncActivityCenterNotification_MembershipStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20, 1} return fileDescriptor_d61ab7221f0b5518, []int{19, 1}
} }
type SyncActivityCenterNotification_ContactVerificationStatus int32 type SyncActivityCenterNotification_ContactVerificationStatus int32
@ -140,7 +140,7 @@ func (x SyncActivityCenterNotification_ContactVerificationStatus) String() strin
} }
func (SyncActivityCenterNotification_ContactVerificationStatus) EnumDescriptor() ([]byte, []int) { func (SyncActivityCenterNotification_ContactVerificationStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20, 2} return fileDescriptor_d61ab7221f0b5518, []int{19, 2}
} }
type SyncTrustedUser_TrustStatus int32 type SyncTrustedUser_TrustStatus int32
@ -168,7 +168,7 @@ func (x SyncTrustedUser_TrustStatus) String() string {
} }
func (SyncTrustedUser_TrustStatus) EnumDescriptor() ([]byte, []int) { func (SyncTrustedUser_TrustStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{31, 0} return fileDescriptor_d61ab7221f0b5518, []int{30, 0}
} }
type SyncVerificationRequest_VerificationStatus int32 type SyncVerificationRequest_VerificationStatus int32
@ -202,7 +202,7 @@ func (x SyncVerificationRequest_VerificationStatus) String() string {
} }
func (SyncVerificationRequest_VerificationStatus) EnumDescriptor() ([]byte, []int) { func (SyncVerificationRequest_VerificationStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{32, 0} return fileDescriptor_d61ab7221f0b5518, []int{31, 0}
} }
type SyncContactRequestDecision_DecisionStatus int32 type SyncContactRequestDecision_DecisionStatus int32
@ -227,7 +227,7 @@ func (x SyncContactRequestDecision_DecisionStatus) String() string {
} }
func (SyncContactRequestDecision_DecisionStatus) EnumDescriptor() ([]byte, []int) { func (SyncContactRequestDecision_DecisionStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{33, 0} return fileDescriptor_d61ab7221f0b5518, []int{32, 0}
} }
// `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of // `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of
@ -1183,53 +1183,6 @@ func (m *SyncInstallationAccount) GetLastUpdated() uint64 {
return 0 return 0
} }
type SyncInstallationPublicChat struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,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:"-"`
}
func (m *SyncInstallationPublicChat) Reset() { *m = SyncInstallationPublicChat{} }
func (m *SyncInstallationPublicChat) String() string { return proto.CompactTextString(m) }
func (*SyncInstallationPublicChat) ProtoMessage() {}
func (*SyncInstallationPublicChat) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{8}
}
func (m *SyncInstallationPublicChat) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SyncInstallationPublicChat.Unmarshal(m, b)
}
func (m *SyncInstallationPublicChat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SyncInstallationPublicChat.Marshal(b, m, deterministic)
}
func (m *SyncInstallationPublicChat) XXX_Merge(src proto.Message) {
xxx_messageInfo_SyncInstallationPublicChat.Merge(m, src)
}
func (m *SyncInstallationPublicChat) XXX_Size() int {
return xxx_messageInfo_SyncInstallationPublicChat.Size(m)
}
func (m *SyncInstallationPublicChat) XXX_DiscardUnknown() {
xxx_messageInfo_SyncInstallationPublicChat.DiscardUnknown(m)
}
var xxx_messageInfo_SyncInstallationPublicChat proto.InternalMessageInfo
func (m *SyncInstallationPublicChat) GetClock() uint64 {
if m != nil {
return m.Clock
}
return 0
}
func (m *SyncInstallationPublicChat) GetId() string {
if m != nil {
return m.Id
}
return ""
}
type SyncInstallationCommunity struct { type SyncInstallationCommunity struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
Id []byte `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` Id []byte `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
@ -1253,7 +1206,7 @@ func (m *SyncInstallationCommunity) Reset() { *m = SyncInstallationCommu
func (m *SyncInstallationCommunity) String() string { return proto.CompactTextString(m) } func (m *SyncInstallationCommunity) String() string { return proto.CompactTextString(m) }
func (*SyncInstallationCommunity) ProtoMessage() {} func (*SyncInstallationCommunity) ProtoMessage() {}
func (*SyncInstallationCommunity) Descriptor() ([]byte, []int) { func (*SyncInstallationCommunity) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{9} return fileDescriptor_d61ab7221f0b5518, []int{8}
} }
func (m *SyncInstallationCommunity) XXX_Unmarshal(b []byte) error { func (m *SyncInstallationCommunity) XXX_Unmarshal(b []byte) error {
@ -1377,7 +1330,7 @@ func (m *SyncCommunityRequestsToJoin) Reset() { *m = SyncCommunityReques
func (m *SyncCommunityRequestsToJoin) String() string { return proto.CompactTextString(m) } func (m *SyncCommunityRequestsToJoin) String() string { return proto.CompactTextString(m) }
func (*SyncCommunityRequestsToJoin) ProtoMessage() {} func (*SyncCommunityRequestsToJoin) ProtoMessage() {}
func (*SyncCommunityRequestsToJoin) Descriptor() ([]byte, []int) { func (*SyncCommunityRequestsToJoin) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{10} return fileDescriptor_d61ab7221f0b5518, []int{9}
} }
func (m *SyncCommunityRequestsToJoin) XXX_Unmarshal(b []byte) error { func (m *SyncCommunityRequestsToJoin) XXX_Unmarshal(b []byte) error {
@ -1471,7 +1424,7 @@ func (m *SyncChat) Reset() { *m = SyncChat{} }
func (m *SyncChat) String() string { return proto.CompactTextString(m) } func (m *SyncChat) String() string { return proto.CompactTextString(m) }
func (*SyncChat) ProtoMessage() {} func (*SyncChat) ProtoMessage() {}
func (*SyncChat) Descriptor() ([]byte, []int) { func (*SyncChat) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{11} return fileDescriptor_d61ab7221f0b5518, []int{10}
} }
func (m *SyncChat) XXX_Unmarshal(b []byte) error { func (m *SyncChat) XXX_Unmarshal(b []byte) error {
@ -1551,6 +1504,7 @@ type MembershipUpdateEvents struct {
From string `protobuf:"bytes,7,opt,name=from,proto3" json:"from,omitempty"` From string `protobuf:"bytes,7,opt,name=from,proto3" json:"from,omitempty"`
RawPayload []byte `protobuf:"bytes,8,opt,name=raw_payload,json=rawPayload,proto3" json:"raw_payload,omitempty"` RawPayload []byte `protobuf:"bytes,8,opt,name=raw_payload,json=rawPayload,proto3" json:"raw_payload,omitempty"`
Color string `protobuf:"bytes,9,opt,name=color,proto3" json:"color,omitempty"` Color string `protobuf:"bytes,9,opt,name=color,proto3" json:"color,omitempty"`
Image []byte `protobuf:"bytes,10,opt,name=image,proto3" json:"image,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -1560,7 +1514,7 @@ func (m *MembershipUpdateEvents) Reset() { *m = MembershipUpdateEvents{}
func (m *MembershipUpdateEvents) String() string { return proto.CompactTextString(m) } func (m *MembershipUpdateEvents) String() string { return proto.CompactTextString(m) }
func (*MembershipUpdateEvents) ProtoMessage() {} func (*MembershipUpdateEvents) ProtoMessage() {}
func (*MembershipUpdateEvents) Descriptor() ([]byte, []int) { func (*MembershipUpdateEvents) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{12} return fileDescriptor_d61ab7221f0b5518, []int{11}
} }
func (m *MembershipUpdateEvents) XXX_Unmarshal(b []byte) error { func (m *MembershipUpdateEvents) XXX_Unmarshal(b []byte) error {
@ -1644,6 +1598,13 @@ func (m *MembershipUpdateEvents) GetColor() string {
return "" return ""
} }
func (m *MembershipUpdateEvents) GetImage() []byte {
if m != nil {
return m.Image
}
return nil
}
type SyncChatRemoved struct { type SyncChatRemoved struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
@ -1656,7 +1617,7 @@ func (m *SyncChatRemoved) Reset() { *m = SyncChatRemoved{} }
func (m *SyncChatRemoved) String() string { return proto.CompactTextString(m) } func (m *SyncChatRemoved) String() string { return proto.CompactTextString(m) }
func (*SyncChatRemoved) ProtoMessage() {} func (*SyncChatRemoved) ProtoMessage() {}
func (*SyncChatRemoved) Descriptor() ([]byte, []int) { func (*SyncChatRemoved) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{13} return fileDescriptor_d61ab7221f0b5518, []int{12}
} }
func (m *SyncChatRemoved) XXX_Unmarshal(b []byte) error { func (m *SyncChatRemoved) XXX_Unmarshal(b []byte) error {
@ -1703,7 +1664,7 @@ func (m *SyncChatMessagesRead) Reset() { *m = SyncChatMessagesRead{} }
func (m *SyncChatMessagesRead) String() string { return proto.CompactTextString(m) } func (m *SyncChatMessagesRead) String() string { return proto.CompactTextString(m) }
func (*SyncChatMessagesRead) ProtoMessage() {} func (*SyncChatMessagesRead) ProtoMessage() {}
func (*SyncChatMessagesRead) Descriptor() ([]byte, []int) { func (*SyncChatMessagesRead) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{14} return fileDescriptor_d61ab7221f0b5518, []int{13}
} }
func (m *SyncChatMessagesRead) XXX_Unmarshal(b []byte) error { func (m *SyncChatMessagesRead) XXX_Unmarshal(b []byte) error {
@ -1750,7 +1711,7 @@ func (m *SyncActivityCenterRead) Reset() { *m = SyncActivityCenterRead{}
func (m *SyncActivityCenterRead) String() string { return proto.CompactTextString(m) } func (m *SyncActivityCenterRead) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterRead) ProtoMessage() {} func (*SyncActivityCenterRead) ProtoMessage() {}
func (*SyncActivityCenterRead) Descriptor() ([]byte, []int) { func (*SyncActivityCenterRead) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{15} return fileDescriptor_d61ab7221f0b5518, []int{14}
} }
func (m *SyncActivityCenterRead) XXX_Unmarshal(b []byte) error { func (m *SyncActivityCenterRead) XXX_Unmarshal(b []byte) error {
@ -1797,7 +1758,7 @@ func (m *SyncActivityCenterAccepted) Reset() { *m = SyncActivityCenterAc
func (m *SyncActivityCenterAccepted) String() string { return proto.CompactTextString(m) } func (m *SyncActivityCenterAccepted) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterAccepted) ProtoMessage() {} func (*SyncActivityCenterAccepted) ProtoMessage() {}
func (*SyncActivityCenterAccepted) Descriptor() ([]byte, []int) { func (*SyncActivityCenterAccepted) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{16} return fileDescriptor_d61ab7221f0b5518, []int{15}
} }
func (m *SyncActivityCenterAccepted) XXX_Unmarshal(b []byte) error { func (m *SyncActivityCenterAccepted) XXX_Unmarshal(b []byte) error {
@ -1844,7 +1805,7 @@ func (m *SyncActivityCenterDismissed) Reset() { *m = SyncActivityCenterD
func (m *SyncActivityCenterDismissed) String() string { return proto.CompactTextString(m) } func (m *SyncActivityCenterDismissed) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterDismissed) ProtoMessage() {} func (*SyncActivityCenterDismissed) ProtoMessage() {}
func (*SyncActivityCenterDismissed) Descriptor() ([]byte, []int) { func (*SyncActivityCenterDismissed) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{17} return fileDescriptor_d61ab7221f0b5518, []int{16}
} }
func (m *SyncActivityCenterDismissed) XXX_Unmarshal(b []byte) error { func (m *SyncActivityCenterDismissed) XXX_Unmarshal(b []byte) error {
@ -1891,7 +1852,7 @@ func (m *SyncActivityCenterNotificationState) Reset() { *m = SyncActivit
func (m *SyncActivityCenterNotificationState) String() string { return proto.CompactTextString(m) } func (m *SyncActivityCenterNotificationState) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterNotificationState) ProtoMessage() {} func (*SyncActivityCenterNotificationState) ProtoMessage() {}
func (*SyncActivityCenterNotificationState) Descriptor() ([]byte, []int) { func (*SyncActivityCenterNotificationState) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{18} return fileDescriptor_d61ab7221f0b5518, []int{17}
} }
func (m *SyncActivityCenterNotificationState) XXX_Unmarshal(b []byte) error { func (m *SyncActivityCenterNotificationState) XXX_Unmarshal(b []byte) error {
@ -1937,7 +1898,7 @@ func (m *SyncActivityCenterNotifications) Reset() { *m = SyncActivityCen
func (m *SyncActivityCenterNotifications) String() string { return proto.CompactTextString(m) } func (m *SyncActivityCenterNotifications) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterNotifications) ProtoMessage() {} func (*SyncActivityCenterNotifications) ProtoMessage() {}
func (*SyncActivityCenterNotifications) Descriptor() ([]byte, []int) { func (*SyncActivityCenterNotifications) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{19} return fileDescriptor_d61ab7221f0b5518, []int{18}
} }
func (m *SyncActivityCenterNotifications) XXX_Unmarshal(b []byte) error { func (m *SyncActivityCenterNotifications) XXX_Unmarshal(b []byte) error {
@ -1990,7 +1951,7 @@ func (m *SyncActivityCenterNotification) Reset() { *m = SyncActivityCent
func (m *SyncActivityCenterNotification) String() string { return proto.CompactTextString(m) } func (m *SyncActivityCenterNotification) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterNotification) ProtoMessage() {} func (*SyncActivityCenterNotification) ProtoMessage() {}
func (*SyncActivityCenterNotification) Descriptor() ([]byte, []int) { func (*SyncActivityCenterNotification) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20} return fileDescriptor_d61ab7221f0b5518, []int{19}
} }
func (m *SyncActivityCenterNotification) XXX_Unmarshal(b []byte) error { func (m *SyncActivityCenterNotification) XXX_Unmarshal(b []byte) error {
@ -2132,7 +2093,7 @@ func (m *SyncBookmark) Reset() { *m = SyncBookmark{} }
func (m *SyncBookmark) String() string { return proto.CompactTextString(m) } func (m *SyncBookmark) String() string { return proto.CompactTextString(m) }
func (*SyncBookmark) ProtoMessage() {} func (*SyncBookmark) ProtoMessage() {}
func (*SyncBookmark) Descriptor() ([]byte, []int) { func (*SyncBookmark) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{21} return fileDescriptor_d61ab7221f0b5518, []int{20}
} }
func (m *SyncBookmark) XXX_Unmarshal(b []byte) error { func (m *SyncBookmark) XXX_Unmarshal(b []byte) error {
@ -2209,7 +2170,7 @@ func (m *SyncEnsUsernameDetail) Reset() { *m = SyncEnsUsernameDetail{} }
func (m *SyncEnsUsernameDetail) String() string { return proto.CompactTextString(m) } func (m *SyncEnsUsernameDetail) String() string { return proto.CompactTextString(m) }
func (*SyncEnsUsernameDetail) ProtoMessage() {} func (*SyncEnsUsernameDetail) ProtoMessage() {}
func (*SyncEnsUsernameDetail) Descriptor() ([]byte, []int) { func (*SyncEnsUsernameDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{22} return fileDescriptor_d61ab7221f0b5518, []int{21}
} }
func (m *SyncEnsUsernameDetail) XXX_Unmarshal(b []byte) error { func (m *SyncEnsUsernameDetail) XXX_Unmarshal(b []byte) error {
@ -2270,7 +2231,7 @@ func (m *SyncClearHistory) Reset() { *m = SyncClearHistory{} }
func (m *SyncClearHistory) String() string { return proto.CompactTextString(m) } func (m *SyncClearHistory) String() string { return proto.CompactTextString(m) }
func (*SyncClearHistory) ProtoMessage() {} func (*SyncClearHistory) ProtoMessage() {}
func (*SyncClearHistory) Descriptor() ([]byte, []int) { func (*SyncClearHistory) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{23} return fileDescriptor_d61ab7221f0b5518, []int{22}
} }
func (m *SyncClearHistory) XXX_Unmarshal(b []byte) error { func (m *SyncClearHistory) XXX_Unmarshal(b []byte) error {
@ -2322,7 +2283,7 @@ func (m *SyncProfilePicture) Reset() { *m = SyncProfilePicture{} }
func (m *SyncProfilePicture) String() string { return proto.CompactTextString(m) } func (m *SyncProfilePicture) String() string { return proto.CompactTextString(m) }
func (*SyncProfilePicture) ProtoMessage() {} func (*SyncProfilePicture) ProtoMessage() {}
func (*SyncProfilePicture) Descriptor() ([]byte, []int) { func (*SyncProfilePicture) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{24} return fileDescriptor_d61ab7221f0b5518, []int{23}
} }
func (m *SyncProfilePicture) XXX_Unmarshal(b []byte) error { func (m *SyncProfilePicture) XXX_Unmarshal(b []byte) error {
@ -2404,7 +2365,7 @@ func (m *SyncProfilePictures) Reset() { *m = SyncProfilePictures{} }
func (m *SyncProfilePictures) String() string { return proto.CompactTextString(m) } func (m *SyncProfilePictures) String() string { return proto.CompactTextString(m) }
func (*SyncProfilePictures) ProtoMessage() {} func (*SyncProfilePictures) ProtoMessage() {}
func (*SyncProfilePictures) Descriptor() ([]byte, []int) { func (*SyncProfilePictures) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{25} return fileDescriptor_d61ab7221f0b5518, []int{24}
} }
func (m *SyncProfilePictures) XXX_Unmarshal(b []byte) error { func (m *SyncProfilePictures) XXX_Unmarshal(b []byte) error {
@ -2465,7 +2426,7 @@ func (m *SyncAccount) Reset() { *m = SyncAccount{} }
func (m *SyncAccount) String() string { return proto.CompactTextString(m) } func (m *SyncAccount) String() string { return proto.CompactTextString(m) }
func (*SyncAccount) ProtoMessage() {} func (*SyncAccount) ProtoMessage() {}
func (*SyncAccount) Descriptor() ([]byte, []int) { func (*SyncAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{26} return fileDescriptor_d61ab7221f0b5518, []int{25}
} }
func (m *SyncAccount) XXX_Unmarshal(b []byte) error { func (m *SyncAccount) XXX_Unmarshal(b []byte) error {
@ -2619,7 +2580,7 @@ func (m *SyncKeypair) Reset() { *m = SyncKeypair{} }
func (m *SyncKeypair) String() string { return proto.CompactTextString(m) } func (m *SyncKeypair) String() string { return proto.CompactTextString(m) }
func (*SyncKeypair) ProtoMessage() {} func (*SyncKeypair) ProtoMessage() {}
func (*SyncKeypair) Descriptor() ([]byte, []int) { func (*SyncKeypair) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{27} return fileDescriptor_d61ab7221f0b5518, []int{26}
} }
func (m *SyncKeypair) XXX_Unmarshal(b []byte) error { func (m *SyncKeypair) XXX_Unmarshal(b []byte) error {
@ -2731,7 +2692,7 @@ func (m *SyncAccountsPositions) Reset() { *m = SyncAccountsPositions{} }
func (m *SyncAccountsPositions) String() string { return proto.CompactTextString(m) } func (m *SyncAccountsPositions) String() string { return proto.CompactTextString(m) }
func (*SyncAccountsPositions) ProtoMessage() {} func (*SyncAccountsPositions) ProtoMessage() {}
func (*SyncAccountsPositions) Descriptor() ([]byte, []int) { func (*SyncAccountsPositions) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{28} return fileDescriptor_d61ab7221f0b5518, []int{27}
} }
func (m *SyncAccountsPositions) XXX_Unmarshal(b []byte) error { func (m *SyncAccountsPositions) XXX_Unmarshal(b []byte) error {
@ -2784,7 +2745,7 @@ func (m *SyncSavedAddress) Reset() { *m = SyncSavedAddress{} }
func (m *SyncSavedAddress) String() string { return proto.CompactTextString(m) } func (m *SyncSavedAddress) String() string { return proto.CompactTextString(m) }
func (*SyncSavedAddress) ProtoMessage() {} func (*SyncSavedAddress) ProtoMessage() {}
func (*SyncSavedAddress) Descriptor() ([]byte, []int) { func (*SyncSavedAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{29} return fileDescriptor_d61ab7221f0b5518, []int{28}
} }
func (m *SyncSavedAddress) XXX_Unmarshal(b []byte) error { func (m *SyncSavedAddress) XXX_Unmarshal(b []byte) error {
@ -2874,7 +2835,7 @@ func (m *SyncCommunitySettings) Reset() { *m = SyncCommunitySettings{} }
func (m *SyncCommunitySettings) String() string { return proto.CompactTextString(m) } func (m *SyncCommunitySettings) String() string { return proto.CompactTextString(m) }
func (*SyncCommunitySettings) ProtoMessage() {} func (*SyncCommunitySettings) ProtoMessage() {}
func (*SyncCommunitySettings) Descriptor() ([]byte, []int) { func (*SyncCommunitySettings) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{30} return fileDescriptor_d61ab7221f0b5518, []int{29}
} }
func (m *SyncCommunitySettings) XXX_Unmarshal(b []byte) error { func (m *SyncCommunitySettings) XXX_Unmarshal(b []byte) error {
@ -2929,7 +2890,7 @@ func (m *SyncTrustedUser) Reset() { *m = SyncTrustedUser{} }
func (m *SyncTrustedUser) String() string { return proto.CompactTextString(m) } func (m *SyncTrustedUser) String() string { return proto.CompactTextString(m) }
func (*SyncTrustedUser) ProtoMessage() {} func (*SyncTrustedUser) ProtoMessage() {}
func (*SyncTrustedUser) Descriptor() ([]byte, []int) { func (*SyncTrustedUser) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{31} return fileDescriptor_d61ab7221f0b5518, []int{30}
} }
func (m *SyncTrustedUser) XXX_Unmarshal(b []byte) error { func (m *SyncTrustedUser) XXX_Unmarshal(b []byte) error {
@ -2990,7 +2951,7 @@ func (m *SyncVerificationRequest) Reset() { *m = SyncVerificationRequest
func (m *SyncVerificationRequest) String() string { return proto.CompactTextString(m) } func (m *SyncVerificationRequest) String() string { return proto.CompactTextString(m) }
func (*SyncVerificationRequest) ProtoMessage() {} func (*SyncVerificationRequest) ProtoMessage() {}
func (*SyncVerificationRequest) Descriptor() ([]byte, []int) { func (*SyncVerificationRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{32} return fileDescriptor_d61ab7221f0b5518, []int{31}
} }
func (m *SyncVerificationRequest) XXX_Unmarshal(b []byte) error { func (m *SyncVerificationRequest) XXX_Unmarshal(b []byte) error {
@ -3087,7 +3048,7 @@ func (m *SyncContactRequestDecision) Reset() { *m = SyncContactRequestDe
func (m *SyncContactRequestDecision) String() string { return proto.CompactTextString(m) } func (m *SyncContactRequestDecision) String() string { return proto.CompactTextString(m) }
func (*SyncContactRequestDecision) ProtoMessage() {} func (*SyncContactRequestDecision) ProtoMessage() {}
func (*SyncContactRequestDecision) Descriptor() ([]byte, []int) { func (*SyncContactRequestDecision) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{33} return fileDescriptor_d61ab7221f0b5518, []int{32}
} }
func (m *SyncContactRequestDecision) XXX_Unmarshal(b []byte) error { func (m *SyncContactRequestDecision) XXX_Unmarshal(b []byte) error {
@ -3146,7 +3107,7 @@ func (m *BackedUpProfile) Reset() { *m = BackedUpProfile{} }
func (m *BackedUpProfile) String() string { return proto.CompactTextString(m) } func (m *BackedUpProfile) String() string { return proto.CompactTextString(m) }
func (*BackedUpProfile) ProtoMessage() {} func (*BackedUpProfile) ProtoMessage() {}
func (*BackedUpProfile) Descriptor() ([]byte, []int) { func (*BackedUpProfile) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{34} return fileDescriptor_d61ab7221f0b5518, []int{33}
} }
func (m *BackedUpProfile) XXX_Unmarshal(b []byte) error { func (m *BackedUpProfile) XXX_Unmarshal(b []byte) error {
@ -3221,7 +3182,7 @@ func (m *RawMessage) Reset() { *m = RawMessage{} }
func (m *RawMessage) String() string { return proto.CompactTextString(m) } func (m *RawMessage) String() string { return proto.CompactTextString(m) }
func (*RawMessage) ProtoMessage() {} func (*RawMessage) ProtoMessage() {}
func (*RawMessage) Descriptor() ([]byte, []int) { func (*RawMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{35} return fileDescriptor_d61ab7221f0b5518, []int{34}
} }
func (m *RawMessage) XXX_Unmarshal(b []byte) error { func (m *RawMessage) XXX_Unmarshal(b []byte) error {
@ -3270,7 +3231,7 @@ func (m *SyncRawMessage) Reset() { *m = SyncRawMessage{} }
func (m *SyncRawMessage) String() string { return proto.CompactTextString(m) } func (m *SyncRawMessage) String() string { return proto.CompactTextString(m) }
func (*SyncRawMessage) ProtoMessage() {} func (*SyncRawMessage) ProtoMessage() {}
func (*SyncRawMessage) Descriptor() ([]byte, []int) { func (*SyncRawMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{36} return fileDescriptor_d61ab7221f0b5518, []int{35}
} }
func (m *SyncRawMessage) XXX_Unmarshal(b []byte) error { func (m *SyncRawMessage) XXX_Unmarshal(b []byte) error {
@ -3328,7 +3289,7 @@ func (m *SyncKeycard) Reset() { *m = SyncKeycard{} }
func (m *SyncKeycard) String() string { return proto.CompactTextString(m) } func (m *SyncKeycard) String() string { return proto.CompactTextString(m) }
func (*SyncKeycard) ProtoMessage() {} func (*SyncKeycard) ProtoMessage() {}
func (*SyncKeycard) Descriptor() ([]byte, []int) { func (*SyncKeycard) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{37} return fileDescriptor_d61ab7221f0b5518, []int{36}
} }
func (m *SyncKeycard) XXX_Unmarshal(b []byte) error { func (m *SyncKeycard) XXX_Unmarshal(b []byte) error {
@ -3403,7 +3364,7 @@ func (m *SyncSocialLinks) Reset() { *m = SyncSocialLinks{} }
func (m *SyncSocialLinks) String() string { return proto.CompactTextString(m) } func (m *SyncSocialLinks) String() string { return proto.CompactTextString(m) }
func (*SyncSocialLinks) ProtoMessage() {} func (*SyncSocialLinks) ProtoMessage() {}
func (*SyncSocialLinks) Descriptor() ([]byte, []int) { func (*SyncSocialLinks) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{38} return fileDescriptor_d61ab7221f0b5518, []int{37}
} }
func (m *SyncSocialLinks) XXX_Unmarshal(b []byte) error { func (m *SyncSocialLinks) XXX_Unmarshal(b []byte) error {
@ -3451,7 +3412,7 @@ func (m *SyncAccountCustomizationColor) Reset() { *m = SyncAccountCustom
func (m *SyncAccountCustomizationColor) String() string { return proto.CompactTextString(m) } func (m *SyncAccountCustomizationColor) String() string { return proto.CompactTextString(m) }
func (*SyncAccountCustomizationColor) ProtoMessage() {} func (*SyncAccountCustomizationColor) ProtoMessage() {}
func (*SyncAccountCustomizationColor) Descriptor() ([]byte, []int) { func (*SyncAccountCustomizationColor) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{39} return fileDescriptor_d61ab7221f0b5518, []int{38}
} }
func (m *SyncAccountCustomizationColor) XXX_Unmarshal(b []byte) error { func (m *SyncAccountCustomizationColor) XXX_Unmarshal(b []byte) error {
@ -3511,7 +3472,6 @@ func init() {
proto.RegisterType((*SyncPairInstallation)(nil), "protobuf.SyncPairInstallation") proto.RegisterType((*SyncPairInstallation)(nil), "protobuf.SyncPairInstallation")
proto.RegisterType((*SyncInstallationContactV2)(nil), "protobuf.SyncInstallationContactV2") proto.RegisterType((*SyncInstallationContactV2)(nil), "protobuf.SyncInstallationContactV2")
proto.RegisterType((*SyncInstallationAccount)(nil), "protobuf.SyncInstallationAccount") proto.RegisterType((*SyncInstallationAccount)(nil), "protobuf.SyncInstallationAccount")
proto.RegisterType((*SyncInstallationPublicChat)(nil), "protobuf.SyncInstallationPublicChat")
proto.RegisterType((*SyncInstallationCommunity)(nil), "protobuf.SyncInstallationCommunity") proto.RegisterType((*SyncInstallationCommunity)(nil), "protobuf.SyncInstallationCommunity")
proto.RegisterType((*SyncCommunityRequestsToJoin)(nil), "protobuf.SyncCommunityRequestsToJoin") proto.RegisterType((*SyncCommunityRequestsToJoin)(nil), "protobuf.SyncCommunityRequestsToJoin")
proto.RegisterType((*SyncChat)(nil), "protobuf.SyncChat") proto.RegisterType((*SyncChat)(nil), "protobuf.SyncChat")
@ -3550,230 +3510,229 @@ func init() {
} }
var fileDescriptor_d61ab7221f0b5518 = []byte{ var fileDescriptor_d61ab7221f0b5518 = []byte{
// 3589 bytes of a gzipped FileDescriptorProto // 3578 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x3a, 0x4d, 0x73, 0xe4, 0x48, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x3a, 0x4d, 0x6f, 0x24, 0x49,
0x56, 0xa3, 0xaa, 0x72, 0xb9, 0xf4, 0xaa, 0x6c, 0xab, 0xb3, 0x3d, 0xdd, 0xd5, 0xee, 0xee, 0x9d, 0x56, 0x93, 0x55, 0xe5, 0xaa, 0xca, 0x57, 0xe5, 0x72, 0x76, 0xb4, 0xa7, 0xbb, 0xda, 0xdd, 0xbd,
0x6e, 0x0d, 0x13, 0xdb, 0x4b, 0x0c, 0x1e, 0xe8, 0x59, 0x58, 0x98, 0x99, 0x8d, 0xc1, 0x6d, 0x7b, 0xd3, 0x9d, 0xc3, 0x68, 0x7b, 0xd1, 0xe0, 0x81, 0x9e, 0x85, 0x85, 0x99, 0x59, 0x0d, 0x6e, 0xdb,
0x76, 0xdc, 0x1f, 0xd5, 0x26, 0x6d, 0xef, 0x2c, 0x04, 0x11, 0xda, 0x6c, 0x29, 0xdb, 0xa5, 0xb5, 0xb3, 0xe3, 0xfe, 0xa8, 0x36, 0x61, 0x7b, 0x67, 0x41, 0x48, 0xb9, 0xd1, 0x99, 0xd1, 0xae, 0x5c,
0x4a, 0x12, 0xca, 0x2c, 0x9b, 0xda, 0x03, 0x01, 0x44, 0x10, 0xc1, 0x0d, 0x6e, 0x7b, 0x23, 0xf6, 0x67, 0x65, 0x16, 0x19, 0x51, 0x36, 0xb5, 0x07, 0x04, 0x48, 0x48, 0x7b, 0x83, 0xdb, 0xde, 0xd0,
0xc0, 0x81, 0xe0, 0xc8, 0x8d, 0x08, 0xae, 0x10, 0x1c, 0xb9, 0xc3, 0x1f, 0xe0, 0x08, 0x27, 0x2e, 0x1e, 0x38, 0x20, 0x8e, 0xdc, 0x90, 0xb8, 0x82, 0x38, 0x72, 0x87, 0x3f, 0xc0, 0x91, 0x1b, 0x17,
0x44, 0x6c, 0xe4, 0xcb, 0x94, 0x94, 0xaa, 0x0f, 0x4f, 0xfb, 0x54, 0x7a, 0x2f, 0x5f, 0xbe, 0x7c, 0xa4, 0x55, 0xbc, 0x88, 0xcc, 0x8c, 0xac, 0x0f, 0x4f, 0xfb, 0xe4, 0x7c, 0x2f, 0x5e, 0xbc, 0x78,
0xca, 0xf7, 0xfd, 0x4a, 0xb0, 0x91, 0xb3, 0xb8, 0x88, 0xd3, 0xf3, 0xdd, 0xbc, 0xc8, 0x64, 0x46, 0x11, 0xef, 0xfb, 0xb9, 0x60, 0x73, 0xca, 0xe2, 0x3c, 0x4e, 0xcf, 0x77, 0xa7, 0x79, 0x26, 0x33,
0x7a, 0xf8, 0xf3, 0x66, 0xfa, 0x76, 0xe7, 0x76, 0x38, 0x66, 0x32, 0x88, 0x23, 0x9e, 0xca, 0x58, 0xd2, 0xc5, 0x3f, 0x6f, 0x66, 0x6f, 0x77, 0x6e, 0x87, 0x63, 0x26, 0x83, 0x38, 0xe2, 0xa9, 0x8c,
0xce, 0xf4, 0xf2, 0xce, 0x6d, 0x31, 0x4b, 0xc3, 0x40, 0x70, 0x29, 0xe3, 0xf4, 0x5c, 0x18, 0xa4, 0xe5, 0x5c, 0x2f, 0xef, 0xdc, 0x16, 0xf3, 0x34, 0x0c, 0x04, 0x97, 0x32, 0x4e, 0xcf, 0x85, 0x41,
0xcf, 0xf2, 0x3c, 0x89, 0x43, 0x26, 0xe3, 0x2c, 0x0d, 0x26, 0x5c, 0xb2, 0x88, 0x49, 0x16, 0x4c, 0xfa, 0x6c, 0x3a, 0x4d, 0xe2, 0x90, 0xc9, 0x38, 0x4b, 0x83, 0x09, 0x97, 0x2c, 0x62, 0x92, 0x05,
0xb8, 0x10, 0xec, 0x9c, 0x1b, 0x9a, 0x5b, 0x61, 0x36, 0x99, 0x4c, 0xd3, 0x58, 0xc6, 0xdc, 0x6c, 0x13, 0x2e, 0x04, 0x3b, 0xe7, 0x86, 0xe6, 0x56, 0x98, 0x4d, 0x26, 0xb3, 0x34, 0x96, 0x31, 0x37,
0xf3, 0x19, 0xdc, 0xff, 0x8a, 0xcb, 0x70, 0x1c, 0xa7, 0xe7, 0xcf, 0x58, 0x78, 0xc1, 0xa3, 0xb3, 0xdb, 0x7c, 0x06, 0xf7, 0xbf, 0xe2, 0x32, 0x1c, 0xc7, 0xe9, 0xf9, 0x33, 0x16, 0x5e, 0xf0, 0xe8,
0xfc, 0x80, 0x49, 0x76, 0xc0, 0x25, 0x8b, 0x13, 0x41, 0x3e, 0x80, 0x3e, 0xf2, 0x49, 0xa7, 0x93, 0x6c, 0x7a, 0xc0, 0x24, 0x3b, 0xe0, 0x92, 0xc5, 0x89, 0x20, 0x1f, 0x40, 0x0f, 0xf9, 0xa4, 0xb3,
0x37, 0xbc, 0x18, 0x3a, 0x8f, 0x9c, 0x27, 0x1b, 0x14, 0x14, 0x6a, 0x84, 0x18, 0xf2, 0x18, 0x06, 0xc9, 0x1b, 0x9e, 0x0f, 0x9d, 0x47, 0xce, 0x93, 0x4d, 0x0a, 0x0a, 0x35, 0x42, 0x0c, 0x79, 0x0c,
0x32, 0x93, 0x2c, 0x29, 0x29, 0x5a, 0x48, 0xd1, 0x47, 0x9c, 0x26, 0xf1, 0xff, 0x7f, 0x1d, 0xba, 0x7d, 0x99, 0x49, 0x96, 0x14, 0x14, 0x0d, 0xa4, 0xe8, 0x21, 0x4e, 0x93, 0xf8, 0xff, 0xdf, 0x81,
0x8a, 0xf7, 0x34, 0x27, 0xdb, 0xb0, 0x16, 0x26, 0x59, 0x78, 0x81, 0x8c, 0x3a, 0x54, 0x03, 0x64, 0xb6, 0xe2, 0x3d, 0x9b, 0x92, 0x6d, 0xd8, 0x08, 0x93, 0x2c, 0xbc, 0x40, 0x46, 0x2d, 0xaa, 0x01,
0x13, 0x5a, 0x71, 0x84, 0x3b, 0x5d, 0xda, 0x8a, 0x23, 0xf2, 0x25, 0xf4, 0xc2, 0x2c, 0x95, 0x2c, 0x32, 0x80, 0x46, 0x1c, 0xe1, 0x4e, 0x97, 0x36, 0xe2, 0x88, 0x7c, 0x09, 0xdd, 0x30, 0x4b, 0x25,
0x94, 0x62, 0xd8, 0x7e, 0xd4, 0x7e, 0xd2, 0x7f, 0xfa, 0xe1, 0x6e, 0x79, 0x23, 0xbb, 0x27, 0xb3, 0x0b, 0xa5, 0x18, 0x36, 0x1f, 0x35, 0x9f, 0xf4, 0x9e, 0x7e, 0xb8, 0x5b, 0xbc, 0xc8, 0xee, 0xc9,
0x34, 0x3c, 0x4a, 0x85, 0x64, 0x49, 0x82, 0xef, 0xba, 0xaf, 0x29, 0x7f, 0xfc, 0x94, 0x56, 0x9b, 0x3c, 0x0d, 0x8f, 0x52, 0x21, 0x59, 0x92, 0xe0, 0x5d, 0xf7, 0x35, 0xe5, 0x8f, 0x9f, 0xd2, 0x72,
0xc8, 0x21, 0xf4, 0xad, 0x37, 0x1d, 0x76, 0xbe, 0x9d, 0x87, 0x26, 0x9e, 0x51, 0x7b, 0x1f, 0x79, 0x13, 0x39, 0x84, 0x9e, 0x75, 0xd3, 0x61, 0xeb, 0xdb, 0x79, 0x68, 0xe2, 0x39, 0xb5, 0xf7, 0x91,
0x0d, 0x5b, 0x25, 0x4b, 0x73, 0x1f, 0xc3, 0xb5, 0x47, 0xce, 0x93, 0xfe, 0xd3, 0x8f, 0x6a, 0x56, 0xd7, 0xb0, 0x55, 0xb0, 0x34, 0xef, 0x31, 0xdc, 0x78, 0xe4, 0x3c, 0xe9, 0x3d, 0xfd, 0xa8, 0x62,
0xd7, 0x5c, 0x1e, 0x9d, 0xdf, 0x4d, 0xce, 0x80, 0x58, 0xfc, 0x4b, 0x9e, 0xdd, 0x9b, 0xf0, 0x5c, 0x75, 0xcd, 0xe3, 0xd1, 0xc5, 0xdd, 0xe4, 0x0c, 0x88, 0xc5, 0xbf, 0xe0, 0xd9, 0xbe, 0x09, 0xcf,
0xc2, 0x80, 0x7c, 0x0a, 0xeb, 0x79, 0x91, 0xbd, 0x8d, 0x13, 0x3e, 0x5c, 0x47, 0x5e, 0xf7, 0x6a, 0x15, 0x0c, 0xc8, 0xa7, 0xd0, 0x99, 0xe6, 0xd9, 0xdb, 0x38, 0xe1, 0xc3, 0x0e, 0xf2, 0xba, 0x57,
0x5e, 0x25, 0x8f, 0x63, 0x4d, 0x40, 0x4b, 0x4a, 0xf2, 0x0a, 0x36, 0xcd, 0x63, 0x29, 0x47, 0xef, 0xf1, 0x2a, 0x78, 0x1c, 0x6b, 0x02, 0x5a, 0x50, 0x92, 0x57, 0x30, 0x30, 0x9f, 0x85, 0x1c, 0xdd,
0x26, 0x72, 0xcc, 0x6d, 0x26, 0x9f, 0xc0, 0xba, 0x31, 0xc8, 0xa1, 0x8b, 0x7c, 0xde, 0x6f, 0x5e, 0x9b, 0xc8, 0xb1, 0xb0, 0x99, 0x7c, 0x02, 0x1d, 0x63, 0x90, 0x43, 0x17, 0xf9, 0xbc, 0x5f, 0x7f,
0xf7, 0x89, 0x5e, 0xa4, 0x25, 0x95, 0xba, 0xdc, 0xd2, 0x82, 0x4b, 0x01, 0xe0, 0x46, 0x97, 0x3b, 0xee, 0x13, 0xbd, 0x48, 0x0b, 0x2a, 0xf5, 0xb8, 0x85, 0x05, 0x17, 0x02, 0xc0, 0x8d, 0x1e, 0x77,
0xb7, 0x5b, 0x49, 0x70, 0xc1, 0x67, 0xca, 0x91, 0x86, 0xfd, 0x65, 0x12, 0xbc, 0xd0, 0x8b, 0xb4, 0x61, 0xb7, 0x92, 0xe0, 0x82, 0xcf, 0x95, 0x23, 0x0d, 0x7b, 0xab, 0x24, 0x78, 0xa1, 0x17, 0x69,
0xa4, 0x52, 0x37, 0x60, 0x1e, 0x4b, 0x01, 0x06, 0x37, 0xba, 0x81, 0xe6, 0x66, 0xb2, 0x07, 0xde, 0x41, 0xa5, 0x5e, 0xc0, 0x7c, 0x16, 0x02, 0xf4, 0x6f, 0xf4, 0x02, 0xf5, 0xcd, 0x64, 0x0f, 0xbc,
0x15, 0x93, 0xe1, 0xf8, 0x75, 0x9a, 0xcc, 0xf6, 0xc2, 0x30, 0x9b, 0xa6, 0x72, 0xb8, 0xb1, 0x4c, 0x2b, 0x26, 0xc3, 0xf1, 0xeb, 0x34, 0x99, 0xef, 0x85, 0x61, 0x36, 0x4b, 0xe5, 0x70, 0x73, 0x95,
0x10, 0xb3, 0x48, 0x17, 0xc8, 0x49, 0x00, 0x77, 0xe7, 0x71, 0xa5, 0x68, 0x9b, 0x37, 0x11, 0x6d, 0x20, 0x66, 0x91, 0x2e, 0x91, 0x93, 0x00, 0xee, 0x2e, 0xe2, 0x0a, 0xd1, 0x06, 0x37, 0x11, 0x6d,
0x15, 0x17, 0xf2, 0x04, 0xd6, 0x54, 0x40, 0x11, 0xc3, 0x2d, 0x74, 0x09, 0xd2, 0x14, 0x6c, 0x7f, 0x1d, 0x17, 0xf2, 0x04, 0x36, 0x54, 0x40, 0x11, 0xc3, 0x2d, 0x74, 0x09, 0x52, 0x17, 0x6c, 0x7f,
0xcc, 0x24, 0xd5, 0x04, 0xe4, 0x08, 0x06, 0xf8, 0x50, 0x9e, 0xef, 0xdd, 0xe4, 0xfc, 0xc6, 0x56, 0xcc, 0x24, 0xd5, 0x04, 0xe4, 0x08, 0xfa, 0xf8, 0x51, 0x9c, 0xef, 0xdd, 0xe4, 0xfc, 0xda, 0x56,
0xff, 0x1f, 0xd6, 0x60, 0xf0, 0x6a, 0x9a, 0xc8, 0xb8, 0x7c, 0x4d, 0x02, 0x9d, 0x94, 0x4d, 0x38, 0xff, 0x1f, 0x37, 0xa0, 0xff, 0x6a, 0x96, 0xc8, 0xb8, 0xb8, 0x26, 0x81, 0x56, 0xca, 0x26, 0x1c,
0x06, 0x01, 0x97, 0xe2, 0x33, 0x79, 0x00, 0xae, 0x8c, 0x27, 0x5c, 0x48, 0x36, 0xc9, 0x31, 0x14, 0x83, 0x80, 0x4b, 0xf1, 0x9b, 0x3c, 0x00, 0x57, 0xc6, 0x13, 0x2e, 0x24, 0x9b, 0x4c, 0x31, 0x14,
0xb4, 0x69, 0x8d, 0x50, 0xab, 0x3a, 0x06, 0x86, 0x59, 0x3a, 0x6c, 0xe3, 0xb6, 0x1a, 0x41, 0xbe, 0x34, 0x69, 0x85, 0x50, 0xab, 0x3a, 0x06, 0x86, 0x59, 0x3a, 0x6c, 0xe2, 0xb6, 0x0a, 0x41, 0xbe,
0x04, 0x08, 0xb3, 0x24, 0x2b, 0x82, 0x31, 0x13, 0x63, 0xe3, 0xed, 0x8f, 0x6a, 0x49, 0xed, 0xb3, 0x04, 0x08, 0xb3, 0x24, 0xcb, 0x83, 0x31, 0x13, 0x63, 0xe3, 0xed, 0x8f, 0x2a, 0x49, 0xed, 0xb3,
0x77, 0xf7, 0x15, 0xe1, 0xd7, 0x4c, 0x8c, 0xa9, 0x1b, 0x96, 0x8f, 0xe4, 0x9e, 0x0a, 0x38, 0x8a, 0x77, 0xf7, 0x15, 0xe1, 0xd7, 0x4c, 0x8c, 0xa9, 0x1b, 0x16, 0x9f, 0xe4, 0x9e, 0x0a, 0x38, 0x8a,
0x41, 0x1c, 0xa1, 0x87, 0xb7, 0xe9, 0x3a, 0xc2, 0x47, 0x11, 0xf9, 0x2e, 0x6c, 0x5d, 0xf0, 0x59, 0x41, 0x1c, 0xa1, 0x87, 0x37, 0x69, 0x07, 0xe1, 0xa3, 0x88, 0x7c, 0x17, 0xb6, 0x2e, 0xf8, 0x3c,
0xc8, 0x8a, 0x28, 0x30, 0x31, 0x1a, 0xfd, 0xd5, 0x45, 0xf5, 0x2b, 0xf4, 0xb1, 0xc6, 0x92, 0xbb, 0x64, 0x79, 0x14, 0x98, 0x18, 0x8d, 0xfe, 0xea, 0xa2, 0xfa, 0x15, 0xfa, 0x58, 0x63, 0xc9, 0x5d,
0x68, 0x7e, 0xc1, 0x34, 0x8e, 0xd0, 0x09, 0x5d, 0xda, 0xbd, 0xe0, 0xb3, 0xb3, 0x38, 0x22, 0x5f, 0x34, 0xbf, 0x60, 0x16, 0x47, 0xe8, 0x84, 0x2e, 0x6d, 0x5f, 0xf0, 0xf9, 0x59, 0x1c, 0x91, 0x2f,
0x40, 0x37, 0x9e, 0xb0, 0x73, 0xae, 0x1c, 0x4c, 0x49, 0xf6, 0x6b, 0x2b, 0x24, 0x3b, 0x32, 0x41, 0xa0, 0x1d, 0x4f, 0xd8, 0x39, 0x57, 0x0e, 0xa6, 0x24, 0xfb, 0x8d, 0x35, 0x92, 0x1d, 0x99, 0x20,
0xfe, 0x48, 0x11, 0x53, 0xb3, 0x87, 0x7c, 0x02, 0xb7, 0xc3, 0xa9, 0x90, 0xd9, 0x24, 0xfe, 0xb9, 0x7f, 0xa4, 0x88, 0xa9, 0xd9, 0x43, 0x3e, 0x81, 0xdb, 0xe1, 0x4c, 0xc8, 0x6c, 0x12, 0xff, 0x5c,
0x0e, 0xed, 0x28, 0x18, 0xfa, 0x98, 0x4b, 0x49, 0x63, 0x09, 0x5f, 0x8d, 0x7c, 0x06, 0xf7, 0x96, 0x87, 0x76, 0x14, 0x0c, 0x7d, 0xcc, 0xa5, 0xa4, 0xb6, 0x84, 0x57, 0x23, 0x9f, 0xc1, 0xbd, 0x15,
0x6c, 0x08, 0x74, 0xd8, 0x05, 0x0c, 0xbb, 0x77, 0x17, 0xb7, 0xed, 0xab, 0xe5, 0x9d, 0xc7, 0xe0, 0x1b, 0x02, 0x1d, 0x76, 0x01, 0xc3, 0xee, 0xdd, 0xe5, 0x6d, 0xfb, 0x6a, 0x79, 0xe7, 0x31, 0xb8,
0x56, 0xf7, 0xa3, 0x62, 0x75, 0x9c, 0x46, 0xfc, 0x4f, 0x87, 0xce, 0xa3, 0xf6, 0x93, 0x36, 0xd5, 0xe5, 0xfb, 0xa8, 0x58, 0x1d, 0xa7, 0x11, 0xff, 0xf3, 0xa1, 0xf3, 0xa8, 0xf9, 0xa4, 0x49, 0x35,
0xc0, 0xce, 0x7f, 0x3a, 0xb0, 0xd1, 0x90, 0xd4, 0x7e, 0x71, 0xa7, 0xf1, 0xe2, 0xa5, 0x9a, 0x5b, 0xb0, 0xf3, 0x5f, 0x0e, 0x6c, 0xd6, 0x24, 0xb5, 0x2f, 0xee, 0xd4, 0x2e, 0x5e, 0xa8, 0xb9, 0x61,
0x96, 0x9a, 0x87, 0xb0, 0x9e, 0xb3, 0x59, 0x92, 0xb1, 0x08, 0xd5, 0x38, 0xa0, 0x25, 0xa8, 0x8e, 0xa9, 0x79, 0x08, 0x9d, 0x29, 0x9b, 0x27, 0x19, 0x8b, 0x50, 0x8d, 0x7d, 0x5a, 0x80, 0xea, 0xb8,
0xbb, 0x8a, 0x23, 0xa9, 0xf4, 0xa7, 0x14, 0xa0, 0x01, 0x72, 0x07, 0xba, 0x63, 0x1e, 0x9f, 0x8f, 0xab, 0x38, 0x92, 0x4a, 0x7f, 0x4a, 0x01, 0x1a, 0x20, 0x77, 0xa0, 0x3d, 0xe6, 0xf1, 0xf9, 0x58,
0xa5, 0xd1, 0x8b, 0x81, 0xc8, 0x0e, 0xf4, 0x54, 0xf4, 0x11, 0xf1, 0xcf, 0x39, 0xea, 0xa3, 0x4d, 0x1a, 0xbd, 0x18, 0x88, 0xec, 0x40, 0x57, 0x45, 0x1f, 0x11, 0xff, 0x9c, 0xa3, 0x3e, 0x9a, 0xb4,
0x2b, 0x98, 0x7c, 0x08, 0x1b, 0x05, 0x3e, 0x05, 0x92, 0x15, 0xe7, 0x5c, 0xa2, 0x3e, 0xda, 0x74, 0x84, 0xc9, 0x87, 0xb0, 0x99, 0xe3, 0x57, 0x20, 0x59, 0x7e, 0xce, 0x25, 0xea, 0xa3, 0x49, 0xfb,
0xa0, 0x91, 0xa7, 0x88, 0xab, 0x33, 0x51, 0xcf, 0xca, 0x44, 0xfe, 0x2f, 0x5a, 0x70, 0xfb, 0x65, 0x1a, 0x79, 0x8a, 0xb8, 0x2a, 0x13, 0x75, 0xad, 0x4c, 0xe4, 0xff, 0xb2, 0x01, 0xb7, 0x5f, 0x66,
0x16, 0xb2, 0xc4, 0x68, 0xf5, 0xd8, 0x08, 0xf7, 0xdb, 0xd0, 0xb9, 0xe0, 0x33, 0x81, 0x57, 0xd1, 0x21, 0x4b, 0x8c, 0x56, 0x8f, 0x8d, 0x70, 0xbf, 0x0b, 0xad, 0x0b, 0x3e, 0x17, 0xf8, 0x14, 0xbd,
0x7f, 0xfa, 0xb8, 0xd6, 0xe0, 0x12, 0xe2, 0xdd, 0x17, 0x7c, 0x46, 0x91, 0x9c, 0x7c, 0x06, 0x83, 0xa7, 0x8f, 0x2b, 0x0d, 0xae, 0x20, 0xde, 0x7d, 0xc1, 0xe7, 0x14, 0xc9, 0xc9, 0x67, 0xd0, 0x9f,
0x89, 0x52, 0x31, 0x33, 0xe1, 0xa0, 0x85, 0x4e, 0x74, 0x67, 0xb9, 0x01, 0xd0, 0x06, 0xad, 0x7a, 0x28, 0x15, 0x33, 0x13, 0x0e, 0x1a, 0xe8, 0x44, 0x77, 0x56, 0x1b, 0x00, 0xad, 0xd1, 0xaa, 0x1b,
0xc3, 0x9c, 0x09, 0x71, 0x95, 0x15, 0x91, 0xb1, 0xf8, 0x0a, 0x56, 0xb7, 0xa8, 0x3c, 0xec, 0x05, 0x4e, 0x99, 0x10, 0x57, 0x59, 0x1e, 0x19, 0x8b, 0x2f, 0x61, 0xf5, 0x8a, 0xca, 0xc3, 0x5e, 0xf0,
0x9f, 0xe1, 0x6d, 0xb9, 0xb4, 0x04, 0xc9, 0x93, 0xca, 0x5c, 0x8d, 0x50, 0x3a, 0x65, 0xb9, 0x74, 0x39, 0xbe, 0x96, 0x4b, 0x0b, 0x90, 0x3c, 0x29, 0xcd, 0xd5, 0x08, 0xa5, 0x53, 0x96, 0x4b, 0x17,
0x1e, 0xbd, 0xf3, 0x1b, 0xd0, 0x56, 0x1b, 0x96, 0xf9, 0x22, 0x81, 0x8e, 0xca, 0xf0, 0x28, 0xee, 0xd1, 0x3b, 0xbf, 0x05, 0x4d, 0xb5, 0x61, 0x95, 0x2f, 0x12, 0x68, 0xa9, 0x0c, 0x8f, 0xe2, 0xf6,
0x80, 0xe2, 0xb3, 0xff, 0xcf, 0x0e, 0xbc, 0xdf, 0x78, 0x59, 0xce, 0x8b, 0xaf, 0x79, 0x92, 0x64, 0x29, 0x7e, 0xfb, 0xff, 0xe2, 0xc0, 0xfb, 0xb5, 0xcb, 0x72, 0x9e, 0x7f, 0xcd, 0x93, 0x24, 0x53,
0xca, 0x43, 0x8c, 0x67, 0x04, 0x97, 0xbc, 0x10, 0x71, 0x96, 0x22, 0xb3, 0x35, 0xba, 0x69, 0xd0, 0x1e, 0x62, 0x3c, 0x23, 0xb8, 0xe4, 0xb9, 0x88, 0xb3, 0x14, 0x99, 0x6d, 0xd0, 0x81, 0x41, 0xff,
0x3f, 0xd6, 0x58, 0x65, 0x28, 0x39, 0xe7, 0xe8, 0x64, 0x9a, 0x73, 0x57, 0x81, 0x47, 0x11, 0x16, 0x58, 0x63, 0x95, 0xa1, 0x4c, 0x39, 0x47, 0x27, 0xd3, 0x9c, 0xdb, 0x0a, 0x3c, 0x8a, 0xb0, 0xc8,
0x19, 0xfc, 0x32, 0x0e, 0x79, 0x80, 0xa2, 0xe8, 0xb7, 0x05, 0x8d, 0x1a, 0x29, 0x81, 0x6a, 0x02, 0xe0, 0x97, 0x71, 0xc8, 0x03, 0x14, 0x45, 0xdf, 0x16, 0x34, 0x6a, 0xa4, 0x04, 0xaa, 0x08, 0xe4,
0x39, 0xcb, 0xb9, 0x79, 0x67, 0x43, 0x70, 0x3a, 0xcb, 0x31, 0x7a, 0x88, 0xf8, 0x3c, 0x65, 0x72, 0x7c, 0xca, 0xcd, 0x9d, 0x0d, 0xc1, 0xe9, 0x7c, 0x8a, 0xd1, 0x43, 0xc4, 0xe7, 0x29, 0x93, 0xb3,
0x5a, 0x70, 0x7c, 0xe1, 0x01, 0xad, 0x11, 0xfe, 0xdf, 0x3b, 0xb0, 0xad, 0xe2, 0x9b, 0x12, 0xdd, 0x9c, 0xe3, 0x85, 0xfb, 0xb4, 0x42, 0xf8, 0xff, 0xe0, 0xc0, 0xb6, 0x8a, 0x6f, 0x4a, 0x74, 0x3b,
0x4e, 0xfb, 0x2b, 0xca, 0x91, 0xef, 0xc2, 0x56, 0x6c, 0x51, 0x05, 0x55, 0x6d, 0xb2, 0x69, 0xa3, 0xed, 0xaf, 0x29, 0x47, 0xbe, 0x0b, 0x5b, 0xb1, 0x45, 0x15, 0x94, 0xb5, 0xc9, 0xc0, 0x46, 0xd7,
0x1b, 0x72, 0xa3, 0x58, 0xed, 0x05, 0xb1, 0xca, 0xcb, 0xed, 0x34, 0x3d, 0xa0, 0xbc, 0xa6, 0x35, 0xe4, 0x46, 0xb1, 0x9a, 0x4b, 0x62, 0x15, 0x8f, 0xdb, 0xaa, 0x7b, 0x40, 0xf1, 0x4c, 0x1b, 0x58,
0xac, 0x95, 0x4a, 0xd0, 0xff, 0x8b, 0x2e, 0xdc, 0x5b, 0x59, 0xdd, 0x90, 0xdf, 0x84, 0xed, 0x84, 0x2b, 0x15, 0xa0, 0xff, 0x57, 0x6d, 0xb8, 0xb7, 0xb6, 0xba, 0x21, 0xbf, 0x0d, 0xdb, 0x09, 0x13,
0x09, 0x19, 0x4c, 0xf3, 0x88, 0x49, 0x1e, 0x05, 0x89, 0x52, 0x46, 0x32, 0x33, 0xa2, 0x13, 0xb5, 0x32, 0x98, 0x4d, 0x23, 0x26, 0x79, 0x14, 0x24, 0x4a, 0x19, 0xc9, 0xdc, 0x88, 0x4e, 0xd4, 0xda,
0x76, 0xa6, 0x97, 0x5e, 0xea, 0x95, 0x85, 0xb2, 0xea, 0x43, 0xd8, 0x30, 0x49, 0x3b, 0xc0, 0xe0, 0x99, 0x5e, 0x7a, 0xa9, 0x57, 0x96, 0xca, 0xaa, 0x0f, 0x61, 0xd3, 0x24, 0xed, 0x00, 0x83, 0x8b,
0x62, 0x04, 0x1e, 0x18, 0xa4, 0xf6, 0xe6, 0x7b, 0xd0, 0xe3, 0xa9, 0x08, 0x2c, 0xb1, 0xd7, 0x79, 0x11, 0xb8, 0x6f, 0x90, 0xda, 0x9b, 0xef, 0x41, 0x97, 0xa7, 0x22, 0xb0, 0xc4, 0xee, 0xf0, 0x54,
0x2a, 0x50, 0x0b, 0x8f, 0x61, 0x60, 0x4b, 0x80, 0xe2, 0x77, 0x68, 0xdf, 0x3a, 0x59, 0xdd, 0x88, 0xa0, 0x16, 0x1e, 0x43, 0xdf, 0x96, 0x00, 0xc5, 0x6f, 0xd1, 0x9e, 0x75, 0xb2, 0x7a, 0x11, 0x31,
0x98, 0x09, 0xc9, 0x27, 0x81, 0x64, 0xe7, 0xaa, 0xb2, 0x69, 0xab, 0x1b, 0xd1, 0xa8, 0x53, 0x76, 0x17, 0x92, 0x4f, 0x02, 0xc9, 0xce, 0x55, 0x65, 0xd3, 0x54, 0x2f, 0xa2, 0x51, 0xa7, 0xec, 0x5c,
0x2e, 0xc8, 0x47, 0xb0, 0x89, 0x82, 0x07, 0x69, 0x1c, 0x5e, 0xe0, 0x21, 0x3a, 0x58, 0x6e, 0x20, 0x90, 0x8f, 0x60, 0x80, 0x82, 0x07, 0x69, 0x1c, 0x5e, 0xe0, 0x21, 0x3a, 0x58, 0x6e, 0x22, 0x76,
0x76, 0x64, 0x90, 0x4a, 0x31, 0x2c, 0x8a, 0x78, 0x84, 0x71, 0xae, 0x47, 0x35, 0xa0, 0xae, 0xee, 0x64, 0x90, 0x4a, 0x31, 0x2c, 0x8a, 0x78, 0x84, 0x71, 0xae, 0x4b, 0x35, 0xa0, 0x9e, 0xee, 0x8d,
0x8d, 0xd2, 0x10, 0x8f, 0x30, 0x90, 0xf5, 0x68, 0x09, 0x2a, 0xfa, 0xc9, 0x54, 0xc9, 0xd4, 0xd7, 0xd2, 0x10, 0x8f, 0x30, 0x90, 0x75, 0x69, 0x01, 0x2a, 0xfa, 0xc9, 0x4c, 0xc9, 0xd4, 0xd3, 0xf4,
0xf4, 0x08, 0x28, 0xfa, 0x82, 0x4f, 0xb2, 0x4b, 0x1e, 0x61, 0x66, 0xef, 0xd1, 0x12, 0x24, 0x8f, 0x08, 0x28, 0xfa, 0x9c, 0x4f, 0xb2, 0x4b, 0x1e, 0x61, 0x66, 0xef, 0xd2, 0x02, 0x24, 0x8f, 0xa0,
0x60, 0x30, 0x66, 0x22, 0x40, 0xb6, 0xc1, 0x54, 0x60, 0x9e, 0xee, 0x51, 0x18, 0x33, 0xb1, 0xa7, 0x3f, 0x66, 0x22, 0x40, 0xb6, 0xc1, 0x4c, 0x60, 0x9e, 0xee, 0x52, 0x18, 0x33, 0xb1, 0xa7, 0x50,
0x50, 0x67, 0x18, 0x77, 0x2f, 0x79, 0x11, 0xbf, 0x2d, 0x2b, 0x6a, 0x21, 0x99, 0x9c, 0xea, 0x34, 0x67, 0x18, 0x77, 0x2f, 0x79, 0x1e, 0xbf, 0x2d, 0x2a, 0x6a, 0x21, 0x99, 0x9c, 0xe9, 0x34, 0xdc,
0xdc, 0xa6, 0xc4, 0x5e, 0x3a, 0xc1, 0x15, 0x2c, 0x84, 0x8b, 0xa9, 0x90, 0x25, 0xe5, 0x16, 0x52, 0xa4, 0xc4, 0x5e, 0x3a, 0xc1, 0x15, 0x2c, 0x84, 0xf3, 0x99, 0x90, 0x05, 0xe5, 0x16, 0x52, 0xf6,
0xf6, 0x11, 0x67, 0x48, 0x7e, 0x08, 0xf7, 0x4d, 0x45, 0x18, 0x14, 0xfc, 0x4f, 0xa6, 0x5c, 0x48, 0x10, 0x67, 0x48, 0x7e, 0x08, 0xf7, 0x4d, 0x45, 0x18, 0xe4, 0xfc, 0xcf, 0x66, 0x5c, 0x48, 0xad,
0xad, 0x45, 0xdc, 0xc2, 0x31, 0xc5, 0xb6, 0xe9, 0xd0, 0x90, 0x50, 0x4d, 0x81, 0xca, 0x54, 0xfb, 0x45, 0xdc, 0xc2, 0x31, 0xc5, 0x36, 0xe9, 0xd0, 0x90, 0x50, 0x4d, 0x81, 0xca, 0x54, 0xfb, 0xf9,
0xf9, 0xea, 0xed, 0xda, 0x86, 0x6f, 0xad, 0xdc, 0x8e, 0xc1, 0x9d, 0x7c, 0x09, 0x0f, 0xe6, 0xb7, 0xfa, 0xed, 0xda, 0x86, 0x6f, 0xad, 0xdd, 0x8e, 0xc1, 0x9d, 0x7c, 0x09, 0x0f, 0x16, 0xb7, 0xab,
0xab, 0xeb, 0x90, 0xdc, 0x1c, 0x4f, 0x70, 0xff, 0xbd, 0xe6, 0x7e, 0x8a, 0x14, 0xfa, 0xfc, 0xd5, 0xe7, 0x90, 0xdc, 0x1c, 0x4f, 0x70, 0xff, 0xbd, 0xfa, 0x7e, 0x8a, 0x14, 0xfa, 0xfc, 0xf5, 0x0c,
0x0c, 0xb4, 0x00, 0xb7, 0x57, 0x33, 0xd0, 0x12, 0x3c, 0x86, 0x41, 0x14, 0x8b, 0x3c, 0x61, 0x33, 0xb4, 0x00, 0xb7, 0xd7, 0x33, 0xd0, 0x12, 0x3c, 0x86, 0x7e, 0x14, 0x8b, 0x69, 0xc2, 0xe6, 0xda,
0x6d, 0x5f, 0xdb, 0xa8, 0xfa, 0xbe, 0xc1, 0x29, 0x1b, 0xf3, 0xaf, 0xe0, 0xee, 0xbc, 0x0b, 0x94, 0xbe, 0xb6, 0x51, 0xf5, 0x3d, 0x83, 0x53, 0x36, 0xe6, 0x5f, 0xc1, 0xdd, 0x45, 0x17, 0x28, 0xaa,
0x55, 0xc3, 0x72, 0x67, 0x5d, 0x30, 0xea, 0xd6, 0x12, 0xa3, 0x9e, 0xb7, 0xdc, 0xf6, 0x82, 0xe5, 0x86, 0xd5, 0xce, 0xba, 0x64, 0xd4, 0x8d, 0x15, 0x46, 0xbd, 0x68, 0xb9, 0xcd, 0x25, 0xcb, 0xf5,
0xfa, 0xcf, 0x60, 0x67, 0xfe, 0xe0, 0xe3, 0xe9, 0x9b, 0x24, 0xc6, 0xa2, 0xe8, 0xdd, 0xfa, 0x16, 0xff, 0xad, 0xb9, 0xca, 0xf9, 0x4c, 0x5b, 0xf0, 0xad, 0x7d, 0x4b, 0xdf, 0x38, 0x58, 0x6f, 0x9a,
0xff, 0x5f, 0xdb, 0xcb, 0x1c, 0xd8, 0xb4, 0x16, 0xdf, 0xca, 0x63, 0x60, 0x9c, 0xb4, 0x9f, 0x17, 0xc7, 0x97, 0x4c, 0xf2, 0xe0, 0x82, 0xcf, 0x75, 0x82, 0x7b, 0xd6, 0x18, 0x3a, 0x14, 0x0c, 0x5a,
0xf1, 0x25, 0x93, 0x3c, 0xb8, 0xe0, 0x33, 0x9d, 0x24, 0x9f, 0xb5, 0x86, 0x0e, 0x05, 0x83, 0x56, 0x05, 0xdc, 0x47, 0x2a, 0x68, 0x88, 0x30, 0x8f, 0xa7, 0xea, 0x08, 0xf4, 0xb1, 0x3e, 0xb5, 0x51,
0x41, 0xfb, 0x91, 0x0a, 0x3c, 0x22, 0x2c, 0xe2, 0x5c, 0x1d, 0x81, 0x7e, 0x3a, 0xa0, 0x36, 0x4a, 0x2a, 0xe7, 0xfd, 0x2c, 0x8b, 0x53, 0xe3, 0x61, 0x5d, 0x6a, 0x20, 0x95, 0x11, 0xb4, 0xdd, 0xf1,
0xe5, 0xcd, 0x9f, 0x65, 0x71, 0x6a, 0xbc, 0xb4, 0x47, 0x0d, 0xa4, 0xb2, 0x8a, 0xb6, 0x5d, 0x1e, 0x08, 0x73, 0x5e, 0x97, 0x96, 0x70, 0xe5, 0x00, 0x1d, 0xdb, 0x01, 0x5e, 0x83, 0x67, 0x34, 0x25,
0x61, 0xde, 0xec, 0xd1, 0x0a, 0xae, 0x9d, 0x68, 0xdd, 0x76, 0xa2, 0xd7, 0xe0, 0x19, 0x6d, 0x8b, 0x02, 0x99, 0x05, 0x8a, 0x8f, 0x29, 0x42, 0x3e, 0x5a, 0xa8, 0xfc, 0xca, 0x06, 0xc8, 0x90, 0x9f,
0x40, 0x66, 0x81, 0xe2, 0x63, 0x0a, 0x99, 0x8f, 0xe6, 0xaa, 0xc7, 0xaa, 0x89, 0x32, 0xe4, 0xa7, 0x66, 0xcf, 0xb3, 0x38, 0xa5, 0x83, 0xbc, 0x06, 0x93, 0xcf, 0xa1, 0x5b, 0x94, 0xdd, 0xa6, 0xcc,
0xd9, 0xf3, 0x2c, 0x4e, 0xe9, 0x66, 0xd1, 0x80, 0xc9, 0xe7, 0xd0, 0x2b, 0x4b, 0x77, 0xd3, 0x2a, 0xff, 0x60, 0x0d, 0x23, 0x53, 0xef, 0x0b, 0x5a, 0x6e, 0x50, 0x41, 0x9a, 0xa7, 0x61, 0x3e, 0x9f,
0x7c, 0xb0, 0x82, 0x91, 0xe9, 0x19, 0x04, 0xad, 0x36, 0xa8, 0x40, 0xcf, 0xd3, 0xb0, 0x98, 0xe5, 0xca, 0xd2, 0x81, 0x2b, 0x04, 0x86, 0xf0, 0x29, 0x0f, 0x25, 0xab, 0xdc, 0xb8, 0x42, 0xa8, 0x98,
0xb2, 0x0a, 0x02, 0x35, 0x02, 0xd3, 0x40, 0xce, 0x43, 0xc9, 0xea, 0x50, 0x50, 0x23, 0x54, 0x5c, 0x6c, 0x48, 0x95, 0x33, 0x62, 0x2e, 0xee, 0xe3, 0xcb, 0x0d, 0x2a, 0xf4, 0x0b, 0x3e, 0x17, 0x2a,
0x37, 0xa4, 0xca, 0xa1, 0x31, 0x9f, 0x0f, 0xf0, 0xe6, 0x36, 0x6b, 0xf4, 0x0b, 0x3e, 0x13, 0xaa, 0x83, 0xdf, 0xbf, 0xe6, 0x46, 0x46, 0x67, 0x4e, 0xa9, 0xb3, 0x87, 0x00, 0xd3, 0xd9, 0x9b, 0x24,
0x0a, 0xb8, 0x7f, 0xcd, 0x1b, 0x19, 0x9d, 0x39, 0x95, 0xce, 0x1e, 0x02, 0xe4, 0x68, 0x2b, 0xa8, 0x0e, 0x51, 0x65, 0xda, 0x78, 0x5c, 0x8d, 0x51, 0xda, 0x2a, 0x15, 0xdf, 0xb4, 0x15, 0x7f, 0x4d,
0x32, 0x6d, 0x0f, 0xae, 0xc6, 0x28, 0x6d, 0x55, 0x8a, 0x6f, 0xdb, 0x8a, 0xbf, 0x26, 0xd0, 0xde, 0x90, 0xbc, 0xab, 0x53, 0x73, 0x51, 0x49, 0xba, 0xb4, 0xad, 0xc0, 0xa3, 0x48, 0xd9, 0x60, 0xd1,
0xd5, 0xe9, 0xbd, 0xac, 0x46, 0x5d, 0xda, 0x55, 0xe0, 0x51, 0xa4, 0xec, 0xb8, 0x6c, 0xff, 0x66, 0xba, 0xcd, 0xd5, 0x6a, 0x5b, 0x2b, 0xbe, 0xc4, 0x1d, 0xa1, 0x12, 0xb5, 0x2b, 0x76, 0xf4, 0x61,
0x6a, 0xb5, 0xab, 0x15, 0x5f, 0xe1, 0x8e, 0x50, 0x89, 0xda, 0x9d, 0xd7, 0xf5, 0x61, 0x08, 0x90, 0x08, 0x90, 0xaf, 0xe0, 0x56, 0xce, 0x2f, 0x39, 0x4b, 0x78, 0x14, 0x98, 0xe2, 0xa0, 0x28, 0x25,
0xaf, 0xe0, 0x56, 0xc1, 0x2f, 0x39, 0x4b, 0x78, 0x14, 0x98, 0x02, 0xa3, 0x2c, 0x47, 0xad, 0x5e, 0xad, 0x3e, 0x8f, 0x1a, 0x92, 0xb2, 0xb9, 0xc8, 0xeb, 0x08, 0xe1, 0xff, 0x8f, 0x03, 0xdd, 0xa2,
0x91, 0x1a, 0x92, 0xaa, 0x41, 0x29, 0x9a, 0x08, 0xe1, 0xff, 0xb7, 0x03, 0xbd, 0xb2, 0x53, 0xb0, 0xca, 0xb7, 0x9e, 0x41, 0xe7, 0x86, 0xfb, 0xe0, 0xa2, 0xd8, 0x98, 0xc8, 0x74, 0x0f, 0xdf, 0x55,
0xae, 0x41, 0xe7, 0x97, 0xfb, 0xe0, 0xa2, 0xd8, 0x98, 0x0c, 0xf5, 0x1c, 0xa0, 0xa7, 0x10, 0x8d, 0x88, 0x5a, 0x1a, 0x6b, 0x5a, 0x69, 0xec, 0x27, 0x70, 0x67, 0xc2, 0x55, 0x7b, 0x2f, 0xc6, 0xf1,
0x54, 0xd8, 0xb6, 0x52, 0xe1, 0x4f, 0xe0, 0xce, 0x84, 0x4f, 0xde, 0xf0, 0x42, 0x8c, 0xe3, 0x5c, 0x54, 0x3b, 0xd1, 0xe1, 0x25, 0x57, 0xa2, 0x2d, 0xd7, 0xdf, 0x2b, 0xe9, 0xe8, 0x9a, 0xfd, 0xca,
0x3b, 0xe2, 0xe1, 0x25, 0x57, 0xa2, 0x2d, 0xd6, 0xf0, 0x4b, 0xe9, 0xe8, 0x8a, 0xfd, 0xca, 0xfc, 0xfc, 0x59, 0x28, 0xe3, 0x4b, 0x5e, 0x98, 0xbf, 0x86, 0x2a, 0x55, 0xb4, 0x6d, 0x55, 0xac, 0x34,
0x59, 0x28, 0xe3, 0x4b, 0x5e, 0x9a, 0xbf, 0x86, 0x6a, 0x55, 0x74, 0x6d, 0x55, 0x2c, 0x35, 0x7c, 0x7c, 0xff, 0x17, 0x0d, 0xb8, 0xb3, 0xfa, 0xd8, 0x35, 0xae, 0x4c, 0xa0, 0x65, 0x5d, 0x1d, 0xbf,
0xff, 0x7f, 0x1d, 0xb8, 0xb3, 0xfc, 0xd8, 0x15, 0xae, 0x4c, 0xa0, 0x63, 0xbd, 0x3a, 0x3e, 0xab, 0x55, 0xfa, 0x30, 0x22, 0xe2, 0x14, 0xc2, 0xa5, 0x05, 0xb8, 0x32, 0xaf, 0x5f, 0x5b, 0x82, 0xd8,
0x14, 0x64, 0x44, 0xc4, 0x49, 0x86, 0x4b, 0x4b, 0x70, 0x69, 0x6d, 0x70, 0x6d, 0x19, 0x63, 0x9b, 0x66, 0xd1, 0xae, 0x99, 0x05, 0x81, 0xd6, 0xdb, 0x3c, 0x9b, 0x98, 0x34, 0x88, 0xdf, 0x2a, 0x8b,
0x45, 0xb7, 0x61, 0x16, 0x04, 0x3a, 0x6f, 0x8b, 0x6c, 0x62, 0x52, 0x29, 0x3e, 0xab, 0x4c, 0x5c, 0xe6, 0xec, 0x2a, 0x28, 0x0a, 0xe5, 0x2e, 0x32, 0x83, 0x9c, 0x5d, 0x1d, 0x57, 0xb5, 0xb2, 0xdd,
0xb0, 0xab, 0xa0, 0x2c, 0xb6, 0x7b, 0xc8, 0x0c, 0x0a, 0x76, 0x75, 0x5c, 0xd7, 0xdb, 0x76, 0x2b, 0x06, 0x68, 0x00, 0x0b, 0x76, 0x0c, 0x81, 0x80, 0x1b, 0x34, 0xe0, 0xff, 0x00, 0xb6, 0xca, 0xde,
0xa1, 0x01, 0xff, 0x07, 0xb0, 0x55, 0x75, 0x82, 0x26, 0x57, 0xbe, 0x5b, 0xec, 0xfb, 0x42, 0x97, 0xce, 0x64, 0xbf, 0x77, 0x9a, 0xc2, 0xf8, 0x5f, 0xe8, 0xa2, 0x49, 0x6d, 0x7c, 0xa5, 0xa7, 0x48,
0x58, 0x6a, 0xe3, 0x2b, 0x3d, 0x73, 0x12, 0x94, 0xb3, 0x77, 0xdd, 0xfd, 0xfb, 0x70, 0x47, 0x77, 0x82, 0x72, 0xf6, 0xae, 0xbb, 0xff, 0x10, 0xee, 0xe8, 0x5e, 0x57, 0xc6, 0x97, 0xb1, 0x9c, 0xef,
0xc6, 0x32, 0xbe, 0x8c, 0xe5, 0x6c, 0x9f, 0xa7, 0x92, 0x17, 0xd7, 0xec, 0xf7, 0xa0, 0x1d, 0x47, 0xf3, 0x54, 0xf2, 0xfc, 0x9a, 0xfd, 0x1e, 0x34, 0xe3, 0x48, 0x0c, 0x1b, 0x8f, 0x9a, 0x4f, 0xfa,
0x62, 0xd8, 0x7a, 0xd4, 0x7e, 0x32, 0xa0, 0xea, 0xd1, 0x3f, 0xd0, 0xf1, 0xbb, 0xc9, 0x61, 0x2f, 0x54, 0x7d, 0xfa, 0x07, 0xb0, 0xb3, 0xcc, 0x61, 0x2f, 0x0c, 0x39, 0x86, 0x8b, 0x77, 0xe5, 0x72,
0x0c, 0x39, 0x06, 0x86, 0x77, 0xe5, 0x72, 0xa8, 0x1d, 0xbf, 0xc9, 0xe5, 0x20, 0x16, 0x93, 0x58, 0xa8, 0xc3, 0x41, 0x9d, 0xcb, 0x41, 0x2c, 0x26, 0xb1, 0x10, 0x37, 0x60, 0x13, 0xc0, 0x87, 0xcb,
0x88, 0x1b, 0xb0, 0x09, 0xe0, 0xc3, 0x45, 0x36, 0xa3, 0x4c, 0x36, 0x6a, 0x06, 0xae, 0xe2, 0x46, 0x6c, 0x46, 0x99, 0xac, 0x55, 0x01, 0x5c, 0x45, 0x93, 0xa2, 0x3e, 0x63, 0xd2, 0xf0, 0x74, 0x0d,
0x59, 0xcd, 0x31, 0x69, 0x78, 0xba, 0x06, 0xb3, 0x27, 0x55, 0x84, 0x50, 0x45, 0x8a, 0xe0, 0x3c, 0x66, 0x4f, 0xaa, 0xb8, 0xa1, 0xca, 0x0e, 0xc1, 0x79, 0x8a, 0x4f, 0xd5, 0xa5, 0x9d, 0x31, 0x13,
0xc5, 0xab, 0xea, 0xd1, 0xf5, 0x31, 0x13, 0x27, 0x9c, 0xa7, 0xfe, 0xdf, 0x38, 0xf0, 0xc1, 0xf5, 0x27, 0x9c, 0xa7, 0xfe, 0xdf, 0x3a, 0xf0, 0xc1, 0xf5, 0x27, 0x08, 0x92, 0xc0, 0x43, 0x66, 0x96,
0x27, 0x08, 0x92, 0xc0, 0x43, 0x66, 0x96, 0x83, 0x10, 0xd7, 0x83, 0xd4, 0x26, 0x30, 0xcd, 0xcc, 0x83, 0x10, 0xd7, 0x83, 0xd4, 0x26, 0x30, 0xed, 0xc9, 0x93, 0xc5, 0x71, 0xc3, 0x3a, 0x8e, 0xf4,
0x93, 0xf9, 0xe1, 0xc4, 0x2a, 0x8e, 0xf4, 0x3e, 0x5b, 0x7d, 0x9a, 0xff, 0x2f, 0x2e, 0x7c, 0xe7, 0x3e, 0x5b, 0x7f, 0x9a, 0xff, 0xaf, 0x2e, 0x7c, 0xe7, 0xfa, 0xfd, 0x4b, 0xc1, 0x74, 0xa9, 0x89,
0xfa, 0xfd, 0x0b, 0x61, 0x73, 0xa1, 0xe5, 0xef, 0xd8, 0x2d, 0xff, 0x5b, 0xb8, 0x65, 0x8b, 0x5b, 0x6f, 0xd9, 0x4d, 0xfc, 0x5b, 0xb8, 0x65, 0x8b, 0x5b, 0x15, 0xcd, 0x83, 0xa7, 0x7f, 0xf0, 0xae,
0x97, 0xd8, 0x9b, 0x4f, 0x7f, 0xef, 0x5d, 0x45, 0xde, 0xb5, 0x01, 0x15, 0x86, 0xa8, 0x97, 0xce, 0x22, 0xef, 0xda, 0x80, 0x0a, 0x4e, 0xd4, 0x4b, 0x17, 0x30, 0xb6, 0xaf, 0xb5, 0x16, 0x7d, 0x2d,
0x61, 0x6c, 0xaf, 0xea, 0xcc, 0x7b, 0x55, 0xc1, 0x59, 0x99, 0x40, 0xf1, 0x59, 0x89, 0x1c, 0x95, 0xe7, 0xac, 0x48, 0xab, 0xf8, 0xad, 0x44, 0x8e, 0x0a, 0x6b, 0x30, 0x59, 0xb5, 0x42, 0xa8, 0x94,
0xd6, 0x60, 0xf2, 0x67, 0x8d, 0x50, 0xc9, 0x95, 0x19, 0x8b, 0x33, 0xa1, 0xa4, 0x82, 0x75, 0x20, 0xcb, 0x8c, 0xc5, 0x99, 0x00, 0x53, 0xc2, 0x3a, 0x3c, 0xa0, 0x5f, 0x18, 0x0f, 0x2d, 0x40, 0x8c,
0x40, 0xbf, 0x30, 0xbe, 0x58, 0x82, 0x18, 0xab, 0xa6, 0x72, 0x5c, 0x79, 0xa2, 0x81, 0x74, 0x1b, 0x60, 0x33, 0x39, 0x2e, 0xfd, 0xd3, 0x40, 0xba, 0x31, 0x9d, 0x26, 0xf3, 0x62, 0x2a, 0x6b, 0x1c,
0x9b, 0x27, 0xb3, 0x72, 0x86, 0x8b, 0xe9, 0x6e, 0xa0, 0xda, 0xd8, 0x3c, 0x99, 0x19, 0x1f, 0x5b, 0xb5, 0x8f, 0x48, 0xe3, 0x63, 0x4b, 0x79, 0xa2, 0xa7, 0x8b, 0x24, 0x3b, 0x4f, 0xbc, 0x85, 0x5b,
0xc8, 0x08, 0x7d, 0x5d, 0x52, 0xd9, 0x19, 0xe1, 0x2d, 0xdc, 0xaa, 0xa3, 0x64, 0x59, 0x9d, 0x0e, 0x55, 0xec, 0x2c, 0xea, 0xcd, 0xfe, 0x0d, 0x1f, 0xb2, 0x0a, 0x8f, 0xba, 0x3a, 0xa5, 0xde, 0x64,
0x6e, 0x78, 0x91, 0x75, 0x20, 0xd4, 0xb5, 0x2c, 0xf5, 0x26, 0x73, 0x18, 0xf2, 0x97, 0x4e, 0x5d, 0x01, 0x43, 0xfe, 0xda, 0xa9, 0x2a, 0xce, 0x55, 0xc5, 0xf0, 0x26, 0x1e, 0xf9, 0xec, 0x9d, 0x8f,
0x9f, 0x2e, 0x2b, 0x9d, 0x37, 0xf0, 0xc8, 0x67, 0xef, 0x7c, 0x64, 0xd9, 0xfa, 0x2c, 0x94, 0xda, 0x2c, 0x9a, 0x99, 0xa5, 0xe2, 0xb9, 0x2c, 0x1a, 0x97, 0x97, 0xd4, 0x33, 0x47, 0x3c, 0xe1, 0x4a,
0x55, 0x89, 0xb9, 0xb8, 0xa4, 0xae, 0x39, 0xe2, 0x09, 0x57, 0x1a, 0xd8, 0xd4, 0x2e, 0x63, 0xc0, 0x03, 0x03, 0xed, 0x32, 0x06, 0x5c, 0x70, 0xb6, 0xad, 0x05, 0x67, 0xf3, 0xff, 0xd7, 0x01, 0x6f,
0x39, 0x67, 0xdb, 0x9a, 0x73, 0x36, 0xff, 0x7f, 0x1c, 0xf0, 0xe6, 0xad, 0x85, 0x00, 0x74, 0x47, 0xd1, 0x5a, 0x08, 0x40, 0x7b, 0x94, 0xa9, 0x2f, 0xef, 0x3d, 0xb2, 0x05, 0xbd, 0x11, 0xbf, 0x7a,
0x99, 0x7a, 0xf2, 0xde, 0x23, 0x5b, 0xd0, 0x1f, 0xf1, 0xab, 0xd7, 0x29, 0x3f, 0xcd, 0x5e, 0xa7, 0x9d, 0xf2, 0xd3, 0xec, 0x75, 0xca, 0x3d, 0x87, 0xdc, 0x85, 0xdb, 0x23, 0x7e, 0x75, 0xac, 0x6b,
0xdc, 0x73, 0xc8, 0x5d, 0xb8, 0x3d, 0xe2, 0x57, 0xc7, 0xba, 0x2a, 0xfb, 0x51, 0x91, 0x4d, 0x73, 0xb5, 0x1f, 0xe5, 0xd9, 0x6c, 0xaa, 0x82, 0x9f, 0xd7, 0x20, 0x3d, 0xe8, 0xbc, 0xe2, 0xa9, 0x62,
0x15, 0xfc, 0xbc, 0x16, 0xe9, 0xc3, 0xfa, 0x2b, 0x9e, 0x2a, 0x26, 0x5e, 0x9b, 0xb8, 0xb0, 0x46, 0xe2, 0x35, 0x89, 0x0b, 0x1b, 0x54, 0x29, 0xcc, 0x6b, 0x11, 0x02, 0x83, 0xfd, 0x5a, 0xb5, 0xeb,
0x95, 0xc2, 0xbc, 0x0e, 0x21, 0xb0, 0xb9, 0xdf, 0xa8, 0x8d, 0xbd, 0x35, 0xc5, 0xa4, 0xaa, 0x32, 0x6d, 0x28, 0x26, 0x65, 0xed, 0x71, 0x94, 0x5e, 0xc6, 0x12, 0x0f, 0xf7, 0xda, 0x64, 0x1b, 0xbc,
0x8e, 0xd2, 0xcb, 0x58, 0xe2, 0xe1, 0x5e, 0x97, 0x6c, 0x83, 0x37, 0x5f, 0x7e, 0x78, 0xeb, 0xe4, 0xc5, 0xa2, 0xc4, 0xeb, 0x90, 0xef, 0xc0, 0x4e, 0x89, 0xad, 0x54, 0x52, 0xac, 0x77, 0xc9, 0x6d,
0x3b, 0xb0, 0x53, 0x61, 0x6b, 0x95, 0x94, 0xeb, 0x3d, 0x72, 0x1b, 0xb6, 0xaa, 0xf5, 0x17, 0xb1, 0xd8, 0x2a, 0xd7, 0x5f, 0xc4, 0xaa, 0xd9, 0xf1, 0x5c, 0x7d, 0xc6, 0xd2, 0x83, 0x79, 0xe0, 0xff,
0x6a, 0x8d, 0x3c, 0x57, 0x9f, 0xb1, 0x70, 0x61, 0x1e, 0xf8, 0x7f, 0xe5, 0x80, 0x37, 0xaf, 0x58, 0x8d, 0x03, 0xde, 0xa2, 0x62, 0xc9, 0x10, 0xb6, 0x17, 0x71, 0x47, 0x51, 0xa2, 0x5e, 0xe0, 0x3e,
0x32, 0x84, 0xed, 0x79, 0xdc, 0x51, 0x94, 0xa8, 0x1b, 0xb8, 0x0f, 0x77, 0xe7, 0x57, 0x8e, 0x79, 0xdc, 0x5d, 0x5c, 0x39, 0xe6, 0x69, 0x14, 0xa7, 0xe7, 0x9e, 0x43, 0x1e, 0xc0, 0x70, 0x71, 0xb1,
0x1a, 0xc5, 0xe9, 0xb9, 0xe7, 0x90, 0x07, 0x30, 0x9c, 0x5f, 0x2c, 0xa3, 0xaf, 0xd7, 0x5a, 0xb6, 0x88, 0xbe, 0x5e, 0x63, 0xd5, 0xea, 0x01, 0x0f, 0x13, 0x55, 0xa8, 0x7a, 0x4d, 0xff, 0x2f, 0x1d,
0x7a, 0xc0, 0xc3, 0x44, 0x95, 0xa4, 0x5e, 0xdb, 0xff, 0x73, 0x07, 0xee, 0xad, 0xd4, 0xb6, 0xba, 0xb8, 0xb7, 0x56, 0xdb, 0xea, 0x39, 0xcf, 0xd2, 0x8b, 0x34, 0xbb, 0x4a, 0xbd, 0xf7, 0x14, 0x50,
0xce, 0xb3, 0xf4, 0x22, 0xcd, 0xae, 0x52, 0xef, 0x3d, 0x05, 0xd4, 0x67, 0x0e, 0xa0, 0x67, 0x9d, 0x9d, 0xd9, 0x87, 0xae, 0x75, 0x46, 0x1f, 0xba, 0x15, 0x4f, 0xb2, 0x09, 0xee, 0x3e, 0x4b, 0x43,
0x31, 0x80, 0x5e, 0xcd, 0x93, 0x6c, 0x80, 0xbb, 0xcf, 0xd2, 0x90, 0x27, 0x09, 0x8f, 0xbc, 0x8e, 0x9e, 0x24, 0x3c, 0xf2, 0x5a, 0x6a, 0xdf, 0xa9, 0xea, 0xad, 0x78, 0xe4, 0x6d, 0x90, 0x5b, 0xb0,
0xda, 0x77, 0xaa, 0x3a, 0x31, 0x1e, 0x79, 0x6b, 0xe4, 0x16, 0x6c, 0x9c, 0xa5, 0x08, 0x7e, 0x93, 0x79, 0x96, 0x22, 0xf8, 0x4d, 0x96, 0xcb, 0xf1, 0xdc, 0x6b, 0xfb, 0xbf, 0x72, 0xa0, 0xaf, 0xec,
0x15, 0x72, 0x3c, 0xf3, 0xba, 0xfe, 0x2f, 0x1d, 0x18, 0x28, 0x7b, 0x7c, 0x96, 0x65, 0x17, 0x13, 0xf1, 0x59, 0x96, 0x5d, 0x4c, 0x58, 0x7e, 0xb1, 0x3e, 0xd4, 0xcf, 0xf2, 0xc4, 0x24, 0x2e, 0xf5,
0x56, 0x5c, 0xac, 0x0e, 0xf5, 0xd3, 0x22, 0x31, 0x89, 0x4b, 0x3d, 0x2e, 0xad, 0x6b, 0xee, 0x83, 0xb9, 0xb2, 0xda, 0xb9, 0x0f, 0x2e, 0x66, 0xd3, 0x40, 0xd1, 0xea, 0xa0, 0xd2, 0x45, 0xc4, 0x59,
0x8b, 0xbd, 0x48, 0xa0, 0x68, 0x75, 0x50, 0xe9, 0x21, 0xe2, 0xac, 0x48, 0xec, 0xa6, 0x74, 0xad, 0x9e, 0xd8, 0x6d, 0xe6, 0x46, 0xbd, 0xcd, 0x7c, 0x08, 0x60, 0x8c, 0x55, 0x59, 0xa8, 0xae, 0x5b,
0xd9, 0x94, 0x3e, 0x04, 0x30, 0xc6, 0xaa, 0x2c, 0x54, 0x57, 0x28, 0xae, 0xc1, 0xec, 0x49, 0xff, 0x5c, 0x83, 0xd9, 0x93, 0xfe, 0x5f, 0xc0, 0xfb, 0x4a, 0xc2, 0xc3, 0x54, 0x9c, 0x09, 0x9e, 0xab,
0xcf, 0xe0, 0x7d, 0x25, 0xe1, 0x61, 0x2a, 0xce, 0x04, 0x2f, 0xd4, 0x41, 0x7a, 0xc0, 0xba, 0x42, 0x83, 0xf4, 0xc8, 0x74, 0x8d, 0xa8, 0x3b, 0xd0, 0x9d, 0x19, 0x3a, 0x23, 0x6f, 0x09, 0xe3, 0x04,
0xd4, 0x1d, 0xe8, 0x4d, 0x0d, 0x9d, 0x91, 0xb7, 0x82, 0x71, 0xde, 0x39, 0x66, 0x31, 0x8e, 0x36, 0x73, 0xcc, 0x62, 0x1c, 0x56, 0xe8, 0x52, 0xb5, 0x83, 0xf0, 0x51, 0xad, 0x0b, 0x6e, 0xd5, 0xc4,
0x74, 0x51, 0xba, 0x8e, 0xf0, 0x51, 0xa3, 0x67, 0xee, 0x34, 0xc4, 0xf3, 0x9f, 0x83, 0x87, 0x19, 0xf3, 0x9f, 0x83, 0x87, 0x19, 0x3e, 0xe1, 0x2c, 0xff, 0x3a, 0x16, 0x32, 0xcb, 0xe7, 0x76, 0xf0,
0x3e, 0xe1, 0xac, 0xf8, 0x3a, 0x16, 0x32, 0x2b, 0x66, 0x76, 0xf0, 0x74, 0x1a, 0xc1, 0xf3, 0x21, 0x74, 0x6a, 0xc1, 0xf3, 0x21, 0x40, 0xa8, 0x08, 0xf5, 0x5d, 0x4c, 0x70, 0x37, 0x98, 0x3d, 0xe9,
0x40, 0xa8, 0x08, 0xf5, 0xbb, 0x98, 0xe0, 0x6e, 0x30, 0x7b, 0xd2, 0xff, 0x77, 0x07, 0x08, 0x4e, 0xff, 0x87, 0x03, 0x04, 0x67, 0x2c, 0xba, 0xef, 0x3a, 0x8e, 0x43, 0xac, 0x7b, 0x56, 0x8d, 0x97,
0x64, 0x74, 0x97, 0x76, 0x1c, 0x87, 0x58, 0xe1, 0x2c, 0x1b, 0x46, 0x59, 0x13, 0xc3, 0xd6, 0x8a, 0xac, 0x19, 0x60, 0x63, 0xcd, 0x0c, 0xb0, 0x89, 0x65, 0xd8, 0xd2, 0x0c, 0xb0, 0x85, 0xe8, 0x62,
0x89, 0x61, 0x1b, 0x0b, 0xae, 0x85, 0x89, 0x61, 0x07, 0xd1, 0xe5, 0xc4, 0xf0, 0x3e, 0xb8, 0xd8, 0x06, 0x78, 0x1f, 0x5c, 0xec, 0xfb, 0x70, 0x08, 0xa8, 0x67, 0x29, 0x38, 0x04, 0x3c, 0x59, 0x39,
0x25, 0xe2, 0xc8, 0x50, 0x4f, 0x5e, 0x70, 0x64, 0x78, 0xb2, 0x74, 0x64, 0xd8, 0x45, 0x82, 0x15, 0x04, 0x6c, 0x23, 0xc1, 0x9a, 0x21, 0x60, 0xc7, 0x1e, 0x02, 0x8e, 0xe1, 0xf6, 0xf2, 0x4d, 0xc4,
0x23, 0xc3, 0x75, 0x7b, 0x64, 0x38, 0x86, 0xdb, 0x8b, 0x6f, 0x22, 0x56, 0x4f, 0x45, 0x7f, 0x17, 0xfa, 0x39, 0xe7, 0xef, 0x43, 0x77, 0x6a, 0x88, 0xb0, 0x64, 0xe8, 0x3d, 0x7d, 0x50, 0x0f, 0x89,
0x7a, 0xb9, 0x21, 0xc2, 0x92, 0xa1, 0xff, 0xf4, 0x41, 0x33, 0x24, 0x36, 0x39, 0xd1, 0x8a, 0xda, 0x75, 0x4e, 0xb4, 0xa4, 0xf6, 0xff, 0xb3, 0x09, 0x3d, 0xeb, 0x3f, 0x02, 0x6b, 0xf4, 0x3e, 0x84,
0xff, 0x8f, 0x36, 0xf4, 0xad, 0xff, 0x0f, 0x56, 0xe8, 0x7d, 0x08, 0xeb, 0x2c, 0x8a, 0x0a, 0x2e, 0x0e, 0x8b, 0xa2, 0x9c, 0x0b, 0x51, 0xbc, 0x97, 0x01, 0x6d, 0x91, 0x9a, 0x35, 0x91, 0xea, 0x5d,
0x44, 0x79, 0x5f, 0x06, 0xb4, 0x45, 0x6a, 0x37, 0x44, 0x6a, 0xf6, 0x2f, 0xba, 0x9b, 0xb4, 0xfa, 0x8d, 0xee, 0x31, 0xad, 0xae, 0x86, 0x40, 0x6b, 0xca, 0xe4, 0xd8, 0x74, 0x28, 0xf8, 0x5d, 0x6a,
0x17, 0x02, 0x9d, 0x9c, 0xc9, 0xb1, 0xe9, 0x45, 0xf0, 0xb9, 0xd2, 0x54, 0xd7, 0xd2, 0x94, 0x3d, 0xaa, 0x6d, 0x69, 0xca, 0x9e, 0x8b, 0x77, 0xcc, 0xa0, 0xd1, 0xcc, 0xc5, 0xb7, 0x61, 0x83, 0x4f,
0x45, 0x5f, 0x37, 0x63, 0x49, 0x33, 0x45, 0xdf, 0x86, 0x35, 0x3e, 0xc9, 0x7e, 0x16, 0x63, 0xee, 0xb2, 0x9f, 0xc5, 0x98, 0xfb, 0x5c, 0xaa, 0x01, 0xa5, 0xaa, 0x2b, 0x96, 0x24, 0x5c, 0x9a, 0xc1,
0x73, 0xa9, 0x06, 0x94, 0xaa, 0xae, 0x58, 0x92, 0x70, 0x69, 0xc6, 0x3c, 0x06, 0x52, 0xcc, 0x95, 0x8d, 0x81, 0x14, 0x73, 0x65, 0x46, 0xa6, 0xeb, 0xc3, 0x6f, 0x54, 0x6b, 0x1c, 0x45, 0x3c, 0x35,
0x19, 0x99, 0xfe, 0x0e, 0x9f, 0x51, 0xad, 0x71, 0x14, 0xf1, 0xd4, 0xf4, 0x75, 0x06, 0xba, 0x66, 0xdd, 0x9e, 0x81, 0xae, 0x99, 0xda, 0xec, 0x40, 0x77, 0x9a, 0x89, 0x18, 0xfb, 0xe6, 0x4d, 0x3d,
0xc6, 0xb3, 0x03, 0xbd, 0x3c, 0x13, 0x31, 0x76, 0xc8, 0x1b, 0x7a, 0x44, 0x5c, 0xc2, 0xe4, 0xfb, 0xf4, 0x2d, 0x60, 0xf2, 0x7d, 0x78, 0x7f, 0x9a, 0x67, 0xd1, 0x71, 0xce, 0xdf, 0xf2, 0x3c, 0xe7,
0xf0, 0x7e, 0x5e, 0x64, 0xd1, 0x71, 0xc1, 0xdf, 0xf2, 0xa2, 0xe0, 0xd1, 0x3e, 0x5a, 0xff, 0x81, 0xd1, 0x3e, 0x5a, 0xff, 0x81, 0x9e, 0xd8, 0xb8, 0x74, 0xf5, 0xa2, 0xda, 0x25, 0xb9, 0x90, 0xcb,
0x9e, 0xef, 0xb8, 0x74, 0xf9, 0xa2, 0xda, 0x25, 0xb9, 0x90, 0x8b, 0xbb, 0xb6, 0xf4, 0xae, 0xa5, 0xbb, 0xb6, 0xf4, 0xae, 0x95, 0x8b, 0x4a, 0x8e, 0x6c, 0xca, 0x73, 0xf6, 0x26, 0xd1, 0x43, 0x1b,
0x8b, 0x4a, 0x8e, 0x2c, 0xe7, 0x05, 0x7b, 0x93, 0xe8, 0x11, 0x8f, 0x4b, 0x2b, 0xd8, 0xff, 0x5b, 0x97, 0x96, 0xb0, 0xff, 0x77, 0x46, 0xa5, 0xe6, 0xbf, 0x4d, 0x6b, 0x54, 0x6a, 0x29, 0xae, 0xb1,
0xa3, 0x52, 0xf3, 0xdf, 0xd4, 0x0a, 0x95, 0x5a, 0x8a, 0x6b, 0x2d, 0x9d, 0xb0, 0xb7, 0x9b, 0xc3, 0x72, 0x66, 0xde, 0xac, 0x8f, 0x63, 0xad, 0xb1, 0xa7, 0xee, 0x4d, 0x1e, 0x43, 0x3f, 0xe2, 0x79,
0x5b, 0x6b, 0x48, 0xaa, 0xbb, 0x90, 0xc7, 0x30, 0x88, 0x78, 0x11, 0x5f, 0xf2, 0x28, 0xc0, 0x46, 0x7c, 0xc9, 0xa3, 0x00, 0xdb, 0x87, 0x0d, 0x33, 0x4a, 0xd1, 0xb8, 0xaf, 0x54, 0x17, 0xf1, 0x39,
0x61, 0xcd, 0x0c, 0x5e, 0x34, 0xee, 0x2b, 0xd5, 0x2f, 0x7c, 0x0e, 0x3b, 0x7a, 0x44, 0x22, 0x78, 0xec, 0xe8, 0xa1, 0x87, 0xe0, 0x51, 0x80, 0x0b, 0x66, 0x9c, 0x89, 0x43, 0x7d, 0x1d, 0x8c, 0xee,
0x14, 0xe0, 0x82, 0x19, 0x7e, 0xe2, 0x5f, 0x00, 0x3a, 0x18, 0xdd, 0xc5, 0x81, 0x89, 0xe0, 0xd1, 0xe2, 0x08, 0x44, 0xf0, 0xe8, 0xa0, 0x5c, 0x3f, 0x52, 0xcb, 0x7a, 0x90, 0x97, 0x86, 0x05, 0x7b,
0x41, 0xb5, 0x7e, 0xa4, 0x96, 0xf5, 0xd8, 0x2f, 0x0d, 0x4b, 0xf6, 0x5a, 0xf9, 0xa0, 0x51, 0xc8, 0xad, 0x7c, 0xd0, 0x28, 0xe4, 0xfe, 0x3b, 0x58, 0x19, 0xd9, 0xcd, 0xe8, 0x9a, 0xff, 0x72, 0x95,
0xfd, 0xb7, 0xb0, 0x32, 0xb2, 0xdb, 0xce, 0x15, 0xff, 0x89, 0x55, 0x64, 0x6a, 0x8b, 0x19, 0x59, 0x64, 0x6a, 0x8b, 0x19, 0x42, 0x8b, 0xa1, 0xbb, 0x6a, 0xcb, 0x0b, 0xbd, 0x4a, 0x4b, 0x32, 0xdb,
0x8b, 0xa1, 0xbb, 0x6c, 0xcb, 0x0b, 0xbd, 0x4a, 0x2b, 0x32, 0xdb, 0x16, 0xa0, 0x69, 0x0b, 0xdf, 0x16, 0xa0, 0x6e, 0x0b, 0xdf, 0x03, 0x6f, 0xe1, 0xff, 0x32, 0x02, 0xed, 0xa8, 0xbf, 0x34, 0xe9,
0x03, 0x6f, 0xee, 0x5f, 0x1c, 0x81, 0x76, 0x34, 0x58, 0x98, 0x8b, 0xfb, 0x3f, 0xd5, 0x61, 0xb6, 0xf6, 0x7f, 0xaa, 0xc3, 0x6c, 0xd1, 0x08, 0x1f, 0x1b, 0x93, 0x59, 0xd7, 0x0a, 0xda, 0x37, 0x6b,
0x6c, 0x79, 0x8f, 0x8d, 0xc9, 0xac, 0x6a, 0xfa, 0xec, 0x37, 0x6b, 0xbd, 0xd3, 0x9b, 0xf9, 0xff, 0xbc, 0xd3, 0xcd, 0xfc, 0xff, 0x73, 0x74, 0x24, 0x3d, 0x61, 0x97, 0x3c, 0xda, 0x33, 0xce, 0x69,
0xe7, 0xe8, 0x48, 0x7a, 0xc2, 0x2e, 0x79, 0xb4, 0x67, 0x9c, 0xd3, 0x72, 0x5b, 0xa7, 0xe9, 0xb6, 0xb9, 0xad, 0x53, 0x77, 0xdb, 0x55, 0xff, 0x18, 0x79, 0x00, 0xee, 0x5b, 0x76, 0x99, 0xcd, 0xf2,
0xcb, 0xfe, 0x46, 0x79, 0x00, 0xee, 0x5b, 0x76, 0x99, 0x4d, 0x8b, 0x58, 0x6a, 0xed, 0xf7, 0x68, 0x58, 0x6a, 0xed, 0x77, 0x69, 0x85, 0xb8, 0x26, 0xc5, 0x3c, 0x86, 0xbe, 0x2e, 0x79, 0x02, 0x3b,
0x8d, 0xb8, 0x26, 0xc5, 0x3c, 0x86, 0x81, 0x2e, 0x79, 0x02, 0x3b, 0x92, 0xf5, 0x35, 0x4e, 0x0f, 0x92, 0xf5, 0x34, 0x4e, 0x8f, 0xdd, 0x7e, 0x13, 0x6e, 0xe9, 0xdc, 0x20, 0xc6, 0x59, 0x2e, 0x71,
0xe9, 0x7e, 0x1d, 0x6e, 0xe9, 0xdc, 0x20, 0xc6, 0x59, 0x21, 0x71, 0x3e, 0x21, 0x8c, 0xdb, 0x6e, 0x6a, 0x21, 0x8c, 0xdb, 0x6e, 0xe1, 0xc2, 0x89, 0xc2, 0x8f, 0x14, 0x5a, 0xa5, 0x43, 0x9e, 0x0a,
0xe1, 0xc2, 0x89, 0xc2, 0x8f, 0x14, 0x5a, 0xa5, 0x43, 0x9e, 0x0a, 0x53, 0xb7, 0xaa, 0x47, 0x65, 0x53, 0xb7, 0xaa, 0x4f, 0x65, 0xaa, 0xb1, 0x08, 0x94, 0x23, 0x18, 0x15, 0xb4, 0x63, 0x71, 0xca,
0xaa, 0xb1, 0x08, 0x94, 0x23, 0x18, 0x15, 0x74, 0x63, 0x71, 0xca, 0x85, 0x7c, 0xde, 0xe9, 0x75, 0x85, 0x7c, 0xde, 0xea, 0xb6, 0xbc, 0x0d, 0xff, 0x97, 0x8e, 0x7e, 0xdd, 0xa5, 0xc1, 0xcf, 0x9a,
0xbc, 0x35, 0xff, 0x17, 0x8e, 0xbe, 0xdd, 0x85, 0x11, 0xcf, 0x8a, 0xdb, 0x9d, 0x2f, 0x6f, 0x5b, 0xd7, 0x5d, 0x2c, 0x6f, 0x1b, 0xcb, 0xe5, 0xed, 0x21, 0x7c, 0x30, 0xd6, 0xd9, 0x28, 0x60, 0x79,
0x8b, 0xe5, 0xed, 0x21, 0x7c, 0x30, 0xd6, 0xd9, 0x28, 0x60, 0x45, 0x38, 0x8e, 0x2f, 0x79, 0x20, 0x38, 0x8e, 0x2f, 0x79, 0x20, 0x66, 0xd3, 0xa9, 0x92, 0x9d, 0xa7, 0xca, 0xc9, 0x22, 0xf3, 0x40,
0xa6, 0x79, 0xae, 0x64, 0xe7, 0xa9, 0x72, 0xb2, 0xc8, 0x5c, 0xd0, 0x03, 0x43, 0xb6, 0xa7, 0xa9, 0x0f, 0x0c, 0xd9, 0x9e, 0xa6, 0x3a, 0xd1, 0x44, 0x87, 0x9a, 0xc6, 0xff, 0x67, 0x47, 0x77, 0xbe,
0x4e, 0x34, 0xd1, 0xa1, 0xa6, 0xf1, 0xff, 0xc9, 0xd1, 0x9d, 0xaf, 0xa9, 0x12, 0x54, 0x8a, 0x7d, 0xa6, 0x4a, 0x50, 0x29, 0xf6, 0x1d, 0x7f, 0x7f, 0xf0, 0x43, 0x68, 0x9b, 0x0a, 0x57, 0x77, 0x27,
0xc7, 0xaf, 0x15, 0x7e, 0x08, 0x5d, 0x53, 0xe1, 0xea, 0xee, 0x64, 0x6e, 0x2c, 0x66, 0x31, 0xdc, 0x0b, 0xc3, 0x32, 0x8b, 0xe1, 0xee, 0x69, 0x35, 0xde, 0xa5, 0x66, 0x93, 0xff, 0x19, 0xf4, 0x2c,
0x3d, 0xad, 0x87, 0xc1, 0xd4, 0x6c, 0xf2, 0x3f, 0x83, 0xbe, 0x85, 0xc6, 0x6a, 0x67, 0xf4, 0x62, 0x34, 0x56, 0x3b, 0xa3, 0x17, 0xa3, 0xd7, 0xdf, 0x8c, 0x74, 0xb5, 0x73, 0x4a, 0xcf, 0x4e, 0x4e,
0xf4, 0xfa, 0x9b, 0x91, 0xae, 0x76, 0x4e, 0xe9, 0xd9, 0xc9, 0xe9, 0xe1, 0x81, 0xe7, 0x60, 0xd5, 0x0f, 0x0f, 0x3c, 0x07, 0xab, 0x96, 0x11, 0x82, 0xdf, 0xbc, 0xa6, 0xa7, 0x5f, 0xff, 0xb1, 0xd7,
0x32, 0x42, 0xf0, 0x9b, 0xd7, 0xf4, 0xf4, 0xeb, 0x3f, 0xf4, 0x5a, 0xfe, 0x2f, 0xdb, 0x7a, 0x5c, 0xf0, 0x7f, 0xd5, 0xd4, 0x03, 0x50, 0xbb, 0x6a, 0x32, 0xc5, 0xe0, 0xfa, 0xc9, 0x05, 0xba, 0x68,
0x6a, 0x57, 0x4d, 0xa6, 0x18, 0x5c, 0x3d, 0xa3, 0x40, 0x17, 0x6d, 0x59, 0xa3, 0x82, 0x4d, 0x68, 0xc3, 0x1a, 0x20, 0x0c, 0xa0, 0x21, 0x33, 0x13, 0x43, 0x1a, 0x32, 0x53, 0xc6, 0x15, 0x8e, 0x55,
0xc9, 0xcc, 0xc4, 0x90, 0x96, 0xcc, 0x94, 0x71, 0x85, 0x63, 0x15, 0x89, 0xd3, 0xf3, 0x32, 0x8c, 0x24, 0x4e, 0xcf, 0x8b, 0x30, 0x52, 0x21, 0x94, 0x4a, 0xcc, 0x98, 0x4f, 0xe7, 0x76, 0x33, 0xd7,
0xd4, 0x08, 0xa5, 0x12, 0x33, 0xd0, 0xd3, 0xb9, 0xdd, 0xfc, 0x0b, 0x50, 0xe1, 0xf6, 0xf0, 0xaf, 0x2f, 0x71, 0x7b, 0xf8, 0xcf, 0xa8, 0x9c, 0x8b, 0x69, 0x96, 0x8a, 0x22, 0x41, 0x94, 0xb0, 0xca,
0xab, 0x82, 0x8b, 0x3c, 0x4b, 0x45, 0x99, 0x20, 0x2a, 0x58, 0xe5, 0x1a, 0xd5, 0xc0, 0xc4, 0x7a, 0x35, 0xaa, 0x81, 0x89, 0xf5, 0x66, 0x6d, 0x7f, 0xae, 0xc1, 0xec, 0x49, 0xc2, 0x57, 0x0f, 0xd2,
0xb3, 0xb6, 0x3f, 0xd7, 0x60, 0xf6, 0x24, 0xe1, 0xcb, 0xc7, 0xee, 0x3d, 0xbc, 0xd9, 0xef, 0x37, 0xbb, 0xf8, 0xb2, 0xdf, 0xaf, 0xbf, 0xec, 0x8a, 0x5b, 0xef, 0xae, 0xe8, 0x16, 0x56, 0x8d, 0xdf,
0x6f, 0x76, 0xc9, 0x5b, 0xef, 0x2e, 0xe9, 0x16, 0x96, 0x0d, 0xeb, 0xb5, 0x0e, 0xdd, 0x6a, 0xfe, 0xb5, 0x0e, 0xdd, 0x72, 0xfe, 0xf0, 0x13, 0x20, 0x6b, 0x2a, 0x4f, 0x5b, 0x17, 0xc7, 0x87, 0xa3,
0xf0, 0x13, 0x20, 0x2b, 0x2a, 0x4f, 0x5b, 0x17, 0xc7, 0x87, 0xa3, 0x83, 0xa3, 0xd1, 0x8f, 0x4c, 0x83, 0xa3, 0xd1, 0x8f, 0x4c, 0xe5, 0xb9, 0xbf, 0x7f, 0x78, 0xac, 0x34, 0xa3, 0x2b, 0xcf, 0xc3,
0xe5, 0xb9, 0xbf, 0x7f, 0x78, 0xac, 0x34, 0xa3, 0x2b, 0xcf, 0xc3, 0xfd, 0x97, 0x47, 0xa3, 0xc3, 0xfd, 0x97, 0x47, 0xa3, 0xc3, 0x03, 0xaf, 0xa9, 0xa0, 0xfd, 0xbd, 0xd1, 0xfe, 0xe1, 0xcb, 0xc3,
0x03, 0xaf, 0xad, 0xa0, 0xfd, 0xbd, 0xd1, 0xfe, 0xe1, 0xcb, 0xc3, 0x03, 0xaf, 0xe3, 0xff, 0x97, 0x03, 0xaf, 0xe5, 0xff, 0xb7, 0xa3, 0x07, 0x13, 0xf5, 0xca, 0xff, 0x80, 0x87, 0xb1, 0x58, 0xff,
0xa3, 0x07, 0x13, 0xcd, 0xca, 0xff, 0x80, 0x87, 0xb1, 0x58, 0xfd, 0x0f, 0xd4, 0x03, 0x70, 0xcd, 0x3f, 0xa5, 0x07, 0xe0, 0x9a, 0xf7, 0x3c, 0x2a, 0x2c, 0xad, 0x42, 0x90, 0x3f, 0x85, 0xad, 0xc8,
0x7d, 0x1e, 0x95, 0x96, 0x56, 0x23, 0xc8, 0x1f, 0xc3, 0x56, 0x64, 0xf6, 0x07, 0x0d, 0xcb, 0xfb, 0xec, 0x0f, 0x6a, 0x96, 0xf7, 0xe9, 0xe2, 0x74, 0x75, 0xd5, 0x91, 0xbb, 0xc5, 0x87, 0x79, 0x9e,
0x74, 0x7e, 0x8e, 0xba, 0xec, 0xc8, 0xdd, 0xf2, 0xc1, 0x5c, 0xcf, 0x66, 0xd4, 0x80, 0xfd, 0x8f, 0x41, 0x54, 0x83, 0xfd, 0x8f, 0x61, 0x50, 0xa7, 0xa8, 0x5d, 0xf6, 0xbd, 0xda, 0x65, 0x1d, 0xff,
0x61, 0xb3, 0x49, 0xd1, 0x78, 0xd9, 0xf7, 0x1a, 0x2f, 0xeb, 0xf8, 0xff, 0xd6, 0x82, 0xad, 0xb9, 0xdf, 0x1b, 0xb0, 0xb5, 0xf0, 0xa3, 0x91, 0xf5, 0xa5, 0xcf, 0xe2, 0x44, 0xbf, 0xb1, 0x34, 0xd1,
0x4f, 0x4c, 0x56, 0x97, 0x3e, 0xf3, 0xf3, 0xff, 0xd6, 0xc2, 0xfc, 0x9f, 0x7c, 0x0c, 0xc4, 0x26, 0x27, 0x1f, 0x03, 0xb1, 0x49, 0x02, 0x7b, 0x9c, 0xea, 0x59, 0x84, 0x3a, 0x56, 0xd9, 0xb5, 0x54,
0x09, 0xec, 0xc1, 0xa9, 0x67, 0x11, 0xea, 0x58, 0x65, 0xd7, 0x52, 0x9d, 0x9b, 0xd4, 0x52, 0xe4, 0xeb, 0x26, 0xb5, 0x14, 0xf9, 0x02, 0xfa, 0x22, 0x0b, 0x63, 0x96, 0x04, 0x49, 0x9c, 0x5e, 0x14,
0x0b, 0x18, 0x88, 0x2c, 0x8c, 0x59, 0x12, 0x24, 0x71, 0x7a, 0x51, 0x7e, 0xd7, 0x73, 0x6f, 0xee, 0xbf, 0xd4, 0xb9, 0xb7, 0xf0, 0x2b, 0x14, 0xa4, 0x78, 0xa9, 0x08, 0x68, 0x4f, 0x54, 0x00, 0xf9,
0x9b, 0x15, 0xa4, 0x78, 0xa9, 0x08, 0x68, 0x5f, 0xd4, 0x00, 0xf9, 0x03, 0xd8, 0xe6, 0xa9, 0x08, 0x23, 0xd8, 0xe6, 0xa9, 0x08, 0x8a, 0x7a, 0x3a, 0x88, 0xca, 0xdf, 0xe6, 0x34, 0x97, 0x87, 0xdc,
0xca, 0x7a, 0x3a, 0x88, 0xaa, 0x2f, 0x79, 0xda, 0x8b, 0xe3, 0xec, 0x85, 0x82, 0x9d, 0x12, 0x3e, 0x4b, 0x05, 0x3b, 0x25, 0x7c, 0x11, 0x25, 0x7c, 0x01, 0x40, 0xd9, 0x55, 0xd1, 0xd6, 0x5b, 0x45,
0x8f, 0x12, 0xbe, 0x00, 0xa0, 0xec, 0xaa, 0x6c, 0xeb, 0xad, 0xa2, 0xd7, 0x69, 0x16, 0xbd, 0x2f, 0xaf, 0x53, 0x2f, 0x7a, 0x5f, 0x40, 0xcf, 0xcc, 0x03, 0x4e, 0x8b, 0x09, 0xe4, 0xe0, 0xe9, 0xf7,
0xa0, 0x6f, 0xe6, 0x01, 0xa7, 0xe5, 0xac, 0x71, 0xf3, 0xe9, 0xf7, 0xea, 0x13, 0xf7, 0xea, 0xaf, 0xaa, 0x13, 0xf7, 0xaa, 0xdf, 0x75, 0xbd, 0x32, 0x3f, 0xeb, 0x32, 0x4c, 0x77, 0x71, 0x00, 0x62,
0xc0, 0x5e, 0x99, 0x8f, 0xc0, 0x0c, 0xd3, 0x5d, 0x1c, 0x80, 0xd8, 0xbb, 0xfd, 0x7f, 0x74, 0x60, 0xef, 0xf6, 0xff, 0xc9, 0x81, 0x81, 0x12, 0xd1, 0x3a, 0xf9, 0xf7, 0x70, 0x9a, 0x58, 0x8c, 0xf0,
0x53, 0x89, 0x68, 0x9d, 0xfc, 0x3b, 0x38, 0x37, 0x2c, 0x47, 0x78, 0x66, 0x46, 0xb4, 0x6d, 0xcd, 0xcc, 0x8c, 0x68, 0xdb, 0x9a, 0x1c, 0x97, 0x8b, 0xd4, 0x26, 0x24, 0x4f, 0x61, 0x5b, 0xcc, 0xde,
0x88, 0xab, 0x45, 0x6a, 0x13, 0x92, 0xa7, 0xb0, 0x2d, 0xa6, 0x6f, 0xca, 0xac, 0xf9, 0x5c, 0x64, 0x14, 0x59, 0xf3, 0xb9, 0xc8, 0xd2, 0x67, 0x73, 0xc9, 0x8b, 0x1a, 0x74, 0xe5, 0x1a, 0xf9, 0x18,
0xe9, 0xb3, 0x99, 0xe4, 0x65, 0x0d, 0xba, 0x74, 0x8d, 0x7c, 0x0c, 0xb7, 0xca, 0xc1, 0x7e, 0xbd, 0x6e, 0x15, 0xe3, 0xfe, 0x6a, 0x83, 0xfe, 0x47, 0xff, 0xf2, 0x82, 0xff, 0xf7, 0x4e, 0x59, 0x2b,
0x41, 0x7f, 0x16, 0xb0, 0xb8, 0xe0, 0xff, 0x9d, 0x53, 0xd5, 0x4a, 0x2a, 0x61, 0x63, 0x2f, 0x56, 0xa9, 0x84, 0x8d, 0xbd, 0x58, 0x69, 0x62, 0xea, 0x73, 0x65, 0xa6, 0xbc, 0x03, 0x6d, 0xf3, 0x4f,
0x99, 0x98, 0x7a, 0x5c, 0x9a, 0x29, 0xef, 0x40, 0xd7, 0xfc, 0x65, 0xa8, 0xb3, 0x80, 0x81, 0x6c, 0x40, 0x9d, 0x05, 0x0c, 0x64, 0x1b, 0x69, 0xab, 0x66, 0xa4, 0x0f, 0xc0, 0x35, 0x99, 0x97, 0x2b,
0x23, 0xed, 0x34, 0x8c, 0xf4, 0x01, 0xb8, 0x26, 0xf3, 0x72, 0x65, 0x16, 0x6d, 0x55, 0x0b, 0x57, 0xb3, 0x68, 0xaa, 0x5a, 0xb8, 0x44, 0xd4, 0x8a, 0x4a, 0x5d, 0x14, 0x95, 0xb0, 0xff, 0x53, 0x9d,
0x88, 0x46, 0x51, 0xa9, 0x8b, 0xa2, 0x0a, 0xf6, 0x7f, 0xaa, 0x33, 0x88, 0x65, 0x35, 0xe4, 0x07, 0x41, 0x2c, 0xab, 0x21, 0x3f, 0x58, 0x30, 0xb3, 0xa5, 0xe7, 0xac, 0x88, 0xeb, 0x16, 0x56, 0xc6,
0x73, 0x66, 0xb6, 0x70, 0x9d, 0x35, 0x71, 0xd3, 0xc2, 0xaa, 0xb8, 0xd0, 0xb2, 0x7b, 0x8d, 0xbf, 0x85, 0x86, 0xdd, 0x6b, 0xfc, 0xc2, 0x81, 0x87, 0x56, 0x4d, 0xb1, 0xbf, 0xfc, 0x7b, 0x8e, 0x6f,
0x76, 0xe0, 0xa1, 0x55, 0x53, 0xec, 0x2f, 0x7e, 0xfd, 0xf1, 0x2d, 0x23, 0xc5, 0x15, 0x5f, 0x93, 0x19, 0x29, 0xae, 0xf9, 0x7d, 0x48, 0x63, 0xed, 0xef, 0x43, 0xd6, 0xf5, 0x0c, 0xcf, 0x36, 0xff,
0xb4, 0x56, 0x7e, 0x4d, 0xb2, 0xaa, 0x67, 0x78, 0xb6, 0xf1, 0x47, 0xfd, 0xdd, 0x4f, 0x3e, 0x2f, 0xa4, 0xb7, 0xfb, 0xc9, 0xe7, 0xc5, 0x3d, 0xde, 0xb4, 0xf1, 0xeb, 0xd3, 0x5f, 0x07, 0x00, 0x00,
0xdf, 0xe3, 0x4d, 0x17, 0x9f, 0x3e, 0xfd, 0x55, 0x00, 0x00, 0x00, 0xff, 0xff, 0x67, 0x45, 0xcc, 0xff, 0xff, 0x00, 0xb0, 0x7b, 0x6a, 0x9b, 0x28, 0x00, 0x00,
0xc6, 0xc9, 0x28, 0x00, 0x00,
} }

View File

@ -122,11 +122,6 @@ message SyncInstallationAccount {
uint64 last_updated = 3; uint64 last_updated = 3;
} }
message SyncInstallationPublicChat {
uint64 clock = 1;
string id = 2;
}
message SyncInstallationCommunity { message SyncInstallationCommunity {
uint64 clock = 1; uint64 clock = 1;
bytes id = 2; bytes id = 2;
@ -174,6 +169,7 @@ message MembershipUpdateEvents {
string from = 7; string from = 7;
bytes raw_payload = 8; bytes raw_payload = 8;
string color = 9; string color = 9;
bytes image = 10;
} }
message SyncChatRemoved { message SyncChatRemoved {