From 345851c396faabf3d1737ba4a4bb70dd93ede567 Mon Sep 17 00:00:00 2001 From: Patryk Osmaczko Date: Thu, 21 Sep 2023 13:16:05 +0200 Subject: [PATCH] feat: ensure unique control node across devices closes: status-im/status-desktop#11962 --- protocol/communities/adaptors.go | 3 +- protocol/communities/community.go | 8 +- .../community_encryption_key_action_test.go | 1 + protocol/communities/community_test.go | 1 + protocol/communities/manager.go | 117 ++- protocol/communities/manager_test.go | 6 +- protocol/communities/persistence.go | 99 ++- protocol/communities/persistence_test.go | 10 +- .../communities_messenger_helpers_test.go | 33 +- .../communities_messenger_signers_test.go | 99 +-- protocol/communities_messenger_test.go | 126 ++- protocol/messenger.go | 9 +- protocol/messenger_backup.go | 7 +- protocol/messenger_communities.go | 56 +- protocol/migrations/migrations.go | 780 ++++++++---------- ...7699419_community_control_node_sync.up.sql | 18 + protocol/protobuf/pairing.pb.go | 524 ++++++------ protocol/protobuf/pairing.proto | 10 + services/communitytokens/database_test.go | 4 +- 19 files changed, 1044 insertions(+), 867 deletions(-) create mode 100644 protocol/migrations/sqlite/1697699419_community_control_node_sync.up.sql diff --git a/protocol/communities/adaptors.go b/protocol/communities/adaptors.go index bd1cb826e..8e7b0b45b 100644 --- a/protocol/communities/adaptors.go +++ b/protocol/communities/adaptors.go @@ -4,7 +4,7 @@ import ( "github.com/status-im/status-go/protocol/protobuf" ) -func (o *Community) ToSyncInstallationCommunityProtobuf(clock uint64, communitySettings *CommunitySettings) (*protobuf.SyncInstallationCommunity, error) { +func (o *Community) ToSyncInstallationCommunityProtobuf(clock uint64, communitySettings *CommunitySettings, syncControlNode *protobuf.SyncCommunityControlNode) (*protobuf.SyncInstallationCommunity, error) { wrappedCommunity, err := o.ToProtocolMessageBytes() if err != nil { return nil, err @@ -35,5 +35,6 @@ func (o *Community) ToSyncInstallationCommunityProtobuf(clock uint64, communityS Muted: o.Muted(), RequestsToJoin: rtjs, Settings: settings, + ControlNode: syncControlNode, }, nil } diff --git a/protocol/communities/community.go b/protocol/communities/community.go index f24aef4d2..94c8b0c7e 100644 --- a/protocol/communities/community.go +++ b/protocol/communities/community.go @@ -30,6 +30,7 @@ const signatureLength = 65 type Config struct { PrivateKey *ecdsa.PrivateKey ControlNode *ecdsa.PublicKey + ControlDevice bool // whether this device is control node CommunityDescription *protobuf.CommunityDescription CommunityDescriptionProtocolMessage []byte // community in a wrapped & signed (by owner) protocol message ID *ecdsa.PublicKey @@ -1086,11 +1087,11 @@ func (o *Community) ValidateEditSharedAddresses(signer *ecdsa.PublicKey, request // We treat control node as an owner with community key func (o *Community) IsControlNode() bool { - return o.config.PrivateKey != nil && o.config.PrivateKey.PublicKey.Equal(o.ControlNode()) + return o.config.PrivateKey != nil && o.config.PrivateKey.PublicKey.Equal(o.ControlNode()) && o.config.ControlDevice } -func (o *Community) IsOwnerWithoutCommunityKey() bool { - return o.config.PrivateKey == nil && o.IsMemberOwner(o.config.MemberIdentity) +func (o *Community) IsOwner() bool { + return o.IsMemberOwner(o.config.MemberIdentity) } func (o *Community) IsTokenMaster() bool { @@ -2077,6 +2078,7 @@ func (o *Community) CreateDeepCopy() *Community { config: &Config{ PrivateKey: o.config.PrivateKey, ControlNode: o.config.ControlNode, + ControlDevice: o.config.ControlDevice, CommunityDescription: proto.Clone(o.config.CommunityDescription).(*protobuf.CommunityDescription), CommunityDescriptionProtocolMessage: o.config.CommunityDescriptionProtocolMessage, ID: o.config.ID, diff --git a/protocol/communities/community_encryption_key_action_test.go b/protocol/communities/community_encryption_key_action_test.go index 443166756..6ee6b24c9 100644 --- a/protocol/communities/community_encryption_key_action_test.go +++ b/protocol/communities/community_encryption_key_action_test.go @@ -28,6 +28,7 @@ func createTestCommunity(identity *ecdsa.PrivateKey) (*Community, error) { }, ID: &identity.PublicKey, ControlNode: &identity.PublicKey, + ControlDevice: true, Joined: true, MemberIdentity: &identity.PublicKey, } diff --git a/protocol/communities/community_test.go b/protocol/communities/community_test.go index 270ad0b91..91b0ff731 100644 --- a/protocol/communities/community_test.go +++ b/protocol/communities/community_test.go @@ -838,6 +838,7 @@ func (s *CommunitySuite) newConfig(identity *ecdsa.PrivateKey, description *prot CommunityDescription: description, PrivateKey: identity, ControlNode: &identity.PublicKey, + ControlDevice: true, } } diff --git a/protocol/communities/manager.go b/protocol/communities/manager.go index 8129b0989..4adbcbda5 100644 --- a/protocol/communities/manager.go +++ b/protocol/communities/manager.go @@ -79,6 +79,7 @@ type Manager struct { ensVerifier *ens.Verifier ownerVerifier OwnerVerifier identity *ecdsa.PrivateKey + installationID string accountsManager account.Manager tokenManager TokenManager collectiblesManager CollectiblesManager @@ -211,7 +212,7 @@ type OwnerVerifier interface { SafeGetSignerPubKey(ctx context.Context, chainID uint64, communityID string) (string, error) } -func NewManager(identity *ecdsa.PrivateKey, db *sql.DB, encryptor *encryption.Protocol, logger *zap.Logger, ensverifier *ens.Verifier, ownerVerifier OwnerVerifier, transport *transport.Transport, timesource common.TimeSource, torrentConfig *params.TorrentConfig, opts ...ManagerOption) (*Manager, error) { +func NewManager(identity *ecdsa.PrivateKey, installationID string, db *sql.DB, encryptor *encryption.Protocol, logger *zap.Logger, ensverifier *ens.Verifier, ownerVerifier OwnerVerifier, transport *transport.Transport, timesource common.TimeSource, torrentConfig *params.TorrentConfig, opts ...ManagerOption) (*Manager, error) { if identity == nil { return nil, errors.New("empty identity") } @@ -242,6 +243,7 @@ func NewManager(identity *ecdsa.PrivateKey, db *sql.DB, encryptor *encryption.Pr stdoutLogger: stdoutLogger, encryptor: encryptor, identity: identity, + installationID: installationID, ownerVerifier: ownerVerifier, quit: make(chan struct{}), transport: transport, @@ -596,7 +598,7 @@ func (m *Manager) publish(subscription *Subscription) { } func (m *Manager) All() ([]*Community, error) { - communities, err := m.persistence.AllCommunities(&m.identity.PublicKey) + communities, err := m.persistence.AllCommunities(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -658,7 +660,7 @@ func (m *Manager) GetStoredDescriptionForCommunities(communityIDs []types.HexByt } func (m *Manager) Joined() ([]*Community, error) { - communities, err := m.persistence.JoinedCommunities(&m.identity.PublicKey) + communities, err := m.persistence.JoinedCommunities(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -674,7 +676,7 @@ func (m *Manager) Joined() ([]*Community, error) { } func (m *Manager) Spectated() ([]*Community, error) { - communities, err := m.persistence.SpectatedCommunities(&m.identity.PublicKey) + communities, err := m.persistence.SpectatedCommunities(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -690,7 +692,7 @@ func (m *Manager) Spectated() ([]*Community, error) { } func (m *Manager) JoinedAndPendingCommunitiesWithRequests() ([]*Community, error) { - communities, err := m.persistence.JoinedAndPendingCommunitiesWithRequests(&m.identity.PublicKey) + communities, err := m.persistence.JoinedAndPendingCommunitiesWithRequests(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -706,7 +708,7 @@ func (m *Manager) JoinedAndPendingCommunitiesWithRequests() ([]*Community, error } func (m *Manager) DeletedCommunities() ([]*Community, error) { - communities, err := m.persistence.DeletedCommunities(&m.identity.PublicKey) + communities, err := m.persistence.DeletedCommunities(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -722,7 +724,7 @@ func (m *Manager) DeletedCommunities() ([]*Community, error) { } func (m *Manager) ControlledCommunities() ([]*Community, error) { - communities, err := m.persistence.CommunitiesWithPrivateKey(&m.identity.PublicKey) + communities, err := m.persistence.CommunitiesWithPrivateKey(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -738,7 +740,7 @@ func (m *Manager) ControlledCommunities() ([]*Community, error) { } func (m *Manager) Owned() ([]*Community, error) { - communities, err := m.persistence.CommunitiesWithPrivateKey(&m.identity.PublicKey) + communities, err := m.persistence.CommunitiesWithPrivateKey(&m.identity.PublicKey, m.installationID) if err != nil { return nil, err } @@ -783,6 +785,7 @@ func (m *Manager) CreateCommunity(request *requests.CreateCommunity, publish boo ID: &key.PublicKey, PrivateKey: key, ControlNode: &key.PublicKey, + ControlDevice: true, Logger: m.logger, Joined: true, MemberIdentity: &m.identity.PublicKey, @@ -802,6 +805,16 @@ func (m *Manager) CreateCommunity(request *requests.CreateCommunity, publish boo return nil, err } + // Mark this device as the control node + syncControlNode := &protobuf.SyncCommunityControlNode{ + Clock: 1, + InstallationId: m.installationID, + } + err = m.SaveSyncControlNode(community.ID(), syncControlNode) + if err != nil { + return nil, err + } + if publish { m.publish(&Subscription{Community: community}) } @@ -1192,7 +1205,7 @@ func (m *Manager) ExportCommunity(id types.HexBytes) (*ecdsa.PrivateKey, error) return community.config.PrivateKey, nil } -func (m *Manager) ImportCommunity(key *ecdsa.PrivateKey) (*Community, error) { +func (m *Manager) ImportCommunity(key *ecdsa.PrivateKey, clock uint64) (*Community, error) { communityID := crypto.CompressPubkey(&key.PublicKey) community, err := m.GetByID(communityID) @@ -1201,14 +1214,29 @@ func (m *Manager) ImportCommunity(key *ecdsa.PrivateKey) (*Community, error) { } if community == nil { - description := &protobuf.CommunityDescription{ - Permissions: &protobuf.CommunityPermissions{}, + createCommunityRequest := requests.CreateCommunity{ + Membership: protobuf.CommunityPermissions_ON_REQUEST, + Name: "unknown imported", } + description, err := createCommunityRequest.ToCommunityDescription() + if err != nil { + return nil, err + } + + err = ValidateCommunityDescription(description) + if err != nil { + return nil, err + } + + description.Clock = 1 + description.ID = types.EncodeHex(communityID) + config := Config{ ID: &key.PublicKey, PrivateKey: key, ControlNode: &key.PublicKey, + ControlDevice: true, Logger: m.logger, Joined: true, MemberIdentity: &m.identity.PublicKey, @@ -1221,6 +1249,7 @@ func (m *Manager) ImportCommunity(key *ecdsa.PrivateKey) (*Community, error) { } else { community.config.PrivateKey = key + community.config.ControlDevice = true } community.Join() @@ -1229,6 +1258,16 @@ func (m *Manager) ImportCommunity(key *ecdsa.PrivateKey) (*Community, error) { return nil, err } + // Mark this device as the control node + syncControlNode := &protobuf.SyncCommunityControlNode{ + Clock: clock, + InstallationId: m.installationID, + } + err = m.SaveSyncControlNode(community.ID(), syncControlNode) + if err != nil { + return nil, err + } + return community, nil } @@ -2352,7 +2391,7 @@ func (m *Manager) HandleCommunityCancelRequestToJoin(signer *ecdsa.PublicKey, re } func (m *Manager) HandleCommunityRequestToJoin(signer *ecdsa.PublicKey, receiver *ecdsa.PublicKey, request *protobuf.CommunityRequestToJoin) (*Community, *RequestToJoin, error) { - community, err := m.persistence.GetByID(&m.identity.PublicKey, request.CommunityId) + community, err := m.GetByID(request.CommunityId) if err != nil { return nil, nil, err } @@ -3394,7 +3433,7 @@ func initializeCommunity(community *Community) error { } func (m *Manager) GetByID(id []byte) (*Community, error) { - community, err := m.persistence.GetByID(&m.identity.PublicKey, id) + community, err := m.persistence.GetByID(&m.identity.PublicKey, m.installationID, id) if err != nil { return nil, err } @@ -4640,7 +4679,7 @@ func (m *Manager) SaveCommunityToken(token *community_token.CommunityToken, crop return token, m.persistence.AddCommunityToken(token) } -func (m *Manager) AddCommunityToken(token *community_token.CommunityToken) (*Community, error) { +func (m *Manager) AddCommunityToken(token *community_token.CommunityToken, clock uint64) (*Community, error) { if token == nil { return nil, errors.New("Token is absent in database") } @@ -4703,7 +4742,10 @@ func (m *Manager) AddCommunityToken(token *community_token.CommunityToken) (*Com } if token.PrivilegesLevel == community_token.OwnerLevel { - m.promoteSelfToControlNode(community) + err = m.promoteSelfToControlNode(community, clock) + if err != nil { + return nil, err + } } } @@ -5026,7 +5068,7 @@ func (m *Manager) createCommunityTokenPermission(request *requests.CreateCommuni } -func (m *Manager) PromoteSelfToControlNode(communityID types.HexBytes) (*Community, error) { +func (m *Manager) PromoteSelfToControlNode(communityID types.HexBytes, clock uint64) (*Community, error) { community, err := m.GetByID(communityID) if err != nil { return nil, err @@ -5036,16 +5078,34 @@ func (m *Manager) PromoteSelfToControlNode(communityID types.HexBytes) (*Communi return nil, ErrOrgNotFound } - m.promoteSelfToControlNode(community) + err = m.promoteSelfToControlNode(community, clock) + if err != nil { + return nil, err + } return community, m.saveAndPublish(community) } -func (m *Manager) promoteSelfToControlNode(community *Community) { +func (m *Manager) promoteSelfToControlNode(community *Community, clock uint64) error { community.setPrivateKey(m.identity) if !community.ControlNode().Equal(&m.identity.PublicKey) { community.setControlNode(&m.identity.PublicKey) } + + // Mark this device as the control node + syncControlNode := &protobuf.SyncCommunityControlNode{ + Clock: clock, + InstallationId: m.installationID, + } + err := m.SaveSyncControlNode(community.ID(), syncControlNode) + if err != nil { + return err + } + community.config.ControlDevice = true + + community.increaseClock() + + return nil } func (m *Manager) shareRequestsToJoinWithNewPrivilegedMembers(community *Community, newPrivilegedMembers map[protobuf.CommunityMember_Roles][]*ecdsa.PublicKey) error { @@ -5183,3 +5243,24 @@ func (m *Manager) CreateCommunityTokenDeploymentSignature(ctx context.Context, c } return crypto.Sign(digest, community.PrivateKey()) } + +func (m *Manager) GetSyncControlNode(id types.HexBytes) (*protobuf.SyncCommunityControlNode, error) { + return m.persistence.GetSyncControlNode(id) +} + +func (m *Manager) SaveSyncControlNode(id types.HexBytes, syncControlNode *protobuf.SyncCommunityControlNode) error { + return m.persistence.SaveSyncControlNode(id, syncControlNode.Clock, syncControlNode.InstallationId) +} + +func (m *Manager) SetSyncControlNode(id types.HexBytes, syncControlNode *protobuf.SyncCommunityControlNode) error { + existingSyncControlNode, err := m.GetSyncControlNode(id) + if err != nil { + return err + } + + if existingSyncControlNode == nil || existingSyncControlNode.Clock < syncControlNode.Clock { + return m.SaveSyncControlNode(id, syncControlNode) + } + + return nil +} diff --git a/protocol/communities/manager_test.go b/protocol/communities/manager_test.go index fc6d0bc12..fa18fc869 100644 --- a/protocol/communities/manager_test.go +++ b/protocol/communities/manager_test.go @@ -55,7 +55,7 @@ func (s *ManagerSuite) buildManager(ownerVerifier OwnerVerifier) *Manager { key, err := crypto.GenerateKey() s.Require().NoError(err) s.Require().NoError(err) - m, err := NewManager(key, db, nil, nil, nil, ownerVerifier, nil, &TimeSourceStub{}, nil) + m, err := NewManager(key, "", db, nil, nil, nil, ownerVerifier, nil, &TimeSourceStub{}, nil) s.Require().NoError(err) s.Require().NoError(m.Start()) return m @@ -169,7 +169,7 @@ func (s *ManagerSuite) setupManagerForTokenPermissions() (*Manager, *testCollect WithTokenManager(tm), } - m, err := NewManager(key, db, nil, nil, nil, nil, nil, &TimeSourceStub{}, nil, options...) + m, err := NewManager(key, "", db, nil, nil, nil, nil, nil, &TimeSourceStub{}, nil, options...) s.Require().NoError(err) s.Require().NoError(m.Start()) @@ -279,7 +279,6 @@ func (s *ManagerSuite) TestRetrieveCollectibles() { } func (s *ManagerSuite) TestCreateCommunity() { - request := &requests.CreateCommunity{ Name: "status", Description: "token membership description", @@ -302,6 +301,7 @@ func (s *ManagerSuite) TestCreateCommunity() { s.Require().Equal(community.ID(), actualCommunity.ID()) s.Require().Equal(community.PrivateKey(), actualCommunity.PrivateKey()) + s.Require().True(community.IsControlNode()) s.Require().True(proto.Equal(community.config.CommunityDescription, actualCommunity.config.CommunityDescription)) } diff --git a/protocol/communities/persistence.go b/protocol/communities/persistence.go index c9d81716c..a657c1c74 100644 --- a/protocol/communities/persistence.go +++ b/protocol/communities/persistence.go @@ -33,10 +33,11 @@ var ErrOldRequestToLeave = errors.New("old request to leave") const OR = " OR " const communitiesBaseQuery = ` - SELECT c.id, c.private_key, c.control_node, c.description, c.joined, c.spectated, c.verified, c.muted, c.muted_till, r.clock, ae.raw_events, ae.raw_description, c.shard_cluster, c.shard_index + SELECT c.id, c.private_key, c.control_node, c.description, c.joined, c.spectated, c.verified, c.muted, c.muted_till, r.clock, ae.raw_events, ae.raw_description, c.shard_cluster, c.shard_index, ccn.installation_id FROM communities_communities c LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ? - LEFT JOIN communities_events ae ON c.id = ae.id` + LEFT JOIN communities_events ae ON c.id = ae.id + LEFT JOIN communities_control_node ccn ON c.id = ccn.community_id` func (p *Persistence) SaveCommunity(community *Community) error { id := community.ID() @@ -127,8 +128,7 @@ func (p *Persistence) ShouldHandleSyncCommunity(community *protobuf.SyncInstalla } } -func (p *Persistence) queryCommunities(memberIdentity *ecdsa.PublicKey, query string) (response []*Community, err error) { - +func (p *Persistence) queryCommunities(memberIdentity *ecdsa.PublicKey, installationID string, query string) (response []*Community, err error) { rows, err := p.db.Query(query, common.PubkeyToHex(memberIdentity)) if err != nil { return nil, err @@ -149,10 +149,11 @@ func (p *Persistence) queryCommunities(memberIdentity *ecdsa.PublicKey, query st var joined, spectated, verified, muted bool var muteTill sql.NullTime var cluster, index, requestedToJoinAt sql.NullInt64 + var installationIDStr sql.NullString // Community events specific fields var eventsBytes, eventsDescriptionBytes []byte - err := rows.Scan(&publicKeyBytes, &privateKeyBytes, &controlNodeBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &muteTill, &requestedToJoinAt, &eventsBytes, &eventsDescriptionBytes, &cluster, &index) + err := rows.Scan(&publicKeyBytes, &privateKeyBytes, &controlNodeBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &muteTill, &requestedToJoinAt, &eventsBytes, &eventsDescriptionBytes, &cluster, &index, &installationIDStr) if err != nil { return nil, err } @@ -169,7 +170,9 @@ func (p *Persistence) queryCommunities(memberIdentity *ecdsa.PublicKey, query st indexValue = &v } - org, err := p.unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes, joined, spectated, verified, muted, muteTill.Time, uint64(requestedToJoinAt.Int64), eventsBytes, eventsDescriptionBytes, clusterValue, indexValue, p.logger) + isControlDevice := installationIDStr.Valid && installationIDStr.String == installationID + + org, err := p.unmarshalCommunityFromDB(memberIdentity, isControlDevice, publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes, joined, spectated, verified, muted, muteTill.Time, uint64(requestedToJoinAt.Int64), eventsBytes, eventsDescriptionBytes, clusterValue, indexValue, p.logger) if err != nil { return nil, err } @@ -180,21 +183,21 @@ func (p *Persistence) queryCommunities(memberIdentity *ecdsa.PublicKey, query st } -func (p *Persistence) AllCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error) { - return p.queryCommunities(memberIdentity, communitiesBaseQuery) +func (p *Persistence) AllCommunities(memberIdentity *ecdsa.PublicKey, installationID string) ([]*Community, error) { + return p.queryCommunities(memberIdentity, installationID, communitiesBaseQuery) } -func (p *Persistence) JoinedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error) { +func (p *Persistence) JoinedCommunities(memberIdentity *ecdsa.PublicKey, installationID string) ([]*Community, error) { query := communitiesBaseQuery + ` WHERE c.joined` - return p.queryCommunities(memberIdentity, query) + return p.queryCommunities(memberIdentity, installationID, query) } -func (p *Persistence) SpectatedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error) { +func (p *Persistence) SpectatedCommunities(memberIdentity *ecdsa.PublicKey, installationID string) ([]*Community, error) { query := communitiesBaseQuery + ` WHERE c.spectated` - return p.queryCommunities(memberIdentity, query) + return p.queryCommunities(memberIdentity, installationID, query) } -func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *sql.Rows) (comms []*Community, err error) { +func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, installationID string, rows *sql.Rows) (comms []*Community, err error) { defer func() { if err != nil { // Don't shadow original error @@ -213,6 +216,7 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s var joined, spectated, verified, muted bool var muteTill sql.NullTime var cluster, index sql.NullInt64 + var installationIDStr sql.NullString // Request to join specific fields var rtjID, rtjCommunityID []byte @@ -224,7 +228,7 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s err = rows.Scan( &publicKeyBytes, &privateKeyBytes, &controlNodeBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &muteTill, - &rtjID, &rtjPublicKey, &rtjClock, &rtjENSName, &rtjChatID, &rtjCommunityID, &rtjState, &eventsBytes, &eventsDescriptionBytes, &cluster, &index) + &rtjID, &rtjPublicKey, &rtjClock, &rtjENSName, &rtjChatID, &rtjCommunityID, &rtjState, &eventsBytes, &eventsDescriptionBytes, &cluster, &index, &installationIDStr) if err != nil { return nil, err } @@ -241,7 +245,9 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s indexValue = &v } - comm, err = p.unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes, joined, spectated, verified, muted, muteTill.Time, uint64(rtjClock.Int64), eventsBytes, eventsDescriptionBytes, clusterValue, indexValue, p.logger) + isControlDevice := installationIDStr.Valid && installationIDStr.String == installationID + + comm, err = p.unmarshalCommunityFromDB(memberIdentity, isControlDevice, publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes, joined, spectated, verified, muted, muteTill.Time, uint64(rtjClock.Int64), eventsBytes, eventsDescriptionBytes, clusterValue, indexValue, p.logger) if err != nil { return nil, err } @@ -256,13 +262,14 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s return comms, nil } -func (p *Persistence) JoinedAndPendingCommunitiesWithRequests(memberIdentity *ecdsa.PublicKey) (comms []*Community, err error) { +func (p *Persistence) JoinedAndPendingCommunitiesWithRequests(memberIdentity *ecdsa.PublicKey, installationID string) (comms []*Community, err error) { query := `SELECT c.id, c.private_key, c.control_node, c.description, c.joined, c.spectated, c.verified, c.muted, c.muted_till, -r.id, r.public_key, r.clock, r.ens_name, r.chat_id, r.community_id, r.state, ae.raw_events, ae.raw_description, c.shard_cluster, c.shard_index +r.id, r.public_key, r.clock, r.ens_name, r.chat_id, r.community_id, r.state, ae.raw_events, ae.raw_description, c.shard_cluster, c.shard_index, ccn.installation_id FROM communities_communities c LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ? LEFT JOIN communities_events ae ON c.id = ae.id +LEFT JOIN communities_control_node ccn ON c.id = ccn.community_id WHERE c.Joined OR r.state = ?` rows, err := p.db.Query(query, common.PubkeyToHex(memberIdentity), RequestToJoinStatePending) @@ -270,16 +277,17 @@ WHERE c.Joined OR r.state = ?` return nil, err } - return p.rowsToCommunities(memberIdentity, rows) + return p.rowsToCommunities(memberIdentity, installationID, rows) } -func (p *Persistence) DeletedCommunities(memberIdentity *ecdsa.PublicKey) (comms []*Community, err error) { +func (p *Persistence) DeletedCommunities(memberIdentity *ecdsa.PublicKey, installationID string) (comms []*Community, err error) { query := `SELECT c.id, c.private_key, c.control_node, c.description, c.joined, c.spectated, c.verified, c.muted, c.muted_till, -r.id, r.public_key, r.clock, r.ens_name, r.chat_id, r.community_id, r.state, ae.raw_events, ae.raw_description, c.shard_cluster, c.shard_index +r.id, r.public_key, r.clock, r.ens_name, r.chat_id, r.community_id, r.state, ae.raw_events, ae.raw_description, c.shard_cluster, c.shard_index, ccn.installation_id FROM communities_communities c LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ? LEFT JOIN communities_events ae ON c.id = ae.id +LEFT JOIN communities_control_node ccn ON c.id = ccn.community_id WHERE NOT c.Joined AND (r.community_id IS NULL or r.state != ?)` rows, err := p.db.Query(query, common.PubkeyToHex(memberIdentity), RequestToJoinStatePending) @@ -287,15 +295,15 @@ WHERE NOT c.Joined AND (r.community_id IS NULL or r.state != ?)` return nil, err } - return p.rowsToCommunities(memberIdentity, rows) + return p.rowsToCommunities(memberIdentity, installationID, rows) } -func (p *Persistence) CommunitiesWithPrivateKey(memberIdentity *ecdsa.PublicKey) ([]*Community, error) { +func (p *Persistence) CommunitiesWithPrivateKey(memberIdentity *ecdsa.PublicKey, installationID string) ([]*Community, error) { query := communitiesBaseQuery + ` WHERE c.private_key IS NOT NULL` - return p.queryCommunities(memberIdentity, query) + return p.queryCommunities(memberIdentity, installationID, query) } -func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, id []byte) (*Community, error) { +func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, installationID string, id []byte) (*Community, error) { var publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes []byte var joined bool var spectated bool @@ -303,11 +311,12 @@ func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, id []byte) (*Comm var muted bool var muteTill sql.NullTime var requestedToJoinAt, cluster, index sql.NullInt64 + var installationIDStr sql.NullString // Community events specific fields var eventsBytes, eventsDescriptionBytes []byte - err := p.db.QueryRow(communitiesBaseQuery+` WHERE c.id = ?`, common.PubkeyToHex(memberIdentity), id).Scan(&publicKeyBytes, &privateKeyBytes, &controlNodeBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &muteTill, &requestedToJoinAt, &eventsBytes, &eventsDescriptionBytes, &cluster, &index) + err := p.db.QueryRow(communitiesBaseQuery+` WHERE c.id = ?`, common.PubkeyToHex(memberIdentity), id).Scan(&publicKeyBytes, &privateKeyBytes, &controlNodeBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &muteTill, &requestedToJoinAt, &eventsBytes, &eventsDescriptionBytes, &cluster, &index, &installationIDStr) if err == sql.ErrNoRows { return nil, nil } else if err != nil { @@ -326,10 +335,12 @@ func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, id []byte) (*Comm indexValue = &v } - return p.unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes, joined, spectated, verified, muted, muteTill.Time, uint64(requestedToJoinAt.Int64), eventsBytes, eventsDescriptionBytes, clusterValue, indexValue, p.logger) + isControlDevice := installationIDStr.Valid && installationIDStr.String == installationID + + return p.unmarshalCommunityFromDB(memberIdentity, isControlDevice, publicKeyBytes, privateKeyBytes, controlNodeBytes, descriptionBytes, joined, spectated, verified, muted, muteTill.Time, uint64(requestedToJoinAt.Int64), eventsBytes, eventsDescriptionBytes, clusterValue, indexValue, p.logger) } -func (p *Persistence) unmarshalCommunityFromDB(memberIdentity *ecdsa.PublicKey, publicKeyBytes, privateKeyBytes, controlNodeBytes, wrappedCommunity []byte, joined, +func (p *Persistence) unmarshalCommunityFromDB(memberIdentity *ecdsa.PublicKey, isControlDevice bool, publicKeyBytes, privateKeyBytes, controlNodeBytes, wrappedCommunity []byte, joined, spectated, verified, muted bool, muteTill time.Time, requestedToJoinAt uint64, eventsBytes []byte, eventsDescriptionBytes []byte, cluster *uint, index *uint, logger *zap.Logger) (*Community, error) { @@ -377,6 +388,7 @@ func (p *Persistence) unmarshalCommunityFromDB(memberIdentity *ecdsa.PublicKey, config := Config{ PrivateKey: privateKey, ControlNode: controlNode, + ControlDevice: isControlDevice, CommunityDescription: description, MemberIdentity: memberIdentity, CommunityDescriptionProtocolMessage: wrappedCommunity, @@ -1515,3 +1527,36 @@ func (p *Persistence) DeleteCommunitiesToValidateByCommunityID(communityID []byt _, err := p.db.Exec(`DELETE FROM communities_validate_signer WHERE id = ?`, communityID) return err } + +func (p *Persistence) GetSyncControlNode(communityID types.HexBytes) (*protobuf.SyncCommunityControlNode, error) { + result := &protobuf.SyncCommunityControlNode{} + + err := p.db.QueryRow(` + SELECT clock, installation_id + FROM communities_control_node + WHERE community_id = ? + `, communityID).Scan(&result.Clock, &result.InstallationId) + + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + return nil, err + } + + return result, nil +} + +func (p *Persistence) SaveSyncControlNode(communityID types.HexBytes, clock uint64, installationID string) error { + _, err := p.db.Exec( + `INSERT INTO communities_control_node ( + community_id, + clock, + installation_id + ) VALUES (?, ?, ?)`, + communityID, + clock, + installationID, + ) + return err +} diff --git a/protocol/communities/persistence_test.go b/protocol/communities/persistence_test.go index 8d19c41c9..6ef38f4bd 100644 --- a/protocol/communities/persistence_test.go +++ b/protocol/communities/persistence_test.go @@ -47,7 +47,7 @@ func (s *PersistenceSuite) TestSaveCommunity() { s.Require().NoError(err) // there is one community inserted by default - communities, err := s.db.AllCommunities(&id.PublicKey) + communities, err := s.db.AllCommunities(&id.PublicKey, "") s.Require().NoError(err) s.Require().Len(communities, 1) @@ -55,6 +55,7 @@ func (s *PersistenceSuite) TestSaveCommunity() { config: &Config{ PrivateKey: id, ControlNode: &id.PublicKey, + ControlDevice: true, ID: &id.PublicKey, Joined: true, Spectated: true, @@ -66,7 +67,7 @@ func (s *PersistenceSuite) TestSaveCommunity() { } s.Require().NoError(s.db.SaveCommunity(&community)) - communities, err = s.db.AllCommunities(&id.PublicKey) + communities, err = s.db.AllCommunities(&id.PublicKey, "") s.Require().NoError(err) s.Require().Len(communities, 2) s.Equal(types.HexBytes(crypto.CompressPubkey(&id.PublicKey)), communities[1].ID()) @@ -199,7 +200,7 @@ func (s *PersistenceSuite) TestJoinedAndPendingCommunitiesWithRequests() { // Add a new community that we have joined com := s.makeNewCommunity(identity) com.Join() - sc, err := com.ToSyncInstallationCommunityProtobuf(clock, nil) + sc, err := com.ToSyncInstallationCommunityProtobuf(clock, nil, nil) s.Require().NoError(err, "Community.ToSyncInstallationCommunityProtobuf shouldn't give any error") err = s.db.saveRawCommunityRow(fromSyncCommunityProtobuf(sc)) s.Require().NoError(err, "saveRawCommunityRow") @@ -219,7 +220,7 @@ func (s *PersistenceSuite) TestJoinedAndPendingCommunitiesWithRequests() { err = s.db.SaveRequestToJoin(rtj) s.Require().NoError(err, "SaveRequestToJoin shouldn't give any error") - comms, err := s.db.JoinedAndPendingCommunitiesWithRequests(&identity.PublicKey) + comms, err := s.db.JoinedAndPendingCommunitiesWithRequests(&identity.PublicKey, "") s.Require().NoError(err, "JoinedAndPendingCommunitiesWithRequests shouldn't give any error") s.Len(comms, 2, "Should have 2 communities") @@ -260,6 +261,7 @@ func (s *PersistenceSuite) makeNewCommunity(identity *ecdsa.PrivateKey) *Communi MemberIdentity: &identity.PublicKey, PrivateKey: comPrivKey, ControlNode: &comPrivKey.PublicKey, + ControlDevice: true, ID: &comPrivKey.PublicKey, }, &TimeSourceStub{}) s.NoError(err, "New shouldn't give any error") diff --git a/protocol/communities_messenger_helpers_test.go b/protocol/communities_messenger_helpers_test.go index cd24a30d1..0394159f6 100644 --- a/protocol/communities_messenger_helpers_test.go +++ b/protocol/communities_messenger_helpers_test.go @@ -434,36 +434,15 @@ func joinCommunity(s *suite.Suite, community *communities.Community, owner *Mess s.Require().Equal(notification.MembershipStatus, ActivityCenterMembershipStatusPending) // Retrieve and accept join request - err = tt.RetryWithBackOff(func() error { - response, err := owner.RetrieveAll() - if err != nil { - return err - } - if len(response.Communities()) == 0 { - return errors.New("no communities in response (accept join request)") - } - if !response.Communities()[0].HasMember(&user.identity.PublicKey) { - return errors.New("user not accepted") - } - return nil - }) + _, err = WaitOnMessengerResponse(owner, func(r *MessengerResponse) bool { + return len(r.Communities()) > 0 && r.Communities()[0].HasMember(&user.identity.PublicKey) + }, "user not accepted") s.Require().NoError(err) // Retrieve join request response - err = tt.RetryWithBackOff(func() error { - response, err := user.RetrieveAll() - - if err != nil { - return err - } - if len(response.Communities()) == 0 { - return errors.New("no communities in response (join request response)") - } - if !response.Communities()[0].HasMember(&user.identity.PublicKey) { - return errors.New("user not a member") - } - return nil - }) + _, err = WaitOnMessengerResponse(user, func(r *MessengerResponse) bool { + return len(r.Communities()) > 0 && r.Communities()[0].HasMember(&user.identity.PublicKey) + }, "user not accepted") s.Require().NoError(err) } diff --git a/protocol/communities_messenger_signers_test.go b/protocol/communities_messenger_signers_test.go index 30781cb71..ffb15c532 100644 --- a/protocol/communities_messenger_signers_test.go +++ b/protocol/communities_messenger_signers_test.go @@ -1,7 +1,6 @@ package protocol import ( - "context" "crypto/ecdsa" "testing" "time" @@ -20,7 +19,6 @@ import ( "github.com/status-im/status-go/protocol/tt" "github.com/status-im/status-go/services/communitytokens" "github.com/status-im/status-go/services/wallet/bigint" - "github.com/status-im/status-go/transactions" "github.com/status-im/status-go/waku" ) @@ -105,7 +103,6 @@ func (s *MessengerCommunitiesSignersSuite) joinCommunity(controlNode *Messenger, // Both John and Bob accepts the changes func (s *MessengerCommunitiesSignersSuite) TestControlNodeUpdateSigner() { - // Create a community // Transfer ownership // Process message @@ -117,60 +114,12 @@ func (s *MessengerCommunitiesSignersSuite) TestControlNodeUpdateSigner() { s.joinCommunity(s.john, community, s.bob) s.joinCommunity(s.john, community, s.alice) - // john as control node publishes community update - johnDescr := "john's description" - response, err := s.john.EditCommunity(&requests.EditCommunity{ - CommunityID: community.ID(), - CreateCommunity: requests.CreateCommunity{ - Name: community.Name(), - Description: johnDescr, - Color: community.Color(), - Membership: protobuf.CommunityPermissions_NO_MEMBERSHIP, - }, - }) - s.Require().NoError(err) - s.Require().Equal(johnDescr, response.Communities()[0].Description().Identity.Description) - - // bob accepts community update - _, err = WaitOnMessengerResponse( - s.bob, - func(r *MessengerResponse) bool { - return len(r.Communities()) > 0 && r.Communities()[0].Description().Identity.Description == johnDescr - }, - "no communities", - ) - s.Require().NoError(err) - - // alice accepts community update - _, err = WaitOnMessengerResponse( - s.alice, - func(r *MessengerResponse) bool { - return len(r.Communities()) > 0 && r.Communities()[0].Description().Identity.Description == johnDescr - }, - "no communities", - ) - s.Require().NoError(err) - - // Alice will be transferred the ownership token, and alice will let others know - + // john mints owner token var chainID uint64 = 1 - communityAddress := "community-address" tokenAddress := "token-address" tokenName := "tokenName" tokenSymbol := "TSM" - - // Update mock - // The signer for the community returned by the contracts should be alice - s.collectiblesServiceMock.SetSignerPubkeyForCommunity(community.ID(), common.PubkeyToHex(&s.alice.identity.PublicKey)) - s.collectiblesServiceMock.SetMockCollectibleContractData(chainID, tokenAddress, - &communitytokens.CollectibleContractData{TotalSupply: &bigint.BigInt{}}) - - community, err = s.alice.communitiesManager.PromoteSelfToControlNode(community.ID()) - s.Require().NoError(err) - s.Require().True(community.IsControlNode()) - - // Create community token - _, err = s.alice.SaveCommunityToken(&token.CommunityToken{ + _, err := s.john.SaveCommunityToken(&token.CommunityToken{ TokenType: protobuf.CommunityTokenType_ERC721, CommunityID: community.IDString(), Address: tokenAddress, @@ -182,15 +131,46 @@ func (s *MessengerCommunitiesSignersSuite) TestControlNodeUpdateSigner() { }, nil) s.Require().NoError(err) - err = s.alice.AddCommunityToken(community.IDString(), int(chainID), tokenAddress) + // john adds minted owner token to community + err = s.john.AddCommunityToken(community.IDString(), int(chainID), tokenAddress) s.Require().NoError(err) - // make alice the control node - transaction := transactions.SendTxArgs{} - _, err = s.alice.SetCommunitySignerPubKey(context.Background(), community.ID(), chainID, communityAddress, transaction, "password", common.PubkeyToHex(&s.alice.identity.PublicKey)) + // update mock - the signer for the community returned by the contracts should be john + s.collectiblesServiceMock.SetSignerPubkeyForCommunity(community.ID(), common.PubkeyToHex(&s.john.identity.PublicKey)) + s.collectiblesServiceMock.SetMockCollectibleContractData(chainID, tokenAddress, + &communitytokens.CollectibleContractData{TotalSupply: &bigint.BigInt{}}) + + // bob accepts community update + _, err = WaitOnSignaledMessengerResponse( + s.bob, + func(r *MessengerResponse) bool { + return len(r.Communities()) > 0 && len(r.Communities()[0].CommunityTokensMetadata()) == 1 + }, + "no communities", + ) s.Require().NoError(err) - // john accepts community update + // alice accepts community update + _, err = WaitOnSignaledMessengerResponse( + s.alice, + func(r *MessengerResponse) bool { + return len(r.Communities()) > 0 && len(r.Communities()[0].CommunityTokensMetadata()) == 1 + }, + "no communities", + ) + s.Require().NoError(err) + + // Alice will be transferred the ownership token, and alice will let others know + // update mock - the signer for the community returned by the contracts should be alice + s.collectiblesServiceMock.SetSignerPubkeyForCommunity(community.ID(), common.PubkeyToHex(&s.alice.identity.PublicKey)) + s.collectiblesServiceMock.SetMockCollectibleContractData(chainID, tokenAddress, + &communitytokens.CollectibleContractData{TotalSupply: &bigint.BigInt{}}) + + community, err = s.alice.PromoteSelfToControlNode(community.ID()) + s.Require().NoError(err) + s.Require().True(community.IsControlNode()) + + // john accepts community update from alice (new control node) _, err = WaitOnSignaledMessengerResponse( s.john, func(r *MessengerResponse) bool { @@ -207,12 +187,11 @@ func (s *MessengerCommunitiesSignersSuite) TestControlNodeUpdateSigner() { s.Require().True(common.IsPubKeyEqual(johnCommunity.ControlNode(), &s.alice.identity.PublicKey)) s.Require().False(johnCommunity.IsControlNode()) - // We check the control node is correctly set on bob + // bob accepts community update from alice (new control node) _, err = WaitOnSignaledMessengerResponse( s.bob, func(r *MessengerResponse) bool { return len(r.Communities()) > 0 && r.Communities()[0].IDString() == community.IDString() - }, "no communities", ) diff --git a/protocol/communities_messenger_test.go b/protocol/communities_messenger_test.go index 0ba7a1439..5fa9593ec 100644 --- a/protocol/communities_messenger_test.go +++ b/protocol/communities_messenger_test.go @@ -39,7 +39,7 @@ func TestMessengerCommunitiesSuite(t *testing.T) { type MessengerCommunitiesSuite struct { suite.Suite - admin *Messenger + owner *Messenger bob *Messenger alice *Messenger // If one wants to send messages between different instances of Messenger, @@ -57,13 +57,13 @@ func (s *MessengerCommunitiesSuite) SetupTest() { s.shh = gethbridge.NewGethWakuWrapper(shh) s.Require().NoError(shh.Start()) - s.admin = s.newMessenger() + s.owner = s.newMessenger() s.bob = s.newMessenger() s.alice = s.newMessenger() - s.admin.communitiesManager.RekeyInterval = 50 * time.Millisecond + s.owner.communitiesManager.RekeyInterval = 50 * time.Millisecond - _, err := s.admin.Start() + _, err := s.owner.Start() s.Require().NoError(err) _, err = s.bob.Start() s.Require().NoError(err) @@ -72,7 +72,7 @@ func (s *MessengerCommunitiesSuite) SetupTest() { } func (s *MessengerCommunitiesSuite) TearDownTest() { - s.Require().NoError(s.admin.Shutdown()) + s.Require().NoError(s.owner.Shutdown()) s.Require().NoError(s.bob.Shutdown()) s.Require().NoError(s.alice.Shutdown()) _ = s.logger.Sync() @@ -381,16 +381,16 @@ func (s *MessengerCommunitiesSuite) TestJoinCommunity() { } func (s *MessengerCommunitiesSuite) createCommunity() (*communities.Community, *Chat) { - return createCommunity(&s.Suite, s.admin) + return createCommunity(&s.Suite, s.owner) } func (s *MessengerCommunitiesSuite) advertiseCommunityTo(community *communities.Community, user *Messenger) { - advertiseCommunityTo(&s.Suite, community, s.admin, user) + advertiseCommunityTo(&s.Suite, community, s.owner, user) } func (s *MessengerCommunitiesSuite) joinCommunity(community *communities.Community, user *Messenger) { request := &requests.RequestToJoinCommunity{CommunityID: community.ID()} - joinCommunity(&s.Suite, community, s.admin, user, request) + joinCommunity(&s.Suite, community, s.owner, user, request) } func (s *MessengerCommunitiesSuite) TestCommunityContactCodeAdvertisement() { @@ -456,7 +456,7 @@ func (s *MessengerCommunitiesSuite) TestPostToCommunityChat() { var response *MessengerResponse // Pull message and make sure org is received err = tt.RetryWithBackOff(func() error { - response, err = s.admin.RetrieveAll() + response, err = s.owner.RetrieveAll() if err != nil { return err } @@ -495,35 +495,35 @@ func (s *MessengerCommunitiesSuite) TestImportCommunity() { ChatIDs: []string{}, } - response, err := s.admin.CreateCommunityCategory(category) + response, err := s.owner.CreateCommunityCategory(category) s.Require().NoError(err) community = response.Communities()[0] - privateKey, err := s.admin.ExportCommunity(community.ID()) + s.advertiseCommunityTo(community, s.bob) + s.joinCommunity(community, s.bob) + + privateKey, err := s.owner.ExportCommunity(community.ID()) s.Require().NoError(err) _, err = s.alice.ImportCommunity(ctx, privateKey) s.Require().NoError(err) - // Invite user on admin side - s.advertiseCommunityTo(community, s.bob) - s.joinCommunity(community, s.bob) - - // Pull message and make sure org is received - err = tt.RetryWithBackOff(func() error { - response, err = s.alice.RetrieveAll() - if err != nil { - return err - } - if len(response.Communities()) == 0 { - return errors.New("community not received") - } - if !response.Communities()[0].IsControlNode() { - return errors.New("isn't admin despite import") - } - return nil + newDescription := "new description set post import" + _, err = s.alice.EditCommunity(&requests.EditCommunity{ + CommunityID: community.ID(), + CreateCommunity: requests.CreateCommunity{ + Membership: protobuf.CommunityPermissions_ON_REQUEST, + Name: community.Name(), + Color: community.Color(), + Description: newDescription, + }, }) + s.Require().NoError(err) + // bob receives new description + _, err = WaitOnMessengerResponse(s.bob, func(r *MessengerResponse) bool { + return len(r.Communities()) > 0 && r.Communities()[0].DescriptionText() == newDescription + }, "new description not received") s.Require().NoError(err) } @@ -550,7 +550,7 @@ func (s *MessengerCommunitiesSuite) TestRemovePrivateKey() { s.Require().Len(response.Communities(), 1) community = response.Communities()[0] - s.Require().True(community.IsOwnerWithoutCommunityKey()) + s.Require().True(community.IsOwner()) s.Require().False(community.IsControlNode()) } @@ -1932,7 +1932,7 @@ func (s *MessengerCommunitiesSuite) TestLeaveAndRejoinCommunity() { s.joinCommunity(community, s.alice) s.joinCommunity(community, s.bob) - joinedCommunities, err := s.admin.communitiesManager.Joined() + joinedCommunities, err := s.owner.communitiesManager.Joined() s.Require().NoError(err) s.Require().Equal(3, joinedCommunities[0].MembersCount()) @@ -1959,7 +1959,7 @@ func (s *MessengerCommunitiesSuite) TestLeaveAndRejoinCommunity() { if response.Communities()[0].MembersCount() != 2 { communityMembersError = fmt.Errorf("invalid number of members: %d", response.Communities()[0].MembersCount()) - } else if !response.Communities()[0].HasMember(&s.admin.identity.PublicKey) { + } else if !response.Communities()[0].HasMember(&s.owner.identity.PublicKey) { communityMembersError = errors.New("admin removed from community") } else if !response.Communities()[0].HasMember(&s.bob.identity.PublicKey) { communityMembersError = errors.New("bob removed from community") @@ -1970,7 +1970,7 @@ func (s *MessengerCommunitiesSuite) TestLeaveAndRejoinCommunity() { return communityMembersError } err = tt.RetryWithBackOff(func() error { - return verifyCommunityMembers(s.admin) + return verifyCommunityMembers(s.owner) }) s.Require().NoError(err) err = tt.RetryWithBackOff(func() error { @@ -1978,7 +1978,7 @@ func (s *MessengerCommunitiesSuite) TestLeaveAndRejoinCommunity() { }) s.Require().NoError(err) - joinedCommunities, err = s.admin.communitiesManager.Joined() + joinedCommunities, err = s.owner.communitiesManager.Joined() s.Require().NoError(err) s.Require().Equal(2, joinedCommunities[0].MembersCount()) @@ -1995,7 +1995,7 @@ func (s *MessengerCommunitiesSuite) TestLeaveAndRejoinCommunity() { // alice can rejoin s.joinCommunity(community, s.alice) - joinedCommunities, err = s.admin.communitiesManager.Joined() + joinedCommunities, err = s.owner.communitiesManager.Joined() s.Require().NoError(err) s.Require().Equal(3, joinedCommunities[0].MembersCount()) @@ -2174,7 +2174,7 @@ func (s *MessengerCommunitiesSuite) TestBanUser() { s.advertiseCommunityTo(community, s.alice) s.joinCommunity(community, s.alice) - response, err := s.admin.BanUserFromCommunity( + response, err := s.owner.BanUserFromCommunity( context.Background(), &requests.BanUserFromCommunity{ CommunityID: community.ID(), @@ -2189,7 +2189,7 @@ func (s *MessengerCommunitiesSuite) TestBanUser() { s.Require().False(community.HasMember(&s.alice.identity.PublicKey)) s.Require().True(community.IsBanned(&s.alice.identity.PublicKey)) - response, err = s.admin.UnbanUserFromCommunity( + response, err = s.owner.UnbanUserFromCommunity( &requests.UnbanUserFromCommunity{ CommunityID: community.ID(), User: common.PubkeyToHexBytes(&s.alice.identity.PublicKey), @@ -2439,9 +2439,12 @@ func (s *MessengerCommunitiesSuite) TestSyncCommunity() { s.Equal(newCommunity.InvitationOnly(), tnc.InvitationOnly()) s.True(newCommunity.IsControlNode()) - s.False(newCommunity.IsOwnerWithoutCommunityKey()) - s.True(tnc.IsOwnerWithoutCommunityKey()) + s.True(newCommunity.IsOwner()) + + // Even though synced device have the private key, it is not the control node + // There can be only one control node s.False(tnc.IsControlNode()) + s.True(tnc.IsOwner()) } // TestSyncCommunity_RequestToJoin tests more complex pairing and syncing scenario where one paired device @@ -2766,6 +2769,39 @@ func (s *MessengerCommunitiesSuite) TestSyncCommunity_Leave() { s.Equal(aCom, aoCom) } +func (s *MessengerCommunitiesSuite) TestSyncCommunity_ImportCommunity() { + // Owner creates community + community, _ := s.createCommunity() + s.Require().True(community.IsControlNode()) + + // New device is created & paired + ownersOtherDevice := s.createOtherDevice(s.owner) + PairDevices(&s.Suite, ownersOtherDevice, s.owner) + PairDevices(&s.Suite, s.owner, ownersOtherDevice) + + privateKey, err := s.owner.ExportCommunity(community.ID()) + s.Require().NoError(err) + + // New device imports the community (before it is received via sync message) + ctx := context.Background() + response, err := ownersOtherDevice.ImportCommunity(ctx, privateKey) + s.Require().NoError(err) + s.Require().Len(response.Communities(), 1) + s.Require().Equal(community.IDString(), response.Communities()[0].IDString()) + // New device becomes the control node + s.Require().True(response.Communities()[0].IsControlNode()) + + // Old device is no longer the control node + _, err = WaitOnMessengerResponse(s.owner, func(response *MessengerResponse) bool { + if len(response.Communities()) != 1 { + return false + } + c := response.Communities()[0] + return c.IDString() == community.IDString() && !c.IsControlNode() + }, "community not synced") + s.Require().NoError(err) +} + func (s *MessengerCommunitiesSuite) TestSetMutePropertyOnChatsByCategory() { // Create a community createCommunityReq := &requests.CreateCommunity{ @@ -3096,7 +3132,7 @@ func (s *MessengerCommunitiesSuite) TestCommunityBanUserRequestToJoin() { s.advertiseCommunityTo(community, s.alice) s.joinCommunity(community, s.alice) - response, err := s.admin.BanUserFromCommunity( + response, err := s.owner.BanUserFromCommunity( context.Background(), &requests.BanUserFromCommunity{ CommunityID: community.ID(), @@ -3139,7 +3175,7 @@ func (s *MessengerCommunitiesSuite) TestCommunityBanUserRequestToJoin() { s.Require().NoError(err) - messageState := s.admin.buildMessageState() + messageState := s.owner.buildMessageState() messageState.CurrentMessageState = &CurrentMessageState{} messageState.CurrentMessageState.PublicKey = &s.alice.identity.PublicKey @@ -3147,7 +3183,7 @@ func (s *MessengerCommunitiesSuite) TestCommunityBanUserRequestToJoin() { statusMessage := v1protocol.StatusMessage{ Dst: community.PublicKey(), } - err = s.admin.HandleCommunityRequestToJoin(messageState, requestToJoinProto, &statusMessage) + err = s.owner.HandleCommunityRequestToJoin(messageState, requestToJoinProto, &statusMessage) s.Require().ErrorContains(err, "can't request access") } @@ -3178,12 +3214,12 @@ func (s *MessengerCommunitiesSuite) TestHandleImport() { wrappedPayload, err := v1protocol.WrapMessageV1( encodedPayload, protobuf.ApplicationMetadataMessage_CHAT_MESSAGE, - s.admin.identity, + s.owner.identity, ) s.Require().NoError(err) message := &types.Message{} - message.Sig = crypto.FromECDSAPub(&s.admin.identity.PublicKey) + message.Sig = crypto.FromECDSAPub(&s.owner.identity.PublicKey) message.Payload = wrappedPayload filter := s.alice.transport.FilterByChatID(chat.ID) @@ -3217,7 +3253,7 @@ func (s *MessengerCommunitiesSuite) TestGetCommunityIdFromKey() { func (s *MessengerCommunitiesSuite) TestStartCommunityRekeyLoop() { // Create a new community - response, err := s.admin.CreateCommunity( + response, err := s.owner.CreateCommunity( &requests.CreateCommunity{ Membership: protobuf.CommunityPermissions_NO_MEMBERSHIP, Name: "status", @@ -3231,7 +3267,7 @@ func (s *MessengerCommunitiesSuite) TestStartCommunityRekeyLoop() { s.Require().Len(response.Communities(), 1) // Check community is present in the DB and has default values we care about - c, err := s.admin.GetCommunityByID(response.Communities()[0].ID()) + c, err := s.owner.GetCommunityByID(response.Communities()[0].ID()) s.Require().NoError(err) s.Require().False(c.Encrypted()) // TODO some check that there are no keys for the community. Alt for s.Require().Zero(c.RekeyedAt().Unix()) diff --git a/protocol/messenger.go b/protocol/messenger.go index 9cfb91dd4..b3b74e1d3 100644 --- a/protocol/messenger.go +++ b/protocol/messenger.go @@ -465,7 +465,7 @@ func NewMessenger( managerOptions = append(managerOptions, communities.WithCommunityTokensService(c.communityTokensService)) } - communitiesManager, err := communities.NewManager(identity, database, encryptionProtocol, logger, ensVerifier, c.communityTokensService, transp, transp, c.torrentConfig, managerOptions...) + communitiesManager, err := communities.NewManager(identity, installationID, database, encryptionProtocol, logger, ensVerifier, c.communityTokensService, transp, transp, c.torrentConfig, managerOptions...) if err != nil { return nil, err } @@ -2963,7 +2963,12 @@ func (m *Messenger) syncCommunity(ctx context.Context, community *communities.Co return err } - syncMessage, err := community.ToSyncInstallationCommunityProtobuf(clock, communitySettings) + syncControlNode, err := m.communitiesManager.GetSyncControlNode(community.ID()) + if err != nil { + return err + } + + syncMessage, err := community.ToSyncInstallationCommunityProtobuf(clock, communitySettings, syncControlNode) if err != nil { return err } diff --git a/protocol/messenger_backup.go b/protocol/messenger_backup.go index fce4e31fc..490655f8f 100644 --- a/protocol/messenger_backup.go +++ b/protocol/messenger_backup.go @@ -305,7 +305,12 @@ func (m *Messenger) backupCommunities(ctx context.Context, clock uint64) ([]*pro return nil, err } - syncMessage, err := c.ToSyncInstallationCommunityProtobuf(clock, settings) + syncControlNode, err := m.communitiesManager.GetSyncControlNode(c.ID()) + if err != nil { + return nil, err + } + + syncMessage, err := c.ToSyncInstallationCommunityProtobuf(clock, settings, syncControlNode) if err != nil { return nil, err } diff --git a/protocol/messenger_communities.go b/protocol/messenger_communities.go index 6c0b288db..756314d46 100644 --- a/protocol/messenger_communities.go +++ b/protocol/messenger_communities.go @@ -2287,7 +2287,9 @@ func (m *Messenger) ExportCommunity(id types.HexBytes) (*ecdsa.PrivateKey, error } func (m *Messenger) ImportCommunity(ctx context.Context, key *ecdsa.PrivateKey) (*MessengerResponse, error) { - community, err := m.communitiesManager.ImportCommunity(key) + clock, _ := m.getLastClockWithRelatedChat() + + community, err := m.communitiesManager.ImportCommunity(key, clock) if err != nil { return nil, err } @@ -2324,6 +2326,12 @@ func (m *Messenger) ImportCommunity(ctx context.Context, key *ecdsa.PrivateKey) return nil, err } + // Notify other clients we are the control node now + err = m.syncCommunity(context.Background(), community, m.dispatchMessage) + if err != nil { + return nil, err + } + if m.torrentClientReady() { var communities []*communities.Community communities = append(communities, community) @@ -3157,8 +3165,15 @@ func (m *Messenger) handleSyncInstallationCommunity(messageState *ReceivedMessag } } - id := crypto.CompressPubkey(orgPubKey) - savedCommunity, err := m.communitiesManager.GetByID(id) + if syncCommunity.ControlNode != nil { + err = m.communitiesManager.SetSyncControlNode(syncCommunity.Id, syncCommunity.ControlNode) + if err != nil { + logger.Debug("m.SetSyncControlNode", zap.Error(err)) + return err + } + } + + savedCommunity, err := m.communitiesManager.GetByID(syncCommunity.Id) if err != nil { return err } @@ -4771,7 +4786,13 @@ func (m *Messenger) AddCommunityToken(communityID string, chainID int, address s return err } - _, err = m.communitiesManager.AddCommunityToken(communityToken) + clock, _ := m.getLastClockWithRelatedChat() + community, err := m.communitiesManager.AddCommunityToken(communityToken, clock) + if err != nil { + return err + } + + err = m.syncCommunity(context.Background(), community, m.dispatchMessage) if err != nil { return err } @@ -5105,15 +5126,22 @@ func (m *Messenger) SetCommunitySignerPubKey(ctx context.Context, communityID [] if m.communityTokensService == nil { return "", errors.New("tokens service not initialized") } - transactionHash, err := m.communityTokensService.SetSignerPubKey(ctx, chainID, contractAddress, txArgs, password, newSignerPubKey) - if err != nil { - return "", err - } - _, err = m.communitiesManager.PromoteSelfToControlNode(communityID) - if err != nil { - return "", err - } - - return transactionHash, nil + return m.communityTokensService.SetSignerPubKey(ctx, chainID, contractAddress, txArgs, password, newSignerPubKey) +} + +func (m *Messenger) PromoteSelfToControlNode(communityID types.HexBytes) (*communities.Community, error) { + clock, _ := m.getLastClockWithRelatedChat() + + community, err := m.communitiesManager.PromoteSelfToControlNode(communityID, clock) + if err != nil { + return nil, err + } + + err = m.syncCommunity(context.Background(), community, m.dispatchMessage) + if err != nil { + return nil, err + } + + return community, nil } diff --git a/protocol/migrations/migrations.go b/protocol/migrations/migrations.go index 0b5f80008..e6de3197e 100644 --- a/protocol/migrations/migrations.go +++ b/protocol/migrations/migrations.go @@ -104,6 +104,7 @@ // 1693311981_community_shard.up.sql (156B) // 1695331492_add_status_link_previews.up.sql (136B) // 1695918296_add_validated_at.up.sql (377B) +// 1697699419_community_control_node_sync.up.sql (435B) // README.md (554B) // doc.go (850B) @@ -115,7 +116,6 @@ import ( "crypto/sha256" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -125,7 +125,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("read %q: %w", name, err) } var buf bytes.Buffer @@ -133,7 +133,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("read %q: %w", name, err) } if clErr != nil { return nil, err @@ -189,7 +189,7 @@ func _000001_initDownDbSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}} return a, nil } @@ -209,7 +209,7 @@ func _000001_initUpDbSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}} return a, nil } @@ -229,7 +229,7 @@ func _000002_add_last_ens_clock_valueUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}} return a, nil } @@ -249,7 +249,7 @@ func _1586358095_add_replaceUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}} return a, nil } @@ -269,7 +269,7 @@ func _1588665364_add_image_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}} return a, nil } @@ -289,7 +289,7 @@ func _1589365189_add_pow_targetUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}} return a, nil } @@ -309,7 +309,7 @@ func _1591277220_add_index_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}} return a, nil } @@ -329,7 +329,7 @@ func _1593087212_add_mute_chat_and_raw_message_fieldsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}} return a, nil } @@ -349,7 +349,7 @@ func _1595862781_add_audio_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}} return a, nil } @@ -369,7 +369,7 @@ func _1595865249_create_emoji_reactions_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}} return a, nil } @@ -389,7 +389,7 @@ func _1596805115_create_group_chat_invitations_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}} return a, nil } @@ -409,7 +409,7 @@ func _1597322655_add_invitation_admin_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}} return a, nil } @@ -429,7 +429,7 @@ func _1597757544_add_nicknameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}} return a, nil } @@ -449,7 +449,7 @@ func _1598955122_add_mentionsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}} return a, nil } @@ -469,7 +469,7 @@ func _1599641390_add_emoji_reactions_indexUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}} return a, nil } @@ -489,7 +489,7 @@ func _1599720851_add_seen_index_remove_long_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}} return a, nil } @@ -509,7 +509,7 @@ func _1603198582_add_profile_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}} return a, nil } @@ -529,7 +529,7 @@ func _1603816533_add_linksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}} return a, nil } @@ -549,7 +549,7 @@ func _1603888149_create_chat_identity_last_published_tableUpSql() (*asset, error return nil, err } - info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}} return a, nil } @@ -569,7 +569,7 @@ func _1605075346_add_communitiesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}} return a, nil } @@ -589,7 +589,7 @@ func _1610117927_add_message_cacheUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}} return a, nil } @@ -609,7 +609,7 @@ func _1610959908_add_dont_wrap_to_raw_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}} return a, nil } @@ -629,7 +629,7 @@ func _1610960912_add_send_on_personal_topicUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}} return a, nil } @@ -649,7 +649,7 @@ func _1612870480_add_datasync_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}} return a, nil } @@ -669,7 +669,7 @@ func _1614152139_add_communities_request_to_joinUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}} return a, nil } @@ -689,7 +689,7 @@ func _1615374373_add_confirmationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}} return a, nil } @@ -709,7 +709,7 @@ func _1617694931_add_notification_centerUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}} return a, nil } @@ -729,7 +729,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}} return a, nil } @@ -749,7 +749,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}} return a, nil } @@ -769,7 +769,7 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}} return a, nil } @@ -789,7 +789,7 @@ func _1621933219_add_mentionedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}} return a, nil } @@ -809,7 +809,7 @@ func _1622010048_add_unviewed_mentions_countUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}} return a, nil } @@ -829,7 +829,7 @@ func _1622061278_add_message_activity_center_notification_fieldUpSql() (*asset, return nil, err } - info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}} return a, nil } @@ -849,7 +849,7 @@ func _1622464518_set_synced_to_fromUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}} return a, nil } @@ -869,7 +869,7 @@ func _1622464519_add_chat_descriptionUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}} return a, nil } @@ -889,7 +889,7 @@ func _1622622253_add_pinned_by_to_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}} return a, nil } @@ -909,7 +909,7 @@ func _1623938329_add_author_activity_center_notification_fieldUpSql() (*asset, e return nil, err } - info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}} return a, nil } @@ -929,7 +929,7 @@ func _1623938330_add_edit_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}} return a, nil } @@ -949,7 +949,7 @@ func _1624978434_add_muted_communityUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}} return a, nil } @@ -969,7 +969,7 @@ func _1625018910_add_repply_message_activity_center_notification_fieldUpSql() (* return nil, err } - info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}} return a, nil } @@ -989,7 +989,7 @@ func _1625762506_add_deleted_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}} return a, nil } @@ -1009,7 +1009,7 @@ func _1627388946_add_communities_synced_atUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}} return a, nil } @@ -1029,7 +1029,7 @@ func _1628280060_createUsermessagesIndexSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}} return a, nil } @@ -1049,7 +1049,7 @@ func _1632303896_modify_contacts_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}} return a, nil } @@ -1069,7 +1069,7 @@ func _1633349838_add_emoji_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}} return a, nil } @@ -1089,7 +1089,7 @@ func _1634831235_add_highlight_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}} return a, nil } @@ -1109,7 +1109,7 @@ func _1634896007_add_last_updated_locally_and_removedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}} return a, nil } @@ -1129,7 +1129,7 @@ func _1635840039_add_clock_read_at_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}} return a, nil } @@ -1149,7 +1149,7 @@ func _1637852321_add_received_invitation_admin_column_in_chatsUpSql() (*asset, e return nil, err } - info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}} return a, nil } @@ -1169,7 +1169,7 @@ func _1645034601_display_nameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}} return a, nil } @@ -1189,7 +1189,7 @@ func _1645034602_add_mutual_contact_requestUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}} return a, nil } @@ -1209,7 +1209,7 @@ func _1650373957_add_contact_request_stateUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}} return a, nil } @@ -1229,7 +1229,7 @@ func _1656958989_contact_verificationUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x3f, 0x28, 0x38, 0x33, 0xdb, 0xe9, 0x4d, 0xc0, 0x54, 0x8c, 0x2a, 0x73, 0xc4, 0xdd, 0x5c, 0xc5, 0x1a, 0x93, 0x4b, 0x6, 0x13, 0xbe, 0x42, 0xd2, 0x7f, 0xd4, 0xc, 0xc5, 0x4e, 0x6d, 0xce}} return a, nil } @@ -1249,7 +1249,7 @@ func _1658236268_add_discord_message_authors_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0xb7, 0xdb, 0x79, 0x1, 0x15, 0xe7, 0x76, 0x5d, 0x22, 0x54, 0x82, 0x9a, 0xbe, 0x24, 0xc1, 0x82, 0xcf, 0x67, 0x91, 0x53, 0xcc, 0xac, 0x74, 0x18, 0x61, 0x69, 0x68, 0x19, 0xca, 0x2b, 0xa8}} return a, nil } @@ -1269,7 +1269,7 @@ func _1659619997_add_discord_messages_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}} return a, nil } @@ -1289,7 +1289,7 @@ func _1660226788_create_chat_identity_social_linksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x76, 0x40, 0xe9, 0x85, 0xc4, 0x38, 0xf8, 0xe5, 0x5d, 0xe8, 0x13, 0x46, 0x1b, 0xc, 0x1, 0xe9, 0x2f, 0x74, 0xd1, 0x79, 0x59, 0xa4, 0xdb, 0x4a, 0x4a, 0xf4, 0x98, 0x58, 0x3c, 0x57, 0xd3}} return a, nil } @@ -1309,7 +1309,7 @@ func _1660226789_add_walletconnectsessions_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x5c, 0x72, 0x2, 0xed, 0x36, 0x19, 0x91, 0x4d, 0x1a, 0xc1, 0xab, 0x84, 0xfa, 0x41, 0xb1, 0x46, 0xa5, 0xdb, 0x3f, 0x76, 0x47, 0xd3, 0x75, 0x3c, 0x6a, 0x8e, 0x78, 0xe6, 0x41, 0xdc, 0x7f}} return a, nil } @@ -1329,7 +1329,7 @@ func _1661242854_add_communities_requests_to_leaveUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x2e, 0x7d, 0x14, 0xef, 0x6e, 0x95, 0x4b, 0x6, 0x70, 0x2e, 0xd1, 0xf6, 0x59, 0xf9, 0xe, 0x56, 0xa, 0x9c, 0x80, 0x18, 0xca, 0xb9, 0x49, 0x19, 0xf, 0x89, 0x94, 0x36, 0x6d, 0x93, 0x9a}} return a, nil } @@ -1349,7 +1349,7 @@ func _1662044232_add_chat_imageUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x74, 0xdf, 0x50, 0x79, 0x73, 0x9e, 0xd0, 0xff, 0xa4, 0xd3, 0x87, 0xc3, 0x48, 0x31, 0x6c, 0xdf, 0xa6, 0x20, 0x85, 0xe6, 0x4e, 0x19, 0x9d, 0xef, 0xcc, 0x84, 0x2b, 0x5d, 0x44, 0x34, 0x6}} return a, nil } @@ -1369,7 +1369,7 @@ func _1662106895_add_chat_first_message_timestampUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8b, 0x55, 0x74, 0xfa, 0xf5, 0x51, 0x85, 0x19, 0xfd, 0xfb, 0x6, 0x79, 0x4d, 0x1d, 0xd, 0x3, 0x46, 0x66, 0x34, 0x1e, 0xce, 0x91, 0x21, 0x29, 0xf6, 0x71, 0xe7, 0x31, 0x39, 0x8f, 0x9d, 0x5}} return a, nil } @@ -1389,7 +1389,7 @@ func _1662723928_add_discord_author_image_fieldsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0x5b, 0x48, 0x57, 0x98, 0x55, 0x9a, 0xf1, 0x75, 0xf7, 0xb5, 0x41, 0x5e, 0x96, 0xc5, 0xce, 0xfc, 0x30, 0x5c, 0x15, 0x35, 0x9e, 0x4e, 0x4a, 0x3b, 0x38, 0x42, 0xc4, 0x27, 0x3c, 0x87, 0xbf}} return a, nil } @@ -1409,7 +1409,7 @@ func _1664195977_add_deleted_for_mesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7d, 0x9d, 0x13, 0x9, 0xaa, 0x44, 0x14, 0x93, 0xe2, 0xf5, 0x53, 0xb7, 0x79, 0xa8, 0x18, 0xf0, 0x6c, 0xa4, 0x9c, 0x73, 0xc1, 0xaa, 0xc5, 0x2e, 0xc5, 0x41, 0xd7, 0x24, 0xb0, 0xd7, 0xb8, 0xdf}} return a, nil } @@ -1429,7 +1429,7 @@ func _1664367420_add_discord_attachments_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xe1, 0xb6, 0x4f, 0x6f, 0x92, 0x0, 0xb4, 0xf, 0x55, 0x12, 0x1c, 0x98, 0x6d, 0xbc, 0x1e, 0xfd, 0xae, 0x1c, 0xce, 0xd1, 0x3d, 0x2, 0x21, 0x2e, 0xc0, 0x13, 0xa, 0xb2, 0xec, 0x81, 0x13}} return a, nil } @@ -1449,7 +1449,7 @@ func _1665079662_add_spectated_column_in_communitiesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0x5d, 0xfe, 0xe2, 0xbe, 0xdf, 0xba, 0x45, 0xe9, 0xfc, 0xa7, 0x5f, 0xda, 0x19, 0xdb, 0x40, 0x96, 0x59, 0x78, 0xa, 0xd7, 0x4a, 0xca, 0x1a, 0x93, 0xfb, 0xae, 0x6d, 0x74, 0x7, 0x36, 0xdd}} return a, nil } @@ -1469,7 +1469,7 @@ func _1665479047_add_community_id_in_notificationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0x8f, 0x8b, 0x1c, 0xaa, 0x6a, 0x56, 0xd6, 0xa5, 0x88, 0x57, 0x13, 0x8f, 0xea, 0xb9, 0x23, 0x82, 0x50, 0xb7, 0x65, 0x1f, 0xab, 0xfa, 0x23, 0x6f, 0x0, 0x7, 0xb6, 0x6e, 0xb5, 0x85, 0x44}} return a, nil } @@ -1489,7 +1489,7 @@ func _1665484435_add_encrypted_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0x5c, 0x1e, 0x1c, 0x7f, 0xae, 0x5f, 0xeb, 0x3c, 0x6c, 0xcd, 0xc2, 0x99, 0x48, 0x5c, 0x83, 0xa0, 0xa2, 0x97, 0x5, 0x39, 0x82, 0x71, 0x90, 0x47, 0x21, 0x84, 0x29, 0x19, 0xa4, 0x7a, 0x90}} return a, nil } @@ -1509,7 +1509,7 @@ func _1665560200_add_contact_verification_individualUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc5, 0xbb, 0x61, 0xfd, 0xbf, 0x33, 0x1d, 0x4e, 0x5f, 0xbd, 0x86, 0x42, 0xb0, 0x6c, 0xf7, 0x39, 0x19, 0x6e, 0x72, 0x35, 0xfd, 0x1b, 0xd6, 0xbd, 0xf6, 0x81, 0x21, 0xc4, 0xaa, 0x6, 0x62, 0x40}} return a, nil } @@ -1529,7 +1529,7 @@ func _1670921937_add_album_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xae, 0x83, 0x58, 0xb7, 0x77, 0x5, 0xca, 0xe3, 0xda, 0x32, 0x8f, 0x7b, 0xa4, 0x2f, 0x4c, 0xaf, 0x5f, 0xfa, 0x94, 0x36, 0xe4, 0xf9, 0x7, 0xc6, 0xd6, 0xb7, 0x90, 0xf3, 0xe5, 0xb5, 0x3}} return a, nil } @@ -1549,7 +1549,7 @@ func _1673373000_add_repliedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x1c, 0xae, 0xf2, 0xf, 0xb4, 0xc2, 0xba, 0x3c, 0xfe, 0x7b, 0xb0, 0xf, 0xf, 0xd5, 0xbc, 0xe2, 0xa7, 0xad, 0x50, 0xd9, 0x5a, 0xe8, 0x96, 0x22, 0x65, 0x89, 0xcf, 0x4a, 0x9a, 0x1b, 0x94}} return a, nil } @@ -1569,7 +1569,7 @@ func _1673428910_add_image_width_heightUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x74, 0xda, 0x93, 0x2a, 0x9b, 0x6b, 0xb7, 0x96, 0xcd, 0xac, 0xf, 0xaf, 0x54, 0x89, 0x9e, 0x91, 0x5b, 0xd0, 0x4a, 0xa, 0x8d, 0x9e, 0x80, 0x66, 0x26, 0x9e, 0xb5, 0xa9, 0x8, 0xec, 0x2d, 0x6c}} return a, nil } @@ -1589,7 +1589,7 @@ func _1674210659_add_contact_request_local_clockUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x72, 0x39, 0xfe, 0x72, 0x98, 0xfc, 0x91, 0x20, 0x10, 0xe8, 0xf5, 0xac, 0x79, 0xa8, 0x1c, 0xca, 0x7b, 0x35, 0xa, 0xc1, 0x56, 0x49, 0x9a, 0xfc, 0xbd, 0x64, 0x9d, 0xdf, 0xd2, 0x60, 0x70}} return a, nil } @@ -1609,7 +1609,7 @@ func _1675212323_add_deleted_byUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x37, 0x29, 0x2f, 0xd, 0x5a, 0xb6, 0xdb, 0xa7, 0x8, 0x86, 0xfc, 0x7a, 0x70, 0xd8, 0x4d, 0xe6, 0xf0, 0x57, 0xe7, 0xd1, 0x95, 0xd5, 0x4, 0x40, 0x2f, 0x7a, 0x5, 0x4f, 0xc2, 0x97, 0xbc}} return a, nil } @@ -1629,7 +1629,7 @@ func _1675247084_add_activity_center_statesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xba, 0x90, 0x7d, 0x55, 0xc7, 0x40, 0x29, 0x26, 0x97, 0x45, 0x5c, 0xdf, 0xba, 0x61, 0xb, 0xfc, 0x3d, 0x7a, 0x6c, 0x42, 0xe4, 0x95, 0x78, 0xb0, 0xc5, 0x1f, 0x73, 0xe9, 0x33, 0x51, 0xc8, 0x81}} return a, nil } @@ -1649,7 +1649,7 @@ func _1675272329_fix_protocol_migrationUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xe0, 0x11, 0x4c, 0x66, 0x55, 0x72, 0xd3, 0xe6, 0x98, 0xa4, 0xe7, 0x44, 0xf9, 0x3b, 0x3a, 0x3f, 0xd9, 0x91, 0x1e, 0x4f, 0xfc, 0x56, 0x63, 0xe5, 0xa4, 0x83, 0xfc, 0x7c, 0xcf, 0x18, 0x99}} return a, nil } @@ -1669,7 +1669,7 @@ func _1676998418_fix_activity_center_migrationUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8a, 0xdc, 0x64, 0xb1, 0x47, 0x67, 0xda, 0x2c, 0x26, 0x29, 0x6b, 0x6f, 0xb, 0xfa, 0x45, 0xf3, 0xad, 0x8b, 0x1a, 0x5f, 0x1c, 0xed, 0xd7, 0xea, 0x54, 0xf5, 0x3f, 0xb8, 0xf6, 0xf9, 0x44, 0x53}} return a, nil } @@ -1689,7 +1689,7 @@ func _1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql( return nil, err } - info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x38, 0x3a, 0x95, 0xaf, 0x81, 0xb0, 0x85, 0x8d, 0x73, 0xda, 0x7b, 0x2a, 0x35, 0xa6, 0xaa, 0xcc, 0x4c, 0x35, 0xa3, 0xa8, 0xbd, 0xd1, 0x37, 0xe8, 0x5d, 0x83, 0xa4, 0x33, 0x1f, 0x10, 0xe4, 0xe6}} return a, nil } @@ -1709,7 +1709,7 @@ func _1677486338_add_community_tokens_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0x7b, 0x3d, 0x7e, 0x79, 0xc4, 0x3a, 0xf1, 0xda, 0x4b, 0xc6, 0xd1, 0xd, 0xfb, 0xb2, 0xb9, 0x7f, 0x81, 0x29, 0xab, 0xd8, 0x1, 0x20, 0xd7, 0xe1, 0xaf, 0x3e, 0x67, 0x1b, 0xdb, 0xf9, 0xd5}} return a, nil } @@ -1729,7 +1729,7 @@ func _1678292329_add_collapsed_categoriesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x63, 0x86, 0xd5, 0x7, 0xe2, 0x25, 0x15, 0x1b, 0xfe, 0xf3, 0xe, 0x50, 0x48, 0x11, 0x3c, 0x7c, 0xc6, 0xe5, 0xab, 0x8d, 0x1f, 0xe8, 0x3c, 0xcb, 0xf0, 0x8d, 0xa7, 0x49, 0x4c, 0x16, 0x4f}} return a, nil } @@ -1749,7 +1749,7 @@ func _1678800760_add_index_to_raw_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9d, 0xd9, 0x8d, 0x22, 0x46, 0xae, 0x7b, 0x53, 0x3e, 0x51, 0x39, 0xad, 0xad, 0x38, 0x50, 0x6, 0xfa, 0xb9, 0xc4, 0x9f, 0x8d, 0xd2, 0x67, 0x0, 0xef, 0x58, 0x13, 0xab, 0x6a, 0x67, 0xf3, 0x7e}} return a, nil } @@ -1769,7 +1769,7 @@ func _1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql( return nil, err } - info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x82, 0x1, 0xb4, 0xb2, 0x94, 0x25, 0xd5, 0x2e, 0x45, 0xc3, 0xb1, 0x2c, 0xeb, 0x1a, 0x52, 0xe0, 0x4b, 0x9b, 0x46, 0xf4, 0xc, 0xac, 0x1, 0x1e, 0x90, 0xbc, 0x64, 0x38, 0x10, 0xf1, 0xaf, 0xac}} return a, nil } @@ -1789,7 +1789,7 @@ func _1679326850_add_community_token_ownersUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xe6, 0x25, 0x67, 0xd1, 0xd6, 0x54, 0x88, 0xb1, 0x80, 0x1e, 0x2d, 0x9c, 0xfa, 0x1c, 0xc7, 0x63, 0x6e, 0xf9, 0x66, 0xb1, 0x68, 0xc6, 0xf8, 0x51, 0xb6, 0xd5, 0x4e, 0x93, 0x39, 0x5e, 0xc0}} return a, nil } @@ -1809,7 +1809,7 @@ func _1680011500_add_album_images_countUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0x55, 0x99, 0x31, 0xcc, 0x80, 0x78, 0xc3, 0x51, 0x13, 0x63, 0x6f, 0x1a, 0xfd, 0x53, 0xd2, 0xf4, 0x13, 0x4b, 0xb2, 0x4f, 0x99, 0xb8, 0x7b, 0x7, 0x99, 0xb6, 0xab, 0x88, 0x2e, 0x7, 0x8}} return a, nil } @@ -1829,7 +1829,7 @@ func _1680114896_add_index_on_album_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x7e, 0xd5, 0xcd, 0x2d, 0xab, 0xd4, 0x32, 0x26, 0x50, 0x3a, 0x5b, 0x8e, 0x1c, 0xcc, 0x35, 0xf8, 0xa1, 0x2a, 0xc1, 0x23, 0xf6, 0x90, 0xfe, 0x84, 0x3, 0xde, 0x5a, 0xee, 0xc6, 0xfc, 0x2a}} return a, nil } @@ -1849,7 +1849,7 @@ func _1681655289_add_mute_tillUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xbe, 0xce, 0xb8, 0xe1, 0x30, 0xe7, 0xa7, 0xe0, 0x7d, 0x97, 0xf4, 0x26, 0xb8, 0x57, 0x1d, 0x2a, 0xed, 0x18, 0xf2, 0xa, 0xe3, 0x77, 0x29, 0x18, 0x55, 0x9, 0x74, 0x2c, 0x24, 0x5a, 0x19}} return a, nil } @@ -1869,7 +1869,7 @@ func _1681934966_add_index_response_toUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3b, 0xed, 0xa6, 0x7e, 0x51, 0xf2, 0xa1, 0x3c, 0x78, 0x9a, 0xa7, 0x7a, 0x51, 0x25, 0x7d, 0xdd, 0x4b, 0xf3, 0x45, 0xeb, 0x3f, 0xad, 0x23, 0x3e, 0xac, 0x16, 0x28, 0x62, 0x7, 0x8c, 0xe0, 0xa0}} return a, nil } @@ -1889,7 +1889,7 @@ func _1682528339_add_index_user_messages_unseenUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x35, 0xfa, 0x98, 0xdd, 0x74, 0x5e, 0x21, 0x1f, 0xf2, 0x56, 0x17, 0x96, 0xfe, 0xbb, 0x44, 0x4c, 0xa1, 0xd8, 0x9f, 0x2e, 0x6, 0x2f, 0xd8, 0x23, 0xec, 0x94, 0x8c, 0x53, 0xf3, 0xf0, 0x40, 0xe7}} return a, nil } @@ -1909,7 +1909,7 @@ func _1683707289_recreate_deleted_for_mesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5b, 0x9d, 0xd6, 0x45, 0x41, 0x29, 0x44, 0xf6, 0x14, 0x38, 0xeb, 0xdf, 0x6b, 0x5d, 0x9c, 0x45, 0x4b, 0xc3, 0xa8, 0xbd, 0x38, 0x14, 0xd9, 0x73, 0xf1, 0x51, 0xbb, 0x9f, 0x14, 0x36, 0xf2, 0x11}} return a, nil } @@ -1929,7 +1929,7 @@ func _1683725607_mark_discord_messages_as_seenUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x2a, 0xc3, 0x43, 0xea, 0x5e, 0x3, 0x2e, 0xce, 0x79, 0xea, 0xa5, 0x67, 0x61, 0x8c, 0xe4, 0xb9, 0xb7, 0x4d, 0xd5, 0xd5, 0xb0, 0x35, 0xc8, 0x2b, 0xa0, 0x3f, 0xd8, 0xde, 0xea, 0x4e, 0x16}} return a, nil } @@ -1949,7 +1949,7 @@ func _1684174617_add_url_previews_to_user_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1684445777, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0xb0, 0x72, 0xe3, 0xe4, 0xa9, 0x63, 0x82, 0xea, 0x52, 0x70, 0xb6, 0xa0, 0x73, 0x55, 0x7a, 0x78, 0xa8, 0xd2, 0xb0, 0xf4, 0x78, 0x8a, 0xd, 0x5a, 0xa2, 0x9d, 0x92, 0xdc, 0xce, 0x1c, 0x71}} return a, nil } @@ -1969,7 +1969,7 @@ func _1684175608_add_token_balancesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1684770413, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x4e, 0xe0, 0x48, 0x34, 0x1, 0x4d, 0x88, 0x11, 0x54, 0x20, 0x52, 0x5c, 0x57, 0x14, 0xa9, 0xa9, 0x36, 0xa4, 0x28, 0x59, 0x48, 0xa8, 0xa, 0x76, 0xec, 0x37, 0xee, 0x9e, 0xd2, 0x20, 0xaa}} return a, nil } @@ -1989,7 +1989,7 @@ func _1684979808_sync_activity_center_notificationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1687356246, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0xf5, 0xf7, 0x94, 0xa9, 0xa1, 0x60, 0x26, 0x9d, 0xca, 0x31, 0xf, 0x14, 0xd, 0x70, 0xf8, 0xab, 0x40, 0x29, 0x73, 0x61, 0xbd, 0x1b, 0xb6, 0xc4, 0x31, 0x77, 0x9e, 0x32, 0xa8, 0xce, 0x6d}} return a, nil } @@ -2009,7 +2009,7 @@ func _1685383829_add_communities_mute_tillUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1685383829_add_communities_mute_till.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1685383829_add_communities_mute_till.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1687450624, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbf, 0x58, 0x96, 0xe5, 0x66, 0xcb, 0xde, 0xed, 0x76, 0xb8, 0x5a, 0x86, 0x81, 0x9a, 0x60, 0x51, 0x12, 0x37, 0x54, 0x9a, 0x36, 0x3e, 0xd1, 0x4a, 0xbe, 0x9a, 0xab, 0x20, 0x7f, 0x1d, 0xf4, 0x73}} return a, nil } @@ -2029,7 +2029,7 @@ func _1685964183_add_chainids_to_revealed_addressesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1685964183_add_chainids_to_revealed_addresses.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1685964183_add_chainids_to_revealed_addresses.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1687356246, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0xb5, 0xa8, 0xd7, 0xad, 0x9c, 0x54, 0xa5, 0xe9, 0xdb, 0x42, 0x2d, 0xd0, 0xd7, 0x22, 0x1, 0x93, 0xf3, 0x4f, 0x53, 0xf7, 0x1e, 0xbe, 0x4b, 0xac, 0xc7, 0x63, 0x15, 0xdf, 0xe0, 0x6, 0xf8}} return a, nil } @@ -2049,7 +2049,7 @@ func _1687370421_add_communities_muted_till_newUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1687370421_add_communities_muted_till_new.up.sql", size: 635, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1687370421_add_communities_muted_till_new.up.sql", size: 635, mode: os.FileMode(0644), modTime: time.Unix(1687450634, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x65, 0x73, 0x96, 0x1d, 0xc8, 0x3e, 0xca, 0xf5, 0xdc, 0xe3, 0xac, 0x3f, 0x9c, 0xc3, 0x67, 0x12, 0x9c, 0x19, 0x1, 0x4, 0x2b, 0xea, 0x6b, 0xe1, 0x59, 0x59, 0x89, 0x3d, 0xef, 0x4a, 0x6e, 0xbe}} return a, nil } @@ -2069,7 +2069,7 @@ func _1687416607_add_communities_check_channel_permission_responses_tableUpSql() return nil, err } - info := bindataFileInfo{name: "1687416607_add_communities_check_channel_permission_responses_table.up.sql", size: 739, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1687416607_add_communities_check_channel_permission_responses_table.up.sql", size: 739, mode: os.FileMode(0644), modTime: time.Unix(1688729551, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc2, 0x6, 0x3, 0x1a, 0xde, 0x9d, 0xbc, 0x50, 0x9d, 0xf1, 0x6d, 0x5a, 0x1c, 0x28, 0x92, 0x19, 0x89, 0x76, 0x4e, 0x8b, 0x60, 0xa9, 0xf, 0xe9, 0x76, 0xf1, 0xee, 0x75, 0x92, 0xbd, 0xda, 0x72}} return a, nil } @@ -2089,7 +2089,7 @@ func _1687856939_add_community_tokens_decimalsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1687856939_add_community_tokens_decimals.up.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1687856939_add_community_tokens_decimals.up.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1688729551, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0x76, 0x42, 0x70, 0xc9, 0x7b, 0x16, 0xf6, 0xfe, 0x7, 0x1c, 0x99, 0xe5, 0x38, 0xfd, 0xa0, 0x3b, 0x93, 0x40, 0xbc, 0x66, 0xc2, 0xd1, 0xdd, 0xe9, 0xc7, 0xbf, 0xae, 0x36, 0xcc, 0x46, 0x57}} return a, nil } @@ -2109,7 +2109,7 @@ func _1687959987_modify_community_tokens_supply_as_stringUpSql() (*asset, error) return nil, err } - info := bindataFileInfo{name: "1687959987_modify_community_tokens_supply_as_string.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1687959987_modify_community_tokens_supply_as_string.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1690997252, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x57, 0x89, 0xbf, 0x9b, 0xed, 0x9b, 0x18, 0x3f, 0x84, 0xb5, 0x3c, 0x78, 0x40, 0x60, 0xea, 0x33, 0x26, 0x50, 0x3, 0xda, 0x28, 0x92, 0xd3, 0xb6, 0xff, 0x40, 0xa7, 0x19, 0x2, 0xa7, 0x17, 0xf9}} return a, nil } @@ -2129,7 +2129,7 @@ func _1689258900_add_airdrop_address_to_revealed_addressesUpSql() (*asset, error return nil, err } - info := bindataFileInfo{name: "1689258900_add_airdrop_address_to_revealed_addresses.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1689258900_add_airdrop_address_to_revealed_addresses.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1690997252, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7e, 0xaf, 0x5c, 0xd, 0xe5, 0x1e, 0x67, 0x1a, 0x6d, 0xd, 0x28, 0x20, 0x7a, 0x1a, 0x45, 0x6e, 0xba, 0x80, 0x91, 0xb0, 0xd6, 0xfd, 0xc2, 0xb9, 0x42, 0x5c, 0x8d, 0x6e, 0x3e, 0x6e, 0xb2}} return a, nil } @@ -2149,7 +2149,7 @@ func _1689266326_create_communities_events_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1689266326_create_communities_events_table.up.sql", size: 164, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1689266326_create_communities_events_table.up.sql", size: 164, mode: os.FileMode(0644), modTime: time.Unix(1690997252, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x4e, 0xe, 0xba, 0x29, 0x16, 0x46, 0x38, 0x19, 0xa4, 0x5, 0x40, 0x46, 0xaf, 0x9a, 0x6, 0x89, 0xe0, 0x9c, 0xcc, 0xec, 0x8a, 0xb, 0x40, 0x85, 0x6f, 0xcc, 0x5, 0x24, 0x2a, 0x33, 0xfa}} return a, nil } @@ -2169,7 +2169,7 @@ func _1689931300_add_community_tokens_deployer_and_priv_levelUpSql() (*asset, er return nil, err } - info := bindataFileInfo{name: "1689931300_add_community_tokens_deployer_and_priv_level.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1689931300_add_community_tokens_deployer_and_priv_level.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1692168842, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3f, 0x24, 0xd9, 0x4d, 0xe, 0x4b, 0xe3, 0x4c, 0xd1, 0xc, 0x72, 0xd4, 0x99, 0xe4, 0xb9, 0xb8, 0xe9, 0x38, 0x9e, 0x11, 0x48, 0xea, 0xe3, 0x5d, 0xd9, 0xd0, 0xef, 0x96, 0x38, 0x5a, 0xd4, 0xa5}} return a, nil } @@ -2189,7 +2189,7 @@ func _1693311881_add_unfurled_links_to_message_editsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1693311881_add_unfurled_links_to_message_edits.up.sql", size: 64, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1693311881_add_unfurled_links_to_message_edits.up.sql", size: 64, mode: os.FileMode(0644), modTime: time.Unix(1695022078, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0xc7, 0x7c, 0xe4, 0x80, 0x6f, 0xf8, 0x96, 0xb, 0x37, 0xff, 0xa2, 0xab, 0x1c, 0xbd, 0x25, 0x8d, 0x1e, 0x9a, 0x65, 0xe9, 0x45, 0xaf, 0x7f, 0x77, 0x84, 0x1b, 0x10, 0x1b, 0x1a, 0x5, 0xcc}} return a, nil } @@ -2209,7 +2209,7 @@ func _1693311981_community_shardUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1693311981_community_shard.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1693311981_community_shard.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1697698210, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x12, 0xf9, 0xde, 0x49, 0x9f, 0x95, 0xaa, 0x22, 0x5e, 0x54, 0x5a, 0x1, 0xd, 0xc6, 0x1f, 0x42, 0x93, 0xe8, 0x69, 0x30, 0x11, 0x69, 0x41, 0x7f, 0x87, 0x57, 0x56, 0x2a, 0x32, 0xb9, 0x3e}} return a, nil } @@ -2229,7 +2229,7 @@ func _1695331492_add_status_link_previewsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1695331492_add_status_link_previews.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "1695331492_add_status_link_previews.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1697698210, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0x7d, 0x6e, 0x86, 0xf0, 0xf8, 0x23, 0x4b, 0x16, 0x3d, 0xca, 0x8f, 0xfc, 0x8, 0x22, 0xd5, 0x70, 0x14, 0xbb, 0xdd, 0xa9, 0xb8, 0x3e, 0xc6, 0x20, 0xfb, 0x0, 0x26, 0x73, 0xcb, 0x92, 0xb2}} return a, nil } @@ -2249,11 +2249,31 @@ func _1695918296_add_validated_atUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1695918296_add_validated_at.up.sql", size: 377, mode: os.FileMode(0644), modTime: time.Unix(1697628660, 0)} + info := bindataFileInfo{name: "1695918296_add_validated_at.up.sql", size: 377, mode: os.FileMode(0644), modTime: time.Unix(1697698210, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1d, 0x48, 0xa7, 0xd5, 0xb, 0xbb, 0x23, 0xfd, 0x40, 0x49, 0x33, 0x1b, 0x5c, 0xb3, 0x5b, 0x7a, 0xd8, 0xed, 0x5, 0xd, 0xb4, 0x91, 0xa3, 0x37, 0xaf, 0xaf, 0xc6, 0xa1, 0x13, 0xeb, 0x56, 0x1d}} return a, nil } +var __1697699419_community_control_node_syncUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x4d\x4f\xc3\x20\x18\xc7\xef\x7c\x8a\xc7\xd3\x5c\xd2\x2c\xf1\xbc\x78\xa0\xf8\x2c\x43\x19\x2c\x14\x35\x3b\x35\x4d\x5b\x1d\x59\x57\xcc\x40\xe3\xbe\xbd\xa1\x2c\x55\xab\x37\xe0\xff\xf6\x83\x69\xa4\x06\xc1\xd0\x5c\x20\xd4\xee\x78\x7c\xef\x6d\xb0\xad\x2f\x6b\xd7\x87\x93\xeb\xca\xde\x35\x2d\x5c\x13\x00\x18\xe5\x73\x69\x1b\xc8\x85\xca\x41\x2a\x03\xf2\x51\x08\xd8\x6a\xbe\xa1\x7a\x07\x0f\xb8\x03\x25\x81\x29\xb9\x12\x9c\x19\xd0\xb8\x15\x94\x61\x96\xf2\x9d\xab\x0f\xc0\xa5\x19\x73\xe9\xdd\xf6\x3e\x54\x5d\x57\x05\xeb\xfa\x58\xfd\x44\x35\x5b\x53\x3d\xba\xc8\x7c\x49\x08\x97\x05\x6a\x13\xd3\xea\x17\xcc\x5f\xd6\x9f\x98\x59\x1a\xcd\xa6\x1b\x73\x52\xa0\x40\x66\x52\xd5\xc2\x36\x89\xe4\x06\x68\x71\x49\x0c\x77\xbf\x98\xe4\xc8\x4a\xab\xcd\x3f\xfb\xe3\x79\x28\x18\x0c\xf7\x8a\x4b\xf0\xfb\x7d\xfb\x19\x22\xe0\x8b\x7d\x8d\x9a\x27\xcf\x6b\xd4\x78\xd9\x7d\x3b\xd9\x8f\x2a\xb4\xe5\xa1\x3d\x03\x2f\xbe\x3f\x1c\x55\x2a\xef\x26\x8e\xab\x5b\x98\xcd\x96\xe4\x2b\x00\x00\xff\xff\x61\xbb\x8c\x2b\xb3\x01\x00\x00") + +func _1697699419_community_control_node_syncUpSqlBytes() ([]byte, error) { + return bindataRead( + __1697699419_community_control_node_syncUpSql, + "1697699419_community_control_node_sync.up.sql", + ) +} + +func _1697699419_community_control_node_syncUpSql() (*asset, error) { + bytes, err := _1697699419_community_control_node_syncUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1697699419_community_control_node_sync.up.sql", size: 435, mode: os.FileMode(0644), modTime: time.Unix(1697995562, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0xd6, 0x63, 0x10, 0x1b, 0x16, 0x35, 0x57, 0xf1, 0x4a, 0x4, 0x51, 0xe0, 0x1, 0xe1, 0xfc, 0x12, 0x3a, 0x10, 0x4f, 0xb1, 0x96, 0x53, 0x2, 0xf5, 0x66, 0x7b, 0xe0, 0x8a, 0xdf, 0x78, 0x53}} + return a, nil +} + var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00") func readmeMdBytes() ([]byte, error) { @@ -2269,7 +2289,7 @@ func readmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}} return a, nil } @@ -2289,7 +2309,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1697447578, 0)} + info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1683894533, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}} return a, nil } @@ -2385,228 +2405,129 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "000001_init.down.db.sql": _000001_initDownDbSql, - - "000001_init.up.db.sql": _000001_initUpDbSql, - - "000002_add_last_ens_clock_value.up.sql": _000002_add_last_ens_clock_valueUpSql, - - "1586358095_add_replace.up.sql": _1586358095_add_replaceUpSql, - - "1588665364_add_image_data.up.sql": _1588665364_add_image_dataUpSql, - - "1589365189_add_pow_target.up.sql": _1589365189_add_pow_targetUpSql, - - "1591277220_add_index_messages.up.sql": _1591277220_add_index_messagesUpSql, - - "1593087212_add_mute_chat_and_raw_message_fields.up.sql": _1593087212_add_mute_chat_and_raw_message_fieldsUpSql, - - "1595862781_add_audio_data.up.sql": _1595862781_add_audio_dataUpSql, - - "1595865249_create_emoji_reactions_table.up.sql": _1595865249_create_emoji_reactions_tableUpSql, - - "1596805115_create_group_chat_invitations_table.up.sql": _1596805115_create_group_chat_invitations_tableUpSql, - - "1597322655_add_invitation_admin_chat_field.up.sql": _1597322655_add_invitation_admin_chat_fieldUpSql, - - "1597757544_add_nickname.up.sql": _1597757544_add_nicknameUpSql, - - "1598955122_add_mentions.up.sql": _1598955122_add_mentionsUpSql, - - "1599641390_add_emoji_reactions_index.up.sql": _1599641390_add_emoji_reactions_indexUpSql, - - "1599720851_add_seen_index_remove_long_messages.up.sql": _1599720851_add_seen_index_remove_long_messagesUpSql, - - "1603198582_add_profile_chat_field.up.sql": _1603198582_add_profile_chat_fieldUpSql, - - "1603816533_add_links.up.sql": _1603816533_add_linksUpSql, - - "1603888149_create_chat_identity_last_published_table.up.sql": _1603888149_create_chat_identity_last_published_tableUpSql, - - "1605075346_add_communities.up.sql": _1605075346_add_communitiesUpSql, - - "1610117927_add_message_cache.up.sql": _1610117927_add_message_cacheUpSql, - - "1610959908_add_dont_wrap_to_raw_messages.up.sql": _1610959908_add_dont_wrap_to_raw_messagesUpSql, - - "1610960912_add_send_on_personal_topic.up.sql": _1610960912_add_send_on_personal_topicUpSql, - - "1612870480_add_datasync_id.up.sql": _1612870480_add_datasync_idUpSql, - - "1614152139_add_communities_request_to_join.up.sql": _1614152139_add_communities_request_to_joinUpSql, - - "1615374373_add_confirmations.up.sql": _1615374373_add_confirmationsUpSql, - - "1617694931_add_notification_center.up.sql": _1617694931_add_notification_centerUpSql, - - "1618923660_create_pin_messages.up.sql": _1618923660_create_pin_messagesUpSql, - - "1619094007_add_joined_chat_field.up.sql": _1619094007_add_joined_chat_fieldUpSql, - - "1619099821_add_last_synced_field.up.sql": _1619099821_add_last_synced_fieldUpSql, - - "1621933219_add_mentioned.up.sql": _1621933219_add_mentionedUpSql, - - "1622010048_add_unviewed_mentions_count.up.sql": _1622010048_add_unviewed_mentions_countUpSql, - - "1622061278_add_message_activity_center_notification_field.up.sql": _1622061278_add_message_activity_center_notification_fieldUpSql, - - "1622464518_set_synced_to_from.up.sql": _1622464518_set_synced_to_fromUpSql, - - "1622464519_add_chat_description.up.sql": _1622464519_add_chat_descriptionUpSql, - - "1622622253_add_pinned_by_to_pin_messages.up.sql": _1622622253_add_pinned_by_to_pin_messagesUpSql, - - "1623938329_add_author_activity_center_notification_field.up.sql": _1623938329_add_author_activity_center_notification_fieldUpSql, - - "1623938330_add_edit_messages.up.sql": _1623938330_add_edit_messagesUpSql, - - "1624978434_add_muted_community.up.sql": _1624978434_add_muted_communityUpSql, - - "1625018910_add_repply_message_activity_center_notification_field.up.sql": _1625018910_add_repply_message_activity_center_notification_fieldUpSql, - - "1625762506_add_deleted_messages.up.sql": _1625762506_add_deleted_messagesUpSql, - - "1627388946_add_communities_synced_at.up.sql": _1627388946_add_communities_synced_atUpSql, - - "1628280060_create-usermessages-index.sql": _1628280060_createUsermessagesIndexSql, - - "1632303896_modify_contacts_table.up.sql": _1632303896_modify_contacts_tableUpSql, - - "1633349838_add_emoji_column_in_chats.up.sql": _1633349838_add_emoji_column_in_chatsUpSql, - - "1634831235_add_highlight_column_in_chats.up.sql": _1634831235_add_highlight_column_in_chatsUpSql, - - "1634896007_add_last_updated_locally_and_removed.up.sql": _1634896007_add_last_updated_locally_and_removedUpSql, - - "1635840039_add_clock_read_at_column_in_chats.up.sql": _1635840039_add_clock_read_at_column_in_chatsUpSql, - - "1637852321_add_received_invitation_admin_column_in_chats.up.sql": _1637852321_add_received_invitation_admin_column_in_chatsUpSql, - - "1645034601_display_name.up.sql": _1645034601_display_nameUpSql, - - "1645034602_add_mutual_contact_request.up.sql": _1645034602_add_mutual_contact_requestUpSql, - - "1650373957_add_contact_request_state.up.sql": _1650373957_add_contact_request_stateUpSql, - - "1656958989_contact_verification.up.sql": _1656958989_contact_verificationUpSql, - - "1658236268_add_discord_message_authors_table.up.sql": _1658236268_add_discord_message_authors_tableUpSql, - - "1659619997_add_discord_messages_table.up.sql": _1659619997_add_discord_messages_tableUpSql, - - "1660226788_create_chat_identity_social_links.up.sql": _1660226788_create_chat_identity_social_linksUpSql, - - "1660226789_add_walletconnectsessions_table.up.sql": _1660226789_add_walletconnectsessions_tableUpSql, - - "1661242854_add_communities_requests_to_leave.up.sql": _1661242854_add_communities_requests_to_leaveUpSql, - - "1662044232_add_chat_image.up.sql": _1662044232_add_chat_imageUpSql, - - "1662106895_add_chat_first_message_timestamp.up.sql": _1662106895_add_chat_first_message_timestampUpSql, - - "1662723928_add_discord_author_image_fields.up.sql": _1662723928_add_discord_author_image_fieldsUpSql, - - "1664195977_add_deleted_for_mes.up.sql": _1664195977_add_deleted_for_mesUpSql, - - "1664367420_add_discord_attachments_table.up.sql": _1664367420_add_discord_attachments_tableUpSql, - - "1665079662_add_spectated_column_in_communities.up.sql": _1665079662_add_spectated_column_in_communitiesUpSql, - - "1665479047_add_community_id_in_notifications.up.sql": _1665479047_add_community_id_in_notificationsUpSql, - - "1665484435_add_encrypted_messages.up.sql": _1665484435_add_encrypted_messagesUpSql, - - "1665560200_add_contact_verification_individual.up.sql": _1665560200_add_contact_verification_individualUpSql, - - "1670921937_add_album_id.up.sql": _1670921937_add_album_idUpSql, - - "1673373000_add_replied.up.sql": _1673373000_add_repliedUpSql, - - "1673428910_add_image_width_height.up.sql": _1673428910_add_image_width_heightUpSql, - - "1674210659_add_contact_request_local_clock.up.sql": _1674210659_add_contact_request_local_clockUpSql, - - "1675212323_add_deleted_by.up.sql": _1675212323_add_deleted_byUpSql, - - "1675247084_add_activity_center_states.up.sql": _1675247084_add_activity_center_statesUpSql, - - "1675272329_fix_protocol_migration.up.sql": _1675272329_fix_protocol_migrationUpSql, - - "1676998418_fix_activity_center_migration.up.sql": _1676998418_fix_activity_center_migrationUpSql, - + "000001_init.down.db.sql": _000001_initDownDbSql, + "000001_init.up.db.sql": _000001_initUpDbSql, + "000002_add_last_ens_clock_value.up.sql": _000002_add_last_ens_clock_valueUpSql, + "1586358095_add_replace.up.sql": _1586358095_add_replaceUpSql, + "1588665364_add_image_data.up.sql": _1588665364_add_image_dataUpSql, + "1589365189_add_pow_target.up.sql": _1589365189_add_pow_targetUpSql, + "1591277220_add_index_messages.up.sql": _1591277220_add_index_messagesUpSql, + "1593087212_add_mute_chat_and_raw_message_fields.up.sql": _1593087212_add_mute_chat_and_raw_message_fieldsUpSql, + "1595862781_add_audio_data.up.sql": _1595862781_add_audio_dataUpSql, + "1595865249_create_emoji_reactions_table.up.sql": _1595865249_create_emoji_reactions_tableUpSql, + "1596805115_create_group_chat_invitations_table.up.sql": _1596805115_create_group_chat_invitations_tableUpSql, + "1597322655_add_invitation_admin_chat_field.up.sql": _1597322655_add_invitation_admin_chat_fieldUpSql, + "1597757544_add_nickname.up.sql": _1597757544_add_nicknameUpSql, + "1598955122_add_mentions.up.sql": _1598955122_add_mentionsUpSql, + "1599641390_add_emoji_reactions_index.up.sql": _1599641390_add_emoji_reactions_indexUpSql, + "1599720851_add_seen_index_remove_long_messages.up.sql": _1599720851_add_seen_index_remove_long_messagesUpSql, + "1603198582_add_profile_chat_field.up.sql": _1603198582_add_profile_chat_fieldUpSql, + "1603816533_add_links.up.sql": _1603816533_add_linksUpSql, + "1603888149_create_chat_identity_last_published_table.up.sql": _1603888149_create_chat_identity_last_published_tableUpSql, + "1605075346_add_communities.up.sql": _1605075346_add_communitiesUpSql, + "1610117927_add_message_cache.up.sql": _1610117927_add_message_cacheUpSql, + "1610959908_add_dont_wrap_to_raw_messages.up.sql": _1610959908_add_dont_wrap_to_raw_messagesUpSql, + "1610960912_add_send_on_personal_topic.up.sql": _1610960912_add_send_on_personal_topicUpSql, + "1612870480_add_datasync_id.up.sql": _1612870480_add_datasync_idUpSql, + "1614152139_add_communities_request_to_join.up.sql": _1614152139_add_communities_request_to_joinUpSql, + "1615374373_add_confirmations.up.sql": _1615374373_add_confirmationsUpSql, + "1617694931_add_notification_center.up.sql": _1617694931_add_notification_centerUpSql, + "1618923660_create_pin_messages.up.sql": _1618923660_create_pin_messagesUpSql, + "1619094007_add_joined_chat_field.up.sql": _1619094007_add_joined_chat_fieldUpSql, + "1619099821_add_last_synced_field.up.sql": _1619099821_add_last_synced_fieldUpSql, + "1621933219_add_mentioned.up.sql": _1621933219_add_mentionedUpSql, + "1622010048_add_unviewed_mentions_count.up.sql": _1622010048_add_unviewed_mentions_countUpSql, + "1622061278_add_message_activity_center_notification_field.up.sql": _1622061278_add_message_activity_center_notification_fieldUpSql, + "1622464518_set_synced_to_from.up.sql": _1622464518_set_synced_to_fromUpSql, + "1622464519_add_chat_description.up.sql": _1622464519_add_chat_descriptionUpSql, + "1622622253_add_pinned_by_to_pin_messages.up.sql": _1622622253_add_pinned_by_to_pin_messagesUpSql, + "1623938329_add_author_activity_center_notification_field.up.sql": _1623938329_add_author_activity_center_notification_fieldUpSql, + "1623938330_add_edit_messages.up.sql": _1623938330_add_edit_messagesUpSql, + "1624978434_add_muted_community.up.sql": _1624978434_add_muted_communityUpSql, + "1625018910_add_repply_message_activity_center_notification_field.up.sql": _1625018910_add_repply_message_activity_center_notification_fieldUpSql, + "1625762506_add_deleted_messages.up.sql": _1625762506_add_deleted_messagesUpSql, + "1627388946_add_communities_synced_at.up.sql": _1627388946_add_communities_synced_atUpSql, + "1628280060_create-usermessages-index.sql": _1628280060_createUsermessagesIndexSql, + "1632303896_modify_contacts_table.up.sql": _1632303896_modify_contacts_tableUpSql, + "1633349838_add_emoji_column_in_chats.up.sql": _1633349838_add_emoji_column_in_chatsUpSql, + "1634831235_add_highlight_column_in_chats.up.sql": _1634831235_add_highlight_column_in_chatsUpSql, + "1634896007_add_last_updated_locally_and_removed.up.sql": _1634896007_add_last_updated_locally_and_removedUpSql, + "1635840039_add_clock_read_at_column_in_chats.up.sql": _1635840039_add_clock_read_at_column_in_chatsUpSql, + "1637852321_add_received_invitation_admin_column_in_chats.up.sql": _1637852321_add_received_invitation_admin_column_in_chatsUpSql, + "1645034601_display_name.up.sql": _1645034601_display_nameUpSql, + "1645034602_add_mutual_contact_request.up.sql": _1645034602_add_mutual_contact_requestUpSql, + "1650373957_add_contact_request_state.up.sql": _1650373957_add_contact_request_stateUpSql, + "1656958989_contact_verification.up.sql": _1656958989_contact_verificationUpSql, + "1658236268_add_discord_message_authors_table.up.sql": _1658236268_add_discord_message_authors_tableUpSql, + "1659619997_add_discord_messages_table.up.sql": _1659619997_add_discord_messages_tableUpSql, + "1660226788_create_chat_identity_social_links.up.sql": _1660226788_create_chat_identity_social_linksUpSql, + "1660226789_add_walletconnectsessions_table.up.sql": _1660226789_add_walletconnectsessions_tableUpSql, + "1661242854_add_communities_requests_to_leave.up.sql": _1661242854_add_communities_requests_to_leaveUpSql, + "1662044232_add_chat_image.up.sql": _1662044232_add_chat_imageUpSql, + "1662106895_add_chat_first_message_timestamp.up.sql": _1662106895_add_chat_first_message_timestampUpSql, + "1662723928_add_discord_author_image_fields.up.sql": _1662723928_add_discord_author_image_fieldsUpSql, + "1664195977_add_deleted_for_mes.up.sql": _1664195977_add_deleted_for_mesUpSql, + "1664367420_add_discord_attachments_table.up.sql": _1664367420_add_discord_attachments_tableUpSql, + "1665079662_add_spectated_column_in_communities.up.sql": _1665079662_add_spectated_column_in_communitiesUpSql, + "1665479047_add_community_id_in_notifications.up.sql": _1665479047_add_community_id_in_notificationsUpSql, + "1665484435_add_encrypted_messages.up.sql": _1665484435_add_encrypted_messagesUpSql, + "1665560200_add_contact_verification_individual.up.sql": _1665560200_add_contact_verification_individualUpSql, + "1670921937_add_album_id.up.sql": _1670921937_add_album_idUpSql, + "1673373000_add_replied.up.sql": _1673373000_add_repliedUpSql, + "1673428910_add_image_width_height.up.sql": _1673428910_add_image_width_heightUpSql, + "1674210659_add_contact_request_local_clock.up.sql": _1674210659_add_contact_request_local_clockUpSql, + "1675212323_add_deleted_by.up.sql": _1675212323_add_deleted_byUpSql, + "1675247084_add_activity_center_states.up.sql": _1675247084_add_activity_center_statesUpSql, + "1675272329_fix_protocol_migration.up.sql": _1675272329_fix_protocol_migrationUpSql, + "1676998418_fix_activity_center_migration.up.sql": _1676998418_fix_activity_center_migrationUpSql, "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql": _1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql, - - "1677486338_add_community_tokens_table.up.sql": _1677486338_add_community_tokens_tableUpSql, - - "1678292329_add_collapsed_categories.up.sql": _1678292329_add_collapsed_categoriesUpSql, - - "1678800760_add_index_to_raw_messages.up.sql": _1678800760_add_index_to_raw_messagesUpSql, - + "1677486338_add_community_tokens_table.up.sql": _1677486338_add_community_tokens_tableUpSql, + "1678292329_add_collapsed_categories.up.sql": _1678292329_add_collapsed_categoriesUpSql, + "1678800760_add_index_to_raw_messages.up.sql": _1678800760_add_index_to_raw_messagesUpSql, "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql": _1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql, - - "1679326850_add_community_token_owners.up.sql": _1679326850_add_community_token_ownersUpSql, - - "1680011500_add_album_images_count.up.sql": _1680011500_add_album_images_countUpSql, - - "1680114896_add_index_on_album_id.up.sql": _1680114896_add_index_on_album_idUpSql, - - "1681655289_add_mute_till.up.sql": _1681655289_add_mute_tillUpSql, - - "1681934966_add_index_response_to.up.sql": _1681934966_add_index_response_toUpSql, - - "1682528339_add_index_user_messages_unseen.up.sql": _1682528339_add_index_user_messages_unseenUpSql, - - "1683707289_recreate_deleted_for_mes.up.sql": _1683707289_recreate_deleted_for_mesUpSql, - - "1683725607_mark_discord_messages_as_seen.up.sql": _1683725607_mark_discord_messages_as_seenUpSql, - - "1684174617_add_url_previews_to_user_messages.up.sql": _1684174617_add_url_previews_to_user_messagesUpSql, - - "1684175608_add_token_balances.up.sql": _1684175608_add_token_balancesUpSql, - - "1684979808_sync_activity_center_notifications.up.sql": _1684979808_sync_activity_center_notificationsUpSql, - - "1685383829_add_communities_mute_till.up.sql": _1685383829_add_communities_mute_tillUpSql, - - "1685964183_add_chainids_to_revealed_addresses.up.sql": _1685964183_add_chainids_to_revealed_addressesUpSql, - - "1687370421_add_communities_muted_till_new.up.sql": _1687370421_add_communities_muted_till_newUpSql, - - "1687416607_add_communities_check_channel_permission_responses_table.up.sql": _1687416607_add_communities_check_channel_permission_responses_tableUpSql, - - "1687856939_add_community_tokens_decimals.up.sql": _1687856939_add_community_tokens_decimalsUpSql, - - "1687959987_modify_community_tokens_supply_as_string.up.sql": _1687959987_modify_community_tokens_supply_as_stringUpSql, - - "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": _1689258900_add_airdrop_address_to_revealed_addressesUpSql, - - "1689266326_create_communities_events_table.up.sql": _1689266326_create_communities_events_tableUpSql, - - "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": _1689931300_add_community_tokens_deployer_and_priv_levelUpSql, - - "1693311881_add_unfurled_links_to_message_edits.up.sql": _1693311881_add_unfurled_links_to_message_editsUpSql, - - "1693311981_community_shard.up.sql": _1693311981_community_shardUpSql, - - "1695331492_add_status_link_previews.up.sql": _1695331492_add_status_link_previewsUpSql, - - "1695918296_add_validated_at.up.sql": _1695918296_add_validated_atUpSql, - + "1679326850_add_community_token_owners.up.sql": _1679326850_add_community_token_ownersUpSql, + "1680011500_add_album_images_count.up.sql": _1680011500_add_album_images_countUpSql, + "1680114896_add_index_on_album_id.up.sql": _1680114896_add_index_on_album_idUpSql, + "1681655289_add_mute_till.up.sql": _1681655289_add_mute_tillUpSql, + "1681934966_add_index_response_to.up.sql": _1681934966_add_index_response_toUpSql, + "1682528339_add_index_user_messages_unseen.up.sql": _1682528339_add_index_user_messages_unseenUpSql, + "1683707289_recreate_deleted_for_mes.up.sql": _1683707289_recreate_deleted_for_mesUpSql, + "1683725607_mark_discord_messages_as_seen.up.sql": _1683725607_mark_discord_messages_as_seenUpSql, + "1684174617_add_url_previews_to_user_messages.up.sql": _1684174617_add_url_previews_to_user_messagesUpSql, + "1684175608_add_token_balances.up.sql": _1684175608_add_token_balancesUpSql, + "1684979808_sync_activity_center_notifications.up.sql": _1684979808_sync_activity_center_notificationsUpSql, + "1685383829_add_communities_mute_till.up.sql": _1685383829_add_communities_mute_tillUpSql, + "1685964183_add_chainids_to_revealed_addresses.up.sql": _1685964183_add_chainids_to_revealed_addressesUpSql, + "1687370421_add_communities_muted_till_new.up.sql": _1687370421_add_communities_muted_till_newUpSql, + "1687416607_add_communities_check_channel_permission_responses_table.up.sql": _1687416607_add_communities_check_channel_permission_responses_tableUpSql, + "1687856939_add_community_tokens_decimals.up.sql": _1687856939_add_community_tokens_decimalsUpSql, + "1687959987_modify_community_tokens_supply_as_string.up.sql": _1687959987_modify_community_tokens_supply_as_stringUpSql, + "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": _1689258900_add_airdrop_address_to_revealed_addressesUpSql, + "1689266326_create_communities_events_table.up.sql": _1689266326_create_communities_events_tableUpSql, + "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": _1689931300_add_community_tokens_deployer_and_priv_levelUpSql, + "1693311881_add_unfurled_links_to_message_edits.up.sql": _1693311881_add_unfurled_links_to_message_editsUpSql, + "1693311981_community_shard.up.sql": _1693311981_community_shardUpSql, + "1695331492_add_status_link_previews.up.sql": _1695331492_add_status_link_previewsUpSql, + "1695918296_add_validated_at.up.sql": _1695918296_add_validated_atUpSql, + "1697699419_community_control_node_sync.up.sql": _1697699419_community_control_node_syncUpSql, "README.md": readmeMd, - - "doc.go": docGo, + "doc.go": docGo, } +// AssetDebug is true if the assets were built with the debug flag enabled. +const AssetDebug = false + // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png +// +// data/ +// foo.txt +// img/ +// a.png +// b.png +// // then AssetDir("data") would return []string{"foo.txt", "img"}, // AssetDir("data/img") would return []string{"a.png", "b.png"}, // AssetDir("foo.txt") and AssetDir("notexist") would return an error, and @@ -2639,112 +2560,113 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "000001_init.down.db.sql": &bintree{_000001_initDownDbSql, map[string]*bintree{}}, - "000001_init.up.db.sql": &bintree{_000001_initUpDbSql, map[string]*bintree{}}, - "000002_add_last_ens_clock_value.up.sql": &bintree{_000002_add_last_ens_clock_valueUpSql, map[string]*bintree{}}, - "1586358095_add_replace.up.sql": &bintree{_1586358095_add_replaceUpSql, map[string]*bintree{}}, - "1588665364_add_image_data.up.sql": &bintree{_1588665364_add_image_dataUpSql, map[string]*bintree{}}, - "1589365189_add_pow_target.up.sql": &bintree{_1589365189_add_pow_targetUpSql, map[string]*bintree{}}, - "1591277220_add_index_messages.up.sql": &bintree{_1591277220_add_index_messagesUpSql, map[string]*bintree{}}, - "1593087212_add_mute_chat_and_raw_message_fields.up.sql": &bintree{_1593087212_add_mute_chat_and_raw_message_fieldsUpSql, map[string]*bintree{}}, - "1595862781_add_audio_data.up.sql": &bintree{_1595862781_add_audio_dataUpSql, map[string]*bintree{}}, - "1595865249_create_emoji_reactions_table.up.sql": &bintree{_1595865249_create_emoji_reactions_tableUpSql, map[string]*bintree{}}, - "1596805115_create_group_chat_invitations_table.up.sql": &bintree{_1596805115_create_group_chat_invitations_tableUpSql, map[string]*bintree{}}, - "1597322655_add_invitation_admin_chat_field.up.sql": &bintree{_1597322655_add_invitation_admin_chat_fieldUpSql, map[string]*bintree{}}, - "1597757544_add_nickname.up.sql": &bintree{_1597757544_add_nicknameUpSql, map[string]*bintree{}}, - "1598955122_add_mentions.up.sql": &bintree{_1598955122_add_mentionsUpSql, map[string]*bintree{}}, - "1599641390_add_emoji_reactions_index.up.sql": &bintree{_1599641390_add_emoji_reactions_indexUpSql, map[string]*bintree{}}, - "1599720851_add_seen_index_remove_long_messages.up.sql": &bintree{_1599720851_add_seen_index_remove_long_messagesUpSql, map[string]*bintree{}}, - "1603198582_add_profile_chat_field.up.sql": &bintree{_1603198582_add_profile_chat_fieldUpSql, map[string]*bintree{}}, - "1603816533_add_links.up.sql": &bintree{_1603816533_add_linksUpSql, map[string]*bintree{}}, - "1603888149_create_chat_identity_last_published_table.up.sql": &bintree{_1603888149_create_chat_identity_last_published_tableUpSql, map[string]*bintree{}}, - "1605075346_add_communities.up.sql": &bintree{_1605075346_add_communitiesUpSql, map[string]*bintree{}}, - "1610117927_add_message_cache.up.sql": &bintree{_1610117927_add_message_cacheUpSql, map[string]*bintree{}}, - "1610959908_add_dont_wrap_to_raw_messages.up.sql": &bintree{_1610959908_add_dont_wrap_to_raw_messagesUpSql, map[string]*bintree{}}, - "1610960912_add_send_on_personal_topic.up.sql": &bintree{_1610960912_add_send_on_personal_topicUpSql, map[string]*bintree{}}, - "1612870480_add_datasync_id.up.sql": &bintree{_1612870480_add_datasync_idUpSql, map[string]*bintree{}}, - "1614152139_add_communities_request_to_join.up.sql": &bintree{_1614152139_add_communities_request_to_joinUpSql, map[string]*bintree{}}, - "1615374373_add_confirmations.up.sql": &bintree{_1615374373_add_confirmationsUpSql, map[string]*bintree{}}, - "1617694931_add_notification_center.up.sql": &bintree{_1617694931_add_notification_centerUpSql, map[string]*bintree{}}, - "1618923660_create_pin_messages.up.sql": &bintree{_1618923660_create_pin_messagesUpSql, map[string]*bintree{}}, - "1619094007_add_joined_chat_field.up.sql": &bintree{_1619094007_add_joined_chat_fieldUpSql, map[string]*bintree{}}, - "1619099821_add_last_synced_field.up.sql": &bintree{_1619099821_add_last_synced_fieldUpSql, map[string]*bintree{}}, - "1621933219_add_mentioned.up.sql": &bintree{_1621933219_add_mentionedUpSql, map[string]*bintree{}}, - "1622010048_add_unviewed_mentions_count.up.sql": &bintree{_1622010048_add_unviewed_mentions_countUpSql, map[string]*bintree{}}, - "1622061278_add_message_activity_center_notification_field.up.sql": &bintree{_1622061278_add_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, - "1622464518_set_synced_to_from.up.sql": &bintree{_1622464518_set_synced_to_fromUpSql, map[string]*bintree{}}, - "1622464519_add_chat_description.up.sql": &bintree{_1622464519_add_chat_descriptionUpSql, map[string]*bintree{}}, - "1622622253_add_pinned_by_to_pin_messages.up.sql": &bintree{_1622622253_add_pinned_by_to_pin_messagesUpSql, map[string]*bintree{}}, - "1623938329_add_author_activity_center_notification_field.up.sql": &bintree{_1623938329_add_author_activity_center_notification_fieldUpSql, map[string]*bintree{}}, - "1623938330_add_edit_messages.up.sql": &bintree{_1623938330_add_edit_messagesUpSql, map[string]*bintree{}}, - "1624978434_add_muted_community.up.sql": &bintree{_1624978434_add_muted_communityUpSql, map[string]*bintree{}}, - "1625018910_add_repply_message_activity_center_notification_field.up.sql": &bintree{_1625018910_add_repply_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, - "1625762506_add_deleted_messages.up.sql": &bintree{_1625762506_add_deleted_messagesUpSql, map[string]*bintree{}}, - "1627388946_add_communities_synced_at.up.sql": &bintree{_1627388946_add_communities_synced_atUpSql, map[string]*bintree{}}, - "1628280060_create-usermessages-index.sql": &bintree{_1628280060_createUsermessagesIndexSql, map[string]*bintree{}}, - "1632303896_modify_contacts_table.up.sql": &bintree{_1632303896_modify_contacts_tableUpSql, map[string]*bintree{}}, - "1633349838_add_emoji_column_in_chats.up.sql": &bintree{_1633349838_add_emoji_column_in_chatsUpSql, map[string]*bintree{}}, - "1634831235_add_highlight_column_in_chats.up.sql": &bintree{_1634831235_add_highlight_column_in_chatsUpSql, map[string]*bintree{}}, - "1634896007_add_last_updated_locally_and_removed.up.sql": &bintree{_1634896007_add_last_updated_locally_and_removedUpSql, map[string]*bintree{}}, - "1635840039_add_clock_read_at_column_in_chats.up.sql": &bintree{_1635840039_add_clock_read_at_column_in_chatsUpSql, map[string]*bintree{}}, - "1637852321_add_received_invitation_admin_column_in_chats.up.sql": &bintree{_1637852321_add_received_invitation_admin_column_in_chatsUpSql, map[string]*bintree{}}, - "1645034601_display_name.up.sql": &bintree{_1645034601_display_nameUpSql, map[string]*bintree{}}, - "1645034602_add_mutual_contact_request.up.sql": &bintree{_1645034602_add_mutual_contact_requestUpSql, map[string]*bintree{}}, - "1650373957_add_contact_request_state.up.sql": &bintree{_1650373957_add_contact_request_stateUpSql, map[string]*bintree{}}, - "1656958989_contact_verification.up.sql": &bintree{_1656958989_contact_verificationUpSql, map[string]*bintree{}}, - "1658236268_add_discord_message_authors_table.up.sql": &bintree{_1658236268_add_discord_message_authors_tableUpSql, map[string]*bintree{}}, - "1659619997_add_discord_messages_table.up.sql": &bintree{_1659619997_add_discord_messages_tableUpSql, map[string]*bintree{}}, - "1660226788_create_chat_identity_social_links.up.sql": &bintree{_1660226788_create_chat_identity_social_linksUpSql, map[string]*bintree{}}, - "1660226789_add_walletconnectsessions_table.up.sql": &bintree{_1660226789_add_walletconnectsessions_tableUpSql, map[string]*bintree{}}, - "1661242854_add_communities_requests_to_leave.up.sql": &bintree{_1661242854_add_communities_requests_to_leaveUpSql, map[string]*bintree{}}, - "1662044232_add_chat_image.up.sql": &bintree{_1662044232_add_chat_imageUpSql, map[string]*bintree{}}, - "1662106895_add_chat_first_message_timestamp.up.sql": &bintree{_1662106895_add_chat_first_message_timestampUpSql, map[string]*bintree{}}, - "1662723928_add_discord_author_image_fields.up.sql": &bintree{_1662723928_add_discord_author_image_fieldsUpSql, map[string]*bintree{}}, - "1664195977_add_deleted_for_mes.up.sql": &bintree{_1664195977_add_deleted_for_mesUpSql, map[string]*bintree{}}, - "1664367420_add_discord_attachments_table.up.sql": &bintree{_1664367420_add_discord_attachments_tableUpSql, map[string]*bintree{}}, - "1665079662_add_spectated_column_in_communities.up.sql": &bintree{_1665079662_add_spectated_column_in_communitiesUpSql, map[string]*bintree{}}, - "1665479047_add_community_id_in_notifications.up.sql": &bintree{_1665479047_add_community_id_in_notificationsUpSql, map[string]*bintree{}}, - "1665484435_add_encrypted_messages.up.sql": &bintree{_1665484435_add_encrypted_messagesUpSql, map[string]*bintree{}}, - "1665560200_add_contact_verification_individual.up.sql": &bintree{_1665560200_add_contact_verification_individualUpSql, map[string]*bintree{}}, - "1670921937_add_album_id.up.sql": &bintree{_1670921937_add_album_idUpSql, map[string]*bintree{}}, - "1673373000_add_replied.up.sql": &bintree{_1673373000_add_repliedUpSql, map[string]*bintree{}}, - "1673428910_add_image_width_height.up.sql": &bintree{_1673428910_add_image_width_heightUpSql, map[string]*bintree{}}, - "1674210659_add_contact_request_local_clock.up.sql": &bintree{_1674210659_add_contact_request_local_clockUpSql, map[string]*bintree{}}, - "1675212323_add_deleted_by.up.sql": &bintree{_1675212323_add_deleted_byUpSql, map[string]*bintree{}}, - "1675247084_add_activity_center_states.up.sql": &bintree{_1675247084_add_activity_center_statesUpSql, map[string]*bintree{}}, - "1675272329_fix_protocol_migration.up.sql": &bintree{_1675272329_fix_protocol_migrationUpSql, map[string]*bintree{}}, - "1676998418_fix_activity_center_migration.up.sql": &bintree{_1676998418_fix_activity_center_migrationUpSql, map[string]*bintree{}}, - "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql": &bintree{_1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql, map[string]*bintree{}}, - "1677486338_add_community_tokens_table.up.sql": &bintree{_1677486338_add_community_tokens_tableUpSql, map[string]*bintree{}}, - "1678292329_add_collapsed_categories.up.sql": &bintree{_1678292329_add_collapsed_categoriesUpSql, map[string]*bintree{}}, - "1678800760_add_index_to_raw_messages.up.sql": &bintree{_1678800760_add_index_to_raw_messagesUpSql, map[string]*bintree{}}, - "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql": &bintree{_1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql, map[string]*bintree{}}, - "1679326850_add_community_token_owners.up.sql": &bintree{_1679326850_add_community_token_ownersUpSql, map[string]*bintree{}}, - "1680011500_add_album_images_count.up.sql": &bintree{_1680011500_add_album_images_countUpSql, map[string]*bintree{}}, - "1680114896_add_index_on_album_id.up.sql": &bintree{_1680114896_add_index_on_album_idUpSql, map[string]*bintree{}}, - "1681655289_add_mute_till.up.sql": &bintree{_1681655289_add_mute_tillUpSql, map[string]*bintree{}}, - "1681934966_add_index_response_to.up.sql": &bintree{_1681934966_add_index_response_toUpSql, map[string]*bintree{}}, - "1682528339_add_index_user_messages_unseen.up.sql": &bintree{_1682528339_add_index_user_messages_unseenUpSql, map[string]*bintree{}}, - "1683707289_recreate_deleted_for_mes.up.sql": &bintree{_1683707289_recreate_deleted_for_mesUpSql, map[string]*bintree{}}, - "1683725607_mark_discord_messages_as_seen.up.sql": &bintree{_1683725607_mark_discord_messages_as_seenUpSql, map[string]*bintree{}}, - "1684174617_add_url_previews_to_user_messages.up.sql": &bintree{_1684174617_add_url_previews_to_user_messagesUpSql, map[string]*bintree{}}, - "1684175608_add_token_balances.up.sql": &bintree{_1684175608_add_token_balancesUpSql, map[string]*bintree{}}, - "1684979808_sync_activity_center_notifications.up.sql": &bintree{_1684979808_sync_activity_center_notificationsUpSql, map[string]*bintree{}}, - "1685383829_add_communities_mute_till.up.sql": &bintree{_1685383829_add_communities_mute_tillUpSql, map[string]*bintree{}}, - "1685964183_add_chainids_to_revealed_addresses.up.sql": &bintree{_1685964183_add_chainids_to_revealed_addressesUpSql, map[string]*bintree{}}, - "1687370421_add_communities_muted_till_new.up.sql": &bintree{_1687370421_add_communities_muted_till_newUpSql, map[string]*bintree{}}, - "1687416607_add_communities_check_channel_permission_responses_table.up.sql": &bintree{_1687416607_add_communities_check_channel_permission_responses_tableUpSql, map[string]*bintree{}}, - "1687856939_add_community_tokens_decimals.up.sql": &bintree{_1687856939_add_community_tokens_decimalsUpSql, map[string]*bintree{}}, - "1687959987_modify_community_tokens_supply_as_string.up.sql": &bintree{_1687959987_modify_community_tokens_supply_as_stringUpSql, map[string]*bintree{}}, - "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": &bintree{_1689258900_add_airdrop_address_to_revealed_addressesUpSql, map[string]*bintree{}}, - "1689266326_create_communities_events_table.up.sql": &bintree{_1689266326_create_communities_events_tableUpSql, map[string]*bintree{}}, - "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": &bintree{_1689931300_add_community_tokens_deployer_and_priv_levelUpSql, map[string]*bintree{}}, - "1693311881_add_unfurled_links_to_message_edits.up.sql": &bintree{_1693311881_add_unfurled_links_to_message_editsUpSql, map[string]*bintree{}}, - "1693311981_community_shard.up.sql": &bintree{_1693311981_community_shardUpSql, map[string]*bintree{}}, - "1695331492_add_status_link_previews.up.sql": &bintree{_1695331492_add_status_link_previewsUpSql, map[string]*bintree{}}, - "1695918296_add_validated_at.up.sql": &bintree{_1695918296_add_validated_atUpSql, map[string]*bintree{}}, - "README.md": &bintree{readmeMd, map[string]*bintree{}}, - "doc.go": &bintree{docGo, map[string]*bintree{}}, + "000001_init.down.db.sql": {_000001_initDownDbSql, map[string]*bintree{}}, + "000001_init.up.db.sql": {_000001_initUpDbSql, map[string]*bintree{}}, + "000002_add_last_ens_clock_value.up.sql": {_000002_add_last_ens_clock_valueUpSql, map[string]*bintree{}}, + "1586358095_add_replace.up.sql": {_1586358095_add_replaceUpSql, map[string]*bintree{}}, + "1588665364_add_image_data.up.sql": {_1588665364_add_image_dataUpSql, map[string]*bintree{}}, + "1589365189_add_pow_target.up.sql": {_1589365189_add_pow_targetUpSql, map[string]*bintree{}}, + "1591277220_add_index_messages.up.sql": {_1591277220_add_index_messagesUpSql, map[string]*bintree{}}, + "1593087212_add_mute_chat_and_raw_message_fields.up.sql": {_1593087212_add_mute_chat_and_raw_message_fieldsUpSql, map[string]*bintree{}}, + "1595862781_add_audio_data.up.sql": {_1595862781_add_audio_dataUpSql, map[string]*bintree{}}, + "1595865249_create_emoji_reactions_table.up.sql": {_1595865249_create_emoji_reactions_tableUpSql, map[string]*bintree{}}, + "1596805115_create_group_chat_invitations_table.up.sql": {_1596805115_create_group_chat_invitations_tableUpSql, map[string]*bintree{}}, + "1597322655_add_invitation_admin_chat_field.up.sql": {_1597322655_add_invitation_admin_chat_fieldUpSql, map[string]*bintree{}}, + "1597757544_add_nickname.up.sql": {_1597757544_add_nicknameUpSql, map[string]*bintree{}}, + "1598955122_add_mentions.up.sql": {_1598955122_add_mentionsUpSql, map[string]*bintree{}}, + "1599641390_add_emoji_reactions_index.up.sql": {_1599641390_add_emoji_reactions_indexUpSql, map[string]*bintree{}}, + "1599720851_add_seen_index_remove_long_messages.up.sql": {_1599720851_add_seen_index_remove_long_messagesUpSql, map[string]*bintree{}}, + "1603198582_add_profile_chat_field.up.sql": {_1603198582_add_profile_chat_fieldUpSql, map[string]*bintree{}}, + "1603816533_add_links.up.sql": {_1603816533_add_linksUpSql, map[string]*bintree{}}, + "1603888149_create_chat_identity_last_published_table.up.sql": {_1603888149_create_chat_identity_last_published_tableUpSql, map[string]*bintree{}}, + "1605075346_add_communities.up.sql": {_1605075346_add_communitiesUpSql, map[string]*bintree{}}, + "1610117927_add_message_cache.up.sql": {_1610117927_add_message_cacheUpSql, map[string]*bintree{}}, + "1610959908_add_dont_wrap_to_raw_messages.up.sql": {_1610959908_add_dont_wrap_to_raw_messagesUpSql, map[string]*bintree{}}, + "1610960912_add_send_on_personal_topic.up.sql": {_1610960912_add_send_on_personal_topicUpSql, map[string]*bintree{}}, + "1612870480_add_datasync_id.up.sql": {_1612870480_add_datasync_idUpSql, map[string]*bintree{}}, + "1614152139_add_communities_request_to_join.up.sql": {_1614152139_add_communities_request_to_joinUpSql, map[string]*bintree{}}, + "1615374373_add_confirmations.up.sql": {_1615374373_add_confirmationsUpSql, map[string]*bintree{}}, + "1617694931_add_notification_center.up.sql": {_1617694931_add_notification_centerUpSql, map[string]*bintree{}}, + "1618923660_create_pin_messages.up.sql": {_1618923660_create_pin_messagesUpSql, map[string]*bintree{}}, + "1619094007_add_joined_chat_field.up.sql": {_1619094007_add_joined_chat_fieldUpSql, map[string]*bintree{}}, + "1619099821_add_last_synced_field.up.sql": {_1619099821_add_last_synced_fieldUpSql, map[string]*bintree{}}, + "1621933219_add_mentioned.up.sql": {_1621933219_add_mentionedUpSql, map[string]*bintree{}}, + "1622010048_add_unviewed_mentions_count.up.sql": {_1622010048_add_unviewed_mentions_countUpSql, map[string]*bintree{}}, + "1622061278_add_message_activity_center_notification_field.up.sql": {_1622061278_add_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, + "1622464518_set_synced_to_from.up.sql": {_1622464518_set_synced_to_fromUpSql, map[string]*bintree{}}, + "1622464519_add_chat_description.up.sql": {_1622464519_add_chat_descriptionUpSql, map[string]*bintree{}}, + "1622622253_add_pinned_by_to_pin_messages.up.sql": {_1622622253_add_pinned_by_to_pin_messagesUpSql, map[string]*bintree{}}, + "1623938329_add_author_activity_center_notification_field.up.sql": {_1623938329_add_author_activity_center_notification_fieldUpSql, map[string]*bintree{}}, + "1623938330_add_edit_messages.up.sql": {_1623938330_add_edit_messagesUpSql, map[string]*bintree{}}, + "1624978434_add_muted_community.up.sql": {_1624978434_add_muted_communityUpSql, map[string]*bintree{}}, + "1625018910_add_repply_message_activity_center_notification_field.up.sql": {_1625018910_add_repply_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, + "1625762506_add_deleted_messages.up.sql": {_1625762506_add_deleted_messagesUpSql, map[string]*bintree{}}, + "1627388946_add_communities_synced_at.up.sql": {_1627388946_add_communities_synced_atUpSql, map[string]*bintree{}}, + "1628280060_create-usermessages-index.sql": {_1628280060_createUsermessagesIndexSql, map[string]*bintree{}}, + "1632303896_modify_contacts_table.up.sql": {_1632303896_modify_contacts_tableUpSql, map[string]*bintree{}}, + "1633349838_add_emoji_column_in_chats.up.sql": {_1633349838_add_emoji_column_in_chatsUpSql, map[string]*bintree{}}, + "1634831235_add_highlight_column_in_chats.up.sql": {_1634831235_add_highlight_column_in_chatsUpSql, map[string]*bintree{}}, + "1634896007_add_last_updated_locally_and_removed.up.sql": {_1634896007_add_last_updated_locally_and_removedUpSql, map[string]*bintree{}}, + "1635840039_add_clock_read_at_column_in_chats.up.sql": {_1635840039_add_clock_read_at_column_in_chatsUpSql, map[string]*bintree{}}, + "1637852321_add_received_invitation_admin_column_in_chats.up.sql": {_1637852321_add_received_invitation_admin_column_in_chatsUpSql, map[string]*bintree{}}, + "1645034601_display_name.up.sql": {_1645034601_display_nameUpSql, map[string]*bintree{}}, + "1645034602_add_mutual_contact_request.up.sql": {_1645034602_add_mutual_contact_requestUpSql, map[string]*bintree{}}, + "1650373957_add_contact_request_state.up.sql": {_1650373957_add_contact_request_stateUpSql, map[string]*bintree{}}, + "1656958989_contact_verification.up.sql": {_1656958989_contact_verificationUpSql, map[string]*bintree{}}, + "1658236268_add_discord_message_authors_table.up.sql": {_1658236268_add_discord_message_authors_tableUpSql, map[string]*bintree{}}, + "1659619997_add_discord_messages_table.up.sql": {_1659619997_add_discord_messages_tableUpSql, map[string]*bintree{}}, + "1660226788_create_chat_identity_social_links.up.sql": {_1660226788_create_chat_identity_social_linksUpSql, map[string]*bintree{}}, + "1660226789_add_walletconnectsessions_table.up.sql": {_1660226789_add_walletconnectsessions_tableUpSql, map[string]*bintree{}}, + "1661242854_add_communities_requests_to_leave.up.sql": {_1661242854_add_communities_requests_to_leaveUpSql, map[string]*bintree{}}, + "1662044232_add_chat_image.up.sql": {_1662044232_add_chat_imageUpSql, map[string]*bintree{}}, + "1662106895_add_chat_first_message_timestamp.up.sql": {_1662106895_add_chat_first_message_timestampUpSql, map[string]*bintree{}}, + "1662723928_add_discord_author_image_fields.up.sql": {_1662723928_add_discord_author_image_fieldsUpSql, map[string]*bintree{}}, + "1664195977_add_deleted_for_mes.up.sql": {_1664195977_add_deleted_for_mesUpSql, map[string]*bintree{}}, + "1664367420_add_discord_attachments_table.up.sql": {_1664367420_add_discord_attachments_tableUpSql, map[string]*bintree{}}, + "1665079662_add_spectated_column_in_communities.up.sql": {_1665079662_add_spectated_column_in_communitiesUpSql, map[string]*bintree{}}, + "1665479047_add_community_id_in_notifications.up.sql": {_1665479047_add_community_id_in_notificationsUpSql, map[string]*bintree{}}, + "1665484435_add_encrypted_messages.up.sql": {_1665484435_add_encrypted_messagesUpSql, map[string]*bintree{}}, + "1665560200_add_contact_verification_individual.up.sql": {_1665560200_add_contact_verification_individualUpSql, map[string]*bintree{}}, + "1670921937_add_album_id.up.sql": {_1670921937_add_album_idUpSql, map[string]*bintree{}}, + "1673373000_add_replied.up.sql": {_1673373000_add_repliedUpSql, map[string]*bintree{}}, + "1673428910_add_image_width_height.up.sql": {_1673428910_add_image_width_heightUpSql, map[string]*bintree{}}, + "1674210659_add_contact_request_local_clock.up.sql": {_1674210659_add_contact_request_local_clockUpSql, map[string]*bintree{}}, + "1675212323_add_deleted_by.up.sql": {_1675212323_add_deleted_byUpSql, map[string]*bintree{}}, + "1675247084_add_activity_center_states.up.sql": {_1675247084_add_activity_center_statesUpSql, map[string]*bintree{}}, + "1675272329_fix_protocol_migration.up.sql": {_1675272329_fix_protocol_migrationUpSql, map[string]*bintree{}}, + "1676998418_fix_activity_center_migration.up.sql": {_1676998418_fix_activity_center_migrationUpSql, map[string]*bintree{}}, + "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql": {_1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql, map[string]*bintree{}}, + "1677486338_add_community_tokens_table.up.sql": {_1677486338_add_community_tokens_tableUpSql, map[string]*bintree{}}, + "1678292329_add_collapsed_categories.up.sql": {_1678292329_add_collapsed_categoriesUpSql, map[string]*bintree{}}, + "1678800760_add_index_to_raw_messages.up.sql": {_1678800760_add_index_to_raw_messagesUpSql, map[string]*bintree{}}, + "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql": {_1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql, map[string]*bintree{}}, + "1679326850_add_community_token_owners.up.sql": {_1679326850_add_community_token_ownersUpSql, map[string]*bintree{}}, + "1680011500_add_album_images_count.up.sql": {_1680011500_add_album_images_countUpSql, map[string]*bintree{}}, + "1680114896_add_index_on_album_id.up.sql": {_1680114896_add_index_on_album_idUpSql, map[string]*bintree{}}, + "1681655289_add_mute_till.up.sql": {_1681655289_add_mute_tillUpSql, map[string]*bintree{}}, + "1681934966_add_index_response_to.up.sql": {_1681934966_add_index_response_toUpSql, map[string]*bintree{}}, + "1682528339_add_index_user_messages_unseen.up.sql": {_1682528339_add_index_user_messages_unseenUpSql, map[string]*bintree{}}, + "1683707289_recreate_deleted_for_mes.up.sql": {_1683707289_recreate_deleted_for_mesUpSql, map[string]*bintree{}}, + "1683725607_mark_discord_messages_as_seen.up.sql": {_1683725607_mark_discord_messages_as_seenUpSql, map[string]*bintree{}}, + "1684174617_add_url_previews_to_user_messages.up.sql": {_1684174617_add_url_previews_to_user_messagesUpSql, map[string]*bintree{}}, + "1684175608_add_token_balances.up.sql": {_1684175608_add_token_balancesUpSql, map[string]*bintree{}}, + "1684979808_sync_activity_center_notifications.up.sql": {_1684979808_sync_activity_center_notificationsUpSql, map[string]*bintree{}}, + "1685383829_add_communities_mute_till.up.sql": {_1685383829_add_communities_mute_tillUpSql, map[string]*bintree{}}, + "1685964183_add_chainids_to_revealed_addresses.up.sql": {_1685964183_add_chainids_to_revealed_addressesUpSql, map[string]*bintree{}}, + "1687370421_add_communities_muted_till_new.up.sql": {_1687370421_add_communities_muted_till_newUpSql, map[string]*bintree{}}, + "1687416607_add_communities_check_channel_permission_responses_table.up.sql": {_1687416607_add_communities_check_channel_permission_responses_tableUpSql, map[string]*bintree{}}, + "1687856939_add_community_tokens_decimals.up.sql": {_1687856939_add_community_tokens_decimalsUpSql, map[string]*bintree{}}, + "1687959987_modify_community_tokens_supply_as_string.up.sql": {_1687959987_modify_community_tokens_supply_as_stringUpSql, map[string]*bintree{}}, + "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": {_1689258900_add_airdrop_address_to_revealed_addressesUpSql, map[string]*bintree{}}, + "1689266326_create_communities_events_table.up.sql": {_1689266326_create_communities_events_tableUpSql, map[string]*bintree{}}, + "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": {_1689931300_add_community_tokens_deployer_and_priv_levelUpSql, map[string]*bintree{}}, + "1693311881_add_unfurled_links_to_message_edits.up.sql": {_1693311881_add_unfurled_links_to_message_editsUpSql, map[string]*bintree{}}, + "1693311981_community_shard.up.sql": {_1693311981_community_shardUpSql, map[string]*bintree{}}, + "1695331492_add_status_link_previews.up.sql": {_1695331492_add_status_link_previewsUpSql, map[string]*bintree{}}, + "1695918296_add_validated_at.up.sql": {_1695918296_add_validated_atUpSql, map[string]*bintree{}}, + "1697699419_community_control_node_sync.up.sql": {_1697699419_community_control_node_syncUpSql, map[string]*bintree{}}, + "README.md": {readmeMd, map[string]*bintree{}}, + "doc.go": {docGo, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. @@ -2761,7 +2683,7 @@ func RestoreAsset(dir, name string) error { if err != nil { return err } - err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + err = os.WriteFile(_filePath(dir, name), data, info.Mode()) if err != nil { return err } diff --git a/protocol/migrations/sqlite/1697699419_community_control_node_sync.up.sql b/protocol/migrations/sqlite/1697699419_community_control_node_sync.up.sql new file mode 100644 index 000000000..5c9fcc93c --- /dev/null +++ b/protocol/migrations/sqlite/1697699419_community_control_node_sync.up.sql @@ -0,0 +1,18 @@ +CREATE TABLE communities_control_node ( + community_id BLOB NOT NULL PRIMARY KEY ON CONFLICT REPLACE, + clock INT NOT NULL, + installation_id VARCHAR NOT NULL +); + +INSERT INTO + communities_control_node (community_id, clock, installation_id) +SELECT + c.id, + 1 AS clock, + s.installation_id +FROM + communities_communities AS c + JOIN shhext_config AS s +WHERE + c.private_key IS NOT NULL + AND c.private_key != ''; diff --git a/protocol/protobuf/pairing.pb.go b/protocol/protobuf/pairing.pb.go index 266ae3570..9fbd67469 100644 --- a/protocol/protobuf/pairing.pb.go +++ b/protocol/protobuf/pairing.pb.go @@ -45,7 +45,7 @@ func (x SyncTrustedUser_TrustStatus) String() string { } func (SyncTrustedUser_TrustStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{30, 0} + return fileDescriptor_d61ab7221f0b5518, []int{31, 0} } type SyncVerificationRequest_VerificationStatus int32 @@ -79,7 +79,7 @@ func (x SyncVerificationRequest_VerificationStatus) String() string { } func (SyncVerificationRequest_VerificationStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{31, 0} + return fileDescriptor_d61ab7221f0b5518, []int{32, 0} } type SyncContactRequestDecision_DecisionStatus int32 @@ -104,7 +104,7 @@ func (x SyncContactRequestDecision_DecisionStatus) String() string { } func (SyncContactRequestDecision_DecisionStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{32, 0} + return fileDescriptor_d61ab7221f0b5518, []int{33, 0} } // `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of @@ -1074,6 +1074,7 @@ type SyncInstallationCommunity struct { Encrypted bool `protobuf:"varint,10,opt,name=encrypted,proto3" json:"encrypted,omitempty"` Spectated bool `protobuf:"varint,11,opt,name=spectated,proto3" json:"spectated,omitempty"` EncryptionKeys []byte `protobuf:"bytes,12,opt,name=encryption_keys,json=encryptionKeys,proto3" json:"encryption_keys,omitempty"` + ControlNode *SyncCommunityControlNode `protobuf:"bytes,13,opt,name=control_node,json=controlNode,proto3" json:"control_node,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1189,6 +1190,13 @@ func (m *SyncInstallationCommunity) GetEncryptionKeys() []byte { return nil } +func (m *SyncInstallationCommunity) GetControlNode() *SyncCommunityControlNode { + if m != nil { + return m.ControlNode + } + return nil +} + type SyncCommunityRequestsToJoin struct { Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` @@ -1284,6 +1292,56 @@ func (m *SyncCommunityRequestsToJoin) GetRevealedAccounts() []*RevealedAccount { return nil } +type SyncCommunityControlNode struct { + // Lamport timestamp of control node change + Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` + // The device id of the control node + // Empty if there is no control node + InstallationId string `protobuf:"bytes,2,opt,name=installation_id,json=installationId,proto3" json:"installation_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SyncCommunityControlNode) Reset() { *m = SyncCommunityControlNode{} } +func (m *SyncCommunityControlNode) String() string { return proto.CompactTextString(m) } +func (*SyncCommunityControlNode) ProtoMessage() {} +func (*SyncCommunityControlNode) Descriptor() ([]byte, []int) { + return fileDescriptor_d61ab7221f0b5518, []int{10} +} + +func (m *SyncCommunityControlNode) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SyncCommunityControlNode.Unmarshal(m, b) +} +func (m *SyncCommunityControlNode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SyncCommunityControlNode.Marshal(b, m, deterministic) +} +func (m *SyncCommunityControlNode) XXX_Merge(src proto.Message) { + xxx_messageInfo_SyncCommunityControlNode.Merge(m, src) +} +func (m *SyncCommunityControlNode) XXX_Size() int { + return xxx_messageInfo_SyncCommunityControlNode.Size(m) +} +func (m *SyncCommunityControlNode) XXX_DiscardUnknown() { + xxx_messageInfo_SyncCommunityControlNode.DiscardUnknown(m) +} + +var xxx_messageInfo_SyncCommunityControlNode proto.InternalMessageInfo + +func (m *SyncCommunityControlNode) GetClock() uint64 { + if m != nil { + return m.Clock + } + return 0 +} + +func (m *SyncCommunityControlNode) GetInstallationId() string { + if m != nil { + return m.InstallationId + } + return "" +} + type SyncChat struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ChatType uint32 `protobuf:"varint,2,opt,name=chat_type,json=chatType,proto3" json:"chat_type,omitempty"` @@ -1301,7 +1359,7 @@ func (m *SyncChat) Reset() { *m = SyncChat{} } func (m *SyncChat) String() string { return proto.CompactTextString(m) } func (*SyncChat) ProtoMessage() {} func (*SyncChat) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{10} + return fileDescriptor_d61ab7221f0b5518, []int{11} } func (m *SyncChat) XXX_Unmarshal(b []byte) error { @@ -1391,7 +1449,7 @@ func (m *MembershipUpdateEvents) Reset() { *m = MembershipUpdateEvents{} func (m *MembershipUpdateEvents) String() string { return proto.CompactTextString(m) } func (*MembershipUpdateEvents) ProtoMessage() {} func (*MembershipUpdateEvents) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{11} + return fileDescriptor_d61ab7221f0b5518, []int{12} } func (m *MembershipUpdateEvents) XXX_Unmarshal(b []byte) error { @@ -1494,7 +1552,7 @@ func (m *SyncChatRemoved) Reset() { *m = SyncChatRemoved{} } func (m *SyncChatRemoved) String() string { return proto.CompactTextString(m) } func (*SyncChatRemoved) ProtoMessage() {} func (*SyncChatRemoved) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{12} + return fileDescriptor_d61ab7221f0b5518, []int{13} } func (m *SyncChatRemoved) XXX_Unmarshal(b []byte) error { @@ -1541,7 +1599,7 @@ func (m *SyncChatMessagesRead) Reset() { *m = SyncChatMessagesRead{} } func (m *SyncChatMessagesRead) String() string { return proto.CompactTextString(m) } func (*SyncChatMessagesRead) ProtoMessage() {} func (*SyncChatMessagesRead) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{13} + return fileDescriptor_d61ab7221f0b5518, []int{14} } func (m *SyncChatMessagesRead) XXX_Unmarshal(b []byte) error { @@ -1588,7 +1646,7 @@ func (m *SyncActivityCenterRead) Reset() { *m = SyncActivityCenterRead{} func (m *SyncActivityCenterRead) String() string { return proto.CompactTextString(m) } func (*SyncActivityCenterRead) ProtoMessage() {} func (*SyncActivityCenterRead) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{14} + return fileDescriptor_d61ab7221f0b5518, []int{15} } func (m *SyncActivityCenterRead) XXX_Unmarshal(b []byte) error { @@ -1635,7 +1693,7 @@ func (m *SyncActivityCenterAccepted) Reset() { *m = SyncActivityCenterAc func (m *SyncActivityCenterAccepted) String() string { return proto.CompactTextString(m) } func (*SyncActivityCenterAccepted) ProtoMessage() {} func (*SyncActivityCenterAccepted) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{15} + return fileDescriptor_d61ab7221f0b5518, []int{16} } func (m *SyncActivityCenterAccepted) XXX_Unmarshal(b []byte) error { @@ -1682,7 +1740,7 @@ func (m *SyncActivityCenterDismissed) Reset() { *m = SyncActivityCenterD func (m *SyncActivityCenterDismissed) String() string { return proto.CompactTextString(m) } func (*SyncActivityCenterDismissed) ProtoMessage() {} func (*SyncActivityCenterDismissed) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{16} + return fileDescriptor_d61ab7221f0b5518, []int{17} } func (m *SyncActivityCenterDismissed) XXX_Unmarshal(b []byte) error { @@ -1729,7 +1787,7 @@ func (m *SyncActivityCenterDeleted) Reset() { *m = SyncActivityCenterDel func (m *SyncActivityCenterDeleted) String() string { return proto.CompactTextString(m) } func (*SyncActivityCenterDeleted) ProtoMessage() {} func (*SyncActivityCenterDeleted) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{17} + return fileDescriptor_d61ab7221f0b5518, []int{18} } func (m *SyncActivityCenterDeleted) XXX_Unmarshal(b []byte) error { @@ -1776,7 +1834,7 @@ func (m *SyncActivityCenterUnread) Reset() { *m = SyncActivityCenterUnre func (m *SyncActivityCenterUnread) String() string { return proto.CompactTextString(m) } func (*SyncActivityCenterUnread) ProtoMessage() {} func (*SyncActivityCenterUnread) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{18} + return fileDescriptor_d61ab7221f0b5518, []int{19} } func (m *SyncActivityCenterUnread) XXX_Unmarshal(b []byte) error { @@ -1823,7 +1881,7 @@ func (m *SyncActivityCenterNotificationState) Reset() { *m = SyncActivit func (m *SyncActivityCenterNotificationState) String() string { return proto.CompactTextString(m) } func (*SyncActivityCenterNotificationState) ProtoMessage() {} func (*SyncActivityCenterNotificationState) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{19} + return fileDescriptor_d61ab7221f0b5518, []int{20} } func (m *SyncActivityCenterNotificationState) XXX_Unmarshal(b []byte) error { @@ -1874,7 +1932,7 @@ func (m *SyncBookmark) Reset() { *m = SyncBookmark{} } func (m *SyncBookmark) String() string { return proto.CompactTextString(m) } func (*SyncBookmark) ProtoMessage() {} func (*SyncBookmark) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{20} + return fileDescriptor_d61ab7221f0b5518, []int{21} } func (m *SyncBookmark) XXX_Unmarshal(b []byte) error { @@ -1951,7 +2009,7 @@ func (m *SyncEnsUsernameDetail) Reset() { *m = SyncEnsUsernameDetail{} } func (m *SyncEnsUsernameDetail) String() string { return proto.CompactTextString(m) } func (*SyncEnsUsernameDetail) ProtoMessage() {} func (*SyncEnsUsernameDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{21} + return fileDescriptor_d61ab7221f0b5518, []int{22} } func (m *SyncEnsUsernameDetail) XXX_Unmarshal(b []byte) error { @@ -2012,7 +2070,7 @@ func (m *SyncClearHistory) Reset() { *m = SyncClearHistory{} } func (m *SyncClearHistory) String() string { return proto.CompactTextString(m) } func (*SyncClearHistory) ProtoMessage() {} func (*SyncClearHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{22} + return fileDescriptor_d61ab7221f0b5518, []int{23} } func (m *SyncClearHistory) XXX_Unmarshal(b []byte) error { @@ -2064,7 +2122,7 @@ func (m *SyncProfilePicture) Reset() { *m = SyncProfilePicture{} } func (m *SyncProfilePicture) String() string { return proto.CompactTextString(m) } func (*SyncProfilePicture) ProtoMessage() {} func (*SyncProfilePicture) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{23} + return fileDescriptor_d61ab7221f0b5518, []int{24} } func (m *SyncProfilePicture) XXX_Unmarshal(b []byte) error { @@ -2146,7 +2204,7 @@ func (m *SyncProfilePictures) Reset() { *m = SyncProfilePictures{} } func (m *SyncProfilePictures) String() string { return proto.CompactTextString(m) } func (*SyncProfilePictures) ProtoMessage() {} func (*SyncProfilePictures) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{24} + return fileDescriptor_d61ab7221f0b5518, []int{25} } func (m *SyncProfilePictures) XXX_Unmarshal(b []byte) error { @@ -2207,7 +2265,7 @@ func (m *SyncAccount) Reset() { *m = SyncAccount{} } func (m *SyncAccount) String() string { return proto.CompactTextString(m) } func (*SyncAccount) ProtoMessage() {} func (*SyncAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{25} + return fileDescriptor_d61ab7221f0b5518, []int{26} } func (m *SyncAccount) XXX_Unmarshal(b []byte) error { @@ -2361,7 +2419,7 @@ func (m *SyncKeypair) Reset() { *m = SyncKeypair{} } func (m *SyncKeypair) String() string { return proto.CompactTextString(m) } func (*SyncKeypair) ProtoMessage() {} func (*SyncKeypair) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{26} + return fileDescriptor_d61ab7221f0b5518, []int{27} } func (m *SyncKeypair) XXX_Unmarshal(b []byte) error { @@ -2473,7 +2531,7 @@ func (m *SyncAccountsPositions) Reset() { *m = SyncAccountsPositions{} } func (m *SyncAccountsPositions) String() string { return proto.CompactTextString(m) } func (*SyncAccountsPositions) ProtoMessage() {} func (*SyncAccountsPositions) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{27} + return fileDescriptor_d61ab7221f0b5518, []int{28} } func (m *SyncAccountsPositions) XXX_Unmarshal(b []byte) error { @@ -2526,7 +2584,7 @@ func (m *SyncSavedAddress) Reset() { *m = SyncSavedAddress{} } func (m *SyncSavedAddress) String() string { return proto.CompactTextString(m) } func (*SyncSavedAddress) ProtoMessage() {} func (*SyncSavedAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{28} + return fileDescriptor_d61ab7221f0b5518, []int{29} } func (m *SyncSavedAddress) XXX_Unmarshal(b []byte) error { @@ -2616,7 +2674,7 @@ func (m *SyncCommunitySettings) Reset() { *m = SyncCommunitySettings{} } func (m *SyncCommunitySettings) String() string { return proto.CompactTextString(m) } func (*SyncCommunitySettings) ProtoMessage() {} func (*SyncCommunitySettings) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{29} + return fileDescriptor_d61ab7221f0b5518, []int{30} } func (m *SyncCommunitySettings) XXX_Unmarshal(b []byte) error { @@ -2671,7 +2729,7 @@ func (m *SyncTrustedUser) Reset() { *m = SyncTrustedUser{} } func (m *SyncTrustedUser) String() string { return proto.CompactTextString(m) } func (*SyncTrustedUser) ProtoMessage() {} func (*SyncTrustedUser) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{30} + return fileDescriptor_d61ab7221f0b5518, []int{31} } func (m *SyncTrustedUser) XXX_Unmarshal(b []byte) error { @@ -2732,7 +2790,7 @@ func (m *SyncVerificationRequest) Reset() { *m = SyncVerificationRequest func (m *SyncVerificationRequest) String() string { return proto.CompactTextString(m) } func (*SyncVerificationRequest) ProtoMessage() {} func (*SyncVerificationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{31} + return fileDescriptor_d61ab7221f0b5518, []int{32} } func (m *SyncVerificationRequest) XXX_Unmarshal(b []byte) error { @@ -2829,7 +2887,7 @@ func (m *SyncContactRequestDecision) Reset() { *m = SyncContactRequestDe func (m *SyncContactRequestDecision) String() string { return proto.CompactTextString(m) } func (*SyncContactRequestDecision) ProtoMessage() {} func (*SyncContactRequestDecision) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{32} + return fileDescriptor_d61ab7221f0b5518, []int{33} } func (m *SyncContactRequestDecision) XXX_Unmarshal(b []byte) error { @@ -2888,7 +2946,7 @@ func (m *BackedUpProfile) Reset() { *m = BackedUpProfile{} } func (m *BackedUpProfile) String() string { return proto.CompactTextString(m) } func (*BackedUpProfile) ProtoMessage() {} func (*BackedUpProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{33} + return fileDescriptor_d61ab7221f0b5518, []int{34} } func (m *BackedUpProfile) XXX_Unmarshal(b []byte) error { @@ -2963,7 +3021,7 @@ func (m *RawMessage) Reset() { *m = RawMessage{} } func (m *RawMessage) String() string { return proto.CompactTextString(m) } func (*RawMessage) ProtoMessage() {} func (*RawMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{34} + return fileDescriptor_d61ab7221f0b5518, []int{35} } func (m *RawMessage) XXX_Unmarshal(b []byte) error { @@ -3012,7 +3070,7 @@ func (m *SyncRawMessage) Reset() { *m = SyncRawMessage{} } func (m *SyncRawMessage) String() string { return proto.CompactTextString(m) } func (*SyncRawMessage) ProtoMessage() {} func (*SyncRawMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{35} + return fileDescriptor_d61ab7221f0b5518, []int{36} } func (m *SyncRawMessage) XXX_Unmarshal(b []byte) error { @@ -3070,7 +3128,7 @@ func (m *SyncKeycard) Reset() { *m = SyncKeycard{} } func (m *SyncKeycard) String() string { return proto.CompactTextString(m) } func (*SyncKeycard) ProtoMessage() {} func (*SyncKeycard) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{36} + return fileDescriptor_d61ab7221f0b5518, []int{37} } func (m *SyncKeycard) XXX_Unmarshal(b []byte) error { @@ -3145,7 +3203,7 @@ func (m *SyncSocialLinks) Reset() { *m = SyncSocialLinks{} } func (m *SyncSocialLinks) String() string { return proto.CompactTextString(m) } func (*SyncSocialLinks) ProtoMessage() {} func (*SyncSocialLinks) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{37} + return fileDescriptor_d61ab7221f0b5518, []int{38} } func (m *SyncSocialLinks) XXX_Unmarshal(b []byte) error { @@ -3193,7 +3251,7 @@ func (m *SyncAccountCustomizationColor) Reset() { *m = SyncAccountCustom func (m *SyncAccountCustomizationColor) String() string { return proto.CompactTextString(m) } func (*SyncAccountCustomizationColor) ProtoMessage() {} func (*SyncAccountCustomizationColor) Descriptor() ([]byte, []int) { - return fileDescriptor_d61ab7221f0b5518, []int{38} + return fileDescriptor_d61ab7221f0b5518, []int{39} } func (m *SyncAccountCustomizationColor) XXX_Unmarshal(b []byte) error { @@ -3252,6 +3310,7 @@ func init() { proto.RegisterType((*SyncInstallationAccount)(nil), "protobuf.SyncInstallationAccount") proto.RegisterType((*SyncInstallationCommunity)(nil), "protobuf.SyncInstallationCommunity") proto.RegisterType((*SyncCommunityRequestsToJoin)(nil), "protobuf.SyncCommunityRequestsToJoin") + proto.RegisterType((*SyncCommunityControlNode)(nil), "protobuf.SyncCommunityControlNode") proto.RegisterType((*SyncChat)(nil), "protobuf.SyncChat") proto.RegisterType((*MembershipUpdateEvents)(nil), "protobuf.MembershipUpdateEvents") proto.RegisterType((*SyncChatRemoved)(nil), "protobuf.SyncChatRemoved") @@ -3288,203 +3347,206 @@ func init() { } var fileDescriptor_d61ab7221f0b5518 = []byte{ - // 3168 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x3a, 0x4b, 0x6f, 0x1c, 0xc7, - 0xd1, 0xde, 0x07, 0x97, 0xbb, 0xb5, 0xcb, 0x87, 0x5a, 0x94, 0xb4, 0xa2, 0x24, 0x98, 0x1a, 0x7d, - 0x86, 0xe5, 0x0f, 0x0e, 0x9d, 0xc8, 0x4e, 0x1c, 0xf8, 0x01, 0x87, 0x22, 0xe9, 0x88, 0x7a, 0x50, - 0x4c, 0x93, 0x94, 0x9d, 0x20, 0xc0, 0xb8, 0x35, 0xd3, 0xe2, 0xb6, 0xb9, 0x3b, 0x33, 0x99, 0xee, - 0x25, 0xb3, 0x3e, 0x04, 0xc8, 0xcd, 0xc7, 0xdc, 0x7c, 0x0b, 0x7c, 0xc8, 0x21, 0xc8, 0x31, 0xb7, - 0xfc, 0x80, 0x04, 0x39, 0xe6, 0x9e, 0xfc, 0x81, 0xfc, 0x83, 0x5c, 0x02, 0x04, 0x55, 0xdd, 0x33, - 0x3b, 0xb3, 0x0f, 0x59, 0x3c, 0x71, 0xaa, 0xba, 0xba, 0xba, 0xba, 0xeb, 0x5d, 0x4b, 0x58, 0x4a, - 0x84, 0x4a, 0x55, 0x74, 0xb2, 0x99, 0xa4, 0xb1, 0x89, 0x59, 0x93, 0xfe, 0x3c, 0x1f, 0xbe, 0x58, - 0xbf, 0x1c, 0xf4, 0x84, 0xf1, 0x55, 0x28, 0x23, 0xa3, 0xcc, 0xc8, 0x2e, 0xaf, 0x5f, 0xd6, 0xa3, - 0x28, 0xf0, 0xb5, 0x34, 0x46, 0x45, 0x27, 0xda, 0x21, 0x3d, 0x91, 0x24, 0x7d, 0x15, 0x08, 0xa3, - 0xe2, 0xc8, 0x1f, 0x48, 0x23, 0x42, 0x61, 0x84, 0x3f, 0x90, 0x5a, 0x8b, 0x13, 0xe9, 0x68, 0x2e, - 0x05, 0xf1, 0x60, 0x30, 0x8c, 0x94, 0x51, 0xd2, 0x6d, 0xf3, 0x04, 0xdc, 0xf8, 0x54, 0x9a, 0xa0, - 0xa7, 0xa2, 0x93, 0xfb, 0x22, 0x38, 0x95, 0xe1, 0x71, 0xb2, 0x23, 0x8c, 0xd8, 0x91, 0x46, 0xa8, - 0xbe, 0x66, 0xaf, 0x43, 0x9b, 0xf8, 0x44, 0xc3, 0xc1, 0x73, 0x99, 0x76, 0x2b, 0x1b, 0x95, 0xbb, - 0x4b, 0x1c, 0x10, 0xb5, 0x4f, 0x18, 0x76, 0x1b, 0x3a, 0x26, 0x36, 0xa2, 0x9f, 0x51, 0x54, 0x89, - 0xa2, 0x4d, 0x38, 0x4b, 0xe2, 0xfd, 0x77, 0x11, 0x1a, 0xc8, 0x7b, 0x98, 0xb0, 0x35, 0x58, 0x08, - 0xfa, 0x71, 0x70, 0x4a, 0x8c, 0xea, 0xdc, 0x02, 0x6c, 0x19, 0xaa, 0x2a, 0xa4, 0x9d, 0x2d, 0x5e, - 0x55, 0x21, 0xfb, 0x04, 0x9a, 0x41, 0x1c, 0x19, 0x11, 0x18, 0xdd, 0xad, 0x6d, 0xd4, 0xee, 0xb6, - 0xef, 0xdd, 0xd9, 0xcc, 0x5e, 0x64, 0xf3, 0x70, 0x14, 0x05, 0x7b, 0x91, 0x36, 0xa2, 0xdf, 0xa7, - 0xbb, 0x6e, 0x5b, 0xca, 0x67, 0xf7, 0x78, 0xbe, 0x89, 0xed, 0x42, 0xbb, 0x70, 0xd3, 0x6e, 0xfd, - 0xbb, 0x79, 0x58, 0xe2, 0x11, 0x2f, 0xee, 0x63, 0x4f, 0x61, 0x25, 0x63, 0xe9, 0xde, 0xa3, 0xbb, - 0xb0, 0x51, 0xb9, 0xdb, 0xbe, 0xf7, 0xc6, 0x98, 0xd5, 0x4b, 0x1e, 0x8f, 0x4f, 0xee, 0x66, 0xc7, - 0xc0, 0x0a, 0xfc, 0x33, 0x9e, 0x8d, 0x8b, 0xf0, 0x9c, 0xc1, 0x80, 0xbd, 0x0b, 0x8b, 0x49, 0x1a, - 0xbf, 0x50, 0x7d, 0xd9, 0x5d, 0x24, 0x5e, 0xd7, 0xc7, 0xbc, 0x32, 0x1e, 0x07, 0x96, 0x80, 0x67, - 0x94, 0xec, 0x09, 0x2c, 0xbb, 0xcf, 0x4c, 0x8e, 0xe6, 0x45, 0xe4, 0x98, 0xd8, 0xcc, 0xde, 0x81, - 0x45, 0x67, 0x90, 0xdd, 0x16, 0xf1, 0xb9, 0x52, 0x7e, 0xee, 0x43, 0xbb, 0xc8, 0x33, 0x2a, 0x7c, - 0xdc, 0xcc, 0x82, 0x33, 0x01, 0xe0, 0x42, 0x8f, 0x3b, 0xb1, 0x1b, 0x25, 0x38, 0x95, 0x23, 0x74, - 0xa4, 0x6e, 0x7b, 0x96, 0x04, 0x8f, 0xec, 0x22, 0xcf, 0xa8, 0xf0, 0x05, 0xdc, 0x67, 0x26, 0x40, - 0xe7, 0x42, 0x2f, 0x50, 0xde, 0xcc, 0xb6, 0x60, 0xf5, 0x5c, 0x98, 0xa0, 0xf7, 0x34, 0xea, 0x8f, - 0xb6, 0x82, 0x20, 0x1e, 0x46, 0xa6, 0xbb, 0x34, 0x4b, 0x10, 0xb7, 0xc8, 0xa7, 0xc8, 0x99, 0x0f, - 0xd7, 0x26, 0x71, 0x99, 0x68, 0xcb, 0x17, 0x11, 0x6d, 0x1e, 0x17, 0x76, 0x17, 0x16, 0x30, 0xa0, - 0xe8, 0xee, 0x0a, 0xb9, 0x04, 0x2b, 0x0b, 0xb6, 0xdd, 0x13, 0x86, 0x5b, 0x02, 0xb6, 0x07, 0x1d, - 0xfa, 0xc8, 0xce, 0x5f, 0xbd, 0xc8, 0xf9, 0xa5, 0xad, 0xde, 0x1f, 0x17, 0xa0, 0xf3, 0x64, 0xd8, - 0x37, 0x2a, 0xbb, 0x26, 0x83, 0x7a, 0x24, 0x06, 0x92, 0x82, 0x40, 0x8b, 0xd3, 0x37, 0xbb, 0x09, - 0x2d, 0xa3, 0x06, 0x52, 0x1b, 0x31, 0x48, 0x28, 0x14, 0xd4, 0xf8, 0x18, 0x81, 0xab, 0x36, 0x06, - 0x06, 0x71, 0xd4, 0xad, 0xd1, 0xb6, 0x31, 0x82, 0x7d, 0x02, 0x10, 0xc4, 0xfd, 0x38, 0xf5, 0x7b, - 0x42, 0xf7, 0x9c, 0xb7, 0x6f, 0x8c, 0x25, 0x2d, 0x9e, 0xbd, 0xb9, 0x8d, 0x84, 0x0f, 0x84, 0xee, - 0xf1, 0x56, 0x90, 0x7d, 0xb2, 0xeb, 0x18, 0x70, 0x90, 0x81, 0x0a, 0xc9, 0xc3, 0x6b, 0x7c, 0x91, - 0xe0, 0xbd, 0x90, 0xbd, 0x09, 0x2b, 0xa7, 0x72, 0x14, 0x88, 0x34, 0xf4, 0x5d, 0x8c, 0x26, 0x7f, - 0x6d, 0x91, 0xfa, 0x11, 0x7d, 0x60, 0xb1, 0xec, 0x1a, 0x99, 0x9f, 0x3f, 0x54, 0x21, 0x39, 0x61, - 0x8b, 0x37, 0x4e, 0xe5, 0xe8, 0x58, 0x85, 0xec, 0x23, 0x68, 0xa8, 0x81, 0x38, 0x91, 0xe8, 0x60, - 0x28, 0xd9, 0xff, 0xcd, 0x91, 0x6c, 0xcf, 0x05, 0xf9, 0x3d, 0x24, 0xe6, 0x6e, 0x0f, 0x7b, 0x07, - 0x2e, 0x07, 0x43, 0x6d, 0xe2, 0x81, 0xfa, 0xca, 0x86, 0x76, 0x12, 0x8c, 0x7c, 0xac, 0xc5, 0x59, - 0x69, 0x89, 0xae, 0xc6, 0x3e, 0x80, 0xeb, 0x33, 0x36, 0xf8, 0x36, 0xec, 0x02, 0x85, 0xdd, 0x6b, - 0xd3, 0xdb, 0xb6, 0x71, 0x79, 0xfd, 0x36, 0xb4, 0xf2, 0xf7, 0xc1, 0x58, 0xad, 0xa2, 0x50, 0xfe, - 0xba, 0x5b, 0xd9, 0xa8, 0xdd, 0xad, 0x71, 0x0b, 0xac, 0xff, 0xb3, 0x02, 0x4b, 0x25, 0x49, 0x8b, - 0x17, 0xaf, 0x94, 0x2e, 0x9e, 0xa9, 0xb9, 0x5a, 0x50, 0x73, 0x17, 0x16, 0x13, 0x31, 0xea, 0xc7, - 0x22, 0x24, 0x35, 0x76, 0x78, 0x06, 0xe2, 0x71, 0xe7, 0x2a, 0x34, 0xa8, 0x3f, 0x54, 0x80, 0x05, - 0xd8, 0x55, 0x68, 0xf4, 0xa4, 0x3a, 0xe9, 0x19, 0xa7, 0x17, 0x07, 0xb1, 0x75, 0x68, 0x62, 0xf4, - 0xd1, 0xea, 0x2b, 0x49, 0xfa, 0xa8, 0xf1, 0x1c, 0x66, 0x77, 0x60, 0x29, 0xa5, 0x2f, 0xdf, 0x88, - 0xf4, 0x44, 0x1a, 0xd2, 0x47, 0x8d, 0x77, 0x2c, 0xf2, 0x88, 0x70, 0xe3, 0x4c, 0xd4, 0x2c, 0x64, - 0x22, 0xef, 0x9b, 0x2a, 0x5c, 0x7e, 0x1c, 0x07, 0xa2, 0xef, 0xb4, 0x7a, 0xe0, 0x84, 0xfb, 0x21, - 0xd4, 0x4f, 0xe5, 0x48, 0xd3, 0x53, 0xb4, 0xef, 0xdd, 0x1e, 0x6b, 0x70, 0x06, 0xf1, 0xe6, 0x23, - 0x39, 0xe2, 0x44, 0xce, 0x3e, 0x80, 0xce, 0x00, 0x55, 0x2c, 0x5c, 0x38, 0xa8, 0x92, 0x13, 0x5d, - 0x9d, 0x6d, 0x00, 0xbc, 0x44, 0x8b, 0x37, 0x4c, 0x84, 0xd6, 0xe7, 0x71, 0x1a, 0x3a, 0x8b, 0xcf, - 0x61, 0x7c, 0x45, 0xf4, 0xb0, 0x47, 0x72, 0x44, 0xaf, 0xd5, 0xe2, 0x19, 0xc8, 0xee, 0xe6, 0xe6, - 0xea, 0x84, 0xb2, 0x29, 0xab, 0xc5, 0x27, 0xd1, 0xeb, 0xdf, 0x83, 0x1a, 0x6e, 0x98, 0xe5, 0x8b, - 0x0c, 0xea, 0x98, 0xe1, 0x49, 0xdc, 0x0e, 0xa7, 0x6f, 0xef, 0x2f, 0x15, 0xb8, 0x52, 0xba, 0xac, - 0x94, 0xe9, 0x03, 0xd9, 0xef, 0xc7, 0xe8, 0x21, 0xce, 0x33, 0xfc, 0x33, 0x99, 0x6a, 0x15, 0x47, - 0xc4, 0x6c, 0x81, 0x2f, 0x3b, 0xf4, 0x33, 0x8b, 0x45, 0x43, 0x49, 0xa4, 0x24, 0x27, 0xb3, 0x9c, - 0x1b, 0x08, 0xee, 0x85, 0x54, 0x64, 0xc8, 0x33, 0x15, 0x48, 0x9f, 0x44, 0xb1, 0xb7, 0x05, 0x8b, - 0xda, 0x47, 0x81, 0xc6, 0x04, 0x66, 0x94, 0x48, 0x77, 0x67, 0x47, 0x70, 0x34, 0x4a, 0x28, 0x7a, - 0x68, 0x75, 0x12, 0x09, 0x33, 0x4c, 0x25, 0x5d, 0xb8, 0xc3, 0xc7, 0x08, 0xef, 0x0f, 0x15, 0x58, - 0xc3, 0xf8, 0x86, 0xa2, 0x17, 0xd3, 0xfe, 0x9c, 0x72, 0xe4, 0x4d, 0x58, 0x51, 0x05, 0x2a, 0x3f, - 0xaf, 0x4d, 0x96, 0x8b, 0xe8, 0x92, 0xdc, 0x24, 0x56, 0x6d, 0x4a, 0xac, 0xec, 0x71, 0xeb, 0x65, - 0x0f, 0xc8, 0x9e, 0x69, 0x81, 0x6a, 0xa5, 0x0c, 0xf4, 0x7e, 0xdb, 0x80, 0xeb, 0x73, 0xab, 0x1b, - 0xf6, 0x7d, 0x58, 0xeb, 0x0b, 0x6d, 0xfc, 0x61, 0x12, 0x0a, 0x23, 0x43, 0xbf, 0x8f, 0xca, 0xe8, - 0x8f, 0x9c, 0xe8, 0x0c, 0xd7, 0x8e, 0xed, 0xd2, 0x63, 0xbb, 0x32, 0x55, 0x56, 0xdd, 0x81, 0x25, - 0x97, 0xb4, 0x7d, 0x0a, 0x2e, 0x4e, 0xe0, 0x8e, 0x43, 0x5a, 0x6f, 0xbe, 0x0e, 0x4d, 0x19, 0x69, - 0xbf, 0x20, 0xf6, 0xa2, 0x8c, 0x34, 0x69, 0xe1, 0x36, 0x74, 0x8a, 0x12, 0x90, 0xf8, 0x75, 0xde, - 0x2e, 0x9c, 0x8c, 0x2f, 0xa2, 0x47, 0xda, 0xc8, 0x81, 0x6f, 0xc4, 0x09, 0x56, 0x36, 0x35, 0x7c, - 0x11, 0x8b, 0x3a, 0x12, 0x27, 0x9a, 0xbd, 0x01, 0xcb, 0x24, 0xb8, 0x1f, 0xa9, 0xe0, 0x94, 0x0e, - 0xb1, 0xc1, 0x72, 0x89, 0xb0, 0xfb, 0x0e, 0x89, 0x8a, 0x11, 0x61, 0x28, 0x43, 0x8a, 0x73, 0x4d, - 0x6e, 0x01, 0x7c, 0xba, 0xe7, 0xa8, 0x21, 0x19, 0x52, 0x20, 0x6b, 0xf2, 0x0c, 0x44, 0xfa, 0xc1, - 0x10, 0x65, 0x6a, 0x5b, 0x7a, 0x02, 0x90, 0x3e, 0x95, 0x83, 0xf8, 0x4c, 0x86, 0x94, 0xd9, 0x9b, - 0x3c, 0x03, 0xd9, 0x06, 0x74, 0x7a, 0x42, 0xfb, 0xc4, 0xd6, 0x1f, 0x6a, 0xca, 0xd3, 0x4d, 0x0e, - 0x3d, 0xa1, 0xb7, 0x10, 0x75, 0x4c, 0x71, 0xf7, 0x4c, 0xa6, 0xea, 0x45, 0x56, 0x51, 0x6b, 0x23, - 0xcc, 0xd0, 0xa6, 0xe1, 0x1a, 0x67, 0xc5, 0xa5, 0x43, 0x5a, 0xa1, 0x42, 0x38, 0x1d, 0x6a, 0x93, - 0x51, 0xae, 0x10, 0x65, 0x9b, 0x70, 0x8e, 0xe4, 0x63, 0xb8, 0xe1, 0x2a, 0x42, 0x3f, 0x95, 0xbf, - 0x1a, 0x4a, 0x6d, 0xac, 0x16, 0x69, 0x8b, 0xa4, 0x14, 0x5b, 0xe3, 0x5d, 0x47, 0xc2, 0x2d, 0x05, - 0x29, 0x13, 0xf7, 0xcb, 0xf9, 0xdb, 0xad, 0x0d, 0x5f, 0x9a, 0xbb, 0x9d, 0x82, 0x3b, 0xfb, 0x04, - 0x6e, 0x4e, 0x6e, 0xc7, 0xe7, 0x30, 0xd2, 0x1d, 0xcf, 0x68, 0xff, 0xf5, 0xf2, 0x7e, 0x4e, 0x14, - 0xf6, 0xfc, 0xf9, 0x0c, 0xac, 0x00, 0x97, 0xe7, 0x33, 0xb0, 0x12, 0xdc, 0x86, 0x4e, 0xa8, 0x74, - 0xd2, 0x17, 0x23, 0x6b, 0x5f, 0x6b, 0xa4, 0xfa, 0xb6, 0xc3, 0xa1, 0x8d, 0x79, 0xe7, 0x70, 0x6d, - 0xd2, 0x05, 0xb2, 0xaa, 0x61, 0xb6, 0xb3, 0x4e, 0x19, 0x75, 0x75, 0x86, 0x51, 0x4f, 0x5a, 0x6e, - 0x6d, 0xca, 0x72, 0xbd, 0xbf, 0xd6, 0x66, 0x39, 0x9f, 0x6b, 0x0b, 0xbe, 0xb3, 0x6f, 0xe9, 0x38, - 0x07, 0x6b, 0x27, 0xa9, 0x3a, 0x13, 0x46, 0xfa, 0xa7, 0x72, 0x64, 0x13, 0xdc, 0xfd, 0x6a, 0xb7, - 0xc2, 0xc1, 0xa1, 0x31, 0xe0, 0x6e, 0x60, 0xd0, 0xd0, 0x41, 0xaa, 0x12, 0x3c, 0x82, 0x7c, 0xac, - 0xc3, 0x8b, 0x28, 0xcc, 0x79, 0x5f, 0xc6, 0x2a, 0x72, 0x1e, 0xd6, 0xe4, 0x0e, 0xc2, 0x8c, 0x60, - 0xed, 0x4e, 0x86, 0x94, 0xf3, 0x9a, 0x3c, 0x87, 0xc7, 0x0e, 0xb0, 0x58, 0x74, 0x80, 0xa7, 0xb0, - 0xea, 0x34, 0xa5, 0x7d, 0x13, 0xfb, 0xc8, 0xc7, 0x15, 0x21, 0x6f, 0x4c, 0x54, 0x7e, 0x79, 0x03, - 0xe4, 0xc8, 0x8f, 0xe2, 0x87, 0xb1, 0x8a, 0xf8, 0x72, 0x5a, 0x82, 0xd9, 0x87, 0xd0, 0xcc, 0xca, - 0x6e, 0x57, 0xe6, 0xbf, 0x3e, 0x87, 0x91, 0xab, 0xf7, 0x35, 0xcf, 0x37, 0x60, 0x90, 0x96, 0x51, - 0x90, 0x8e, 0x12, 0x93, 0x3b, 0xf0, 0x18, 0x41, 0x21, 0x3c, 0x91, 0x81, 0x11, 0x63, 0x37, 0x1e, - 0x23, 0x30, 0x26, 0x3b, 0x52, 0x74, 0x46, 0xca, 0xc5, 0x1d, 0x7a, 0xb9, 0xe5, 0x31, 0xfa, 0x91, - 0x1c, 0x69, 0xcc, 0xe0, 0x37, 0x5e, 0x72, 0x23, 0xa7, 0xb3, 0x4a, 0xae, 0xb3, 0x5b, 0x00, 0xc9, - 0xf0, 0x79, 0x5f, 0x05, 0xa4, 0x32, 0x6b, 0x3c, 0x2d, 0x8b, 0x41, 0x6d, 0xe5, 0x8a, 0xaf, 0x15, - 0x15, 0xff, 0x92, 0x20, 0x79, 0xcd, 0xa6, 0xe6, 0xac, 0x92, 0x6c, 0xf1, 0x06, 0x82, 0x7b, 0x21, - 0xda, 0x60, 0xd6, 0xba, 0x8d, 0x70, 0xb5, 0x61, 0x15, 0x9f, 0xe3, 0xf6, 0x48, 0x89, 0xd6, 0x15, - 0x17, 0xed, 0x61, 0x04, 0xb0, 0x4f, 0xe1, 0x52, 0x2a, 0xcf, 0xa4, 0xe8, 0xcb, 0xd0, 0x77, 0xc5, - 0x41, 0x56, 0x4a, 0x16, 0xfa, 0x3c, 0xee, 0x48, 0xf2, 0xe6, 0x22, 0x2d, 0x23, 0xb4, 0xf7, 0xef, - 0x0a, 0x34, 0xb3, 0x2a, 0xbf, 0xf0, 0x0c, 0x36, 0x37, 0xdc, 0x80, 0x16, 0x89, 0x4d, 0x89, 0xcc, - 0xf6, 0xf0, 0x4d, 0x44, 0x94, 0xd2, 0x58, 0xad, 0x90, 0xc6, 0x3e, 0x87, 0xab, 0x03, 0x89, 0xed, - 0xbd, 0xee, 0xa9, 0xc4, 0x3a, 0xd1, 0xee, 0x99, 0x44, 0xd1, 0xa6, 0xeb, 0xef, 0x99, 0x74, 0x7c, - 0xce, 0x7e, 0x34, 0x7f, 0x11, 0x18, 0x75, 0x26, 0x33, 0xf3, 0xb7, 0xd0, 0x58, 0x15, 0x8d, 0xa2, - 0x2a, 0x66, 0x1a, 0xbe, 0xf7, 0x75, 0x15, 0xae, 0xce, 0x3e, 0x76, 0x8e, 0x2b, 0x33, 0xa8, 0x17, - 0xae, 0x4e, 0xdf, 0x98, 0x3e, 0x9c, 0x88, 0x34, 0x85, 0x68, 0xf1, 0x0c, 0x9c, 0x99, 0xd7, 0x5f, - 0x5a, 0x82, 0x14, 0xcd, 0xa2, 0x51, 0x32, 0x0b, 0x06, 0xf5, 0x17, 0x69, 0x3c, 0x70, 0x69, 0x90, - 0xbe, 0x31, 0x8b, 0xa6, 0xe2, 0xdc, 0xcf, 0x0a, 0xe5, 0x26, 0x31, 0x83, 0x54, 0x9c, 0x1f, 0x8c, - 0x6b, 0xe5, 0x62, 0x1b, 0x60, 0x01, 0x2a, 0xd8, 0x29, 0x04, 0x02, 0x6d, 0xb0, 0x80, 0xf7, 0x3e, - 0xac, 0xe4, 0xbd, 0x9d, 0xcb, 0x7e, 0xaf, 0x34, 0x85, 0xf1, 0x3e, 0xb2, 0x45, 0x13, 0x6e, 0x7c, - 0x62, 0xa7, 0x48, 0x9a, 0x4b, 0xf1, 0xaa, 0xbb, 0x7f, 0x02, 0x57, 0x6d, 0xaf, 0x6b, 0xd4, 0x99, - 0x32, 0xa3, 0x6d, 0x19, 0x19, 0x99, 0xbe, 0x64, 0xff, 0x2a, 0xd4, 0x54, 0xa8, 0xbb, 0xd5, 0x8d, - 0xda, 0xdd, 0x0e, 0xc7, 0x4f, 0x6f, 0x07, 0xd6, 0xa7, 0x39, 0x6c, 0x05, 0x81, 0xa4, 0x70, 0xf1, - 0xaa, 0x5c, 0x76, 0x6d, 0x38, 0x28, 0x73, 0xd9, 0x51, 0x7a, 0xa0, 0xb4, 0xbe, 0x00, 0x9b, 0x6d, - 0x9b, 0x1d, 0x26, 0xd8, 0xc8, 0xbe, 0xbc, 0x88, 0x2c, 0xf7, 0xa1, 0x3b, 0xcd, 0xe4, 0x38, 0x4a, - 0x2f, 0xf2, 0x2a, 0x3e, 0xdc, 0x99, 0xe6, 0xb1, 0x1f, 0x9b, 0x52, 0x39, 0x22, 0x31, 0xac, 0x65, - 0x85, 0xa2, 0x30, 0x8e, 0x67, 0xcb, 0x61, 0xb6, 0x0c, 0x06, 0x30, 0xac, 0x7f, 0xb4, 0x94, 0x11, - 0xe9, 0xac, 0xc9, 0x17, 0x7b, 0x42, 0x1f, 0x4a, 0x19, 0x79, 0xdf, 0x56, 0xa0, 0x83, 0x27, 0xdc, - 0x8f, 0xe3, 0xd3, 0x81, 0x48, 0x4f, 0xe7, 0x4b, 0x36, 0x4c, 0xfb, 0x4e, 0xe1, 0xf8, 0x39, 0x33, - 0x4a, 0xdc, 0x80, 0x16, 0x59, 0xa1, 0x8f, 0xb4, 0xd6, 0x5b, 0x9a, 0x84, 0x38, 0x4e, 0xfb, 0xc5, - 0xf2, 0x6c, 0xa1, 0x5c, 0x9e, 0xdd, 0x02, 0x08, 0xed, 0xdb, 0xa2, 0xf4, 0xd6, 0xdf, 0x5b, 0x0e, - 0xb3, 0x65, 0xbc, 0xdf, 0xc0, 0x15, 0x94, 0x70, 0x37, 0xd2, 0xc7, 0x5a, 0xa6, 0x78, 0x90, 0x1d, - 0x35, 0xcc, 0x11, 0x75, 0x1d, 0x9a, 0x43, 0x47, 0xe7, 0xe4, 0xcd, 0x61, 0xea, 0xfc, 0x7b, 0x42, - 0x51, 0x91, 0x6f, 0x43, 0xfc, 0x22, 0xc1, 0x7b, 0xa5, 0xea, 0xb1, 0x5e, 0x12, 0xcf, 0x7b, 0x08, - 0xab, 0xe4, 0x19, 0x7d, 0x29, 0xd2, 0x07, 0x4a, 0x9b, 0x38, 0x1d, 0x15, 0x1d, 0xbc, 0x52, 0x72, - 0xf0, 0x5b, 0x00, 0x01, 0x12, 0xda, 0xbb, 0x54, 0xed, 0x5d, 0x1c, 0x66, 0xcb, 0x78, 0x7f, 0xaf, - 0x00, 0xa3, 0xde, 0xc4, 0xd6, 0x2b, 0x07, 0x2a, 0xa0, 0x78, 0x31, 0xab, 0x2d, 0x2b, 0xf4, 0xce, - 0xd5, 0x39, 0xbd, 0x73, 0x8d, 0xc2, 0xd7, 0x54, 0xef, 0x5c, 0x27, 0x74, 0xd6, 0x3b, 0xdf, 0x80, - 0x16, 0xd5, 0x4b, 0xd4, 0x3c, 0xdb, 0x1e, 0x84, 0x9a, 0xe7, 0xc3, 0x99, 0xcd, 0x73, 0x83, 0x08, - 0xe6, 0x34, 0xcf, 0x8b, 0xc5, 0xe6, 0xb9, 0x07, 0x97, 0xa7, 0x6f, 0xa2, 0xe7, 0xcf, 0x07, 0x7e, - 0x0c, 0xcd, 0xc4, 0x11, 0x91, 0x85, 0xb7, 0xef, 0xdd, 0x2c, 0x17, 0x13, 0x65, 0x4e, 0x3c, 0xa7, - 0xf6, 0xfe, 0x51, 0x83, 0x76, 0x61, 0x92, 0x36, 0x47, 0xef, 0x5d, 0x58, 0x14, 0x61, 0x98, 0x4a, - 0xad, 0xb3, 0xf7, 0x72, 0x60, 0x51, 0xa4, 0x5a, 0x49, 0xa4, 0x72, 0x35, 0x60, 0x6b, 0xb3, 0x42, - 0x35, 0xc0, 0xa0, 0x9e, 0x08, 0xd3, 0x73, 0x99, 0x9d, 0xbe, 0x73, 0x4d, 0x35, 0x0a, 0x9a, 0x2a, - 0xce, 0x93, 0x16, 0x5d, 0x83, 0xee, 0xe6, 0x49, 0x6b, 0xb0, 0x20, 0x07, 0xf1, 0x97, 0x8a, 0xa2, - 0x7a, 0x8b, 0x5b, 0x00, 0x55, 0x75, 0x2e, 0xfa, 0x7d, 0x69, 0x5c, 0xc3, 0xe3, 0x20, 0x64, 0x8e, - 0x66, 0xe4, 0xaa, 0x25, 0xfa, 0x26, 0xb5, 0xaa, 0x30, 0x94, 0x91, 0xab, 0x92, 0x1c, 0xf4, 0x92, - 0x6e, 0x67, 0x1d, 0x9a, 0x49, 0xac, 0x15, 0xd5, 0x9b, 0x4b, 0x76, 0x58, 0x92, 0xc1, 0xec, 0x3d, - 0xb8, 0x92, 0xa4, 0x71, 0x78, 0x90, 0xca, 0x17, 0x32, 0x4d, 0x65, 0xb8, 0x4d, 0xd6, 0xbf, 0x63, - 0x3b, 0x9d, 0x16, 0x9f, 0xbd, 0x88, 0xbb, 0x8c, 0xd4, 0x66, 0x7a, 0xd7, 0x8a, 0xdd, 0x35, 0x73, - 0x11, 0xe5, 0x88, 0x13, 0x99, 0x8a, 0xe7, 0x7d, 0xdb, 0xec, 0xb4, 0x78, 0x0e, 0x7b, 0xbf, 0x73, - 0x2a, 0x75, 0x53, 0xda, 0x39, 0x2a, 0x2d, 0x28, 0xae, 0x3a, 0x73, 0xd6, 0x54, 0x2b, 0x8f, 0x31, - 0x0a, 0xe3, 0x02, 0x9b, 0xd3, 0xb1, 0x05, 0x91, 0xa9, 0x3a, 0x93, 0xa1, 0x4f, 0x69, 0x77, 0xc1, - 0xb5, 0x20, 0x16, 0xf7, 0x29, 0x66, 0xdf, 0x0f, 0x61, 0xdd, 0x36, 0x0b, 0x5a, 0x86, 0x3e, 0x2d, - 0xb8, 0x31, 0x00, 0x0d, 0xc3, 0x6c, 0x30, 0xba, 0x46, 0xad, 0x83, 0x96, 0xe1, 0x4e, 0xbe, 0xbe, - 0x87, 0xcb, 0xb6, 0x01, 0x8e, 0x82, 0x8c, 0xbd, 0x55, 0x3e, 0x58, 0x14, 0x71, 0xff, 0x01, 0x34, - 0x27, 0x8a, 0xb8, 0x39, 0xd3, 0xe1, 0x9c, 0x0c, 0xb7, 0xb8, 0xe1, 0x0d, 0x16, 0xdd, 0xb5, 0x99, - 0x93, 0x6d, 0x5c, 0xe5, 0x39, 0x59, 0xd1, 0x16, 0xa0, 0x6c, 0x0b, 0x6f, 0xc1, 0xea, 0xc4, 0x3c, - 0x53, 0x93, 0x1d, 0x75, 0xa6, 0x26, 0x44, 0xde, 0x17, 0x36, 0xcc, 0x66, 0x05, 0xe4, 0x81, 0x33, - 0x99, 0x79, 0x25, 0x54, 0xf1, 0x66, 0xd5, 0x57, 0xba, 0x99, 0xf7, 0x9f, 0x8a, 0x8d, 0xa4, 0x87, - 0xe2, 0x4c, 0x86, 0x5b, 0xce, 0x39, 0x0b, 0x6e, 0x5b, 0x29, 0xbb, 0xed, 0xac, 0x81, 0xe2, 0x4d, - 0x68, 0xbd, 0x10, 0x67, 0xf1, 0x30, 0x55, 0xc6, 0x6a, 0xbf, 0xc9, 0xc7, 0x88, 0x97, 0xa4, 0x98, - 0xdb, 0xd0, 0xb1, 0xe9, 0xd0, 0x2f, 0x46, 0xb2, 0xb6, 0xc5, 0xd9, 0x76, 0xf5, 0xff, 0xe1, 0x92, - 0xcd, 0x0d, 0xba, 0x17, 0xa7, 0x86, 0xaa, 0x7d, 0xed, 0xdc, 0x76, 0x85, 0x16, 0x0e, 0x11, 0x8f, - 0x55, 0xbf, 0xc6, 0x74, 0x28, 0x23, 0xed, 0xea, 0x31, 0xfc, 0x44, 0x53, 0x55, 0xda, 0x47, 0x47, - 0x70, 0x2a, 0x68, 0x28, 0x7d, 0x24, 0xb5, 0x79, 0x58, 0x6f, 0xd6, 0x57, 0x17, 0xbc, 0x6f, 0x2a, - 0xf6, 0x75, 0xa7, 0x1a, 0xa6, 0x39, 0xaf, 0x3b, 0xd9, 0x3e, 0xd8, 0x37, 0x28, 0xb5, 0x0f, 0xbb, - 0xf0, 0x7a, 0xcf, 0x66, 0x23, 0x5f, 0xa4, 0x41, 0x4f, 0x9d, 0x49, 0x5f, 0x0f, 0x93, 0x04, 0x65, - 0x97, 0x11, 0x3a, 0x59, 0xe8, 0x1e, 0xe8, 0xa6, 0x23, 0xdb, 0xb2, 0x54, 0x87, 0x96, 0x68, 0xd7, - 0xd2, 0x78, 0x7f, 0xae, 0xd8, 0x8a, 0xf1, 0x28, 0x1d, 0x6a, 0x23, 0x43, 0x4c, 0xb1, 0xaf, 0xf8, - 0xbb, 0xdd, 0xc7, 0xd0, 0x70, 0xc3, 0x0f, 0x3c, 0x67, 0x79, 0xb2, 0xc9, 0x2c, 0x30, 0xdc, 0x3c, - 0x1a, 0x8f, 0x45, 0xb8, 0xdb, 0xe4, 0x7d, 0x00, 0xed, 0x02, 0x9a, 0xb5, 0x61, 0xf1, 0x78, 0xff, - 0xd1, 0xfe, 0xd3, 0xcf, 0xf6, 0x57, 0x5f, 0x43, 0xe0, 0x88, 0x1f, 0x1f, 0x1e, 0xed, 0xee, 0xac, - 0x56, 0xd8, 0x25, 0x58, 0x3a, 0xde, 0x27, 0xf0, 0xb3, 0xa7, 0xfc, 0xe8, 0xc1, 0xcf, 0x57, 0xab, - 0xde, 0xb7, 0x35, 0x3b, 0x38, 0x78, 0x56, 0x18, 0xcc, 0xb8, 0xce, 0x6f, 0x7e, 0xc5, 0x4f, 0x2e, - 0x5a, 0x2d, 0x14, 0xde, 0xcb, 0x50, 0x35, 0xb1, 0x8b, 0x21, 0x55, 0x13, 0xa3, 0x71, 0x05, 0x3d, - 0x8c, 0xc4, 0xd1, 0x49, 0x16, 0x46, 0xc6, 0x08, 0x54, 0x89, 0x6b, 0x8f, 0x6d, 0x6e, 0x77, 0xf3, - 0xb0, 0x1c, 0xb7, 0x45, 0x43, 0xdc, 0x54, 0xea, 0x24, 0x8e, 0x74, 0x96, 0x20, 0x72, 0x18, 0x73, - 0x4d, 0x2a, 0x93, 0xbe, 0xb2, 0x9b, 0xad, 0xfd, 0xb5, 0x1c, 0x66, 0xcb, 0x30, 0x39, 0x7b, 0x00, - 0xd5, 0xa4, 0x97, 0x7d, 0xaf, 0xfc, 0xb2, 0x33, 0x6e, 0xbd, 0xf9, 0x6c, 0x6a, 0x44, 0x35, 0x73, - 0x6c, 0x65, 0x75, 0xd8, 0xca, 0xeb, 0xf6, 0xcf, 0x81, 0x4d, 0xef, 0x9c, 0xd2, 0xc5, 0xc1, 0xee, - 0xfe, 0xce, 0xde, 0xfe, 0x4f, 0x57, 0x2b, 0xac, 0x03, 0xcd, 0xad, 0xed, 0xed, 0xdd, 0x03, 0xd4, - 0x4c, 0x15, 0xa1, 0x9d, 0xdd, 0xed, 0xc7, 0x7b, 0xfb, 0xbb, 0x3b, 0xab, 0x35, 0x84, 0xb6, 0xb7, - 0xf6, 0xb7, 0x77, 0x1f, 0xef, 0xee, 0xac, 0xd6, 0xbd, 0x7f, 0x55, 0x6c, 0x41, 0xbf, 0x5d, 0x9a, - 0x0f, 0xed, 0xc8, 0x40, 0xe9, 0xf9, 0xb3, 0xd8, 0x9b, 0xd0, 0x72, 0xef, 0xb9, 0x97, 0x59, 0xda, - 0x18, 0xc1, 0x7e, 0x09, 0x2b, 0xa1, 0xdb, 0xef, 0x97, 0x2c, 0xef, 0xdd, 0xc9, 0xa9, 0xc4, 0xac, - 0x23, 0x37, 0xb3, 0x0f, 0xf7, 0x3c, 0xcb, 0x61, 0x09, 0xf6, 0xde, 0x86, 0xe5, 0x32, 0x45, 0xe9, - 0xb2, 0xaf, 0x95, 0x2e, 0x5b, 0xf1, 0xfe, 0x56, 0x85, 0x95, 0x89, 0x1f, 0x5b, 0xe7, 0x97, 0x3e, - 0x93, 0x93, 0xb0, 0xea, 0xd4, 0x24, 0x8c, 0xbd, 0x0d, 0xac, 0x48, 0xe2, 0x17, 0xc7, 0x10, 0xab, - 0x05, 0x42, 0x1b, 0xab, 0x8a, 0xb5, 0x54, 0xfd, 0x22, 0xb5, 0x14, 0xfb, 0x08, 0x3a, 0x3a, 0x0e, - 0x94, 0xe8, 0xfb, 0x7d, 0x15, 0x9d, 0x66, 0xbf, 0x70, 0x5f, 0x9f, 0xf8, 0xf5, 0x96, 0x28, 0x1e, - 0x23, 0x01, 0x6f, 0xeb, 0x31, 0xc0, 0x7e, 0x06, 0x6b, 0x32, 0xd2, 0x7e, 0x56, 0x4f, 0xfb, 0x61, - 0xfe, 0x9b, 0x76, 0x6d, 0x7a, 0x38, 0x34, 0x55, 0xb0, 0x73, 0x26, 0x27, 0x51, 0xda, 0xd3, 0x00, - 0x5c, 0x9c, 0xbb, 0x96, 0xb3, 0x58, 0xf4, 0x56, 0xca, 0x45, 0xef, 0x23, 0x68, 0xbb, 0xff, 0x6e, - 0x38, 0xca, 0x3a, 0xf7, 0xe5, 0x7b, 0x6f, 0x8d, 0x4f, 0xdc, 0x1a, 0xff, 0x3f, 0xc4, 0x13, 0xf7, - 0xef, 0x10, 0x8e, 0xe9, 0x26, 0x6e, 0xe0, 0xc5, 0xdd, 0xde, 0x9f, 0x2a, 0xb0, 0x8c, 0x22, 0x16, - 0x4e, 0xfe, 0x11, 0x75, 0xe1, 0x59, 0xeb, 0xeb, 0x7e, 0xfa, 0x59, 0x2b, 0x4c, 0x5c, 0xf2, 0x45, - 0x5e, 0x24, 0x64, 0xf7, 0x60, 0x4d, 0x0f, 0x9f, 0x67, 0x59, 0xf3, 0xa1, 0x8e, 0xa3, 0xfb, 0x23, - 0x23, 0xb3, 0x1a, 0x74, 0xe6, 0x1a, 0x7b, 0x1b, 0x2e, 0x65, 0x63, 0xb2, 0xf1, 0x06, 0xfb, 0x03, - 0xd9, 0xf4, 0x82, 0xf7, 0xfb, 0x4a, 0x5e, 0x2b, 0x61, 0xc2, 0xa6, 0x5e, 0x2c, 0x37, 0x31, 0xfc, - 0x9c, 0x99, 0x29, 0xaf, 0x42, 0xc3, 0x0d, 0xcf, 0x6d, 0x16, 0x70, 0x50, 0xd1, 0x48, 0xeb, 0x25, - 0x23, 0xbd, 0x09, 0x2d, 0x97, 0x79, 0x25, 0x9a, 0x05, 0xb6, 0xa0, 0x63, 0x44, 0xa9, 0xa8, 0xb4, - 0x45, 0x51, 0x0e, 0x7b, 0x5f, 0xd8, 0x0c, 0x52, 0xb0, 0x1a, 0xf6, 0xfe, 0x84, 0x99, 0x4d, 0x3d, - 0xe7, 0x98, 0xb8, 0x6c, 0x61, 0x79, 0x5c, 0xa8, 0x16, 0x7b, 0x8d, 0xaf, 0x2b, 0x70, 0xab, 0x50, - 0x53, 0x6c, 0x4f, 0xff, 0x0e, 0xfa, 0x1d, 0x1d, 0xf0, 0x9c, 0xdf, 0x55, 0xab, 0x73, 0x7f, 0x57, - 0x9d, 0xd7, 0x33, 0xdc, 0x5f, 0xfa, 0x45, 0x7b, 0xf3, 0x9d, 0x0f, 0xb3, 0x7b, 0x3c, 0x6f, 0xd0, - 0xd7, 0xbb, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x46, 0x88, 0x22, 0xd3, 0x23, 0x00, 0x00, + // 3208 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x3a, 0x4b, 0x6f, 0x1c, 0xc7, + 0xd1, 0xde, 0x07, 0xf7, 0x51, 0xbb, 0x7c, 0xa8, 0x45, 0x49, 0x2b, 0x4a, 0x82, 0xa9, 0xd1, 0x67, + 0x58, 0xfe, 0xe0, 0x8f, 0xfe, 0x3e, 0xd9, 0x5f, 0x1c, 0xf8, 0x01, 0x87, 0x22, 0xe9, 0x88, 0x7a, + 0x50, 0x4c, 0x93, 0x94, 0xed, 0x20, 0xc0, 0xb8, 0x39, 0xd3, 0xe2, 0x8e, 0x39, 0x3b, 0x33, 0x99, + 0xee, 0x25, 0xb3, 0x3e, 0x04, 0xc8, 0xcd, 0x87, 0x1c, 0x72, 0xf3, 0x2d, 0xf0, 0x21, 0x87, 0x20, + 0xc7, 0xdc, 0xf2, 0x07, 0x82, 0x1c, 0x73, 0x4f, 0xfe, 0x40, 0xfe, 0x41, 0x2e, 0x01, 0x82, 0xaa, + 0xee, 0x99, 0x9d, 0xd9, 0x07, 0x2d, 0x22, 0x27, 0x4e, 0x55, 0x57, 0x57, 0x57, 0x77, 0xbd, 0x6b, + 0x09, 0x8b, 0x89, 0x08, 0xd2, 0x20, 0x3a, 0xd9, 0x48, 0xd2, 0x58, 0xc7, 0xac, 0x45, 0x7f, 0x8e, + 0x87, 0x2f, 0xd7, 0xae, 0x7a, 0x7d, 0xa1, 0xdd, 0xc0, 0x97, 0x91, 0x0e, 0xf4, 0xc8, 0x2c, 0xaf, + 0x5d, 0x55, 0xa3, 0xc8, 0x73, 0x95, 0xd4, 0x3a, 0x88, 0x4e, 0x94, 0x45, 0x3a, 0x22, 0x49, 0xc2, + 0xc0, 0x13, 0x3a, 0x88, 0x23, 0x77, 0x20, 0xb5, 0xf0, 0x85, 0x16, 0xee, 0x40, 0x2a, 0x25, 0x4e, + 0xa4, 0xa5, 0xb9, 0xe2, 0xc5, 0x83, 0xc1, 0x30, 0x0a, 0x74, 0x20, 0xed, 0x36, 0x47, 0xc0, 0xad, + 0x4f, 0xa5, 0xf6, 0xfa, 0x41, 0x74, 0xf2, 0x50, 0x78, 0xa7, 0xd2, 0x3f, 0x4a, 0xb6, 0x85, 0x16, + 0xdb, 0x52, 0x8b, 0x20, 0x54, 0xec, 0x75, 0xe8, 0x10, 0x9f, 0x68, 0x38, 0x38, 0x96, 0x69, 0xaf, + 0xb2, 0x5e, 0xb9, 0xbf, 0xc8, 0x01, 0x51, 0x7b, 0x84, 0x61, 0x77, 0xa1, 0xab, 0x63, 0x2d, 0xc2, + 0x8c, 0xa2, 0x4a, 0x14, 0x1d, 0xc2, 0x19, 0x12, 0xe7, 0x5f, 0x4d, 0x68, 0x20, 0xef, 0x61, 0xc2, + 0x56, 0x61, 0xc1, 0x0b, 0x63, 0xef, 0x94, 0x18, 0xd5, 0xb9, 0x01, 0xd8, 0x12, 0x54, 0x03, 0x9f, + 0x76, 0xb6, 0x79, 0x35, 0xf0, 0xd9, 0x27, 0xd0, 0xf2, 0xe2, 0x48, 0x0b, 0x4f, 0xab, 0x5e, 0x6d, + 0xbd, 0x76, 0xbf, 0xf3, 0xe0, 0xde, 0x46, 0xf6, 0x22, 0x1b, 0x07, 0xa3, 0xc8, 0xdb, 0x8d, 0x94, + 0x16, 0x61, 0x48, 0x77, 0xdd, 0x32, 0x94, 0x2f, 0x1e, 0xf0, 0x7c, 0x13, 0xdb, 0x81, 0x4e, 0xe1, + 0xa6, 0xbd, 0xfa, 0xf7, 0xf3, 0x30, 0xc4, 0x23, 0x5e, 0xdc, 0xc7, 0x9e, 0xc3, 0x72, 0xc6, 0xd2, + 0xbe, 0x47, 0x6f, 0x61, 0xbd, 0x72, 0xbf, 0xf3, 0xe0, 0x8d, 0x31, 0xab, 0x0b, 0x1e, 0x8f, 0x4f, + 0xee, 0x66, 0x47, 0xc0, 0x0a, 0xfc, 0x33, 0x9e, 0x8d, 0xcb, 0xf0, 0x9c, 0xc1, 0x80, 0xbd, 0x0b, + 0xcd, 0x24, 0x8d, 0x5f, 0x06, 0xa1, 0xec, 0x35, 0x89, 0xd7, 0xcd, 0x31, 0xaf, 0x8c, 0xc7, 0xbe, + 0x21, 0xe0, 0x19, 0x25, 0x7b, 0x06, 0x4b, 0xf6, 0x33, 0x93, 0xa3, 0x75, 0x19, 0x39, 0x26, 0x36, + 0xb3, 0x77, 0xa0, 0x69, 0x0d, 0xb2, 0xd7, 0x26, 0x3e, 0xd7, 0xca, 0xcf, 0x7d, 0x60, 0x16, 0x79, + 0x46, 0x85, 0x8f, 0x9b, 0x59, 0x70, 0x26, 0x00, 0x5c, 0xea, 0x71, 0x27, 0x76, 0xa3, 0x04, 0xa7, + 0x72, 0x84, 0x8e, 0xd4, 0xeb, 0xcc, 0x92, 0xe0, 0x89, 0x59, 0xe4, 0x19, 0x15, 0xbe, 0x80, 0xfd, + 0xcc, 0x04, 0xe8, 0x5e, 0xea, 0x05, 0xca, 0x9b, 0xd9, 0x26, 0xac, 0x9c, 0x0b, 0xed, 0xf5, 0x9f, + 0x47, 0xe1, 0x68, 0xd3, 0xf3, 0xe2, 0x61, 0xa4, 0x7b, 0x8b, 0xb3, 0x04, 0xb1, 0x8b, 0x7c, 0x8a, + 0x9c, 0xb9, 0x70, 0x63, 0x12, 0x97, 0x89, 0xb6, 0x74, 0x19, 0xd1, 0xe6, 0x71, 0x61, 0xf7, 0x61, + 0x01, 0x03, 0x8a, 0xea, 0x2d, 0x93, 0x4b, 0xb0, 0xb2, 0x60, 0x5b, 0x7d, 0xa1, 0xb9, 0x21, 0x60, + 0xbb, 0xd0, 0xa5, 0x8f, 0xec, 0xfc, 0x95, 0xcb, 0x9c, 0x5f, 0xda, 0xea, 0xfc, 0x7e, 0x01, 0xba, + 0xcf, 0x86, 0xa1, 0x0e, 0xb2, 0x6b, 0x32, 0xa8, 0x47, 0x62, 0x20, 0x29, 0x08, 0xb4, 0x39, 0x7d, + 0xb3, 0xdb, 0xd0, 0xd6, 0xc1, 0x40, 0x2a, 0x2d, 0x06, 0x09, 0x85, 0x82, 0x1a, 0x1f, 0x23, 0x70, + 0xd5, 0xc4, 0x40, 0x2f, 0x8e, 0x7a, 0x35, 0xda, 0x36, 0x46, 0xb0, 0x4f, 0x00, 0xbc, 0x38, 0x8c, + 0x53, 0xb7, 0x2f, 0x54, 0xdf, 0x7a, 0xfb, 0xfa, 0x58, 0xd2, 0xe2, 0xd9, 0x1b, 0x5b, 0x48, 0xf8, + 0x48, 0xa8, 0x3e, 0x6f, 0x7b, 0xd9, 0x27, 0xbb, 0x89, 0x01, 0x07, 0x19, 0x04, 0x3e, 0x79, 0x78, + 0x8d, 0x37, 0x09, 0xde, 0xf5, 0xd9, 0x9b, 0xb0, 0x7c, 0x2a, 0x47, 0x9e, 0x48, 0x7d, 0xd7, 0xc6, + 0x68, 0xf2, 0xd7, 0x36, 0xa9, 0x1f, 0xd1, 0xfb, 0x06, 0xcb, 0x6e, 0x90, 0xf9, 0xb9, 0xc3, 0xc0, + 0x27, 0x27, 0x6c, 0xf3, 0xc6, 0xa9, 0x1c, 0x1d, 0x05, 0x3e, 0xfb, 0x08, 0x1a, 0xc1, 0x40, 0x9c, + 0x48, 0x74, 0x30, 0x94, 0xec, 0xbf, 0xe6, 0x48, 0xb6, 0x6b, 0x83, 0xfc, 0x2e, 0x12, 0x73, 0xbb, + 0x87, 0xbd, 0x03, 0x57, 0xbd, 0xa1, 0xd2, 0xf1, 0x20, 0xf8, 0xda, 0x84, 0x76, 0x12, 0x8c, 0x7c, + 0xac, 0xcd, 0x59, 0x69, 0x89, 0xae, 0xc6, 0x3e, 0x80, 0x9b, 0x33, 0x36, 0xb8, 0x26, 0xec, 0x02, + 0x85, 0xdd, 0x1b, 0xd3, 0xdb, 0xb6, 0x70, 0x79, 0xed, 0x2e, 0xb4, 0xf3, 0xf7, 0xc1, 0x58, 0x1d, + 0x44, 0xbe, 0xfc, 0x45, 0xaf, 0xb2, 0x5e, 0xbb, 0x5f, 0xe3, 0x06, 0x58, 0xfb, 0x5b, 0x05, 0x16, + 0x4b, 0x92, 0x16, 0x2f, 0x5e, 0x29, 0x5d, 0x3c, 0x53, 0x73, 0xb5, 0xa0, 0xe6, 0x1e, 0x34, 0x13, + 0x31, 0x0a, 0x63, 0xe1, 0x93, 0x1a, 0xbb, 0x3c, 0x03, 0xf1, 0xb8, 0xf3, 0xc0, 0xd7, 0xa8, 0x3f, + 0x54, 0x80, 0x01, 0xd8, 0x75, 0x68, 0xf4, 0x65, 0x70, 0xd2, 0xd7, 0x56, 0x2f, 0x16, 0x62, 0x6b, + 0xd0, 0xc2, 0xe8, 0xa3, 0x82, 0xaf, 0x25, 0xe9, 0xa3, 0xc6, 0x73, 0x98, 0xdd, 0x83, 0xc5, 0x94, + 0xbe, 0x5c, 0x2d, 0xd2, 0x13, 0xa9, 0x49, 0x1f, 0x35, 0xde, 0x35, 0xc8, 0x43, 0xc2, 0x8d, 0x33, + 0x51, 0xab, 0x90, 0x89, 0x9c, 0x6f, 0xab, 0x70, 0xf5, 0x69, 0xec, 0x89, 0xd0, 0x6a, 0x75, 0xdf, + 0x0a, 0xf7, 0xff, 0x50, 0x3f, 0x95, 0x23, 0x45, 0x4f, 0xd1, 0x79, 0x70, 0x77, 0xac, 0xc1, 0x19, + 0xc4, 0x1b, 0x4f, 0xe4, 0x88, 0x13, 0x39, 0xfb, 0x00, 0xba, 0x03, 0x54, 0xb1, 0xb0, 0xe1, 0xa0, + 0x4a, 0x4e, 0x74, 0x7d, 0xb6, 0x01, 0xf0, 0x12, 0x2d, 0xde, 0x30, 0x11, 0x4a, 0x9d, 0xc7, 0xa9, + 0x6f, 0x2d, 0x3e, 0x87, 0xf1, 0x15, 0xd1, 0xc3, 0x9e, 0xc8, 0x11, 0xbd, 0x56, 0x9b, 0x67, 0x20, + 0xbb, 0x9f, 0x9b, 0xab, 0x15, 0xca, 0xa4, 0xac, 0x36, 0x9f, 0x44, 0xaf, 0xfd, 0x0f, 0xd4, 0x70, + 0xc3, 0x2c, 0x5f, 0x64, 0x50, 0xc7, 0x0c, 0x4f, 0xe2, 0x76, 0x39, 0x7d, 0x3b, 0x7f, 0xaa, 0xc0, + 0xb5, 0xd2, 0x65, 0xa5, 0x4c, 0x1f, 0xc9, 0x30, 0x8c, 0xd1, 0x43, 0xac, 0x67, 0xb8, 0x67, 0x32, + 0x55, 0x41, 0x1c, 0x11, 0xb3, 0x05, 0xbe, 0x64, 0xd1, 0x2f, 0x0c, 0x16, 0x0d, 0x25, 0x91, 0x92, + 0x9c, 0xcc, 0x70, 0x6e, 0x20, 0xb8, 0xeb, 0x53, 0x91, 0x21, 0xcf, 0x02, 0x4f, 0xba, 0x24, 0x8a, + 0xb9, 0x2d, 0x18, 0xd4, 0x1e, 0x0a, 0x34, 0x26, 0xd0, 0xa3, 0x44, 0xda, 0x3b, 0x5b, 0x82, 0xc3, + 0x51, 0x42, 0xd1, 0x43, 0x05, 0x27, 0x91, 0xd0, 0xc3, 0x54, 0xd2, 0x85, 0xbb, 0x7c, 0x8c, 0x70, + 0x7e, 0x57, 0x81, 0x55, 0x8c, 0x6f, 0x28, 0x7a, 0x31, 0xed, 0xcf, 0x29, 0x47, 0xde, 0x84, 0xe5, + 0xa0, 0x40, 0xe5, 0xe6, 0xb5, 0xc9, 0x52, 0x11, 0x5d, 0x92, 0x9b, 0xc4, 0xaa, 0x4d, 0x89, 0x95, + 0x3d, 0x6e, 0xbd, 0xec, 0x01, 0xd9, 0x33, 0x2d, 0x50, 0xad, 0x94, 0x81, 0xce, 0xaf, 0x1a, 0x70, + 0x73, 0x6e, 0x75, 0xc3, 0xfe, 0x17, 0x56, 0x43, 0xa1, 0xb4, 0x3b, 0x4c, 0x7c, 0xa1, 0xa5, 0xef, + 0x86, 0xa8, 0x8c, 0x70, 0x64, 0x45, 0x67, 0xb8, 0x76, 0x64, 0x96, 0x9e, 0x9a, 0x95, 0xa9, 0xb2, + 0xea, 0x1e, 0x2c, 0xda, 0xa4, 0xed, 0x52, 0x70, 0xb1, 0x02, 0x77, 0x2d, 0xd2, 0x78, 0xf3, 0x4d, + 0x68, 0xc9, 0x48, 0xb9, 0x05, 0xb1, 0x9b, 0x32, 0x52, 0xa4, 0x85, 0xbb, 0xd0, 0x2d, 0x4a, 0x40, + 0xe2, 0xd7, 0x79, 0xa7, 0x70, 0x32, 0xbe, 0x88, 0x1a, 0x29, 0x2d, 0x07, 0xae, 0x16, 0x27, 0x58, + 0xd9, 0xd4, 0xf0, 0x45, 0x0c, 0xea, 0x50, 0x9c, 0x28, 0xf6, 0x06, 0x2c, 0x91, 0xe0, 0x6e, 0x14, + 0x78, 0xa7, 0x74, 0x88, 0x09, 0x96, 0x8b, 0x84, 0xdd, 0xb3, 0x48, 0x54, 0x8c, 0xf0, 0x7d, 0xe9, + 0x53, 0x9c, 0x6b, 0x71, 0x03, 0xe0, 0xd3, 0x1d, 0xa3, 0x86, 0xa4, 0x4f, 0x81, 0xac, 0xc5, 0x33, + 0x10, 0xe9, 0x07, 0x43, 0x94, 0xa9, 0x63, 0xe8, 0x09, 0x40, 0xfa, 0x54, 0x0e, 0xe2, 0x33, 0xe9, + 0x53, 0x66, 0x6f, 0xf1, 0x0c, 0x64, 0xeb, 0xd0, 0xed, 0x0b, 0xe5, 0x12, 0x5b, 0x77, 0xa8, 0x28, + 0x4f, 0xb7, 0x38, 0xf4, 0x85, 0xda, 0x44, 0xd4, 0x11, 0xc5, 0xdd, 0x33, 0x99, 0x06, 0x2f, 0xb3, + 0x8a, 0x5a, 0x69, 0xa1, 0x87, 0x26, 0x0d, 0xd7, 0x38, 0x2b, 0x2e, 0x1d, 0xd0, 0x0a, 0x15, 0xc2, + 0xe9, 0x50, 0xe9, 0x8c, 0x72, 0x99, 0x28, 0x3b, 0x84, 0xb3, 0x24, 0x1f, 0xc3, 0x2d, 0x5b, 0x11, + 0xba, 0xa9, 0xfc, 0xf9, 0x50, 0x2a, 0x6d, 0xb4, 0x48, 0x5b, 0x24, 0xa5, 0xd8, 0x1a, 0xef, 0x59, + 0x12, 0x6e, 0x28, 0x48, 0x99, 0xb8, 0x5f, 0xce, 0xdf, 0x6e, 0x6c, 0xf8, 0xca, 0xdc, 0xed, 0x14, + 0xdc, 0xd9, 0x27, 0x70, 0x7b, 0x72, 0x3b, 0x3e, 0x87, 0x96, 0xf6, 0x78, 0x46, 0xfb, 0x6f, 0x96, + 0xf7, 0x73, 0xa2, 0x30, 0xe7, 0xcf, 0x67, 0x60, 0x04, 0xb8, 0x3a, 0x9f, 0x81, 0x91, 0xe0, 0x2e, + 0x74, 0xfd, 0x40, 0x25, 0xa1, 0x18, 0x19, 0xfb, 0x5a, 0x25, 0xd5, 0x77, 0x2c, 0x0e, 0x6d, 0xcc, + 0x39, 0x87, 0x1b, 0x93, 0x2e, 0x90, 0x55, 0x0d, 0xb3, 0x9d, 0x75, 0xca, 0xa8, 0xab, 0x33, 0x8c, + 0x7a, 0xd2, 0x72, 0x6b, 0x53, 0x96, 0xeb, 0xfc, 0xba, 0x3e, 0xcb, 0xf9, 0x6c, 0x5b, 0xf0, 0xbd, + 0x7d, 0x4b, 0xd7, 0x3a, 0x58, 0x27, 0x49, 0x83, 0x33, 0xa1, 0xa5, 0x7b, 0x2a, 0x47, 0x26, 0xc1, + 0x3d, 0xac, 0xf6, 0x2a, 0x1c, 0x2c, 0x1a, 0x03, 0xee, 0x3a, 0x06, 0x0d, 0xe5, 0xa5, 0x41, 0x82, + 0x47, 0x90, 0x8f, 0x75, 0x79, 0x11, 0x85, 0x39, 0xef, 0xab, 0x38, 0x88, 0xac, 0x87, 0xb5, 0xb8, + 0x85, 0x30, 0x23, 0x18, 0xbb, 0x93, 0x3e, 0xe5, 0xbc, 0x16, 0xcf, 0xe1, 0xb1, 0x03, 0x34, 0x8b, + 0x0e, 0xf0, 0x1c, 0x56, 0xac, 0xa6, 0x94, 0xab, 0x63, 0x17, 0xf9, 0xd8, 0x22, 0xe4, 0x8d, 0x89, + 0xca, 0x2f, 0x6f, 0x80, 0x2c, 0xf9, 0x61, 0xfc, 0x38, 0x0e, 0x22, 0xbe, 0x94, 0x96, 0x60, 0xf6, + 0x21, 0xb4, 0xb2, 0xb2, 0xdb, 0x96, 0xf9, 0xaf, 0xcf, 0x61, 0x64, 0xeb, 0x7d, 0xc5, 0xf3, 0x0d, + 0x18, 0xa4, 0x65, 0xe4, 0xa5, 0xa3, 0x44, 0xe7, 0x0e, 0x3c, 0x46, 0x50, 0x08, 0x4f, 0xa4, 0xa7, + 0xc5, 0xd8, 0x8d, 0xc7, 0x08, 0x8c, 0xc9, 0x96, 0x14, 0x9d, 0x91, 0x72, 0x71, 0x97, 0x5e, 0x6e, + 0x69, 0x8c, 0x7e, 0x82, 0x29, 0x77, 0x07, 0xba, 0x68, 0x80, 0x69, 0x1c, 0xba, 0x51, 0xec, 0x4b, + 0x5b, 0x81, 0x3b, 0x73, 0xa4, 0xdc, 0x32, 0xa4, 0x7b, 0xb1, 0x2f, 0xb1, 0xf5, 0xcb, 0x01, 0x2c, + 0x04, 0x6e, 0x5d, 0xf0, 0x30, 0x56, 0xf5, 0x95, 0x5c, 0xf5, 0x77, 0x00, 0x92, 0xe1, 0x71, 0x18, + 0x78, 0xa4, 0x79, 0x63, 0x83, 0x6d, 0x83, 0x41, 0xa5, 0xe7, 0xf6, 0x53, 0x2b, 0xda, 0xcf, 0x05, + 0xb1, 0xf6, 0x86, 0xc9, 0xf0, 0x59, 0x41, 0xda, 0xe6, 0x0d, 0x04, 0x77, 0x7d, 0x34, 0xe5, 0xac, + 0x03, 0x1c, 0xe1, 0x6a, 0xc3, 0xd8, 0x4f, 0x8e, 0xdb, 0x25, 0x5b, 0x30, 0x1e, 0xdd, 0x34, 0x87, + 0x11, 0xc0, 0x3e, 0x85, 0x2b, 0xa9, 0x3c, 0x93, 0x22, 0x94, 0xbe, 0x6b, 0x6b, 0x8c, 0xac, 0x22, + 0x2d, 0xb4, 0x8b, 0xdc, 0x92, 0xe4, 0x3d, 0x4a, 0x5a, 0x46, 0x28, 0xe7, 0x0b, 0xe8, 0xcd, 0x7b, + 0xc2, 0xff, 0x30, 0x9f, 0x3a, 0xff, 0xa8, 0x40, 0x2b, 0xeb, 0x43, 0x0a, 0x2f, 0x6c, 0xb2, 0xd7, + 0x2d, 0x68, 0xd3, 0x8b, 0x50, 0xaa, 0x35, 0x53, 0x86, 0x16, 0x22, 0x4a, 0x89, 0xb6, 0x56, 0x48, + 0xb4, 0x9f, 0xc3, 0xf5, 0x81, 0x1c, 0x1c, 0xcb, 0x54, 0xf5, 0x83, 0xc4, 0xb8, 0xf9, 0xce, 0x99, + 0xc4, 0x5b, 0x4f, 0x77, 0x08, 0x33, 0xe9, 0xf8, 0x9c, 0xfd, 0xe8, 0xa0, 0xc2, 0xd3, 0xc1, 0x99, + 0xcc, 0x1c, 0xd4, 0x40, 0xe3, 0xeb, 0x37, 0x8a, 0xd7, 0x9f, 0xe9, 0x9a, 0xce, 0x37, 0x55, 0xb8, + 0x3e, 0xfb, 0xd8, 0x39, 0xaf, 0xc8, 0xa0, 0x5e, 0xb8, 0x3a, 0x7d, 0x63, 0x82, 0xb3, 0x22, 0xd2, + 0x9c, 0xa4, 0xcd, 0x33, 0x70, 0x66, 0xe5, 0x71, 0x61, 0x91, 0x54, 0xb4, 0xb8, 0x46, 0xc9, 0xe2, + 0x18, 0xd4, 0x5f, 0xa6, 0xf1, 0xc0, 0x26, 0x6a, 0xfa, 0xc6, 0x3c, 0x9f, 0x8a, 0x73, 0x37, 0x2b, + 0xe5, 0x5b, 0xc4, 0x0c, 0x52, 0x71, 0xbe, 0x3f, 0xae, 0xe6, 0x8b, 0x8d, 0x8a, 0x01, 0xa8, 0xa5, + 0xa0, 0x20, 0x0d, 0xb4, 0xc1, 0x00, 0xce, 0xfb, 0xb0, 0x9c, 0x77, 0x9f, 0x36, 0x3f, 0xbf, 0xd2, + 0x9c, 0xc8, 0xf9, 0xc8, 0x94, 0x75, 0xb8, 0xf1, 0x99, 0x99, 0x73, 0x29, 0x2e, 0xc5, 0xab, 0xee, + 0xfe, 0x11, 0x5c, 0x37, 0xdd, 0xb8, 0x0e, 0xce, 0xd0, 0x8e, 0x65, 0xa4, 0x65, 0x7a, 0xc1, 0xfe, + 0x15, 0xa8, 0x05, 0xbe, 0xea, 0x55, 0xd7, 0x6b, 0xf7, 0xbb, 0x1c, 0x3f, 0x9d, 0x6d, 0x58, 0x9b, + 0xe6, 0xb0, 0xe9, 0x79, 0x92, 0x02, 0xda, 0xab, 0x72, 0xd9, 0x31, 0x91, 0xa6, 0xcc, 0x65, 0x3b, + 0x50, 0x83, 0x40, 0xa9, 0x4b, 0xb0, 0xd9, 0x32, 0xf9, 0x6b, 0x82, 0x8d, 0x0c, 0xe5, 0x65, 0x64, + 0x79, 0x68, 0x9c, 0xbb, 0xcc, 0xe4, 0x28, 0x4a, 0x2f, 0xf3, 0x2a, 0x2e, 0xdc, 0x9b, 0xe6, 0xb1, + 0x17, 0xeb, 0x52, 0xc1, 0x24, 0x31, 0x62, 0x66, 0xa5, 0xac, 0xd0, 0x96, 0x67, 0xdb, 0x62, 0x36, + 0x35, 0xc6, 0x46, 0xac, 0xd0, 0x94, 0x94, 0x11, 0xe9, 0xac, 0xc5, 0x9b, 0x7d, 0xa1, 0x0e, 0xa4, + 0x8c, 0x9c, 0xef, 0x2a, 0xd0, 0xc5, 0x13, 0x1e, 0xc6, 0xf1, 0xe9, 0x40, 0xa4, 0xa7, 0xf3, 0x25, + 0x1b, 0xa6, 0xa1, 0x55, 0x38, 0x7e, 0xce, 0x8c, 0x12, 0xb7, 0xa0, 0x4d, 0x56, 0xe8, 0x22, 0xad, + 0xf1, 0x96, 0x16, 0x21, 0x8e, 0xd2, 0xb0, 0x58, 0x40, 0x2e, 0x94, 0x0b, 0xc8, 0x3b, 0x00, 0xbe, + 0x79, 0x5b, 0x94, 0xde, 0xf8, 0x7b, 0xdb, 0x62, 0x36, 0xb5, 0xf3, 0x4b, 0xb8, 0x86, 0x12, 0xee, + 0x44, 0xea, 0x48, 0xc9, 0x14, 0x0f, 0x32, 0xc3, 0x90, 0x39, 0xa2, 0xae, 0x41, 0x6b, 0x68, 0xe9, + 0xac, 0xbc, 0x39, 0x4c, 0xb3, 0x89, 0xbe, 0x08, 0x28, 0x6c, 0x9a, 0xec, 0xd1, 0x24, 0x78, 0xb7, + 0x54, 0xdf, 0xd6, 0x4b, 0xe2, 0x39, 0x8f, 0x61, 0x85, 0x3c, 0x23, 0x94, 0x22, 0x7d, 0x14, 0x28, + 0x1d, 0xa7, 0xa3, 0xa2, 0x83, 0x57, 0x4a, 0x0e, 0x7e, 0x07, 0xc0, 0x43, 0x42, 0x73, 0x97, 0xaa, + 0xb9, 0x8b, 0xc5, 0x6c, 0x6a, 0xe7, 0x2f, 0x15, 0x60, 0xd4, 0x3d, 0x99, 0x8a, 0x6a, 0x3f, 0xf0, + 0x28, 0x5e, 0xcc, 0x6a, 0x1c, 0x0b, 0xdd, 0x7d, 0x75, 0x4e, 0x77, 0x5f, 0xa3, 0xf0, 0x35, 0xd5, + 0xdd, 0xd7, 0x09, 0x9d, 0x75, 0xf7, 0xb7, 0xa0, 0x4d, 0x15, 0x1d, 0xb5, 0xf7, 0xa6, 0x4b, 0xa2, + 0xf6, 0xfe, 0x60, 0x66, 0x7b, 0xdf, 0x20, 0x82, 0x39, 0xed, 0x7d, 0xb3, 0xd8, 0xde, 0xf7, 0xe1, + 0xea, 0xf4, 0x4d, 0xd4, 0xfc, 0x09, 0xc6, 0x0f, 0xa1, 0x95, 0x58, 0x22, 0xb2, 0xf0, 0xce, 0x83, + 0xdb, 0xe5, 0x42, 0xa2, 0xcc, 0x89, 0xe7, 0xd4, 0xce, 0x5f, 0x6b, 0xd0, 0x29, 0xcc, 0xfa, 0xe6, + 0xe8, 0xbd, 0x07, 0x4d, 0xe1, 0xfb, 0xa9, 0x54, 0x2a, 0x7b, 0x2f, 0x0b, 0x16, 0x45, 0xaa, 0x95, + 0x44, 0x2a, 0x17, 0x1a, 0xa6, 0x7a, 0x2c, 0x14, 0x1a, 0x0c, 0xea, 0x89, 0xd0, 0x7d, 0x5b, 0x34, + 0xd0, 0x77, 0xae, 0xa9, 0x46, 0x41, 0x53, 0xc5, 0x89, 0x57, 0xd3, 0x8e, 0x10, 0xec, 0xc4, 0x6b, + 0x15, 0x16, 0xe4, 0x20, 0xfe, 0x2a, 0xa0, 0xa8, 0xde, 0xe6, 0x06, 0x40, 0x55, 0x9d, 0x8b, 0x30, + 0x94, 0xda, 0xb6, 0x64, 0x16, 0x42, 0xe6, 0x68, 0x46, 0xb6, 0x9e, 0xa3, 0x6f, 0x52, 0x6b, 0xe0, + 0xfb, 0x32, 0xb2, 0x75, 0x9c, 0x85, 0x2e, 0xe8, 0xc7, 0xd6, 0xa0, 0x95, 0xc4, 0x2a, 0xa0, 0x8a, + 0x78, 0xd1, 0x8c, 0x73, 0x32, 0x98, 0xbd, 0x07, 0xd7, 0x92, 0x34, 0xf6, 0xf7, 0x53, 0xf9, 0x52, + 0xa6, 0xa9, 0xf4, 0xb7, 0xc8, 0xfa, 0xb7, 0x4d, 0x2f, 0xd6, 0xe6, 0xb3, 0x17, 0x71, 0x97, 0x96, + 0x4a, 0x4f, 0xef, 0x5a, 0x36, 0xbb, 0x66, 0x2e, 0xa2, 0x1c, 0x71, 0x22, 0x53, 0x71, 0x1c, 0x9a, + 0x76, 0xac, 0xcd, 0x73, 0xd8, 0xf9, 0x8d, 0x55, 0xa9, 0x9d, 0x23, 0xcf, 0x51, 0x69, 0x41, 0x71, + 0xd5, 0x99, 0xd3, 0xb0, 0x5a, 0x79, 0xd0, 0x52, 0x18, 0x68, 0x98, 0x9c, 0x8e, 0x4d, 0x92, 0x4c, + 0x83, 0x33, 0xe9, 0xbb, 0x94, 0x76, 0x17, 0x6c, 0x93, 0x64, 0x70, 0x9f, 0x62, 0xf6, 0xfd, 0x10, + 0xd6, 0x4c, 0x3b, 0xa3, 0xa4, 0xef, 0xd2, 0x82, 0x2d, 0xac, 0x68, 0x5c, 0x67, 0x82, 0xd1, 0x0d, + 0x6a, 0x6e, 0x94, 0xf4, 0xb7, 0xf3, 0xf5, 0x5d, 0x5c, 0x36, 0x2d, 0x7a, 0xe4, 0x65, 0xec, 0x8d, + 0xf2, 0xc1, 0xa0, 0x88, 0xfb, 0xff, 0x41, 0x6b, 0xa2, 0x3e, 0x9c, 0x33, 0xbf, 0xce, 0xc9, 0x70, + 0x8b, 0x1d, 0x2f, 0x61, 0x5b, 0x50, 0x9b, 0x39, 0x7b, 0xc7, 0x55, 0x9e, 0x93, 0x15, 0x6d, 0x01, + 0xca, 0xb6, 0xf0, 0x16, 0xac, 0x4c, 0x4c, 0x5c, 0x15, 0xd9, 0x51, 0x77, 0x6a, 0x86, 0xe5, 0x7c, + 0x69, 0xc2, 0x6c, 0x56, 0x9b, 0xee, 0x5b, 0x93, 0x99, 0x57, 0x42, 0x15, 0x6f, 0x56, 0x7d, 0xa5, + 0x9b, 0x39, 0xff, 0xac, 0x98, 0x48, 0x7a, 0x20, 0xce, 0xa4, 0xbf, 0x69, 0x9d, 0xb3, 0xe0, 0xb6, + 0x95, 0xb2, 0xdb, 0xce, 0x1a, 0x79, 0xde, 0x86, 0xf6, 0x4b, 0x71, 0x16, 0x0f, 0xd3, 0x40, 0x1b, + 0xed, 0xb7, 0xf8, 0x18, 0x71, 0x41, 0x8a, 0xb9, 0x0b, 0x5d, 0x93, 0x0e, 0xdd, 0x62, 0x24, 0xeb, + 0x18, 0x9c, 0x69, 0xa8, 0xff, 0x1b, 0xae, 0x98, 0xdc, 0xa0, 0xfa, 0x71, 0xaa, 0xa9, 0x91, 0x50, + 0xd6, 0x6d, 0x97, 0x69, 0xe1, 0x00, 0xf1, 0xd8, 0x50, 0x28, 0x4c, 0x87, 0x32, 0x52, 0xb6, 0x1e, + 0xc3, 0x4f, 0x34, 0xd5, 0x40, 0xb9, 0xe8, 0x08, 0x56, 0x05, 0x8d, 0x40, 0x1d, 0x4a, 0xa5, 0x1f, + 0xd7, 0x5b, 0xf5, 0x95, 0x05, 0xe7, 0xdb, 0x8a, 0x79, 0xdd, 0xa9, 0x96, 0x6e, 0xce, 0xeb, 0x4e, + 0x76, 0x26, 0xe6, 0x0d, 0x4a, 0x9d, 0xc9, 0x0e, 0xbc, 0xde, 0x37, 0xd9, 0xc8, 0x15, 0xa9, 0xd7, + 0x0f, 0xce, 0xa4, 0xab, 0x86, 0x49, 0x82, 0xb2, 0xcb, 0x08, 0x9d, 0xcc, 0xb7, 0x0f, 0x74, 0xdb, + 0x92, 0x6d, 0x1a, 0xaa, 0x03, 0x43, 0xb4, 0x63, 0x68, 0x9c, 0x3f, 0x56, 0x4c, 0xc5, 0x78, 0x98, + 0x0e, 0x95, 0x96, 0x3e, 0xa6, 0xd8, 0x57, 0xfc, 0x65, 0xf1, 0x63, 0x68, 0xd8, 0xf1, 0x0c, 0x9e, + 0xb3, 0x34, 0xd9, 0x06, 0x17, 0x18, 0x6e, 0x1c, 0x8e, 0x07, 0x37, 0xdc, 0x6e, 0x72, 0x3e, 0x80, + 0x4e, 0x01, 0xcd, 0x3a, 0xd0, 0x3c, 0xda, 0x7b, 0xb2, 0xf7, 0xfc, 0xb3, 0xbd, 0x95, 0xd7, 0x10, + 0x38, 0xe4, 0x47, 0x07, 0x87, 0x3b, 0xdb, 0x2b, 0x15, 0x76, 0x05, 0x16, 0x8f, 0xf6, 0x08, 0xfc, + 0xec, 0x39, 0x3f, 0x7c, 0xf4, 0xc5, 0x4a, 0xd5, 0xf9, 0xae, 0x66, 0x46, 0x1b, 0x2f, 0x0a, 0xa3, + 0x23, 0xdb, 0x54, 0xce, 0xaf, 0xf8, 0xc9, 0x45, 0xab, 0x85, 0xc2, 0x7b, 0x09, 0xaa, 0x3a, 0xb6, + 0x31, 0xa4, 0xaa, 0x63, 0x34, 0x2e, 0xaf, 0x8f, 0x91, 0x38, 0x3a, 0xc9, 0xc2, 0xc8, 0x18, 0x81, + 0x2a, 0xb1, 0x0d, 0xbc, 0xc9, 0xed, 0x76, 0x62, 0x97, 0xe3, 0x36, 0x69, 0xcc, 0x9c, 0x4a, 0x95, + 0xc4, 0x91, 0xca, 0x12, 0x44, 0x0e, 0x63, 0xae, 0x49, 0x65, 0x12, 0x06, 0x66, 0xb3, 0xb1, 0xbf, + 0xb6, 0xc5, 0x6c, 0x6a, 0x26, 0x67, 0x8f, 0xc8, 0x5a, 0xf4, 0xb2, 0xef, 0x95, 0x5f, 0x76, 0xc6, + 0xad, 0x37, 0x5e, 0x4c, 0x0d, 0xd1, 0x66, 0x0e, 0xd6, 0x8c, 0x0e, 0xdb, 0x79, 0xdd, 0xfe, 0x39, + 0xb0, 0xe9, 0x9d, 0x53, 0xba, 0xd8, 0xdf, 0xd9, 0xdb, 0xde, 0xdd, 0xfb, 0xf1, 0x4a, 0x85, 0x75, + 0xa1, 0xb5, 0xb9, 0xb5, 0xb5, 0xb3, 0x8f, 0x9a, 0xa9, 0x22, 0xb4, 0xbd, 0xb3, 0xf5, 0x74, 0x77, + 0x6f, 0x67, 0x7b, 0xa5, 0x86, 0xd0, 0xd6, 0xe6, 0xde, 0xd6, 0xce, 0xd3, 0x9d, 0xed, 0x95, 0xba, + 0xf3, 0xf7, 0x8a, 0x29, 0xe8, 0xb7, 0x4a, 0x13, 0xac, 0x6d, 0xe9, 0x05, 0x6a, 0xfe, 0xb4, 0xf8, + 0x36, 0xb4, 0xed, 0x7b, 0xee, 0x66, 0x96, 0x36, 0x46, 0xb0, 0x9f, 0xc1, 0xb2, 0x6f, 0xf7, 0xbb, + 0x25, 0xcb, 0x7b, 0x77, 0x72, 0x22, 0x31, 0xeb, 0xc8, 0x8d, 0xec, 0xc3, 0x3e, 0xcf, 0x92, 0x5f, + 0x82, 0x9d, 0xb7, 0x61, 0xa9, 0x4c, 0x51, 0xba, 0xec, 0x6b, 0xa5, 0xcb, 0x56, 0x9c, 0x3f, 0x57, + 0x61, 0x79, 0xe2, 0xe7, 0xe0, 0xf9, 0xa5, 0xcf, 0xe4, 0xac, 0xae, 0x3a, 0x35, 0xab, 0x63, 0x6f, + 0x03, 0x2b, 0x92, 0xb8, 0xc5, 0x09, 0xc7, 0x4a, 0x81, 0xd0, 0xc4, 0xaa, 0x62, 0x2d, 0x55, 0xbf, + 0x4c, 0x2d, 0xc5, 0x3e, 0x82, 0xae, 0x8a, 0xbd, 0x40, 0x84, 0x6e, 0x18, 0x44, 0xa7, 0xd9, 0x6f, + 0xf0, 0x37, 0x27, 0x7e, 0x5f, 0x26, 0x8a, 0xa7, 0x48, 0xc0, 0x3b, 0x6a, 0x0c, 0xb0, 0x9f, 0xc0, + 0xaa, 0x8c, 0x94, 0x9b, 0xd5, 0xd3, 0xae, 0x9f, 0xff, 0xea, 0x5e, 0x9b, 0x1e, 0x5f, 0x4d, 0x15, + 0xec, 0x9c, 0xc9, 0x49, 0x94, 0x72, 0x14, 0x00, 0x17, 0xe7, 0xb6, 0xe5, 0x2c, 0x16, 0xbd, 0x95, + 0x72, 0xd1, 0xfb, 0x04, 0x3a, 0xf6, 0xff, 0x2f, 0x0e, 0xb3, 0xce, 0x7d, 0xe9, 0xc1, 0x5b, 0xe3, + 0x13, 0x37, 0xc7, 0xff, 0xb1, 0xf1, 0xcc, 0xfe, 0xc3, 0x86, 0x65, 0xba, 0x81, 0x1b, 0x78, 0x71, + 0xb7, 0xf3, 0x87, 0x0a, 0x2c, 0xa1, 0x88, 0x85, 0x93, 0x7f, 0x40, 0x5d, 0x78, 0xd6, 0xfa, 0xda, + 0x1f, 0xa7, 0x56, 0x0b, 0xc3, 0x9c, 0x7c, 0x91, 0x17, 0x09, 0xd9, 0x03, 0x58, 0x55, 0xc3, 0xe3, + 0x2c, 0x6b, 0x3e, 0x56, 0x71, 0xf4, 0x70, 0xa4, 0x65, 0x56, 0x83, 0xce, 0x5c, 0x63, 0x6f, 0xc3, + 0x95, 0x6c, 0x90, 0x37, 0xde, 0x60, 0x7e, 0xc2, 0x9b, 0x5e, 0x70, 0x7e, 0x5b, 0xc9, 0x6b, 0x25, + 0x4c, 0xd8, 0xd4, 0x8b, 0xe5, 0x26, 0x86, 0x9f, 0x33, 0x33, 0xe5, 0x75, 0x68, 0xd8, 0xf1, 0xbe, + 0xc9, 0x02, 0x16, 0x2a, 0x1a, 0x69, 0xbd, 0x64, 0xa4, 0xb7, 0xa1, 0x6d, 0x33, 0xaf, 0x44, 0xb3, + 0xc0, 0x16, 0x74, 0x8c, 0x28, 0x15, 0x95, 0xa6, 0x28, 0xca, 0x61, 0xe7, 0x4b, 0x93, 0x41, 0x0a, + 0x56, 0xc3, 0xde, 0x9f, 0x30, 0xb3, 0xa9, 0xe7, 0x1c, 0x13, 0x97, 0x2d, 0x2c, 0x8f, 0x0b, 0xd5, + 0x62, 0xaf, 0xf1, 0x4d, 0x05, 0xee, 0x14, 0x6a, 0x8a, 0xad, 0xe9, 0x5f, 0x6a, 0xbf, 0xa7, 0x03, + 0x9e, 0xf3, 0xcb, 0x6f, 0x75, 0xee, 0x2f, 0xbf, 0xf3, 0x7a, 0x86, 0x87, 0x8b, 0x3f, 0xed, 0x6c, + 0xbc, 0xf3, 0x61, 0x76, 0x8f, 0xe3, 0x06, 0x7d, 0xbd, 0xfb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x33, 0x1f, 0xc7, 0x0a, 0x75, 0x24, 0x00, 0x00, } diff --git a/protocol/protobuf/pairing.proto b/protocol/protobuf/pairing.proto index ddba5e32b..5cb108fe3 100644 --- a/protocol/protobuf/pairing.proto +++ b/protocol/protobuf/pairing.proto @@ -136,6 +136,7 @@ message SyncInstallationCommunity { bool encrypted = 10; bool spectated = 11; bytes encryption_keys = 12; + SyncCommunityControlNode control_node = 13; } message SyncCommunityRequestsToJoin { @@ -149,6 +150,15 @@ message SyncCommunityRequestsToJoin { repeated RevealedAccount revealed_accounts = 8; } +message SyncCommunityControlNode { + // Lamport timestamp of control node change + uint64 clock = 1; + + // The device id of the control node + // Empty if there is no control node + string installation_id = 2; +} + message SyncChat { string id = 1; uint32 chat_type = 2; diff --git a/services/communitytokens/database_test.go b/services/communitytokens/database_test.go index 9c056c99f..e2cc2180f 100644 --- a/services/communitytokens/database_test.go +++ b/services/communitytokens/database_test.go @@ -7,12 +7,12 @@ import ( "github.com/stretchr/testify/suite" + "github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/protocol/communities/token" "github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/sqlite" "github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/t/helpers" - "github.com/status-im/status-go/walletdatabase" ) func TestDatabaseSuite(t *testing.T) { @@ -82,7 +82,7 @@ func (s *DatabaseSuite) setupDatabase(db *sql.DB) error { func (s *DatabaseSuite) SetupTest() { s.db = nil - db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{}) + db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{}) s.NoError(err, "creating sqlite db instance") err = sqlite.Migrate(db)