diff --git a/internal/git/housekeeping/config/config.go b/internal/git/housekeeping/config/config.go index e12f60d69c2073446462691f242eab83972e943c..01bdc7cdfcc973500158982c7da45350fbdef440 100644 --- a/internal/git/housekeeping/config/config.go +++ b/internal/git/housekeeping/config/config.go @@ -53,3 +53,6 @@ type RepackObjectsConfig struct { // be expired and thus deleted. CruftExpireBefore time.Time } + +// OffloadHouseKeepingConfig is configuration for housekeeping manager to run offloading/rehydrating tasks. +type OffloadHouseKeepingConfig struct{} diff --git a/internal/git/housekeeping/manager/manager.go b/internal/git/housekeeping/manager/manager.go index 4de73dfc902c66a161628e4525761cf0e4bc7a42..212884dd3b8e8d10daae1db7c91c30dd271e1fe1 100644 --- a/internal/git/housekeeping/manager/manager.go +++ b/internal/git/housekeeping/manager/manager.go @@ -6,6 +6,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping" + "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping/config" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" gitalycfgprom "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/prometheus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" @@ -23,6 +24,11 @@ type Manager interface { OptimizeRepository(context.Context, *localrepo.Repo, ...OptimizeRepositoryOption) error // AddPackRefsInhibitor allows clients to block housekeeping from running git-pack-refs(1). AddPackRefsInhibitor(ctx context.Context, repo storage.Repository) (bool, func(), error) + + // OffloadRepository offloads a repository's objects onto a cloud object storage + OffloadRepository(context.Context, *localrepo.Repo, config.OffloadHouseKeepingConfig) error + // RehydrateRepository restores a repository's objects back to Gitaly storage + RehydrateRepository(context.Context, *localrepo.Repo, config.OffloadHouseKeepingConfig) error } // repositoryState holds the housekeeping state for individual repositories. This structure can be diff --git a/internal/git/housekeeping/manager/offload_repository.go b/internal/git/housekeeping/manager/offload_repository.go new file mode 100644 index 0000000000000000000000000000000000000000..4d366502254ebc65a990723ac586c46d70be9409 --- /dev/null +++ b/internal/git/housekeeping/manager/offload_repository.go @@ -0,0 +1,106 @@ +package manager + +import ( + "context" + "fmt" + + "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping" + "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping/config" + "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" + "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" +) + +// OffloadRepository is housekeeping manager's entry point of offloading, +// where we determine if it is in the context of transaction. +func (m *RepositoryManager) OffloadRepository(ctx context.Context, repo *localrepo.Repo, cfg config.OffloadHouseKeepingConfig) error { + m.logger.Info("Offloading in RepositoryManager") + + if err := m.maybeStartTransaction(ctx, repo, func(ctx context.Context, tx storage.Transaction, repo *localrepo.Repo) error { + if tx != nil { + return m.offloadWithTransaction(ctx, repo, cfg) + } + return m.offload(ctx, repo, cfg) + }); err != nil { + return err + } + + return nil +} + +// offload is the offloading logic without transaction +func (m *RepositoryManager) offload(ctx context.Context, repo *localrepo.Repo, cfg config.OffloadHouseKeepingConfig) error { + repackCfg, repackOptions := housekeeping.GetOffloadingRepackOptions("", "") + + if err := housekeeping.PerformRepack(ctx, repo, repackCfg, repackOptions...); err != nil { + return structerr.NewInternal("repacking: %w", err) + } + if err := housekeeping.UploadToOffloadingStorage(ctx, "", "", ""); err != nil { + return structerr.NewInternal("uploading: %w", err) + } + + if err := housekeeping.SetOffloadingGitConfig(ctx, repo); err != nil { + return structerr.NewInternal("set offloading git config: %w", err) + } + + if err := housekeeping.AddOffloadTransientAlternate(ctx, repo); err != nil { + return structerr.NewInternal("set offloading transient alternate: %w", err) + } + return nil +} + +// offloadWithTransaction is the offloading logic with transaction +func (m *RepositoryManager) offloadWithTransaction(ctx context.Context, repo *localrepo.Repo, cfg config.OffloadHouseKeepingConfig) error { + if err := m.runInTransaction(ctx, false, repo, func(ctx context.Context, tx storage.Transaction, repo *localrepo.Repo) error { + return nil + }); err != nil { + return fmt.Errorf("run offloading in transaction: %w", err) + } + return nil +} + +// RehydrateRepository is housekeeping manager's entry point of rehydrating (i.e. revert offloading), +// where we determine if it is in the context of transaction. +func (m *RepositoryManager) RehydrateRepository(ctx context.Context, repo *localrepo.Repo, cfg config.OffloadHouseKeepingConfig) error { + m.logger.Info("Offloading in RepositoryManager") + + if err := m.maybeStartTransaction(ctx, repo, func(ctx context.Context, tx storage.Transaction, repo *localrepo.Repo) error { + if tx != nil { + return m.rehydrateWithTransaction(ctx, repo, cfg) + } + return m.rehydrate(ctx, repo, cfg) + }); err != nil { + return err + } + + return nil +} + +// rehydrate is the rehydrating logic without transaction +func (m *RepositoryManager) rehydrate(ctx context.Context, repo *localrepo.Repo, cfg config.OffloadHouseKeepingConfig) error { + if err := housekeeping.RemoveOffloadTransientAlternate(ctx, repo); err != nil { + return structerr.NewInternal("remove offload alternate: %w", err) + } + if err := housekeeping.ResetOffloadingGitConfig(ctx, repo); err != nil { + return structerr.NewInternal("remove offload from git config: %w", err) + } + + if err := housekeeping.DownloadOffloadingStorage(ctx, ""); err != nil { + return structerr.NewInternal("downloading objects: %w", err) + } + + if err := housekeeping.RemoveFromOffloadingStorage(); err != nil { + return structerr.NewInternal("remove object in object storage: %w", err) + } + return nil +} + +// rehydrateWithTransaction is the rehydrating logic with transaction +func (m *RepositoryManager) rehydrateWithTransaction(ctx context.Context, repo *localrepo.Repo, cfg config.OffloadHouseKeepingConfig) error { + if err := m.runInTransaction(ctx, false, repo, func(ctx context.Context, tx storage.Transaction, repo *localrepo.Repo) error { + return nil + }); err != nil { + return fmt.Errorf("run offloading in transaction: %w", err) + } + return nil +} diff --git a/internal/git/housekeeping/offloading.go b/internal/git/housekeeping/offloading.go new file mode 100644 index 0000000000000000000000000000000000000000..0826fe0071645b67cddf1af23fad5033252c0a9a --- /dev/null +++ b/internal/git/housekeeping/offloading.go @@ -0,0 +1,51 @@ +package housekeeping + +import ( + "context" + + "gitlab.com/gitlab-org/gitaly/v16/internal/git/gitcmd" + "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping/config" + "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" +) + +// SetOffloadingGitConfig adds a new promisor remote in the git config of the offloaded repository. +func SetOffloadingGitConfig(ctx context.Context, repo *localrepo.Repo) error { + return nil +} + +// ResetOffloadingGitConfig remotes the promisor remote from the offloaded repository. +func ResetOffloadingGitConfig(ctx context.Context, repo *localrepo.Repo) error { + return nil +} + +// AddOffloadTransientAlternate adds an alternate in the offloaded repository. This alternate +// serves as a cache for the object that download back temporarily. +func AddOffloadTransientAlternate(ctx context.Context, repo *localrepo.Repo) error { + return nil +} + +// RemoveOffloadTransientAlternate removes the transient alternate for offloading from the +// git alternate file. +func RemoveOffloadTransientAlternate(ctx context.Context, repo *localrepo.Repo) error { + return nil +} + +// GetOffloadingRepackOptions returns the flags for `git-repack(1)` command +func GetOffloadingRepackOptions(filter string, filterTo string) (config.RepackObjectsConfig, []gitcmd.Option) { + return config.RepackObjectsConfig{}, []gitcmd.Option{} +} + +// UploadToOffloadingStorage uploads the files to the offloading storage +func UploadToOffloadingStorage(ctx context.Context, bucket string, bucketPrefix string, uploadFrom string) error { + return nil +} + +// DownloadOffloadingStorage downloads the files from offloading storage +func DownloadOffloadingStorage(ctx context.Context, bucket string) error { + return nil +} + +// RemoveFromOffloadingStorage removes files from offloading storage +func RemoveFromOffloadingStorage() error { + return nil +} diff --git a/internal/gitaly/config/config.go b/internal/gitaly/config/config.go index 4f92c006f6aaeee7d8b80e19b8a81b98e5e5a742..da3b9f7641e13351d37ca100068dad6125167cfd 100644 --- a/internal/gitaly/config/config.go +++ b/internal/gitaly/config/config.go @@ -145,6 +145,7 @@ type Cfg struct { Transactions Transactions `json:"transactions,omitempty" toml:"transactions,omitempty"` AdaptiveLimiting AdaptiveLimiting `json:"adaptive_limiting,omitempty" toml:"adaptive_limiting,omitempty"` Raft Raft `json:"raft,omitempty" toml:"raft,omitempty"` + Offload Offload `json:"offload,omitempty" toml:"offload,omitempty"` } // Transactions configures transaction related options. @@ -918,6 +919,10 @@ func (cfg *Cfg) Sanitize() error { cfg.Logging.Config.Level = "info" } + if cfg.Offload.Enabled { + cfg.Offload = cfg.Offload.fulfillDefaults() + } + return nil } @@ -1301,3 +1306,24 @@ func (r Raft) Validate(transactions Transactions) error { return cfgErr.AsError() } + +// Offload contains configuration for the Gitaly offloading repository feature. +type Offload struct { + // Enabled enables the Gitaly offloading. + Enabled bool `json:"enabled" toml:"enabled"` + // CacheRoot is the root dir when temporarily downloading object/pack files back. + CacheRoot string `json:"cache_root" toml:"cache_root"` +} + +const ( + // OffloadingDefaultCacheRoot is the default value of CacheRoot. + // We use `/tmp` because it usually has OS level auto cleanup. + OffloadingDefaultCacheRoot = "/tmp" +) + +func (r Offload) fulfillDefaults() Offload { + if r.CacheRoot == "" { + r.CacheRoot = OffloadingDefaultCacheRoot + } + return r +} diff --git a/internal/gitaly/config/config_test.go b/internal/gitaly/config/config_test.go index dcc94004ad17a2c3db9a0615961e32f1d3e7ffdb..00f3807802057dbd21691c3d41e8f6a521fb95ce 100644 --- a/internal/gitaly/config/config_test.go +++ b/internal/gitaly/config/config_test.go @@ -2967,3 +2967,39 @@ initial_members = {1 = "localhost:4001", 2 = "localhost:4002", 3 = "localhost:40 require.NoError(t, expectedCfg.Sanitize()) require.Equal(t, expectedCfg.Raft, cfg.Raft) } + +func TestOffloadDisabled(t *testing.T) { + cfg, err := Load(strings.NewReader(``)) + require.NoError(t, err) + require.False(t, cfg.Offload.Enabled, "offload is disabled when not configured") + + cfg, err = Load(strings.NewReader(` +[offload] +enabled = false + `)) + require.NoError(t, err) + require.False(t, cfg.Offload.Enabled, "offload is disabled when enabled is set to false") +} + +func TestOffloadEnableWithDefault(t *testing.T) { + cfg, err := Load(strings.NewReader(` +[offload] +enabled = true + `)) + require.NoError(t, err) + + require.True(t, cfg.Offload.Enabled) + require.Equal(t, cfg.Offload.CacheRoot, "/tmp") +} + +func TestOffloadWithNonDefaultValues(t *testing.T) { + cfg, err := Load(strings.NewReader(` +[offload] +enabled = true +cache_root = "/non_temp_dir/repositories" + `)) + require.NoError(t, err) + + require.True(t, cfg.Offload.Enabled) + require.Equal(t, cfg.Offload.CacheRoot, "/non_temp_dir/repositories") +} diff --git a/internal/gitaly/service/repository/offload_repository.go b/internal/gitaly/service/repository/offload_repository.go new file mode 100644 index 0000000000000000000000000000000000000000..81725482b293aa8c0c42f6df6fc4e1f38b07ed07 --- /dev/null +++ b/internal/gitaly/service/repository/offload_repository.go @@ -0,0 +1,27 @@ +package repository + +import ( + "context" + + "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// OffloadRepository is the OffloadRepository RPC entrypoint. It further calls housekeeping manager to +// perform actual offloading task with or without the transaction management. +func (s *server) OffloadRepository(ctx context.Context, in *gitalypb.OffloadRequest) (*gitalypb.OffloadResponse, error) { + if !s.cfg.Offload.Enabled { + return nil, status.Errorf(codes.FailedPrecondition, "feature disabled") + } + return &gitalypb.OffloadResponse{}, nil +} + +// RehydrateRepository is the RehydrateRepository RPC entrypoint. It further calls housekeeping manager to +// perform actual rehydrating task with or without the transaction management. +func (s *server) RehydrateRepository(ctx context.Context, in *gitalypb.RehydrateRequest) (*gitalypb.RehydrateResponse, error) { + if !s.cfg.Offload.Enabled { + return nil, status.Errorf(codes.FailedPrecondition, "feature disabled") + } + return &gitalypb.RehydrateResponse{}, nil +} diff --git a/internal/gitaly/storage/storage.go b/internal/gitaly/storage/storage.go index 29cf42cd1fcafb17318f51470f7605fd79b69a64..e9e777f70faa451eb2ed91e3f85b7d0362696f7d 100644 --- a/internal/gitaly/storage/storage.go +++ b/internal/gitaly/storage/storage.go @@ -117,6 +117,8 @@ type Transaction interface { // PartitionRelativePaths returns all known repository relative paths for // the transactions partition. PartitionRelativePaths() []string + // OffloadRepository runs offloading housekeeping when transaction commits + OffloadRepository(config housekeepingcfg.OffloadHouseKeepingConfig) } // BeginOptions are used to configure a transaction that is being started. diff --git a/internal/gitaly/storage/storagemgr/partition/transaction_manager.go b/internal/gitaly/storage/storagemgr/partition/transaction_manager.go index f6b7e1ab420ea55eab5167c676b7aa73489b1053..86cd20798634cfaa2c7fabe15e76481d63892568 100644 --- a/internal/gitaly/storage/storagemgr/partition/transaction_manager.go +++ b/internal/gitaly/storage/storagemgr/partition/transaction_manager.go @@ -158,6 +158,12 @@ type runHousekeeping struct { writeCommitGraphs *writeCommitGraphs } +// runOffloading models the offloading task. It is designed to handle offloading tasks for repositories, +// including uploading packfiles to the offloading storage and replacing the existing packfiles. +type runOffloading struct { + config housekeepingcfg.OffloadHouseKeepingConfig +} + // runPackRefs models refs packing housekeeping task. It packs heads and tags for efficient repository access. type runPackRefs struct { // PrunedRefs contain a list of references pruned by the `git-pack-refs` command. They are used @@ -291,6 +297,7 @@ type Transaction struct { deleteRepository bool includedObjects map[git.ObjectID]struct{} runHousekeeping *runHousekeeping + runOffloading *runOffloading alternateUpdated bool // objectDependencies are the object IDs this transaction depends on in @@ -786,6 +793,13 @@ func (txn *Transaction) DeleteRepository() { txn.deleteRepository = true } +// OffloadRepository offloads the repository when the transaction is committed. +func (txn *Transaction) OffloadRepository(cfg housekeepingcfg.OffloadHouseKeepingConfig) { + txn.runOffloading = &runOffloading{ + config: cfg, + } +} + // MarkCustomHooksUpdated sets a hint to the transaction manager that custom hooks have been updated as part // of the transaction. This leads to the manager identifying changes and staging them for commit. func (txn *Transaction) MarkCustomHooksUpdated() { @@ -1145,6 +1159,10 @@ func (mgr *TransactionManager) commit(ctx context.Context, transaction *Transact return fmt.Errorf("preparing housekeeping: %w", err) } + if err := mgr.prepareOffloading(ctx, transaction); err != nil { + return fmt.Errorf("preparing offloading: %w", err) + } + if transaction.repositoryCreation != nil { // Below we'll log the repository exactly as it was created by the transaction. While // we can expect the transaction leaves the repository in a good state, we'll override @@ -2301,6 +2319,14 @@ func (mgr *TransactionManager) processTransaction(ctx context.Context) (returned logEntry.Housekeeping = housekeepingEntry } + if transaction.runOffloading != nil { + offloadingEntry, err := mgr.verifyOffloading(ctx, transaction) + if err != nil { + return fmt.Errorf("verifying offloading: %w", err) + } + logEntry.RepositoryOffloading = offloadingEntry + } + if err := mgr.verifyKeyValueOperations(ctx, transaction); err != nil { return fmt.Errorf("verify key-value operations: %w", err) } @@ -3615,6 +3641,12 @@ func (mgr *TransactionManager) applyLogEntry(ctx context.Context, lsn storage.LS } } + if logEntry.GetRepositoryDeletion() == nil && logEntry.GetRepositoryOffloading() != nil { + if err := mgr.applyOffloading(ctx, lsn, logEntry); err != nil { + return fmt.Errorf("apply offloading: %w", err) + } + } + mgr.testHooks.beforeStoreAppliedLSN() if err := mgr.storeAppliedLSN(lsn); err != nil { return fmt.Errorf("set applied LSN: %w", err) diff --git a/internal/gitaly/storage/storagemgr/partition/transaction_manager_offloading.go b/internal/gitaly/storage/storagemgr/partition/transaction_manager_offloading.go new file mode 100644 index 0000000000000000000000000000000000000000..4a1b55ba366d0a5a7a7eea96a78125aec122d530 --- /dev/null +++ b/internal/gitaly/storage/storagemgr/partition/transaction_manager_offloading.go @@ -0,0 +1,57 @@ +package partition + +import ( + "context" + "runtime/trace" + + "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/tracing" + "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" +) + +// prepareOffloading initiates the offloading process during the transaction commit phase. +func (mgr *TransactionManager) prepareOffloading(ctx context.Context, transaction *Transaction) error { + if transaction.runOffloading == nil { + return nil + } + + defer trace.StartRegion(ctx, "prepareOffloading").End() + + span, _ := tracing.StartSpanIfHasParent(ctx, "transaction.prepareOffloading", nil) + defer span.Finish() + + finishTimer := mgr.metrics.housekeeping.ReportTaskLatency("total", "prepare") + defer finishTimer() + + return nil +} + +// verifyOffloading checks for conflicts before applying the Write-Ahead Log (WAL) entry to ensure consistency. +func (mgr *TransactionManager) verifyOffloading(ctx context.Context, transaction *Transaction) (*gitalypb.LogEntry_RepositoryOffloading, error) { + if transaction.runOffloading == nil { + return nil, nil + } + + span, _ := tracing.StartSpanIfHasParent(ctx, "transaction.verifyOffloading", nil) + defer span.Finish() + + finishTimer := mgr.metrics.housekeeping.ReportTaskLatency("offload", "verify") + defer finishTimer() + + return &gitalypb.LogEntry_RepositoryOffloading{}, nil +} + +// applyOffloading finalizes the offloading by applying the Write-Ahead Log (WAL) entry to the target repository. +func (mgr *TransactionManager) applyOffloading(ctx context.Context, lsn storage.LSN, logEntry *gitalypb.LogEntry) error { + if logEntry.GetRepositoryOffloading() == nil { + return nil + } + + span, _ := tracing.StartSpanIfHasParent(ctx, "transaction.applyRepacking", nil) + defer span.Finish() + + finishTimer := mgr.metrics.housekeeping.ReportTaskLatency("repack", "apply") + defer finishTimer() + + return nil +} diff --git a/internal/praefect/coordinator.go b/internal/praefect/coordinator.go index 7d595fd620f9aa50dfb51d3dd0b5aea54085aba7..b5738beaf51f473dc6760ec4b3adb1b5ff7b9903 100644 --- a/internal/praefect/coordinator.go +++ b/internal/praefect/coordinator.go @@ -84,6 +84,8 @@ var transactionRPCs = map[string]transactionsCondition{ "/gitaly.SSHService/SSHReceivePack": transactionsEnabled, "/gitaly.SmartHTTPService/PostReceivePack": transactionsEnabled, "/gitaly.HookService/ProcReceiveHook": transactionsEnabled, + "/gitaly.RepositoryService/OffloadRepository": transactionsEnabled, + "/gitaly.RepositoryService/RehydrateRepository": transactionsEnabled, // The following RPCs currently aren't transactional, but we may consider making them // transactional in the future if the need arises. diff --git a/proto/go/gitalypb/log.pb.go b/proto/go/gitalypb/log.pb.go index 01f99c4e6abed4c1ba7118987991280e253fffcf..0871d978578aadfef696ec072a72191676ecc993 100644 --- a/proto/go/gitalypb/log.pb.go +++ b/proto/go/gitalypb/log.pb.go @@ -44,6 +44,12 @@ type LogEntry struct { // operations is an ordered list of operations to run in order to apply // this log entry. Operations []*LogEntry_Operation `protobuf:"bytes,10,rep,name=operations,proto3" json:"operations,omitempty"` + // repository_offloading, when set, signifies that this log entry contains details of an offloading task, + // where repository data is being moved to an offloading storage. + RepositoryOffloading *LogEntry_RepositoryOffloading `protobuf:"bytes,11,opt,name=repository_offloading,json=repositoryOffloading,proto3" json:"repository_offloading,omitempty"` + // repository_rehydrating, when set, signifies that this log entry contains details of a rehydrating task, + // where previously offloaded data is being restored back to the local storage. + RepositoryRehydrating *LogEntry_RepositoryRehydrating `protobuf:"bytes,12,opt,name=repository_rehydrating,json=repositoryRehydrating,proto3" json:"repository_rehydrating,omitempty"` } func (x *LogEntry) Reset() { @@ -111,6 +117,20 @@ func (x *LogEntry) GetOperations() []*LogEntry_Operation { return nil } +func (x *LogEntry) GetRepositoryOffloading() *LogEntry_RepositoryOffloading { + if x != nil { + return x.RepositoryOffloading + } + return nil +} + +func (x *LogEntry) GetRepositoryRehydrating() *LogEntry_RepositoryRehydrating { + if x != nil { + return x.RepositoryRehydrating + } + return nil +} + // LSN serializes a log sequence number. It's used for storing a partition's // applied LSN in the database. // @@ -246,6 +266,90 @@ func (*LogEntry_RepositoryDeletion) Descriptor() ([]byte, []int) { return file_log_proto_rawDescGZIP(), []int{0, 1} } +// RepositoryOffloading models a repository offloading. +type LogEntry_RepositoryOffloading struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // new_pack_files are the new pack files need to put in objects/pack dir. + NewPackFiles []string `protobuf:"bytes,1,rep,name=new_pack_files,json=newPackFiles,proto3" json:"new_pack_files,omitempty"` +} + +func (x *LogEntry_RepositoryOffloading) Reset() { + *x = LogEntry_RepositoryOffloading{} + mi := &file_log_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogEntry_RepositoryOffloading) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogEntry_RepositoryOffloading) ProtoMessage() {} + +func (x *LogEntry_RepositoryOffloading) ProtoReflect() protoreflect.Message { + mi := &file_log_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogEntry_RepositoryOffloading.ProtoReflect.Descriptor instead. +func (*LogEntry_RepositoryOffloading) Descriptor() ([]byte, []int) { + return file_log_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *LogEntry_RepositoryOffloading) GetNewPackFiles() []string { + if x != nil { + return x.NewPackFiles + } + return nil +} + +// RepositoryRehydrating models a repository rehydrating. +type LogEntry_RepositoryRehydrating struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LogEntry_RepositoryRehydrating) Reset() { + *x = LogEntry_RepositoryRehydrating{} + mi := &file_log_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogEntry_RepositoryRehydrating) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogEntry_RepositoryRehydrating) ProtoMessage() {} + +func (x *LogEntry_RepositoryRehydrating) ProtoReflect() protoreflect.Message { + mi := &file_log_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogEntry_RepositoryRehydrating.ProtoReflect.Descriptor instead. +func (*LogEntry_RepositoryRehydrating) Descriptor() ([]byte, []int) { + return file_log_proto_rawDescGZIP(), []int{0, 3} +} + // Housekeeping models a housekeeping run. It is supposed to handle housekeeping tasks for repositories such as the // cleanup of unneeded files and optimizations for the repository's data structures. It is a collection of smaller // tasks. @@ -264,7 +368,7 @@ type LogEntry_Housekeeping struct { func (x *LogEntry_Housekeeping) Reset() { *x = LogEntry_Housekeeping{} - mi := &file_log_proto_msgTypes[4] + mi := &file_log_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -276,7 +380,7 @@ func (x *LogEntry_Housekeeping) String() string { func (*LogEntry_Housekeeping) ProtoMessage() {} func (x *LogEntry_Housekeeping) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[4] + mi := &file_log_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -289,7 +393,7 @@ func (x *LogEntry_Housekeeping) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry_Housekeeping.ProtoReflect.Descriptor instead. func (*LogEntry_Housekeeping) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 2} + return file_log_proto_rawDescGZIP(), []int{0, 4} } func (x *LogEntry_Housekeeping) GetPackRefs() *LogEntry_Housekeeping_PackRefs { @@ -331,7 +435,7 @@ type LogEntry_Operation struct { func (x *LogEntry_Operation) Reset() { *x = LogEntry_Operation{} - mi := &file_log_proto_msgTypes[5] + mi := &file_log_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -343,7 +447,7 @@ func (x *LogEntry_Operation) String() string { func (*LogEntry_Operation) ProtoMessage() {} func (x *LogEntry_Operation) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[5] + mi := &file_log_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -356,7 +460,7 @@ func (x *LogEntry_Operation) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry_Operation.ProtoReflect.Descriptor instead. func (*LogEntry_Operation) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 3} + return file_log_proto_rawDescGZIP(), []int{0, 5} } func (m *LogEntry_Operation) GetOperation() isLogEntry_Operation_Operation { @@ -461,7 +565,7 @@ type LogEntry_ReferenceTransaction_Change struct { func (x *LogEntry_ReferenceTransaction_Change) Reset() { *x = LogEntry_ReferenceTransaction_Change{} - mi := &file_log_proto_msgTypes[6] + mi := &file_log_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +577,7 @@ func (x *LogEntry_ReferenceTransaction_Change) String() string { func (*LogEntry_ReferenceTransaction_Change) ProtoMessage() {} func (x *LogEntry_ReferenceTransaction_Change) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[6] + mi := &file_log_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -524,7 +628,7 @@ type LogEntry_Housekeeping_PackRefs struct { func (x *LogEntry_Housekeeping_PackRefs) Reset() { *x = LogEntry_Housekeeping_PackRefs{} - mi := &file_log_proto_msgTypes[7] + mi := &file_log_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -536,7 +640,7 @@ func (x *LogEntry_Housekeeping_PackRefs) String() string { func (*LogEntry_Housekeeping_PackRefs) ProtoMessage() {} func (x *LogEntry_Housekeeping_PackRefs) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[7] + mi := &file_log_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -549,7 +653,7 @@ func (x *LogEntry_Housekeeping_PackRefs) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry_Housekeeping_PackRefs.ProtoReflect.Descriptor instead. func (*LogEntry_Housekeeping_PackRefs) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 2, 0} + return file_log_proto_rawDescGZIP(), []int{0, 4, 0} } func (x *LogEntry_Housekeeping_PackRefs) GetPrunedRefs() [][]byte { @@ -578,7 +682,7 @@ type LogEntry_Housekeeping_Repack struct { func (x *LogEntry_Housekeeping_Repack) Reset() { *x = LogEntry_Housekeeping_Repack{} - mi := &file_log_proto_msgTypes[8] + mi := &file_log_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -590,7 +694,7 @@ func (x *LogEntry_Housekeeping_Repack) String() string { func (*LogEntry_Housekeeping_Repack) ProtoMessage() {} func (x *LogEntry_Housekeeping_Repack) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[8] + mi := &file_log_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -603,7 +707,7 @@ func (x *LogEntry_Housekeeping_Repack) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry_Housekeeping_Repack.ProtoReflect.Descriptor instead. func (*LogEntry_Housekeeping_Repack) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 2, 1} + return file_log_proto_rawDescGZIP(), []int{0, 4, 1} } func (x *LogEntry_Housekeeping_Repack) GetNewFiles() []string { @@ -637,7 +741,7 @@ type LogEntry_Housekeeping_WriteCommitGraphs struct { func (x *LogEntry_Housekeeping_WriteCommitGraphs) Reset() { *x = LogEntry_Housekeeping_WriteCommitGraphs{} - mi := &file_log_proto_msgTypes[9] + mi := &file_log_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -649,7 +753,7 @@ func (x *LogEntry_Housekeeping_WriteCommitGraphs) String() string { func (*LogEntry_Housekeeping_WriteCommitGraphs) ProtoMessage() {} func (x *LogEntry_Housekeeping_WriteCommitGraphs) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[9] + mi := &file_log_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -662,7 +766,7 @@ func (x *LogEntry_Housekeeping_WriteCommitGraphs) ProtoReflect() protoreflect.Me // Deprecated: Use LogEntry_Housekeeping_WriteCommitGraphs.ProtoReflect.Descriptor instead. func (*LogEntry_Housekeeping_WriteCommitGraphs) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 2, 2} + return file_log_proto_rawDescGZIP(), []int{0, 4, 2} } // CreateHardLink creates a hard link. The existing inode metadata, including @@ -684,7 +788,7 @@ type LogEntry_Operation_CreateHardLink struct { func (x *LogEntry_Operation_CreateHardLink) Reset() { *x = LogEntry_Operation_CreateHardLink{} - mi := &file_log_proto_msgTypes[10] + mi := &file_log_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -696,7 +800,7 @@ func (x *LogEntry_Operation_CreateHardLink) String() string { func (*LogEntry_Operation_CreateHardLink) ProtoMessage() {} func (x *LogEntry_Operation_CreateHardLink) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[10] + mi := &file_log_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -709,7 +813,7 @@ func (x *LogEntry_Operation_CreateHardLink) ProtoReflect() protoreflect.Message // Deprecated: Use LogEntry_Operation_CreateHardLink.ProtoReflect.Descriptor instead. func (*LogEntry_Operation_CreateHardLink) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 3, 0} + return file_log_proto_rawDescGZIP(), []int{0, 5, 0} } func (x *LogEntry_Operation_CreateHardLink) GetSourcePath() []byte { @@ -747,7 +851,7 @@ type LogEntry_Operation_RemoveDirectoryEntry struct { func (x *LogEntry_Operation_RemoveDirectoryEntry) Reset() { *x = LogEntry_Operation_RemoveDirectoryEntry{} - mi := &file_log_proto_msgTypes[11] + mi := &file_log_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -759,7 +863,7 @@ func (x *LogEntry_Operation_RemoveDirectoryEntry) String() string { func (*LogEntry_Operation_RemoveDirectoryEntry) ProtoMessage() {} func (x *LogEntry_Operation_RemoveDirectoryEntry) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[11] + mi := &file_log_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -772,7 +876,7 @@ func (x *LogEntry_Operation_RemoveDirectoryEntry) ProtoReflect() protoreflect.Me // Deprecated: Use LogEntry_Operation_RemoveDirectoryEntry.ProtoReflect.Descriptor instead. func (*LogEntry_Operation_RemoveDirectoryEntry) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 3, 1} + return file_log_proto_rawDescGZIP(), []int{0, 5, 1} } func (x *LogEntry_Operation_RemoveDirectoryEntry) GetPath() []byte { @@ -796,7 +900,7 @@ type LogEntry_Operation_CreateDirectory struct { func (x *LogEntry_Operation_CreateDirectory) Reset() { *x = LogEntry_Operation_CreateDirectory{} - mi := &file_log_proto_msgTypes[12] + mi := &file_log_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -808,7 +912,7 @@ func (x *LogEntry_Operation_CreateDirectory) String() string { func (*LogEntry_Operation_CreateDirectory) ProtoMessage() {} func (x *LogEntry_Operation_CreateDirectory) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[12] + mi := &file_log_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -821,7 +925,7 @@ func (x *LogEntry_Operation_CreateDirectory) ProtoReflect() protoreflect.Message // Deprecated: Use LogEntry_Operation_CreateDirectory.ProtoReflect.Descriptor instead. func (*LogEntry_Operation_CreateDirectory) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 3, 2} + return file_log_proto_rawDescGZIP(), []int{0, 5, 2} } func (x *LogEntry_Operation_CreateDirectory) GetPath() []byte { @@ -852,7 +956,7 @@ type LogEntry_Operation_SetKey struct { func (x *LogEntry_Operation_SetKey) Reset() { *x = LogEntry_Operation_SetKey{} - mi := &file_log_proto_msgTypes[13] + mi := &file_log_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -864,7 +968,7 @@ func (x *LogEntry_Operation_SetKey) String() string { func (*LogEntry_Operation_SetKey) ProtoMessage() {} func (x *LogEntry_Operation_SetKey) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[13] + mi := &file_log_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -877,7 +981,7 @@ func (x *LogEntry_Operation_SetKey) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry_Operation_SetKey.ProtoReflect.Descriptor instead. func (*LogEntry_Operation_SetKey) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 3, 3} + return file_log_proto_rawDescGZIP(), []int{0, 5, 3} } func (x *LogEntry_Operation_SetKey) GetKey() []byte { @@ -906,7 +1010,7 @@ type LogEntry_Operation_DeleteKey struct { func (x *LogEntry_Operation_DeleteKey) Reset() { *x = LogEntry_Operation_DeleteKey{} - mi := &file_log_proto_msgTypes[14] + mi := &file_log_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +1022,7 @@ func (x *LogEntry_Operation_DeleteKey) String() string { func (*LogEntry_Operation_DeleteKey) ProtoMessage() {} func (x *LogEntry_Operation_DeleteKey) ProtoReflect() protoreflect.Message { - mi := &file_log_proto_msgTypes[14] + mi := &file_log_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +1035,7 @@ func (x *LogEntry_Operation_DeleteKey) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry_Operation_DeleteKey.ProtoReflect.Descriptor instead. func (*LogEntry_Operation_DeleteKey) Descriptor() ([]byte, []int) { - return file_log_proto_rawDescGZIP(), []int{0, 3, 4} + return file_log_proto_rawDescGZIP(), []int{0, 5, 4} } func (x *LogEntry_Operation_DeleteKey) GetKey() []byte { @@ -945,7 +1049,7 @@ var File_log_proto protoreflect.FileDescriptor var file_log_proto_rawDesc = []byte{ 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x22, 0xe7, 0x0d, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x61, 0x6c, 0x79, 0x22, 0xf9, 0x0f, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x5c, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, @@ -967,101 +1071,118 @@ var file_log_proto_rawDesc = []byte{ 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xc7, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x46, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x1a, 0x67, 0x0a, 0x06, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, - 0x77, 0x5f, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6e, 0x65, 0x77, - 0x4f, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x1a, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa6, 0x03, 0x0a, 0x0c, 0x48, 0x6f, 0x75, - 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x70, 0x61, 0x63, - 0x6b, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, - 0x6f, 0x75, 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, 0x63, 0x6b, - 0x52, 0x65, 0x66, 0x73, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x12, 0x3c, - 0x0a, 0x06, 0x72, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x14, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x5f, 0x72, 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, + 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x15, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x1a, 0xc7, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x1a, 0x67, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x25, + 0x0a, 0x0e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x4f, 0x69, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x14, 0x0a, + 0x12, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x6e, + 0x65, 0x77, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x1a, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x1a, 0xa6, 0x03, 0x0a, 0x0c, 0x48, + 0x6f, 0x75, 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x09, 0x70, + 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x2e, 0x48, 0x6f, 0x75, 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, - 0x70, 0x61, 0x63, 0x6b, 0x52, 0x06, 0x72, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x5f, 0x0a, 0x13, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x6f, 0x75, 0x73, - 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x52, 0x11, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x1a, 0x2b, 0x0a, - 0x08, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x75, - 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, - 0x70, 0x72, 0x75, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x66, 0x73, 0x1a, 0x70, 0x0a, 0x06, 0x52, 0x65, - 0x70, 0x61, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x66, 0x75, 0x6c, - 0x6c, 0x5f, 0x72, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x69, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x1a, 0x13, 0x0a, 0x11, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x73, 0x1a, 0xf9, 0x05, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x55, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6c, - 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x61, 0x72, 0x64, - 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x61, - 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x67, 0x0a, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x57, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x06, - 0x73, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x1a, 0x88, 0x01, - 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, - 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x1a, 0x2a, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x1a, 0x39, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, - 0x30, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x1a, 0x1d, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1b, 0x0a, - 0x03, 0x4c, 0x53, 0x4e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, - 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x36, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x48, 0x6f, 0x75, 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, + 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, + 0x12, 0x3c, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x2e, 0x48, 0x6f, 0x75, 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x2e, + 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x52, 0x06, 0x72, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x5f, + 0x0a, 0x13, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x6f, + 0x75, 0x73, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x52, 0x11, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x1a, + 0x2b, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, + 0x72, 0x75, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, + 0x52, 0x0a, 0x70, 0x72, 0x75, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x66, 0x73, 0x1a, 0x70, 0x0a, 0x06, + 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x1a, 0x13, + 0x0a, 0x11, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x73, 0x1a, 0xf9, 0x05, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x55, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x72, 0x64, + 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x61, + 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x67, 0x0a, 0x16, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x57, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x07, 0x73, 0x65, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x48, 0x00, + 0x52, 0x06, 0x73, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x1a, + 0x88, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, + 0x6e, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, + 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, + 0x29, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x1a, 0x2a, 0x0a, 0x14, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x39, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x1a, 0x30, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x1a, 0x1d, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x1b, 0x0a, 0x03, 0x4c, 0x53, 0x4e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x34, 0x5a, 0x32, + 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, + 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x36, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1076,43 +1197,47 @@ func file_log_proto_rawDescGZIP() []byte { return file_log_proto_rawDescData } -var file_log_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_log_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_log_proto_goTypes = []any{ (*LogEntry)(nil), // 0: gitaly.LogEntry (*LSN)(nil), // 1: gitaly.LSN (*LogEntry_ReferenceTransaction)(nil), // 2: gitaly.LogEntry.ReferenceTransaction (*LogEntry_RepositoryDeletion)(nil), // 3: gitaly.LogEntry.RepositoryDeletion - (*LogEntry_Housekeeping)(nil), // 4: gitaly.LogEntry.Housekeeping - (*LogEntry_Operation)(nil), // 5: gitaly.LogEntry.Operation - (*LogEntry_ReferenceTransaction_Change)(nil), // 6: gitaly.LogEntry.ReferenceTransaction.Change - (*LogEntry_Housekeeping_PackRefs)(nil), // 7: gitaly.LogEntry.Housekeeping.PackRefs - (*LogEntry_Housekeeping_Repack)(nil), // 8: gitaly.LogEntry.Housekeeping.Repack - (*LogEntry_Housekeeping_WriteCommitGraphs)(nil), // 9: gitaly.LogEntry.Housekeeping.WriteCommitGraphs - (*LogEntry_Operation_CreateHardLink)(nil), // 10: gitaly.LogEntry.Operation.CreateHardLink - (*LogEntry_Operation_RemoveDirectoryEntry)(nil), // 11: gitaly.LogEntry.Operation.RemoveDirectoryEntry - (*LogEntry_Operation_CreateDirectory)(nil), // 12: gitaly.LogEntry.Operation.CreateDirectory - (*LogEntry_Operation_SetKey)(nil), // 13: gitaly.LogEntry.Operation.SetKey - (*LogEntry_Operation_DeleteKey)(nil), // 14: gitaly.LogEntry.Operation.DeleteKey + (*LogEntry_RepositoryOffloading)(nil), // 4: gitaly.LogEntry.RepositoryOffloading + (*LogEntry_RepositoryRehydrating)(nil), // 5: gitaly.LogEntry.RepositoryRehydrating + (*LogEntry_Housekeeping)(nil), // 6: gitaly.LogEntry.Housekeeping + (*LogEntry_Operation)(nil), // 7: gitaly.LogEntry.Operation + (*LogEntry_ReferenceTransaction_Change)(nil), // 8: gitaly.LogEntry.ReferenceTransaction.Change + (*LogEntry_Housekeeping_PackRefs)(nil), // 9: gitaly.LogEntry.Housekeeping.PackRefs + (*LogEntry_Housekeeping_Repack)(nil), // 10: gitaly.LogEntry.Housekeeping.Repack + (*LogEntry_Housekeeping_WriteCommitGraphs)(nil), // 11: gitaly.LogEntry.Housekeeping.WriteCommitGraphs + (*LogEntry_Operation_CreateHardLink)(nil), // 12: gitaly.LogEntry.Operation.CreateHardLink + (*LogEntry_Operation_RemoveDirectoryEntry)(nil), // 13: gitaly.LogEntry.Operation.RemoveDirectoryEntry + (*LogEntry_Operation_CreateDirectory)(nil), // 14: gitaly.LogEntry.Operation.CreateDirectory + (*LogEntry_Operation_SetKey)(nil), // 15: gitaly.LogEntry.Operation.SetKey + (*LogEntry_Operation_DeleteKey)(nil), // 16: gitaly.LogEntry.Operation.DeleteKey } var file_log_proto_depIdxs = []int32{ 2, // 0: gitaly.LogEntry.reference_transactions:type_name -> gitaly.LogEntry.ReferenceTransaction 3, // 1: gitaly.LogEntry.repository_deletion:type_name -> gitaly.LogEntry.RepositoryDeletion - 4, // 2: gitaly.LogEntry.housekeeping:type_name -> gitaly.LogEntry.Housekeeping - 5, // 3: gitaly.LogEntry.operations:type_name -> gitaly.LogEntry.Operation - 6, // 4: gitaly.LogEntry.ReferenceTransaction.changes:type_name -> gitaly.LogEntry.ReferenceTransaction.Change - 7, // 5: gitaly.LogEntry.Housekeeping.pack_refs:type_name -> gitaly.LogEntry.Housekeeping.PackRefs - 8, // 6: gitaly.LogEntry.Housekeeping.repack:type_name -> gitaly.LogEntry.Housekeeping.Repack - 9, // 7: gitaly.LogEntry.Housekeeping.write_commit_graphs:type_name -> gitaly.LogEntry.Housekeeping.WriteCommitGraphs - 10, // 8: gitaly.LogEntry.Operation.create_hard_link:type_name -> gitaly.LogEntry.Operation.CreateHardLink - 11, // 9: gitaly.LogEntry.Operation.remove_directory_entry:type_name -> gitaly.LogEntry.Operation.RemoveDirectoryEntry - 12, // 10: gitaly.LogEntry.Operation.create_directory:type_name -> gitaly.LogEntry.Operation.CreateDirectory - 13, // 11: gitaly.LogEntry.Operation.set_key:type_name -> gitaly.LogEntry.Operation.SetKey - 14, // 12: gitaly.LogEntry.Operation.delete_key:type_name -> gitaly.LogEntry.Operation.DeleteKey - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 6, // 2: gitaly.LogEntry.housekeeping:type_name -> gitaly.LogEntry.Housekeeping + 7, // 3: gitaly.LogEntry.operations:type_name -> gitaly.LogEntry.Operation + 4, // 4: gitaly.LogEntry.repository_offloading:type_name -> gitaly.LogEntry.RepositoryOffloading + 5, // 5: gitaly.LogEntry.repository_rehydrating:type_name -> gitaly.LogEntry.RepositoryRehydrating + 8, // 6: gitaly.LogEntry.ReferenceTransaction.changes:type_name -> gitaly.LogEntry.ReferenceTransaction.Change + 9, // 7: gitaly.LogEntry.Housekeeping.pack_refs:type_name -> gitaly.LogEntry.Housekeeping.PackRefs + 10, // 8: gitaly.LogEntry.Housekeeping.repack:type_name -> gitaly.LogEntry.Housekeeping.Repack + 11, // 9: gitaly.LogEntry.Housekeeping.write_commit_graphs:type_name -> gitaly.LogEntry.Housekeeping.WriteCommitGraphs + 12, // 10: gitaly.LogEntry.Operation.create_hard_link:type_name -> gitaly.LogEntry.Operation.CreateHardLink + 13, // 11: gitaly.LogEntry.Operation.remove_directory_entry:type_name -> gitaly.LogEntry.Operation.RemoveDirectoryEntry + 14, // 12: gitaly.LogEntry.Operation.create_directory:type_name -> gitaly.LogEntry.Operation.CreateDirectory + 15, // 13: gitaly.LogEntry.Operation.set_key:type_name -> gitaly.LogEntry.Operation.SetKey + 16, // 14: gitaly.LogEntry.Operation.delete_key:type_name -> gitaly.LogEntry.Operation.DeleteKey + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_log_proto_init() } @@ -1120,7 +1245,7 @@ func file_log_proto_init() { if File_log_proto != nil { return } - file_log_proto_msgTypes[5].OneofWrappers = []any{ + file_log_proto_msgTypes[7].OneofWrappers = []any{ (*LogEntry_Operation_CreateHardLink_)(nil), (*LogEntry_Operation_RemoveDirectoryEntry_)(nil), (*LogEntry_Operation_CreateDirectory_)(nil), @@ -1133,7 +1258,7 @@ func file_log_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_log_proto_rawDesc, NumEnums: 0, - NumMessages: 15, + NumMessages: 17, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gitalypb/repository.pb.go b/proto/go/gitalypb/repository.pb.go index cbb00f2d16d61d5a562ec74b55a6ca2bce50fd04..eaabf9dc32b6242235e4172b1a932ab68b09161c 100644 --- a/proto/go/gitalypb/repository.pb.go +++ b/proto/go/gitalypb/repository.pb.go @@ -4869,6 +4869,202 @@ func (x *FastExportResponse) GetData() []byte { return nil } +// OffloadRequest is the request for the OffloadRepository RPC +type OffloadRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // repository is the repository whose object store we want to offload. + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + // filter is the filter used when repacking, default to blob:none. + // More info can be found at https://git-scm.com/docs/git-repack#Documentation/git-repack.txt---filterltfilter-specgt + Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"` + // bucket is the bucket name of the cloud object storage + Bucket string `protobuf:"bytes,3,opt,name=bucket,proto3" json:"bucket,omitempty"` +} + +func (x *OffloadRequest) Reset() { + *x = OffloadRequest{} + mi := &file_repository_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OffloadRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OffloadRequest) ProtoMessage() {} + +func (x *OffloadRequest) ProtoReflect() protoreflect.Message { + mi := &file_repository_proto_msgTypes[86] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OffloadRequest.ProtoReflect.Descriptor instead. +func (*OffloadRequest) Descriptor() ([]byte, []int) { + return file_repository_proto_rawDescGZIP(), []int{86} +} + +func (x *OffloadRequest) GetRepository() *Repository { + if x != nil { + return x.Repository + } + return nil +} + +func (x *OffloadRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *OffloadRequest) GetBucket() string { + if x != nil { + return x.Bucket + } + return "" +} + +// OffloadResponse is the response for the OffloadRepository RPC +type OffloadResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *OffloadResponse) Reset() { + *x = OffloadResponse{} + mi := &file_repository_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OffloadResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OffloadResponse) ProtoMessage() {} + +func (x *OffloadResponse) ProtoReflect() protoreflect.Message { + mi := &file_repository_proto_msgTypes[87] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OffloadResponse.ProtoReflect.Descriptor instead. +func (*OffloadResponse) Descriptor() ([]byte, []int) { + return file_repository_proto_rawDescGZIP(), []int{87} +} + +// RehydrateRequest is the request for the RehydrateRepository RPC +type RehydrateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // repository is the repository whose object store we want to download back. + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + // bucket is the bucket name of the cloud object storage + Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"` +} + +func (x *RehydrateRequest) Reset() { + *x = RehydrateRequest{} + mi := &file_repository_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RehydrateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RehydrateRequest) ProtoMessage() {} + +func (x *RehydrateRequest) ProtoReflect() protoreflect.Message { + mi := &file_repository_proto_msgTypes[88] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RehydrateRequest.ProtoReflect.Descriptor instead. +func (*RehydrateRequest) Descriptor() ([]byte, []int) { + return file_repository_proto_rawDescGZIP(), []int{88} +} + +func (x *RehydrateRequest) GetRepository() *Repository { + if x != nil { + return x.Repository + } + return nil +} + +func (x *RehydrateRequest) GetBucket() string { + if x != nil { + return x.Bucket + } + return "" +} + +// RehydrateResponse is the response for the RehydrateRepository RPC +type RehydrateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RehydrateResponse) Reset() { + *x = RehydrateResponse{} + mi := &file_repository_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RehydrateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RehydrateResponse) ProtoMessage() {} + +func (x *RehydrateResponse) ProtoReflect() protoreflect.Message { + mi := &file_repository_proto_msgTypes[89] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RehydrateResponse.ProtoReflect.Descriptor instead. +func (*RehydrateResponse) Descriptor() ([]byte, []int) { + return file_repository_proto_rawDescGZIP(), []int{89} +} + // ReferencesInfo hosts information about references. type RepositoryInfoResponse_ReferencesInfo struct { state protoimpl.MessageState @@ -4892,7 +5088,7 @@ type RepositoryInfoResponse_ReferencesInfo struct { func (x *RepositoryInfoResponse_ReferencesInfo) Reset() { *x = RepositoryInfoResponse_ReferencesInfo{} - mi := &file_repository_proto_msgTypes[86] + mi := &file_repository_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4904,7 +5100,7 @@ func (x *RepositoryInfoResponse_ReferencesInfo) String() string { func (*RepositoryInfoResponse_ReferencesInfo) ProtoMessage() {} func (x *RepositoryInfoResponse_ReferencesInfo) ProtoReflect() protoreflect.Message { - mi := &file_repository_proto_msgTypes[86] + mi := &file_repository_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4969,7 +5165,7 @@ type RepositoryInfoResponse_ObjectsInfo struct { func (x *RepositoryInfoResponse_ObjectsInfo) Reset() { *x = RepositoryInfoResponse_ObjectsInfo{} - mi := &file_repository_proto_msgTypes[87] + mi := &file_repository_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4981,7 +5177,7 @@ func (x *RepositoryInfoResponse_ObjectsInfo) String() string { func (*RepositoryInfoResponse_ObjectsInfo) ProtoMessage() {} func (x *RepositoryInfoResponse_ObjectsInfo) ProtoReflect() protoreflect.Message { - mi := &file_repository_proto_msgTypes[87] + mi := &file_repository_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5050,7 +5246,7 @@ type GetRawChangesResponse_RawChange struct { func (x *GetRawChangesResponse_RawChange) Reset() { *x = GetRawChangesResponse_RawChange{} - mi := &file_repository_proto_msgTypes[88] + mi := &file_repository_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5062,7 +5258,7 @@ func (x *GetRawChangesResponse_RawChange) String() string { func (*GetRawChangesResponse_RawChange) ProtoMessage() {} func (x *GetRawChangesResponse_RawChange) ProtoReflect() protoreflect.Message { - mi := &file_repository_proto_msgTypes[88] + mi := &file_repository_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5136,7 +5332,7 @@ type BackupRepositoryResponse_SkippedError struct { func (x *BackupRepositoryResponse_SkippedError) Reset() { *x = BackupRepositoryResponse_SkippedError{} - mi := &file_repository_proto_msgTypes[89] + mi := &file_repository_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5148,7 +5344,7 @@ func (x *BackupRepositoryResponse_SkippedError) String() string { func (*BackupRepositoryResponse_SkippedError) ProtoMessage() {} func (x *BackupRepositoryResponse_SkippedError) ProtoReflect() protoreflect.Message { - mi := &file_repository_proto_msgTypes[89] + mi := &file_repository_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5173,7 +5369,7 @@ type RestoreRepositoryResponse_SkippedError struct { func (x *RestoreRepositoryResponse_SkippedError) Reset() { *x = RestoreRepositoryResponse_SkippedError{} - mi := &file_repository_proto_msgTypes[90] + mi := &file_repository_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5185,7 +5381,7 @@ func (x *RestoreRepositoryResponse_SkippedError) String() string { func (*RestoreRepositoryResponse_SkippedError) ProtoMessage() {} func (x *RestoreRepositoryResponse_SkippedError) ProtoReflect() protoreflect.Message { - mi := &file_repository_proto_msgTypes[90] + mi := &file_repository_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5219,7 +5415,7 @@ type GetFileAttributesResponse_AttributeInfo struct { func (x *GetFileAttributesResponse_AttributeInfo) Reset() { *x = GetFileAttributesResponse_AttributeInfo{} - mi := &file_repository_proto_msgTypes[91] + mi := &file_repository_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5231,7 +5427,7 @@ func (x *GetFileAttributesResponse_AttributeInfo) String() string { func (*GetFileAttributesResponse_AttributeInfo) ProtoMessage() {} func (x *GetFileAttributesResponse_AttributeInfo) ProtoReflect() protoreflect.Message { - mi := &file_repository_proto_msgTypes[91] + mi := &file_repository_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5852,260 +6048,287 @@ var file_repository_proto_rawDesc = []byte{ 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x28, 0x0a, 0x12, 0x46, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x8f, 0x1f, 0x0a, - 0x11, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x0e, + 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x4f, 0x66, 0x66, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x0a, 0x10, 0x52, + 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x22, 0x13, 0x0a, 0x11, 0x52, 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb1, 0x20, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, - 0x02, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x2e, 0x67, + 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x57, 0x0a, 0x0e, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x02, 0x12, 0x50, 0x0a, 0x0b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x53, - 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x02, 0x28, 0x01, 0x12, 0x51, 0x0a, 0x0c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4e, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x4d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, - 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, - 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, - 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x60, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x39, 0x0a, 0x04, 0x46, 0x73, 0x63, 0x6b, 0x12, - 0x13, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x73, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x12, 0x45, 0x0a, 0x08, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x12, 0x17, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x46, 0x69, 0x6e, - 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, - 0x4b, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x12, 0x19, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x72, 0x0a, 0x17, + 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, + 0x28, 0x02, 0x08, 0x02, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x50, 0x0a, + 0x0b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x53, 0x69, 0x7a, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x12, + 0x51, 0x0a, 0x0c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x02, 0x12, 0x4e, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, - 0x12, 0x53, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, - 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x60, 0x0a, - 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, - 0x52, 0x49, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x52, 0x49, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x52, 0x49, 0x52, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x01, 0x12, 0x4d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, + 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, + 0x12, 0x5d, 0x0a, 0x10, 0x48, 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, + 0x63, 0x68, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x48, 0x61, + 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x48, + 0x61, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, - 0x50, 0x0a, 0x0b, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1a, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, - 0x01, 0x12, 0x7d, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, - 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, - 0x12, 0x4a, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x0b, - 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x65, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x88, 0x02, - 0x01, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x50, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, + 0x60, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, + 0x61, 0x6e, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x01, 0x12, 0x39, 0x0a, 0x04, 0x46, 0x73, 0x63, 0x6b, 0x12, 0x13, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x73, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x45, 0x0a, 0x08, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x12, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x01, 0x12, 0x54, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x42, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x4d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4b, 0x0a, 0x0a, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, + 0x4c, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, + 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x53, 0x0a, 0x0c, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, + 0x76, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, + 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x66, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x52, 0x49, 0x12, 0x20, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x52, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x52, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x50, 0x0a, 0x0b, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x7d, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, - 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x56, 0x0a, 0x0d, 0x47, - 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, - 0x02, 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, - 0x12, 0x62, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x09, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x88, 0x02, 0x01, 0x28, 0x01, 0x12, 0x59, - 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, - 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x65, 0x0a, 0x11, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x20, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x09, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x88, 0x02, 0x01, 0x30, 0x01, - 0x12, 0x59, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, - 0x6b, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, - 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x5d, 0x0a, 0x10, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x66, 0x0a, 0x13, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, - 0x02, 0x08, 0x01, 0x12, 0x63, 0x0a, 0x12, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x03, 0x12, 0x72, 0x0a, 0x17, 0x50, 0x72, 0x75, 0x6e, - 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x75, - 0x6e, 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, - 0x68, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x03, 0x12, 0x5d, 0x0a, 0x10, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x60, 0x0a, 0x11, 0x52, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x60, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, + 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, + 0x6f, 0x6d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x28, 0x01, 0x12, 0x4a, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, + 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, + 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x65, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x09, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x60, 0x0a, + 0x11, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x63, + 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x61, + 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, - 0x4d, 0x0a, 0x0a, 0x46, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x46, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x42, 0x34, - 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, - 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, - 0x31, 0x36, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x50, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, + 0x01, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x12, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x56, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x61, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6b, 0x0a, + 0x14, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, + 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x68, + 0x0a, 0x12, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, + 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, + 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x01, 0x88, 0x02, 0x01, 0x28, 0x01, 0x12, 0x59, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, + 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x01, 0x28, 0x01, 0x12, 0x65, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, + 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x09, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x02, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x1d, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, + 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x6f, + 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x5d, 0x0a, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x66, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x22, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x63, 0x0a, + 0x12, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, + 0x08, 0x03, 0x12, 0x72, 0x0a, 0x17, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, + 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x26, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x55, 0x6e, 0x72, 0x65, + 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, + 0x72, 0x75, 0x6e, 0x65, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x03, 0x12, 0x5d, 0x0a, 0x10, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x46, 0x69, + 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4d, 0x0a, 0x0a, 0x46, 0x61, 0x73, + 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x46, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x61, 0x73, 0x74, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x11, 0x4f, 0x66, 0x66, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4f, + 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x12, 0x52, 0x0a, 0x13, 0x52, 0x65, 0x68, 0x79, 0x64, 0x72, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x52, 0x65, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, + 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, + 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x36, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6121,7 +6344,7 @@ func file_repository_proto_rawDescGZIP() []byte { } var file_repository_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_repository_proto_msgTypes = make([]protoimpl.MessageInfo, 92) +var file_repository_proto_msgTypes = make([]protoimpl.MessageInfo, 96) var file_repository_proto_goTypes = []any{ (GetArchiveRequest_Format)(0), // 0: gitaly.GetArchiveRequest.Format (GetRawChangesResponse_RawChange_Operation)(0), // 1: gitaly.GetRawChangesResponse.RawChange.Operation @@ -6212,164 +6435,174 @@ var file_repository_proto_goTypes = []any{ (*GetFileAttributesResponse)(nil), // 86: gitaly.GetFileAttributesResponse (*FastExportRequest)(nil), // 87: gitaly.FastExportRequest (*FastExportResponse)(nil), // 88: gitaly.FastExportResponse - (*RepositoryInfoResponse_ReferencesInfo)(nil), // 89: gitaly.RepositoryInfoResponse.ReferencesInfo - (*RepositoryInfoResponse_ObjectsInfo)(nil), // 90: gitaly.RepositoryInfoResponse.ObjectsInfo - (*GetRawChangesResponse_RawChange)(nil), // 91: gitaly.GetRawChangesResponse.RawChange - (*BackupRepositoryResponse_SkippedError)(nil), // 92: gitaly.BackupRepositoryResponse.SkippedError - (*RestoreRepositoryResponse_SkippedError)(nil), // 93: gitaly.RestoreRepositoryResponse.SkippedError - (*GetFileAttributesResponse_AttributeInfo)(nil), // 94: gitaly.GetFileAttributesResponse.AttributeInfo - (*Repository)(nil), // 95: gitaly.Repository - (ObjectFormat)(0), // 96: gitaly.ObjectFormat - (*RemoteNotFoundError)(nil), // 97: gitaly.RemoteNotFoundError + (*OffloadRequest)(nil), // 89: gitaly.OffloadRequest + (*OffloadResponse)(nil), // 90: gitaly.OffloadResponse + (*RehydrateRequest)(nil), // 91: gitaly.RehydrateRequest + (*RehydrateResponse)(nil), // 92: gitaly.RehydrateResponse + (*RepositoryInfoResponse_ReferencesInfo)(nil), // 93: gitaly.RepositoryInfoResponse.ReferencesInfo + (*RepositoryInfoResponse_ObjectsInfo)(nil), // 94: gitaly.RepositoryInfoResponse.ObjectsInfo + (*GetRawChangesResponse_RawChange)(nil), // 95: gitaly.GetRawChangesResponse.RawChange + (*BackupRepositoryResponse_SkippedError)(nil), // 96: gitaly.BackupRepositoryResponse.SkippedError + (*RestoreRepositoryResponse_SkippedError)(nil), // 97: gitaly.RestoreRepositoryResponse.SkippedError + (*GetFileAttributesResponse_AttributeInfo)(nil), // 98: gitaly.GetFileAttributesResponse.AttributeInfo + (*Repository)(nil), // 99: gitaly.Repository + (ObjectFormat)(0), // 100: gitaly.ObjectFormat + (*RemoteNotFoundError)(nil), // 101: gitaly.RemoteNotFoundError } var file_repository_proto_depIdxs = []int32{ - 95, // 0: gitaly.RepositoryExistsRequest.repository:type_name -> gitaly.Repository - 95, // 1: gitaly.RepositorySizeRequest.repository:type_name -> gitaly.Repository - 95, // 2: gitaly.RepositoryInfoRequest.repository:type_name -> gitaly.Repository - 89, // 3: gitaly.RepositoryInfoResponse.references:type_name -> gitaly.RepositoryInfoResponse.ReferencesInfo - 90, // 4: gitaly.RepositoryInfoResponse.objects:type_name -> gitaly.RepositoryInfoResponse.ObjectsInfo - 95, // 5: gitaly.ObjectsSizeRequest.repository:type_name -> gitaly.Repository - 95, // 6: gitaly.ObjectFormatRequest.repository:type_name -> gitaly.Repository - 96, // 7: gitaly.ObjectFormatResponse.format:type_name -> gitaly.ObjectFormat - 95, // 8: gitaly.FetchBundleRequest.repository:type_name -> gitaly.Repository - 95, // 9: gitaly.FetchRemoteRequest.repository:type_name -> gitaly.Repository + 99, // 0: gitaly.RepositoryExistsRequest.repository:type_name -> gitaly.Repository + 99, // 1: gitaly.RepositorySizeRequest.repository:type_name -> gitaly.Repository + 99, // 2: gitaly.RepositoryInfoRequest.repository:type_name -> gitaly.Repository + 93, // 3: gitaly.RepositoryInfoResponse.references:type_name -> gitaly.RepositoryInfoResponse.ReferencesInfo + 94, // 4: gitaly.RepositoryInfoResponse.objects:type_name -> gitaly.RepositoryInfoResponse.ObjectsInfo + 99, // 5: gitaly.ObjectsSizeRequest.repository:type_name -> gitaly.Repository + 99, // 6: gitaly.ObjectFormatRequest.repository:type_name -> gitaly.Repository + 100, // 7: gitaly.ObjectFormatResponse.format:type_name -> gitaly.ObjectFormat + 99, // 8: gitaly.FetchBundleRequest.repository:type_name -> gitaly.Repository + 99, // 9: gitaly.FetchRemoteRequest.repository:type_name -> gitaly.Repository 70, // 10: gitaly.FetchRemoteRequest.remote_params:type_name -> gitaly.Remote - 95, // 11: gitaly.CreateRepositoryRequest.repository:type_name -> gitaly.Repository - 96, // 12: gitaly.CreateRepositoryRequest.object_format:type_name -> gitaly.ObjectFormat - 95, // 13: gitaly.GetArchiveRequest.repository:type_name -> gitaly.Repository + 99, // 11: gitaly.CreateRepositoryRequest.repository:type_name -> gitaly.Repository + 100, // 12: gitaly.CreateRepositoryRequest.object_format:type_name -> gitaly.ObjectFormat + 99, // 13: gitaly.GetArchiveRequest.repository:type_name -> gitaly.Repository 0, // 14: gitaly.GetArchiveRequest.format:type_name -> gitaly.GetArchiveRequest.Format - 95, // 15: gitaly.HasLocalBranchesRequest.repository:type_name -> gitaly.Repository - 95, // 16: gitaly.FetchSourceBranchRequest.repository:type_name -> gitaly.Repository - 95, // 17: gitaly.FetchSourceBranchRequest.source_repository:type_name -> gitaly.Repository - 95, // 18: gitaly.FsckRequest.repository:type_name -> gitaly.Repository - 95, // 19: gitaly.WriteRefRequest.repository:type_name -> gitaly.Repository - 95, // 20: gitaly.FindMergeBaseRequest.repository:type_name -> gitaly.Repository - 95, // 21: gitaly.CreateForkRequest.repository:type_name -> gitaly.Repository - 95, // 22: gitaly.CreateForkRequest.source_repository:type_name -> gitaly.Repository - 95, // 23: gitaly.CreateRepositoryFromURLRequest.repository:type_name -> gitaly.Repository - 97, // 24: gitaly.CreateRepositoryFromURLError.remote_not_found:type_name -> gitaly.RemoteNotFoundError - 95, // 25: gitaly.CreateBundleRequest.repository:type_name -> gitaly.Repository - 95, // 26: gitaly.CreateBundleFromRefListRequest.repository:type_name -> gitaly.Repository - 95, // 27: gitaly.GenerateBundleURIRequest.repository:type_name -> gitaly.Repository - 95, // 28: gitaly.GetConfigRequest.repository:type_name -> gitaly.Repository - 95, // 29: gitaly.RestoreCustomHooksRequest.repository:type_name -> gitaly.Repository - 95, // 30: gitaly.SetCustomHooksRequest.repository:type_name -> gitaly.Repository - 95, // 31: gitaly.BackupCustomHooksRequest.repository:type_name -> gitaly.Repository - 95, // 32: gitaly.GetCustomHooksRequest.repository:type_name -> gitaly.Repository - 95, // 33: gitaly.CreateRepositoryFromBundleRequest.repository:type_name -> gitaly.Repository - 95, // 34: gitaly.FindLicenseRequest.repository:type_name -> gitaly.Repository - 95, // 35: gitaly.GetInfoAttributesRequest.repository:type_name -> gitaly.Repository - 95, // 36: gitaly.CalculateChecksumRequest.repository:type_name -> gitaly.Repository - 95, // 37: gitaly.GetSnapshotRequest.repository:type_name -> gitaly.Repository - 95, // 38: gitaly.CreateRepositoryFromSnapshotRequest.repository:type_name -> gitaly.Repository - 95, // 39: gitaly.GetRawChangesRequest.repository:type_name -> gitaly.Repository - 91, // 40: gitaly.GetRawChangesResponse.raw_changes:type_name -> gitaly.GetRawChangesResponse.RawChange - 95, // 41: gitaly.SearchFilesByNameRequest.repository:type_name -> gitaly.Repository - 95, // 42: gitaly.SearchFilesByContentRequest.repository:type_name -> gitaly.Repository - 95, // 43: gitaly.GetObjectDirectorySizeRequest.repository:type_name -> gitaly.Repository - 95, // 44: gitaly.RemoveRepositoryRequest.repository:type_name -> gitaly.Repository - 95, // 45: gitaly.ReplicateRepositoryRequest.repository:type_name -> gitaly.Repository - 95, // 46: gitaly.ReplicateRepositoryRequest.source:type_name -> gitaly.Repository - 95, // 47: gitaly.OptimizeRepositoryRequest.repository:type_name -> gitaly.Repository + 99, // 15: gitaly.HasLocalBranchesRequest.repository:type_name -> gitaly.Repository + 99, // 16: gitaly.FetchSourceBranchRequest.repository:type_name -> gitaly.Repository + 99, // 17: gitaly.FetchSourceBranchRequest.source_repository:type_name -> gitaly.Repository + 99, // 18: gitaly.FsckRequest.repository:type_name -> gitaly.Repository + 99, // 19: gitaly.WriteRefRequest.repository:type_name -> gitaly.Repository + 99, // 20: gitaly.FindMergeBaseRequest.repository:type_name -> gitaly.Repository + 99, // 21: gitaly.CreateForkRequest.repository:type_name -> gitaly.Repository + 99, // 22: gitaly.CreateForkRequest.source_repository:type_name -> gitaly.Repository + 99, // 23: gitaly.CreateRepositoryFromURLRequest.repository:type_name -> gitaly.Repository + 101, // 24: gitaly.CreateRepositoryFromURLError.remote_not_found:type_name -> gitaly.RemoteNotFoundError + 99, // 25: gitaly.CreateBundleRequest.repository:type_name -> gitaly.Repository + 99, // 26: gitaly.CreateBundleFromRefListRequest.repository:type_name -> gitaly.Repository + 99, // 27: gitaly.GenerateBundleURIRequest.repository:type_name -> gitaly.Repository + 99, // 28: gitaly.GetConfigRequest.repository:type_name -> gitaly.Repository + 99, // 29: gitaly.RestoreCustomHooksRequest.repository:type_name -> gitaly.Repository + 99, // 30: gitaly.SetCustomHooksRequest.repository:type_name -> gitaly.Repository + 99, // 31: gitaly.BackupCustomHooksRequest.repository:type_name -> gitaly.Repository + 99, // 32: gitaly.GetCustomHooksRequest.repository:type_name -> gitaly.Repository + 99, // 33: gitaly.CreateRepositoryFromBundleRequest.repository:type_name -> gitaly.Repository + 99, // 34: gitaly.FindLicenseRequest.repository:type_name -> gitaly.Repository + 99, // 35: gitaly.GetInfoAttributesRequest.repository:type_name -> gitaly.Repository + 99, // 36: gitaly.CalculateChecksumRequest.repository:type_name -> gitaly.Repository + 99, // 37: gitaly.GetSnapshotRequest.repository:type_name -> gitaly.Repository + 99, // 38: gitaly.CreateRepositoryFromSnapshotRequest.repository:type_name -> gitaly.Repository + 99, // 39: gitaly.GetRawChangesRequest.repository:type_name -> gitaly.Repository + 95, // 40: gitaly.GetRawChangesResponse.raw_changes:type_name -> gitaly.GetRawChangesResponse.RawChange + 99, // 41: gitaly.SearchFilesByNameRequest.repository:type_name -> gitaly.Repository + 99, // 42: gitaly.SearchFilesByContentRequest.repository:type_name -> gitaly.Repository + 99, // 43: gitaly.GetObjectDirectorySizeRequest.repository:type_name -> gitaly.Repository + 99, // 44: gitaly.RemoveRepositoryRequest.repository:type_name -> gitaly.Repository + 99, // 45: gitaly.ReplicateRepositoryRequest.repository:type_name -> gitaly.Repository + 99, // 46: gitaly.ReplicateRepositoryRequest.source:type_name -> gitaly.Repository + 99, // 47: gitaly.OptimizeRepositoryRequest.repository:type_name -> gitaly.Repository 2, // 48: gitaly.OptimizeRepositoryRequest.strategy:type_name -> gitaly.OptimizeRepositoryRequest.Strategy - 95, // 49: gitaly.PruneUnreachableObjectsRequest.repository:type_name -> gitaly.Repository - 95, // 50: gitaly.BackupRepositoryRequest.repository:type_name -> gitaly.Repository - 95, // 51: gitaly.BackupRepositoryRequest.vanity_repository:type_name -> gitaly.Repository - 95, // 52: gitaly.RestoreRepositoryRequest.repository:type_name -> gitaly.Repository - 95, // 53: gitaly.RestoreRepositoryRequest.vanity_repository:type_name -> gitaly.Repository - 95, // 54: gitaly.GetFileAttributesRequest.repository:type_name -> gitaly.Repository - 94, // 55: gitaly.GetFileAttributesResponse.attribute_infos:type_name -> gitaly.GetFileAttributesResponse.AttributeInfo - 95, // 56: gitaly.FastExportRequest.repository:type_name -> gitaly.Repository - 1, // 57: gitaly.GetRawChangesResponse.RawChange.operation:type_name -> gitaly.GetRawChangesResponse.RawChange.Operation - 3, // 58: gitaly.RepositoryService.RepositoryExists:input_type -> gitaly.RepositoryExistsRequest - 5, // 59: gitaly.RepositoryService.RepositorySize:input_type -> gitaly.RepositorySizeRequest - 7, // 60: gitaly.RepositoryService.RepositoryInfo:input_type -> gitaly.RepositoryInfoRequest - 9, // 61: gitaly.RepositoryService.ObjectsSize:input_type -> gitaly.ObjectsSizeRequest - 11, // 62: gitaly.RepositoryService.ObjectFormat:input_type -> gitaly.ObjectFormatRequest - 15, // 63: gitaly.RepositoryService.FetchRemote:input_type -> gitaly.FetchRemoteRequest - 17, // 64: gitaly.RepositoryService.CreateRepository:input_type -> gitaly.CreateRepositoryRequest - 19, // 65: gitaly.RepositoryService.GetArchive:input_type -> gitaly.GetArchiveRequest - 21, // 66: gitaly.RepositoryService.HasLocalBranches:input_type -> gitaly.HasLocalBranchesRequest - 23, // 67: gitaly.RepositoryService.FetchSourceBranch:input_type -> gitaly.FetchSourceBranchRequest - 25, // 68: gitaly.RepositoryService.Fsck:input_type -> gitaly.FsckRequest - 27, // 69: gitaly.RepositoryService.WriteRef:input_type -> gitaly.WriteRefRequest - 29, // 70: gitaly.RepositoryService.FindMergeBase:input_type -> gitaly.FindMergeBaseRequest - 31, // 71: gitaly.RepositoryService.CreateFork:input_type -> gitaly.CreateForkRequest - 33, // 72: gitaly.RepositoryService.CreateRepositoryFromURL:input_type -> gitaly.CreateRepositoryFromURLRequest - 36, // 73: gitaly.RepositoryService.CreateBundle:input_type -> gitaly.CreateBundleRequest - 38, // 74: gitaly.RepositoryService.CreateBundleFromRefList:input_type -> gitaly.CreateBundleFromRefListRequest - 40, // 75: gitaly.RepositoryService.GenerateBundleURI:input_type -> gitaly.GenerateBundleURIRequest - 13, // 76: gitaly.RepositoryService.FetchBundle:input_type -> gitaly.FetchBundleRequest - 52, // 77: gitaly.RepositoryService.CreateRepositoryFromBundle:input_type -> gitaly.CreateRepositoryFromBundleRequest - 42, // 78: gitaly.RepositoryService.GetConfig:input_type -> gitaly.GetConfigRequest - 54, // 79: gitaly.RepositoryService.FindLicense:input_type -> gitaly.FindLicenseRequest - 56, // 80: gitaly.RepositoryService.GetInfoAttributes:input_type -> gitaly.GetInfoAttributesRequest - 58, // 81: gitaly.RepositoryService.CalculateChecksum:input_type -> gitaly.CalculateChecksumRequest - 60, // 82: gitaly.RepositoryService.GetSnapshot:input_type -> gitaly.GetSnapshotRequest - 62, // 83: gitaly.RepositoryService.CreateRepositoryFromSnapshot:input_type -> gitaly.CreateRepositoryFromSnapshotRequest - 64, // 84: gitaly.RepositoryService.GetRawChanges:input_type -> gitaly.GetRawChangesRequest - 68, // 85: gitaly.RepositoryService.SearchFilesByContent:input_type -> gitaly.SearchFilesByContentRequest - 66, // 86: gitaly.RepositoryService.SearchFilesByName:input_type -> gitaly.SearchFilesByNameRequest - 44, // 87: gitaly.RepositoryService.RestoreCustomHooks:input_type -> gitaly.RestoreCustomHooksRequest - 45, // 88: gitaly.RepositoryService.SetCustomHooks:input_type -> gitaly.SetCustomHooksRequest - 48, // 89: gitaly.RepositoryService.BackupCustomHooks:input_type -> gitaly.BackupCustomHooksRequest - 49, // 90: gitaly.RepositoryService.GetCustomHooks:input_type -> gitaly.GetCustomHooksRequest - 71, // 91: gitaly.RepositoryService.GetObjectDirectorySize:input_type -> gitaly.GetObjectDirectorySizeRequest - 73, // 92: gitaly.RepositoryService.RemoveRepository:input_type -> gitaly.RemoveRepositoryRequest - 75, // 93: gitaly.RepositoryService.ReplicateRepository:input_type -> gitaly.ReplicateRepositoryRequest - 77, // 94: gitaly.RepositoryService.OptimizeRepository:input_type -> gitaly.OptimizeRepositoryRequest - 79, // 95: gitaly.RepositoryService.PruneUnreachableObjects:input_type -> gitaly.PruneUnreachableObjectsRequest - 81, // 96: gitaly.RepositoryService.BackupRepository:input_type -> gitaly.BackupRepositoryRequest - 83, // 97: gitaly.RepositoryService.RestoreRepository:input_type -> gitaly.RestoreRepositoryRequest - 85, // 98: gitaly.RepositoryService.GetFileAttributes:input_type -> gitaly.GetFileAttributesRequest - 87, // 99: gitaly.RepositoryService.FastExport:input_type -> gitaly.FastExportRequest - 4, // 100: gitaly.RepositoryService.RepositoryExists:output_type -> gitaly.RepositoryExistsResponse - 6, // 101: gitaly.RepositoryService.RepositorySize:output_type -> gitaly.RepositorySizeResponse - 8, // 102: gitaly.RepositoryService.RepositoryInfo:output_type -> gitaly.RepositoryInfoResponse - 10, // 103: gitaly.RepositoryService.ObjectsSize:output_type -> gitaly.ObjectsSizeResponse - 12, // 104: gitaly.RepositoryService.ObjectFormat:output_type -> gitaly.ObjectFormatResponse - 16, // 105: gitaly.RepositoryService.FetchRemote:output_type -> gitaly.FetchRemoteResponse - 18, // 106: gitaly.RepositoryService.CreateRepository:output_type -> gitaly.CreateRepositoryResponse - 20, // 107: gitaly.RepositoryService.GetArchive:output_type -> gitaly.GetArchiveResponse - 22, // 108: gitaly.RepositoryService.HasLocalBranches:output_type -> gitaly.HasLocalBranchesResponse - 24, // 109: gitaly.RepositoryService.FetchSourceBranch:output_type -> gitaly.FetchSourceBranchResponse - 26, // 110: gitaly.RepositoryService.Fsck:output_type -> gitaly.FsckResponse - 28, // 111: gitaly.RepositoryService.WriteRef:output_type -> gitaly.WriteRefResponse - 30, // 112: gitaly.RepositoryService.FindMergeBase:output_type -> gitaly.FindMergeBaseResponse - 32, // 113: gitaly.RepositoryService.CreateFork:output_type -> gitaly.CreateForkResponse - 34, // 114: gitaly.RepositoryService.CreateRepositoryFromURL:output_type -> gitaly.CreateRepositoryFromURLResponse - 37, // 115: gitaly.RepositoryService.CreateBundle:output_type -> gitaly.CreateBundleResponse - 39, // 116: gitaly.RepositoryService.CreateBundleFromRefList:output_type -> gitaly.CreateBundleFromRefListResponse - 41, // 117: gitaly.RepositoryService.GenerateBundleURI:output_type -> gitaly.GenerateBundleURIResponse - 14, // 118: gitaly.RepositoryService.FetchBundle:output_type -> gitaly.FetchBundleResponse - 53, // 119: gitaly.RepositoryService.CreateRepositoryFromBundle:output_type -> gitaly.CreateRepositoryFromBundleResponse - 43, // 120: gitaly.RepositoryService.GetConfig:output_type -> gitaly.GetConfigResponse - 55, // 121: gitaly.RepositoryService.FindLicense:output_type -> gitaly.FindLicenseResponse - 57, // 122: gitaly.RepositoryService.GetInfoAttributes:output_type -> gitaly.GetInfoAttributesResponse - 59, // 123: gitaly.RepositoryService.CalculateChecksum:output_type -> gitaly.CalculateChecksumResponse - 61, // 124: gitaly.RepositoryService.GetSnapshot:output_type -> gitaly.GetSnapshotResponse - 63, // 125: gitaly.RepositoryService.CreateRepositoryFromSnapshot:output_type -> gitaly.CreateRepositoryFromSnapshotResponse - 65, // 126: gitaly.RepositoryService.GetRawChanges:output_type -> gitaly.GetRawChangesResponse - 69, // 127: gitaly.RepositoryService.SearchFilesByContent:output_type -> gitaly.SearchFilesByContentResponse - 67, // 128: gitaly.RepositoryService.SearchFilesByName:output_type -> gitaly.SearchFilesByNameResponse - 46, // 129: gitaly.RepositoryService.RestoreCustomHooks:output_type -> gitaly.RestoreCustomHooksResponse - 47, // 130: gitaly.RepositoryService.SetCustomHooks:output_type -> gitaly.SetCustomHooksResponse - 50, // 131: gitaly.RepositoryService.BackupCustomHooks:output_type -> gitaly.BackupCustomHooksResponse - 51, // 132: gitaly.RepositoryService.GetCustomHooks:output_type -> gitaly.GetCustomHooksResponse - 72, // 133: gitaly.RepositoryService.GetObjectDirectorySize:output_type -> gitaly.GetObjectDirectorySizeResponse - 74, // 134: gitaly.RepositoryService.RemoveRepository:output_type -> gitaly.RemoveRepositoryResponse - 76, // 135: gitaly.RepositoryService.ReplicateRepository:output_type -> gitaly.ReplicateRepositoryResponse - 78, // 136: gitaly.RepositoryService.OptimizeRepository:output_type -> gitaly.OptimizeRepositoryResponse - 80, // 137: gitaly.RepositoryService.PruneUnreachableObjects:output_type -> gitaly.PruneUnreachableObjectsResponse - 82, // 138: gitaly.RepositoryService.BackupRepository:output_type -> gitaly.BackupRepositoryResponse - 84, // 139: gitaly.RepositoryService.RestoreRepository:output_type -> gitaly.RestoreRepositoryResponse - 86, // 140: gitaly.RepositoryService.GetFileAttributes:output_type -> gitaly.GetFileAttributesResponse - 88, // 141: gitaly.RepositoryService.FastExport:output_type -> gitaly.FastExportResponse - 100, // [100:142] is the sub-list for method output_type - 58, // [58:100] is the sub-list for method input_type - 58, // [58:58] is the sub-list for extension type_name - 58, // [58:58] is the sub-list for extension extendee - 0, // [0:58] is the sub-list for field type_name + 99, // 49: gitaly.PruneUnreachableObjectsRequest.repository:type_name -> gitaly.Repository + 99, // 50: gitaly.BackupRepositoryRequest.repository:type_name -> gitaly.Repository + 99, // 51: gitaly.BackupRepositoryRequest.vanity_repository:type_name -> gitaly.Repository + 99, // 52: gitaly.RestoreRepositoryRequest.repository:type_name -> gitaly.Repository + 99, // 53: gitaly.RestoreRepositoryRequest.vanity_repository:type_name -> gitaly.Repository + 99, // 54: gitaly.GetFileAttributesRequest.repository:type_name -> gitaly.Repository + 98, // 55: gitaly.GetFileAttributesResponse.attribute_infos:type_name -> gitaly.GetFileAttributesResponse.AttributeInfo + 99, // 56: gitaly.FastExportRequest.repository:type_name -> gitaly.Repository + 99, // 57: gitaly.OffloadRequest.repository:type_name -> gitaly.Repository + 99, // 58: gitaly.RehydrateRequest.repository:type_name -> gitaly.Repository + 1, // 59: gitaly.GetRawChangesResponse.RawChange.operation:type_name -> gitaly.GetRawChangesResponse.RawChange.Operation + 3, // 60: gitaly.RepositoryService.RepositoryExists:input_type -> gitaly.RepositoryExistsRequest + 5, // 61: gitaly.RepositoryService.RepositorySize:input_type -> gitaly.RepositorySizeRequest + 7, // 62: gitaly.RepositoryService.RepositoryInfo:input_type -> gitaly.RepositoryInfoRequest + 9, // 63: gitaly.RepositoryService.ObjectsSize:input_type -> gitaly.ObjectsSizeRequest + 11, // 64: gitaly.RepositoryService.ObjectFormat:input_type -> gitaly.ObjectFormatRequest + 15, // 65: gitaly.RepositoryService.FetchRemote:input_type -> gitaly.FetchRemoteRequest + 17, // 66: gitaly.RepositoryService.CreateRepository:input_type -> gitaly.CreateRepositoryRequest + 19, // 67: gitaly.RepositoryService.GetArchive:input_type -> gitaly.GetArchiveRequest + 21, // 68: gitaly.RepositoryService.HasLocalBranches:input_type -> gitaly.HasLocalBranchesRequest + 23, // 69: gitaly.RepositoryService.FetchSourceBranch:input_type -> gitaly.FetchSourceBranchRequest + 25, // 70: gitaly.RepositoryService.Fsck:input_type -> gitaly.FsckRequest + 27, // 71: gitaly.RepositoryService.WriteRef:input_type -> gitaly.WriteRefRequest + 29, // 72: gitaly.RepositoryService.FindMergeBase:input_type -> gitaly.FindMergeBaseRequest + 31, // 73: gitaly.RepositoryService.CreateFork:input_type -> gitaly.CreateForkRequest + 33, // 74: gitaly.RepositoryService.CreateRepositoryFromURL:input_type -> gitaly.CreateRepositoryFromURLRequest + 36, // 75: gitaly.RepositoryService.CreateBundle:input_type -> gitaly.CreateBundleRequest + 38, // 76: gitaly.RepositoryService.CreateBundleFromRefList:input_type -> gitaly.CreateBundleFromRefListRequest + 40, // 77: gitaly.RepositoryService.GenerateBundleURI:input_type -> gitaly.GenerateBundleURIRequest + 13, // 78: gitaly.RepositoryService.FetchBundle:input_type -> gitaly.FetchBundleRequest + 52, // 79: gitaly.RepositoryService.CreateRepositoryFromBundle:input_type -> gitaly.CreateRepositoryFromBundleRequest + 42, // 80: gitaly.RepositoryService.GetConfig:input_type -> gitaly.GetConfigRequest + 54, // 81: gitaly.RepositoryService.FindLicense:input_type -> gitaly.FindLicenseRequest + 56, // 82: gitaly.RepositoryService.GetInfoAttributes:input_type -> gitaly.GetInfoAttributesRequest + 58, // 83: gitaly.RepositoryService.CalculateChecksum:input_type -> gitaly.CalculateChecksumRequest + 60, // 84: gitaly.RepositoryService.GetSnapshot:input_type -> gitaly.GetSnapshotRequest + 62, // 85: gitaly.RepositoryService.CreateRepositoryFromSnapshot:input_type -> gitaly.CreateRepositoryFromSnapshotRequest + 64, // 86: gitaly.RepositoryService.GetRawChanges:input_type -> gitaly.GetRawChangesRequest + 68, // 87: gitaly.RepositoryService.SearchFilesByContent:input_type -> gitaly.SearchFilesByContentRequest + 66, // 88: gitaly.RepositoryService.SearchFilesByName:input_type -> gitaly.SearchFilesByNameRequest + 44, // 89: gitaly.RepositoryService.RestoreCustomHooks:input_type -> gitaly.RestoreCustomHooksRequest + 45, // 90: gitaly.RepositoryService.SetCustomHooks:input_type -> gitaly.SetCustomHooksRequest + 48, // 91: gitaly.RepositoryService.BackupCustomHooks:input_type -> gitaly.BackupCustomHooksRequest + 49, // 92: gitaly.RepositoryService.GetCustomHooks:input_type -> gitaly.GetCustomHooksRequest + 71, // 93: gitaly.RepositoryService.GetObjectDirectorySize:input_type -> gitaly.GetObjectDirectorySizeRequest + 73, // 94: gitaly.RepositoryService.RemoveRepository:input_type -> gitaly.RemoveRepositoryRequest + 75, // 95: gitaly.RepositoryService.ReplicateRepository:input_type -> gitaly.ReplicateRepositoryRequest + 77, // 96: gitaly.RepositoryService.OptimizeRepository:input_type -> gitaly.OptimizeRepositoryRequest + 79, // 97: gitaly.RepositoryService.PruneUnreachableObjects:input_type -> gitaly.PruneUnreachableObjectsRequest + 81, // 98: gitaly.RepositoryService.BackupRepository:input_type -> gitaly.BackupRepositoryRequest + 83, // 99: gitaly.RepositoryService.RestoreRepository:input_type -> gitaly.RestoreRepositoryRequest + 85, // 100: gitaly.RepositoryService.GetFileAttributes:input_type -> gitaly.GetFileAttributesRequest + 87, // 101: gitaly.RepositoryService.FastExport:input_type -> gitaly.FastExportRequest + 89, // 102: gitaly.RepositoryService.OffloadRepository:input_type -> gitaly.OffloadRequest + 91, // 103: gitaly.RepositoryService.RehydrateRepository:input_type -> gitaly.RehydrateRequest + 4, // 104: gitaly.RepositoryService.RepositoryExists:output_type -> gitaly.RepositoryExistsResponse + 6, // 105: gitaly.RepositoryService.RepositorySize:output_type -> gitaly.RepositorySizeResponse + 8, // 106: gitaly.RepositoryService.RepositoryInfo:output_type -> gitaly.RepositoryInfoResponse + 10, // 107: gitaly.RepositoryService.ObjectsSize:output_type -> gitaly.ObjectsSizeResponse + 12, // 108: gitaly.RepositoryService.ObjectFormat:output_type -> gitaly.ObjectFormatResponse + 16, // 109: gitaly.RepositoryService.FetchRemote:output_type -> gitaly.FetchRemoteResponse + 18, // 110: gitaly.RepositoryService.CreateRepository:output_type -> gitaly.CreateRepositoryResponse + 20, // 111: gitaly.RepositoryService.GetArchive:output_type -> gitaly.GetArchiveResponse + 22, // 112: gitaly.RepositoryService.HasLocalBranches:output_type -> gitaly.HasLocalBranchesResponse + 24, // 113: gitaly.RepositoryService.FetchSourceBranch:output_type -> gitaly.FetchSourceBranchResponse + 26, // 114: gitaly.RepositoryService.Fsck:output_type -> gitaly.FsckResponse + 28, // 115: gitaly.RepositoryService.WriteRef:output_type -> gitaly.WriteRefResponse + 30, // 116: gitaly.RepositoryService.FindMergeBase:output_type -> gitaly.FindMergeBaseResponse + 32, // 117: gitaly.RepositoryService.CreateFork:output_type -> gitaly.CreateForkResponse + 34, // 118: gitaly.RepositoryService.CreateRepositoryFromURL:output_type -> gitaly.CreateRepositoryFromURLResponse + 37, // 119: gitaly.RepositoryService.CreateBundle:output_type -> gitaly.CreateBundleResponse + 39, // 120: gitaly.RepositoryService.CreateBundleFromRefList:output_type -> gitaly.CreateBundleFromRefListResponse + 41, // 121: gitaly.RepositoryService.GenerateBundleURI:output_type -> gitaly.GenerateBundleURIResponse + 14, // 122: gitaly.RepositoryService.FetchBundle:output_type -> gitaly.FetchBundleResponse + 53, // 123: gitaly.RepositoryService.CreateRepositoryFromBundle:output_type -> gitaly.CreateRepositoryFromBundleResponse + 43, // 124: gitaly.RepositoryService.GetConfig:output_type -> gitaly.GetConfigResponse + 55, // 125: gitaly.RepositoryService.FindLicense:output_type -> gitaly.FindLicenseResponse + 57, // 126: gitaly.RepositoryService.GetInfoAttributes:output_type -> gitaly.GetInfoAttributesResponse + 59, // 127: gitaly.RepositoryService.CalculateChecksum:output_type -> gitaly.CalculateChecksumResponse + 61, // 128: gitaly.RepositoryService.GetSnapshot:output_type -> gitaly.GetSnapshotResponse + 63, // 129: gitaly.RepositoryService.CreateRepositoryFromSnapshot:output_type -> gitaly.CreateRepositoryFromSnapshotResponse + 65, // 130: gitaly.RepositoryService.GetRawChanges:output_type -> gitaly.GetRawChangesResponse + 69, // 131: gitaly.RepositoryService.SearchFilesByContent:output_type -> gitaly.SearchFilesByContentResponse + 67, // 132: gitaly.RepositoryService.SearchFilesByName:output_type -> gitaly.SearchFilesByNameResponse + 46, // 133: gitaly.RepositoryService.RestoreCustomHooks:output_type -> gitaly.RestoreCustomHooksResponse + 47, // 134: gitaly.RepositoryService.SetCustomHooks:output_type -> gitaly.SetCustomHooksResponse + 50, // 135: gitaly.RepositoryService.BackupCustomHooks:output_type -> gitaly.BackupCustomHooksResponse + 51, // 136: gitaly.RepositoryService.GetCustomHooks:output_type -> gitaly.GetCustomHooksResponse + 72, // 137: gitaly.RepositoryService.GetObjectDirectorySize:output_type -> gitaly.GetObjectDirectorySizeResponse + 74, // 138: gitaly.RepositoryService.RemoveRepository:output_type -> gitaly.RemoveRepositoryResponse + 76, // 139: gitaly.RepositoryService.ReplicateRepository:output_type -> gitaly.ReplicateRepositoryResponse + 78, // 140: gitaly.RepositoryService.OptimizeRepository:output_type -> gitaly.OptimizeRepositoryResponse + 80, // 141: gitaly.RepositoryService.PruneUnreachableObjects:output_type -> gitaly.PruneUnreachableObjectsResponse + 82, // 142: gitaly.RepositoryService.BackupRepository:output_type -> gitaly.BackupRepositoryResponse + 84, // 143: gitaly.RepositoryService.RestoreRepository:output_type -> gitaly.RestoreRepositoryResponse + 86, // 144: gitaly.RepositoryService.GetFileAttributes:output_type -> gitaly.GetFileAttributesResponse + 88, // 145: gitaly.RepositoryService.FastExport:output_type -> gitaly.FastExportResponse + 90, // 146: gitaly.RepositoryService.OffloadRepository:output_type -> gitaly.OffloadResponse + 92, // 147: gitaly.RepositoryService.RehydrateRepository:output_type -> gitaly.RehydrateResponse + 104, // [104:148] is the sub-list for method output_type + 60, // [60:104] is the sub-list for method input_type + 60, // [60:60] is the sub-list for extension type_name + 60, // [60:60] is the sub-list for extension extendee + 0, // [0:60] is the sub-list for field type_name } func init() { file_repository_proto_init() } @@ -6389,7 +6622,7 @@ func file_repository_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_repository_proto_rawDesc, NumEnums: 3, - NumMessages: 92, + NumMessages: 96, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/repository_grpc.pb.go b/proto/go/gitalypb/repository_grpc.pb.go index f45be3982c03c515a15176a82056c035a73002df..aedc680f59cc55627e9424888549efa6679a768b 100644 --- a/proto/go/gitalypb/repository_grpc.pb.go +++ b/proto/go/gitalypb/repository_grpc.pb.go @@ -61,6 +61,8 @@ const ( RepositoryService_RestoreRepository_FullMethodName = "/gitaly.RepositoryService/RestoreRepository" RepositoryService_GetFileAttributes_FullMethodName = "/gitaly.RepositoryService/GetFileAttributes" RepositoryService_FastExport_FullMethodName = "/gitaly.RepositoryService/FastExport" + RepositoryService_OffloadRepository_FullMethodName = "/gitaly.RepositoryService/OffloadRepository" + RepositoryService_RehydrateRepository_FullMethodName = "/gitaly.RepositoryService/RehydrateRepository" ) // RepositoryServiceClient is the client API for RepositoryService service. @@ -245,6 +247,12 @@ type RepositoryServiceClient interface { GetFileAttributes(ctx context.Context, in *GetFileAttributesRequest, opts ...grpc.CallOption) (*GetFileAttributesResponse, error) // FastExport runs git-fast-export on the repository, streaming the data back through the response FastExport(ctx context.Context, in *FastExportRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FastExportResponse], error) + // OffloadRepository performs a series of operations to transfer a portion of the repository’s object storage + // to cloud object storage. + OffloadRepository(ctx context.Context, in *OffloadRequest, opts ...grpc.CallOption) (*OffloadResponse, error) + // RehydrateRepository is the reverse operation of OffloadRepository. It restores the offloaded object storage + // back to the Gitaly node. + RehydrateRepository(ctx context.Context, in *RehydrateRequest, opts ...grpc.CallOption) (*RehydrateResponse, error) } type repositoryServiceClient struct { @@ -795,6 +803,26 @@ func (c *repositoryServiceClient) FastExport(ctx context.Context, in *FastExport // This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. type RepositoryService_FastExportClient = grpc.ServerStreamingClient[FastExportResponse] +func (c *repositoryServiceClient) OffloadRepository(ctx context.Context, in *OffloadRequest, opts ...grpc.CallOption) (*OffloadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(OffloadResponse) + err := c.cc.Invoke(ctx, RepositoryService_OffloadRepository_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *repositoryServiceClient) RehydrateRepository(ctx context.Context, in *RehydrateRequest, opts ...grpc.CallOption) (*RehydrateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RehydrateResponse) + err := c.cc.Invoke(ctx, RepositoryService_RehydrateRepository_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // RepositoryServiceServer is the server API for RepositoryService service. // All implementations must embed UnimplementedRepositoryServiceServer // for forward compatibility. @@ -977,6 +1005,12 @@ type RepositoryServiceServer interface { GetFileAttributes(context.Context, *GetFileAttributesRequest) (*GetFileAttributesResponse, error) // FastExport runs git-fast-export on the repository, streaming the data back through the response FastExport(*FastExportRequest, grpc.ServerStreamingServer[FastExportResponse]) error + // OffloadRepository performs a series of operations to transfer a portion of the repository’s object storage + // to cloud object storage. + OffloadRepository(context.Context, *OffloadRequest) (*OffloadResponse, error) + // RehydrateRepository is the reverse operation of OffloadRepository. It restores the offloaded object storage + // back to the Gitaly node. + RehydrateRepository(context.Context, *RehydrateRequest) (*RehydrateResponse, error) mustEmbedUnimplementedRepositoryServiceServer() } @@ -1113,6 +1147,12 @@ func (UnimplementedRepositoryServiceServer) GetFileAttributes(context.Context, * func (UnimplementedRepositoryServiceServer) FastExport(*FastExportRequest, grpc.ServerStreamingServer[FastExportResponse]) error { return status.Errorf(codes.Unimplemented, "method FastExport not implemented") } +func (UnimplementedRepositoryServiceServer) OffloadRepository(context.Context, *OffloadRequest) (*OffloadResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OffloadRepository not implemented") +} +func (UnimplementedRepositoryServiceServer) RehydrateRepository(context.Context, *RehydrateRequest) (*RehydrateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RehydrateRepository not implemented") +} func (UnimplementedRepositoryServiceServer) mustEmbedUnimplementedRepositoryServiceServer() {} func (UnimplementedRepositoryServiceServer) testEmbeddedByValue() {} @@ -1747,6 +1787,42 @@ func _RepositoryService_FastExport_Handler(srv interface{}, stream grpc.ServerSt // This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. type RepositoryService_FastExportServer = grpc.ServerStreamingServer[FastExportResponse] +func _RepositoryService_OffloadRepository_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OffloadRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RepositoryServiceServer).OffloadRepository(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RepositoryService_OffloadRepository_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RepositoryServiceServer).OffloadRepository(ctx, req.(*OffloadRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RepositoryService_RehydrateRepository_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RehydrateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RepositoryServiceServer).RehydrateRepository(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RepositoryService_RehydrateRepository_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RepositoryServiceServer).RehydrateRepository(ctx, req.(*RehydrateRequest)) + } + return interceptor(ctx, in, info, handler) +} + // RepositoryService_ServiceDesc is the grpc.ServiceDesc for RepositoryService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1854,6 +1930,14 @@ var RepositoryService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetFileAttributes", Handler: _RepositoryService_GetFileAttributes_Handler, }, + { + MethodName: "OffloadRepository", + Handler: _RepositoryService_OffloadRepository_Handler, + }, + { + MethodName: "RehydrateRepository", + Handler: _RepositoryService_RehydrateRepository_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/proto/log.proto b/proto/log.proto index fbf7879b79c664a5552a2faf42abd92d6fed16a4..00e43cefd9ed55022f7ffac5fcc3aaa3f40baf37 100644 --- a/proto/log.proto +++ b/proto/log.proto @@ -34,6 +34,16 @@ message LogEntry { message RepositoryDeletion { } + // RepositoryOffloading models a repository offloading. + message RepositoryOffloading { + // new_pack_files are the new pack files need to put in objects/pack dir. + repeated string new_pack_files = 1; + } + + // RepositoryRehydrating models a repository rehydrating. + message RepositoryRehydrating { + } + // Housekeeping models a housekeeping run. It is supposed to handle housekeeping tasks for repositories such as the // cleanup of unneeded files and optimizations for the repository's data structures. It is a collection of smaller // tasks. @@ -149,6 +159,14 @@ message LogEntry { // operations is an ordered list of operations to run in order to apply // this log entry. repeated Operation operations = 10; + + // repository_offloading, when set, signifies that this log entry contains details of an offloading task, + // where repository data is being moved to an offloading storage. + RepositoryOffloading repository_offloading = 11; + // repository_rehydrating, when set, signifies that this log entry contains details of a rehydrating task, + // where previously offloaded data is being restored back to the local storage. + RepositoryRehydrating repository_rehydrating = 12; + } // LSN serializes a log sequence number. It's used for storing a partition's diff --git a/proto/repository.proto b/proto/repository.proto index 47967c117b77dc111de6c81e488cb7991d849ef7..82e2b1237141f4c2cd6bfefe1ddce19ef054b810 100644 --- a/proto/repository.proto +++ b/proto/repository.proto @@ -398,8 +398,26 @@ service RepositoryService { }; } + // OffloadRepository performs a series of operations to transfer a portion of the repository’s object storage + // to cloud object storage. + rpc OffloadRepository(OffloadRequest) returns (OffloadResponse) { + option (op_type) = { + op: MUTATOR + }; + } + + // RehydrateRepository is the reverse operation of OffloadRepository. It restores the offloaded object storage + // back to the Gitaly node. + rpc RehydrateRepository(RehydrateRequest) returns (RehydrateResponse) { + option (op_type) = { + op: MUTATOR + }; + } } + + + // RepositoryExistsRequest is a request for the RepositoryExists RPC. message RepositoryExistsRequest { // repository is the repo to check. The storage_name and relative_path attributes must be provided. @@ -1326,3 +1344,34 @@ message FastExportResponse { // data contains the content of the export of the repository. bytes data = 1; } + +// OffloadRequest is the request for the OffloadRepository RPC +message OffloadRequest { + // repository is the repository whose object store we want to offload. + Repository repository = 1 [(target_repository)=true]; + + // filter is the filter used when repacking, default to blob:none. + // More info can be found at https://git-scm.com/docs/git-repack#Documentation/git-repack.txt---filterltfilter-specgt + string filter = 2; + + // bucket is the bucket name of the cloud object storage + string bucket = 3; + +} + +// OffloadResponse is the response for the OffloadRepository RPC +message OffloadResponse { +} + +// RehydrateRequest is the request for the RehydrateRepository RPC +message RehydrateRequest { + // repository is the repository whose object store we want to download back. + Repository repository = 1 [(target_repository)=true]; + + // bucket is the bucket name of the cloud object storage + string bucket = 2; +} + +// RehydrateResponse is the response for the RehydrateRepository RPC +message RehydrateResponse { +}